Ich habe einen kleinen Dienst, bei dem Leute Kryptowährungen austauschen können. Jeder Benutzer hat seine eigene Bitcoin-, Litecoin- usw. Adresse für die Guthabeneinzahlung. Jetzt möchte ich Ethereum hinzufügen. Also dachte ich, ich werde ein Konto für jeden Benutzer erstellen und dann nach eingehenden Transaktionen suchen. Aber wie ich verstanden habe, kann ich keine Liste der Transaktionen von der Kontoadresse abrufen. Das ist seltsam. Selbst in der Mist-Wallet sehe ich nicht, woher Ether kommt. Die einzige Möglichkeit, Transaktionen zu erhalten, besteht darin, einen Blockchain-Explorer eines Drittanbieters zu überprüfen.
Wie ich auch verstanden habe, besteht der richtige Weg darin, einen intelligenten Vertrag zu erstellen, da er über die erforderliche API verfügt. Aber ich kann keinen Kontakt für jeden Benutzer erstellen.
Vielleicht muss ich nur 1 Vertrag erstellen, der Ether auf mein Hauptkonto "umleitet", aber das ist nicht sehr benutzerfreundlich, da der Benutzer aufgefordert wird, der Transaktion einige zusätzliche Daten hinzuzufügen, damit ich verstehen kann, wer wer ist.
Jeder Rat wird hilfreich sein.
Wenn ich Ihre Frage richtig verstehe, möchten Sie sehen können, wer Eth an Ihre Vertragsadresse hinterlegt hat. Dafür sind Ereignisprotokolle da.
(1) Erstellen Sie einen Vertrag, bei dem jedes Mal, wenn eine Transaktion stattfindet, ein Ereignis stattfindet. zB sowas wie:
contract someContract {
address public owner;
// Set the owner of the contract to be the creator of the contract i.e. you
function someContract() {
owner = msg.sender;
}
// This is an event
event DepositMade(address _from, uint value);
event WithdrawalMade(address _to, uint value);
//Catch all function
function() {
// generate an event when someone sends you Eth
if (msg.value > 0)
DepositMade(msg.sender, msg.value);
}
// Only the owner of the site can withdraw Eth
modifier admin { if (msg.sender == owner) _ }
function withdraw(uint amount, address recipient) admin {
if(recipient.send(amount))
WithdrawalMade(msg.sender, msg.value);
else throw;
}
}
Die wichtigen Bits definieren einen Ereignistyp event DepositMade(address _from, uint value)
und generieren ein Ereignis, wenn etwas passiert DepositMade(msg.sender, msg.value);
. Diese Ereignisse werden im Ereignisprotokoll gespeichert, das der Adresse der bereitgestellten Vertragsinstanz zugeordnet ist.
(2) Sie rufen die Ereignisse zu diesem Vertrag mit rpc eth_newFilter
oder web3.eth.filter
z. B. so ab:
var filter = web3.eth.filter({fromBlock:0, toBlock: 'latest', address: contractAddress, 'topics':['0x' + web3.sha3('DepositMade(hexstring,uint256)')]});
filter.watch(function(error, result) {
if(!error) console.log(result);
})
WithdrawalMade(recipient, amount);
?Sie können versuchen, die GetAccountTransactions-API von etherchain.org zu verwenden, die unter https://etherchain.org/documentation/api/ dokumentiert ist .
Beispiel: https://etherchain.org/api/account/0xbeef281b81d383336aca8b2b067a526227638087/tx/0 gibt Ihnen die Transaktionen wie unter https://etherchain.org/account/0xbeef281b81d383336aca8b2b067a526227638087#txsent angezeigt
Etherscan hat auch einige dokumentierte APIs – https://etherscan.io/apis . Hier ist der entsprechende API-Aufruf für dieselben Transaktionsdaten für das Konto wie oben. http://api.etherscan.io/api?module=account&action=txlist&address=0xbeef281b81d383336aca8b2b067a526227638087&sort=asc
Niksmac
dmxhZGp1c2hh
eth
Jeff
underst00d
Pavel Niedoba
Böser Jordan
Pavel Niedoba