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 filter
von 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.
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
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.
önder albayrak
Rob Hitchens
mirg