Akzeptieren Sie ERC20-Token-Zahlungen mit web3.js

Ich akzeptiere Ethereum- und Bitcoin-Zahlungen auf einer Handelsseite und behalte Benutzerguthaben in einer Datenbank. Ich möchte nach Möglichkeit auch ERC20-Token (wie Bancor) erhalten können. Ich erstelle keinen neuen Token-Vertrag, sondern möchte sie nur als Zahlung akzeptieren.

Als %90 der Antworten im Internet schlagen sie ein Umfrageereignis zur Verwendung filtervon web3.js vor. Transfer(address,address,uint256)Bitte korrigieren Sie mich, wenn ich falsch liege, aber wie erhalte ich die entsprechende TX dieser Zahlung von diesem Ereignis?

Ich habe kein tiefes Wissen über Ethereum und Smart Contracts.

Spiegel: https://github.com/ethereum/web3.js/issues/1109

ozgur, ich arbeite auch für ein Projekt wie Ihres und ich frage mich wirklich, ob Sie dafür eine Lösung gefunden haben oder nicht. Ich habe versucht, Ihre Kontaktdaten zu finden, aber es gibt nichts weiter als Ihr mittleres Profil. Könnten Sie bitte Ihre E-Mail hinterlassen, soziale Medien oder etw mit Ihnen Kontakt aufnehmen?
Das beantwortet die Frage nicht wirklich. Wenn Sie eine andere Frage haben, können Sie diese stellen, indem Sie auf Frage stellen klicken . Sie können auch ein Kopfgeld hinzufügen , um mehr Aufmerksamkeit auf diese Frage zu lenken, sobald Sie genug Ruf haben . - Aus Bewertung
Damit ist die Frage nicht beantwortet. Sobald Sie über einen ausreichenden Ruf verfügen , können Sie jeden Beitrag kommentieren . Geben Sie stattdessen Antworten an, die keine Klärung durch den Fragesteller erfordern . - Aus Bewertung

Antworten (3)

Wenn Sie nach Ereignissen von web3 suchen, ist dies das Format des Ergebnisses, das Sie erhalten, wenn eines aufgerufen wird:

{ address: '0x9c0ac1e0f0a8e0b01c7b652d5fbe094ddff48b81',
  blockNumber: 704227,
  transactionHash: '0x5887ba4e15d51e1cfddf626ecf416a0002085a1e0929fffe1f90ad69d5040081',
  transactionIndex: 0,
  blockHash: '0x5f485133ec662f556d88affccc18a358375de160178c6cf7cc0cec678d833a2a',
  logIndex: 0,
  removed: false,
  event: 'ExampleEvent',
  args: 
   { argOne: BigNumber { s: 1, e: 0, c: [Array] },
     argTwo: '0x374623456fa2' } }

Sie können den TX also einfach von result.transactionHash abrufen

Veranstaltung im Vertrag:

event ExampleEvent(uint argOne, bytes32 argTwo)

Web3-Code:

import exampleContractObject from 'path/to/ExampleContract.json'

ExampleContract = web3.eth.contract(exampleContractObject.abi);
contractInstance = ExampleContract.at('0x9c0ac1e0f0a8e0b01c7b652d5fbe094ddff48b81');
exampleEvent = contractInstance.ExampleEvent();

exampleEvent.watch((err, result) => {
  // Do something 
}

BEARBEITEN:

Das Transfer-Event von ERC20-Token würde wie folgt aussehen:

{ address: '<contract_address>',
  blockNumber: <block_number>,
  transactionHash: '<transaction_hash>',
  transactionIndex: <tx_index_in_block,
  blockHash: '<block_hash>',
  logIndex: <log_index>,
  removed: <> ,
  event: 'Transfer',
  args: 
   { _from: <address>,
     _two: <address> ,
     _value: <uint256>} }

Um Token als Zahlungsmittel zu akzeptieren, benötigen Sie lediglich ein Ethereum-Konto. Token können an beliebige Adressen gesendet werden. Um sie zu erhalten, müssen die Personen, die die Token besitzen, sie einfach in einer Transaktion im Netzwerk senden. Ich gehe davon aus, dass derjenige, der den Vertrag zum Prägen der Token bereitgestellt hat, wahrscheinlich auch eine Front-End-Benutzeroberfläche für den Zugriff auf die Funktion transferTo () in seinem Token-Vertrag erstellt hat.

Wenn Sie Token als Zahlungsmittel akzeptieren möchten, müssen Sie also im Grunde nur Ihre Ethereum-Adresse angeben, und sie können gesendet werden. Wenn Sie überprüfen möchten, wie viele Token Sie haben, können Sie etherscan.io verwenden oder einen Code in Solidity schreiben, der den Kontostand überprüft. Wenn das Token ERC20-konform ist, hat es eine Funktion im Vertrag, auf die Sie zugreifen können sollten, die Token für eine bestimmte Adresse anzeigt. Um auf diese Funktion zuzugreifen, benötigen Sie die Vertrags-ABI von dem Team, das sie bereitgestellt hat, und schreiben dann ein wenig Solidity-Code.

Wenn Sie nur daran interessiert sind, eine Token-Zahlung zu akzeptieren, muss die Person, die die Token hat, diese einfach in einer Transaktion an Ihr Konto senden, und Sie werden sie erhalten haben.

Das Filtermaterial wäre, wenn Sie versuchen, die Blockchain auf eine Übertragung der Token zu überwachen und ein Gleichgewicht auf Ihrem lokalen Computer aufrechtzuerhalten oder Metamask oder so etwas zu verwenden. Wenn Sie diese Salden in einer lokalen Datenbank beibehalten möchten, müssen Sie wahrscheinlich ein wenig Solidity-Code schreiben und dann die Vertragsadresse und ABI abrufen, um darauf zuzugreifen.

Beifall

Was ist mit Transaktionshash? Ich brauche es auf jeden Fall, weil meine aktuelle Zahlungsinfrastruktur von TX-basierter Validierung abhängt. Ich beharre darauf und die Benutzer müssen in der Lage sein, ihren "Einzahlungs" -Verlauf zu sehen.
Bitte schlagen Sie mir auch keine Dienste von Drittanbietern wie Etherscan vor.

Die Funktion, die Sie dafür benötigen, ist transfer(address, value). Sie müssen Eigentümer des Vertrags sein, um diese Funktion aufrufen zu können. Sie können diese Änderungen lokal mit ganache vornehmen und die Methode transfer(address, value) aus Ihrem Vertrag aufrufen. Wenn Sie dies direkt in der EVM vornehmen möchten, müssen Sie Infura verwenden, das Ihnen den Link zu dem Netzwerk geben würde, in dem Sie den Vertrag ausführen, sodass Sie die Funktionen Ihres Vertrags mit web3 aufrufen könnten. Dazu müssen Sie den abi-Code Ihres Vertrags aufrufen, um eine Instanz zu erstellen, und dann die Funktionen des Vertrags aufrufen.