Ist anhand der Kontoadresse erkennbar, ob es sich um ein Vertragskonto oder einen Fremdvertrag handelt?

Ich versuche, Transaktionen für Ethereum zu visualisieren, derzeit weiß ich, dass es Blockchain-Explorer wie Etherscan.io und Etherchain.org gibt, aber ich möchte nicht weiterhin ihre API aufrufen, um Daten abzurufen, sondern meinen eigenen vollständigen Knoten verwenden, um Daten abzurufen alle Daten, die ich benötige, da ich dadurch mehr Kontrolle habe.

Also richte ich einen vollständigen Knoten ein und verwende die Web3JS-Bibliothek, um Blöcke und Transaktionen zu erhalten. Das Web3JS hat jedoch nicht die Möglichkeit, ein Konto über die angegebene Adresse zu erhalten (sofern ich mich nicht irre). Sobald ich also das Transaktionsobjekt habe, kann ich herausfinden, wer Absender und Empfänger sind, aber ich möchte auch wissen, ob der Absender oder Empfänger ein Vertrag oder ein Konto ist. Ich weiß, dass wir über die API von Etherchain Konten mit der Adresse erhalten können. Ist es möglich, dasselbe mit Geth und Web3Js zu tun?

Das gelbe Papier von Ethereum erwähnt, dass jedes Konto einen Nonce, Balance, StorageHash und CodeHash hat, also dachte ich, es wäre möglich, ein Konto mit Adressen aus der Blockchain zu bekommen. Bitte helfen Sie uns herauszufinden, wie wir feststellen können, ob es sich bei einer bestimmten Adresse um einen Vertrag oder ein Konto handelt, ohne die oben genannten Blockchain-Explorer zu verwenden.

Antworten (1)

Nein , allein anhand der Adresse kann nicht festgestellt werden, ob es sich um ein Vertragskonto oder ein Fremdkonto handelt.

In diesem vorherigen Beitrag erfahren Sie, wie Vertragsadressen generiert werden:

Außerdem wird erwartet, dass schließlich alle Konten Verträge sein werden (dies wird als Kontoabstraktion bezeichnet ):

Sie können die web3.js-Funktion verwenden web3.eth.getCode, um den mit der Adresse verknüpften EVM-Bytecode abzurufen. Es wird davon ausgegangen, dass es für externe Konten zurückgegeben wird 0x0.

Danke, das war die Notation, die mir auf Etherchain aufgefallen ist und die ich vorhatte.
Obwohl das Konzept eines externen Kontos existiert, gibt es immer 0x0 für web3.eth.getCode zurück. (Aber 0x0 kann auch ein Konto bedeuten, für das noch kein Vertrag bereitgestellt wurde, daher stimmt dieser Kommentar mit dieser Antwort überein. Je nachdem, wie streng Sie sein möchten, kann die Überprüfung des Rückgabewerts von getCode eine ausreichende Annäherung sein .)
Der vorherige Kommentar verwirrt mich. Wenn an einer Adresse noch kein Vertrag bereitgestellt wurde, handelt es sich nicht um einen Vertrag. In diesem Sinne scheint es mir, dass, wenn getCode0x0 zurückgegeben wird, diese Adresse eindeutig kein Vertrag ist. Vermutlich stellt das OP die Frage, weil er/sie wissen möchte, ob eine Adresse, die mit seinem/ihrem Dapp interagiert hat, ein Vertrag ist (und sich vielleicht anders verhält). Wenn es bereits interagiert ist und getCode 0x0 zurückgibt, ist es nicht wahr, dass es kein Vertrag ist (und niemals sein wird)? Ich sage nicht, dass es so ist, ich bin nur durch den vorherigen Kommentar verwirrt.