Erstellen Sie einen neuen Vertrag per JSON-RPC von cpp-ethereum

Ich möchte einen neuen Vertrag von JSON-RPC und cpp-ethereum erstellen.

Ich finde heraus, dass eth_sendTransaction mir dabei helfen kann.

Und lass es tun, ich muss den "to" -Parameter so einstellen:

to: DATA, 20 Bytes - (optional when creating new contract) The address the transaction is directed to.

Aber wenn ich versuche, mit Beispielcode mit Port 8079 (eigenes Setup) daran zu arbeiten:

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{
  "from": "0x009fbfed8d5ca3b7c1fe680e1dd61fc726ef177b",
  "to": "0x005fecaea1b18f5247fdb457793f3da72df12e61",
  "gas": "0x76c0",
  "gasPrice": "0x9184e72a000",
  "value": "0x9184e72a",
  "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}' http://localhost:8079

Ich habe nichts von obigem Befehl erhalten.

Ich kenne auch einen anderen Weg, um einen neuen Vertrag durch Solidität zu erstellen.

Aber ich möchte wirklich nur die JSON-RPC-API verwenden.

Bitte raten Sie mir, auf diesem Weg einen neuen Vertrag zu erstellen.

Antworten (1)

Zusammenfassung

  • Sie können das to:Feld nicht in Ihre JSON-RPC- eth_sendTransactionNachricht aufnehmen.
  • Stellen Sie sicher, dass Ihr Konto nicht gesperrt ist



Lassen Sie uns herausfinden, welche Daten erforderlich sind

Ich verwende gethund JavaScript mit der Beispielsyntax zum Aufrufen von Methoden zum Ändern des Vertragsstatus, um die erforderlichen Daten zu ermitteln.

Hier ist meine gethBefehlszeile:

user@Kumquat:~$ geth --datadir ~/EtherDev/data --dev \
  --mine --minerthreads 1 --verbosity 3              \
  --unlock 0 --password ~/EtherDev/etc/passwordfile  \
  --rpc console

(Beachten Sie, dass ich mein Konto entsperrt habe und dies einer der Gründe sein kann, warum Ihre Transaktion zur Vertragserstellung fehlgeschlagen ist. Weitere Informationen finden Sie unter Kann ich ein Konto mit JSON-RPC entsperren? ).

Und führen Sie dann die folgenden Befehle aus:

> var cSource='contract C { uint[] public numbers; function initNumbers() { numbers.push(1); numbers.push(2); } function stateChanger(uint a) { numbers.push(a); }      }'
undefined
> var cCompiled = web3.eth.compile.solidity(cSource);
Version: 0.3.5-0/RelWithDebInfo-Linux/g++/Interpreter

path: /usr/bin/solc
undefined
> var cContract = web3.eth.contract(cCompiled.C.info.abiDefinition);
undefined
// Turn up the debugging to view the intermediate information
> debug.verbosity(7)
null
> var c = cContract.new({
    from:web3.eth.accounts[0], 
    data: cCompiled.C.code, gas: 400000}, 
    function(e, contract) {
      if (!e) {
        if (!contract.address) {
          console.log("Contract transaction send: TransactionHash: " + 
            contract.transactionHash + " waiting to be mined...");
        } else {
          console.log("Contract mined! Address: " + contract.address);
          console.log(contract);
        }
    }
})
...
I0731 00:16:36.230020 core/tx_pool.go:547] removed tx (
    TX(46f833281c8c7652c0734773723e61fc5b6d2cbe731024ff730e4d2626d39b59)
    Contract: false
    From:     a7857047907d53a2e494d5f311b4b586dc6a96d2
    To:       [contract creation]
    Nonce:    37
    GasPrice: 20000000000
    GasLimit  400000
    Value:    0
    Data:     0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556
    V:        0x1b
    R:        0x6726a5204268ea430c32087f6ce85750f51e6792dd55139d3e3c7f9ce6d19812
    S:        0x3fb400f4bb13ad95dfa03023e42ee91aade477aa8ed921f5111b666753d60b3
    Hex:      f901c9258504a817c80083061a808080b901766060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b50505060009283525060209091200155561ba06726a5204268ea430c32087f6ce85750f51e6792dd55139d3e3c7f9ce6d19812a003fb400f4bb13ad95dfa03023e42ee91aade477aa8ed921f5111b666753d60b3
) from pool: low tx nonce or out of funds
...
Contract mined! Address: 0x2bdd1725a5cdf212d6dfaa488ae2cecbe7b1dc1f


Versuchen wir, die Transaktion zur Vertragserstellung mit JSON-RPC zu senden

Ich verwende getheher cpp-ethereum als cpp-ethereum, da ich cpp-ethereum nicht konfiguriert habe, aber der JSON-RPC sollte derselbe sein. Ich verwende Port 8545 für den JSON-RPC-Port.

Ich habe das to:Feld mit einer Kopie Ihres JSON-RPC-Aufrufs entfernt und die Daten aus meinem Debugging-Trace hinzugefügt.

Hier mein erster Versuch:

user@Kumquat:~$ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{
>   "from": "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
>   "gas": "0x76c0",
>   "gasPrice": "0x9184e72a000",
>   "value": "0",
>   "data": "0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556"}],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"Intrinsic gas too low"}}

Ich stieß auf gas:und entfernte gasPrice:. Nachfolgend mein zweiter Versuch:

user@Kumquat:~$ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{
>   "from": "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
>   "gas": "0x776c0",
>   "value": "0",
>   "data": "0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556"}],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x938040c15d0cabe9a9dbb1b629156cd9184c32e0538fc9159450bb5c056f4be4"}

Ein Transaktions-Hash wurde zurückgegeben – sieht gut aus. Mal sehen, was die gethKonsole anzeigt:

I0731 00:53:16.024486 core/tx_pool.go:547] removed tx (
    TX(938040c15d0cabe9a9dbb1b629156cd9184c32e0538fc9159450bb5c056f4be4)
    Contract: false
    From:     a7857047907d53a2e494d5f311b4b586dc6a96d2
    To:       [contract creation]
    Nonce:    40
    GasPrice: 20000000000
    GasLimit  489152
    Value:    0
    Data:     0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556
    V:        0x1b
    R:        0xb57458702e0d4033cd52bbdf8c458639a5fed2359189ccd18e19be274c14ba19
    S:        0x3dcfaae9b58268d5aea27250719930e60c2213382e4b50355c7f72b248e34596
    Hex:      f901c9288504a817c800830776c08080b901766060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b50505060009283525060209091200155561ba0b57458702e0d4033cd52bbdf8c458639a5fed2359189ccd18e19be274c14ba19a03dcfaae9b58268d5aea27250719930e60c2213382e4b50355c7f72b248e34596
) from pool: low tx nonce or out of funds

Lassen Sie uns die neu erstellte Vertragsadresse abrufen (Sie können den JSON-PC web3.eth.getTransactionReceipt verwenden ):

> eth.getTransactionReceipt("938040c15d0cabe9a9dbb1b629156cd9184c32e0538fc9159450bb5c056f4be4")
{
  blockHash: "0xe5884a160ffc2e9d88219e2638ed772abbfcc6b5ab272e66881803794baf4dce",
  blockNumber: 559,
  contractAddress: "0x5e792e0af19475caee3ff242bb58edda4b455eac",
  cumulativeGasUsed: 115811,
  from: "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
  gasUsed: 115811,
  logs: [],
  root: "7750bdc145e773d42f5cabbd1b97bfab45a53ba7f3b2b08762446fd44ab0f2d5",
  to: null,
  transactionHash: "0x938040c15d0cabe9a9dbb1b629156cd9184c32e0538fc9159450bb5c056f4be4",
  transactionIndex: 0
}

Lassen Sie uns den Code an der Vertragsadresse überprüfen:

> eth.getCode("0x5e792e0af19475caee3ff242bb58edda4b455eac")
"0x606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556"

Erfolg! Ein neuer Vertrag wurde mit der JSON-RPC- eth_sendTransactionAPI erstellt. Dieselbe JSON-RPC-API sollte mit cpp-ethereum funktionieren.



Was passiert, wenn Sie to:in die gesendeten Daten aufnehmen

Ich habe getestet, was passiert, wenn Sie das to:Feld mit dem JSON-RPC einschließen sendTransaction.

Hier ist die Anfrage und der resultierende Transaktions-Hash:

user@Kumquat:~$ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{
  "from": "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
  "to": "0x005fecaea1b18f5247fdb457793f3da72df12e61",
  "gas": "0x776c0",
  "value": "0",
  "data": "0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556"}],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0xa92bbeee20563c239715b2956a755fa3fdabe7e5eaba1de6652a96360fa799be"}

Hier sind die Transaktionsinformationen:

> eth.getTransaction("0xa92bbeee20563c239715b2956a755fa3fdabe7e5eaba1de6652a96360fa799be")
{
  blockHash: "0x3aa9ba9513d881903079e7eaceb08dcd2db933d2f5ac6aa9f11d8626a006ab6d",
  blockNumber: 613,
  from: "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
  gas: 489152,
  gasPrice: 20000000000,
  hash: "0xa92bbeee20563c239715b2956a755fa3fdabe7e5eaba1de6652a96360fa799be",
  input: "0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556",
  nonce: 41,
  to: "0x005fecaea1b18f5247fdb457793f3da72df12e61",
  transactionIndex: 0,
  value: 0
}

Und hier sind die Informationen zum Transaktionsbeleg:

> eth.getTransactionReceipt("0xa92bbeee20563c239715b2956a755fa3fdabe7e5eaba1de6652a96360fa799be")
{
  blockHash: "0x3aa9ba9513d881903079e7eaceb08dcd2db933d2f5ac6aa9f11d8626a006ab6d",
  blockNumber: 613,
  contractAddress: null,
  cumulativeGasUsed: 44512,
  from: "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
  gasUsed: 44512,
  logs: [],
  root: "71bd24394df7c5feb534b7e6081af0550e2b58c552002c03550ec3fc64a520c6",
  to: "0x005fecaea1b18f5247fdb457793f3da72df12e61",
  transactionHash: "0xa92bbeee20563c239715b2956a755fa3fdabe7e5eaba1de6652a96360fa799be",
  transactionIndex: 0
}

Das Einschließen des to:Felds führt zu einer regulären Transaktion, nicht zu einer Vertragserstellungstransaktion



Was passiert, wenn Ihr Konto gesperrt ist

Hier ist die Antwort:

user@Kumquat:~/EtherDev$ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{
>   "from": "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
>   "gas": "0x776c0",
>   "value": "0",
>   "data": "0x6060604052610164806100126000396000f3606060405260e060020a60003504635a7dc89781146100315780636506077514610074578063d39fa233146100aa575b005b61002f600080546001810180835582818380158290116100f8578183600052602060002091820191016100f891905b808211156101395760008155600101610060565b61002f60043560008054600181018083558281838015829011610152578183600052602060002091820191016101529190610060565b6100e6600435600080548290811015610002575080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563015481565b60408051918252519081900360200190f35b50505060009283525060208220600191018190558154908101808355828183801582901161013d5781836000526020600020918201910161013d9190610060565b5090565b50505060009283525060209091206002910155565b5050506000928352506020909120015556"}],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"account is locked"}}
Wenn ich cContract.new(savedataIncontract , address, { from:web3.eth.accounts[0], data: cCompiled.C.code, gas: 400000} habe, wie in der Syntax in diesem Fall, wie kann ich eine RPC-Anfrage schreiben