Wie stelle ich fest, ob die Transaktion für die Vertragserstellung verwendet wird?

Ich möchte Ethereum überwachen und jeden auf der Blockchain veröffentlichten Vertrag auswendig lernen (im Grunde das Gleiche wie Etherscan). Wie ist dies mit NodeJS & web3 möglich? Wie kann ich feststellen, ob eine bestimmte Transaktion verwendet wurde, um einen neuen Vertrag zu veröffentlichen?

Es ist möglich, die Eingabedaten zu erhalten, aber wie analysiere ich sie?

Ich bin NICHT daran interessiert festzustellen, ob es sich bei der Adresse um eine Vertragsadresse handelt, ich bin daran interessiert, bestimmte Transaktionen zur VERTRAGSERSTELLUNG zu finden, ohne alle Verträge in meiner Datenbank führen zu müssen.

Antworten (3)

Dies kann durch Überprüfung erfolgen

  • Die Empfängeradresse der Transaktion, die für die Vertragserstellung null ist.
  • Das Feld „contractAddress“ aus der Quittung der Transaktion.

Schauen Sie sich zum Beispiel die Transaktion unten an und beachten Sie die Felder „to“ und „contractAddress“.

    > web3.eth.getTransaction("0xf04c0c82bd8e4733e4bcc0ac8e8becf60fad0d99e83883c34887937956a40c3b")

    {
      blockHash: "0x99efca1a0553673c039a4bdb09f529c0e4feadddf1bdd08753e42a8229774875",
      Blocknummer: 90913,
      aus: "0x5e0320bb4d82ab8bb5d7291f2c67d1c99abb3c05",
      Benzin: 1000000,
      GasPreis: 54606694457,
      Hash: "0xf04c0c82bd8e4733e4bcc0ac8e8becf60fad0d99e83883c34887937956a40c3b",
      Eingabe: "0x60606040526040516020806102518339016040526060805190602001505b80600060005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b506101ef806100626000396000f30060606040526000357c01000000000000000000000000000000000000000000000000000000009004806390b98a1114610044578063bbd39ac01461007157610042565b005b61005b6004803590602001803590602001506100b3565b6040518082815260200191505060405180910390f35b610082600480359060200150610098565b6040518082815260200191505060405180910390f35b60006000506020528060005260406000206000915090505481565b600081600060005060003373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505410156100f557600090506101e9565b81600060005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282825054039250508190555081600060005060008573ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505401925050819055507f16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146338484604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1600190506101e9565b92915050560000000000000000000000000000000000000000000000000000000000002710",
      einmal: 6,
      r: "0x524cd0612444308f830c542bdbbc523c5855449103951819028427b9167fd534",
      s: "0x25aa71510d0ca63a1e01d6dad21cfda9755e3792adc3c7554a98c3d5d42fb1c1",
      zu: null,
      Transaktionsindex: 1,
      v: "0x1c",
      Wert: 0
    }
    > web3.eth.getTransactionReceipt("0xf04c0c82bd8e4733e4bcc0ac8e8becf60fad0d99e83883c34887937956a40c3b")
    {
      blockHash: "0x99efca1a0553673c039a4bdb09f529c0e4feadddf1bdd08753e42a8229774875",
      Blocknummer: 90913,
      VertragAdresse: "0xc4a23a06e6642fa00989b89575f0b9f783259159",
      kumulativGasGebraucht: 197451,
      aus: "0x5e0320bb4d82ab8bb5d7291f2c67d1c99abb3c05",
      GasGebraucht: 176451,
      Protokolle: [],
      logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      root: "0x76ca24aac6c47b5e49b38a227f4892b29aca17cfa273ff57c67ca4f5bd7a37d5",
      zu: null,
      TransactionHash: "0xf04c0c82bd8e4733e4bcc0ac8e8becf60fad0d99e83883c34887937956a40c3b",
      Transaktionsindex: 1
    }
Dies funktioniert nicht, wenn ein Vertrag innerhalb eines anderen Vertrags einen weiteren Vertrag erstellt (interne Transaktion). Es funktioniert nur für die erste Ebene, aber nicht für die Ebenen darunter
Was kann man mit dem contractAddressFeld machen? Gibt es einen gethRPC-Aufruf, mit dem ich den Vertrag lesen kann? Oder die Vertragsdaten? Ich bin mir nicht sicher, wie ich hier weitermachen soll :(

Ob es sich um eine Vertragsadresse handelt, können wir anhand der Adresse nicht direkt erkennen. So wird die Vertragsadresse berechnet: Wie wird die Adresse eines Ethereum-Vertrags berechnet?

Es gibt eine web3.js-Methode web.eth.getcode, um den Bytecode der Ethereum Virtual Machine der Adresse abzurufen. Falls es sich nicht um einen Vertrag handelt, würde die Methode zurückkehren 0x0. Alles andere ist ein Vertrag.

aus den Solidity-Dokumenten:

Wenn das Zielkonto das Nullkonto ist (das Konto mit der Adresse 0), erstellt die Transaktion einen neuen Vertrag .