Das Bereitstellen von Verträgen auf Geth gibt Fehler zurück: connect ECONNREFUSED 127.0.0.1:8545

Ich verwende truffle(was verwendet pudding), um Verträge für meine testrpc.

Nein, ich führe eine gethInstanz lokal aus mit:

geth --mine -rpccorsdomain "*" --ipcapi "admin,eth,miner" --rpcapi "eth,web3" --networkid 1100 --maxpeers 5 --minerthreads 1 --unlock "0xXXXXXXXXetc.."-Konsole

Wenn ich jetzt versuche, meine Verträge bereitzustellen, erhalte ich:

Invalid JSON RPC response: "Error: connect ECONNREFUSED 127.0.0.1:8545 at..."

Was fehlt mir hier? Wie identifiziert sich Trüffel/Pudding gegenüber dem Knoten, wenn er bereitgestellt wird? (dh truffle deploy) Ich kann nichts sehen, um dies zu konfigurieren.

Antworten (3)

Es stellte sich heraus, dass der Standardport nicht 8545 ist und diese Optionen hinzugefügt werden mussten:

--rpc --rpcport 8545

Eigentlich ist der Standardport 8545, aber Sie müssen das --rpcFlag verwenden, um RPC-Verbindungen zu aktivieren

Die Vertragserstellung wird hier ausführlich beschrieben ; ein Beispiel könnte so aussehen:

./geth --datadir ~/eth/ --loglevel 6 --logtostderr=true --rpc --rpcport 8100 --rpccorsdomain '*' --mine console  2>> ~/eth/eth.log
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"],"id":1}' http://127.0.0.1:8100

(Stellen Sie sicher, dass Sie sich mit den richtigen Ports verbinden).

Die Vertragsbereitstellung wird hier gezeigt :

source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"
// compile with solc
contract = eth.compile.solidity(source).test
// create contract object
var MyContract = eth.contract(contract.info.abiDefinition)
// extracts info from contract, save the json serialisation in the given file, 
contenthash = admin.saveInfo(contract.info, "~/dapps/shared/contracts/test/info.json")
// send off the contract to the blockchain
MyContract.new({from: primaryAccount, data: contract.code}, function(error, contract){
  if(!error && contract.address) {
    // calculates the content hash and registers it with the code hash in `HashReg`
    // it uses address to send the transaction. 
    // returns the content hash that we use to register a url
    admin.register(primaryAccount, contract.address, contenthash)
    // here you deploy ~/dapps/shared/contracts/test/info.json to a url
    admin.registerUrl(primaryAccount, hash, url)
  }
});
Während dies die Frage theoretisch beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Fertig, Antwort bearbeitet.
Die Frage ist eher, wie sich Truffle gegenüber einem Knoten identifiziert, dh welches Konto verwendet wird, um bereitzustellen (wenn dies der Fall ist truffle deploy) .

Zunächst müssen Sie einen RPC-Port in Ihrem Geth als : hinzufügen geth --rpc --rpcport "portnumber".
Dann befindet sich in Ihrem Truffle-Projektordner eine Datei mit dem Namen truffle.js . Sie müssen den Abschnitt rpc als Abschnitt aktualisieren

rpc: {
   host: "localhost",
   port: portnumber
 }

Somit wird es mit dem Knoten verbunden, der lokal auf Ihrem System läuft. Jetzt müssen Sie nur noch den Befehl ausführen truffle deployund Ihre Verträge werden auf Ihrer privaten Blockchain bereitgestellt. Der Fehler wird aufgrund des in der truffle.js-Datei festgelegten Standardwerts angezeigt, der versucht, eine Verbindung zu einem lokalen Knoten herzustellen, der auf Port 8545 ausgeführt wird. Ich hoffe, er wird Ihr Problem lösen.