Wie listet man Transaktionen von der Kontoadresse auf?

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.

Mein Rat ist, #1897 auf Github hochzustimmen.
@NikhilM, fertig.
ethereum.stackexchange.com/questions/3417/… ist ebenfalls hilfreich zu verstehen.
Dieser Thread kann auch nützlich sein: ethereum.stackexchange.com/questions/2531/…
Kann ich leider nicht kommentieren, also frage ich hier. @dmxhZGp1c2hh hast du eine Lösung gefunden? Wenn ja bitte hier posten.
Ausgabe Nr. 1897 hat seit etwa einem Jahr keine Aktivität
@PavelNiedoba Es hat keine Aktivität, weil sie das Problem privat gemacht haben. Es ist nicht abzusehen, ob es jemals implementiert wird (und nach dem Aussehen dieses Threads scheint es nicht wahrscheinlich).
Ich bin sicher, dass dies von vielen benötigt wird. Ich bin bereit, einen Teil davon zu zahlen. Gibt es irgendwo Arbeit für die Äthergemeinschaft?

Antworten (3)

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_newFilteroder web3.eth.filterz. 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);
})
Danke, aber ich frage nach einem regulären Konto, nicht nach einem Vertrag.
der Benutzer muss den Unterschied nicht kennen. Es sind keine Daten erforderlich, sie senden Eth einfach an eine Adresse und die Catch-All-Funktion () wird ausgelöst
Wenn ich also 1000 Benutzer habe, muss ich 1000 Verträge erstellen?
Nein. Sie setzen den oben genannten Vertrag ein. Sie senden Eth an die Adresse dieser Vertragsinstanz und gesendete Beträge und die Adressen aller Absender werden protokolliert.
OK. Ich bekomme die Absenderadresse und wie verknüpfe ich sie mit meinen Benutzern? Alle meine Benutzer senden Ether an eine Adresse und woher weiß ich, wer wer ist?
Es ist von dir abhängig. Vielleicht könnten sie Ihnen ihre Kontoadresse mitteilen, wenn sie sich anmelden.
Oder ich kann darum bitten, zusätzliche Daten in der Transaktion hinzuzufügen. Beide Wege sind aus UX-Sicht nicht elegant.
Dies ist ein nettes Stück Code, aber warum sollten bereits in der Blockchain protokollierte Eth-Protokollierungsinformationen verschwendet werden?
@JackWinters Es ist wirklich nicht trivial, Adressen mit Benutzern zu koppeln und könnte ein potenzielles Sicherheitsrisiko darstellen.
@AlexCoventry Irgendwelche Hinweise, genau das zu tun? Codebeispiele/Anwendungsfälle scheinen spärlich zu sein.
@EvilJordan, versuchen Sie es mit ethereum.stackexchange.com/a/3478/9841
Dies ist nicht gut für die Geschäftslösung. Wir sprechen von echtem Geld, also muss es narrensicher sein. Kunden, die Einzahlungen von Börsen tätigen, haben keine Ahnung, von welcher Adresse Transaktionen gesendet werden, mehrere Kunden können dieselbe Adresse verwenden. Wallets haben keine Möglichkeit, beliebige Daten aufzunehmen. Die Adresse pro Kunde muss generiert werden und die Gelder müssen dann auf das gemeinsame Konto weitergeleitet werden. Daher benötigen wir eine Liste der eingehenden (und ausgehenden - die wir haben) Transaktionen.
Es gibt einen Fehler im Code, das sollte es sein, oder WithdrawalMade(recipient, amount);?
Kostet das Benzin?

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

Ich denke, dmxhZGp1c2hh möchte keinen Drittanbieterdienst nutzen
Etherchain.org befindet sich oft im "eingeschränkten Funktionsmodus" und ist unzuverlässig. Etherscan.io hat ein API-Limit von 5 pro Sekunde, das nicht erhöht werden kann. Das ist miserabel und grenzwertig nutzlos. Man sollte Dritten für diese Informationen nicht vertrauen, egal wie vertrauenswürdig sie scheinen. Außerdem zeigt keiner dieser Token-Transfers, was ein ganz anderes Tier zu sein scheint.
@EvilJordan Ich stimme zu, auch wenn es heutzutage gut funktioniert, möchte ich nicht, dass mein Geschäft davon abhängt. Ich habe diesen Fehler mit btc blockchain.info gemacht, das zuvor viele Probleme hatte, als btc populär wurde.

Ethplorer bietet für viele Fälle eine gute API .

Adressdaten abrufen

Adressverlauf abrufen

und viele andere.Geben Sie hier die Bildbeschreibung ein