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.
Dies kann durch Überprüfung erfolgen
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 }
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.
Wenn das Zielkonto das Nullkonto ist (das Konto mit der Adresse 0), erstellt die Transaktion einen neuen Vertrag .
Nulik
David
contractAddress
Feld machen? Gibt es einengeth
RPC-Aufruf, mit dem ich den Vertrag lesen kann? Oder die Vertragsdaten? Ich bin mir nicht sicher, wie ich hier weitermachen soll :(