Stellen Sie einen Vertrag von Solidity Browser oder Geth auf einem externen Knoten bereit (verbunden mit einer privaten Ethereum-Blockchain)

Ich versuche, einen Vertrag über den Solidity-Browser bereitzustellen || geth. Auf meinem Server im Solidity-Browser || geth Ich bin in der Lage, einen Vertrag bereitzustellen. Aber von meinem externen Knoten, der mit meiner privaten Ethereum-Blockchain verbunden ist; im Solidity-Browser || geth Ich kann keinen Vertrag bereitstellen. Es stoppt und sagt: "Bereitstellen und Verknüpfen erforderlicher Bibliotheken ..."

[F] Wie kann ich einen Vertrag von Solidity Browser bereitstellen || Geth in einem externen Knoten, der mit der privaten Ethereum-Blockchain verbunden ist?

Auf meinem Client-Rechner bin ich mit der privaten Ethereum-Blockchain verbunden.

sudo ./geth --port 3000 --networkid 23422 --identity node1 --verbosity 3 
--nodiscover --nat none --datadir="/home/avatar/MyEthereumEbloc" 
--rpccorsdomain '*' --rpc --rpcaddr "localhost" 
--rpccorsdomain="*" --rpcport="8545"  --nodiscover --maxpeers=4 
  --bootnodes enode://<enode_id>@<ip>:3000 console

-

> admin.addPeer("enode://<enode_id>@<ip>:3000?discport=0")
true
> net
{
  listening: true,
  peerCount: 1,
  version: "23422",
  getListening: function(callback),
  getPeerCount: function(callback),
  getVersion: function(callback)
}

Wenn ich im Solidity-Browser auf die Schaltfläche "Erstellen" klicke; Auf meiner laufenden Geth-Konsole auf dem Client => Ich kann sehen, dass die Transaktion erstellt wird. Aber es wird nie abgebaut. Grundsätzlich bleibt die Transaktion des Vertrags in ausstehenden Transaktionen hängen. Der Peer scheint mit der privaten Blockchain verbunden zu sein, aber die Transaktion kommt nie durch.

I1015 19:19:44.002223 eth/api.go:1183] 
Tx(0x2995698a4662ad2cc688471c19b4ce1d8fe0d1536f3548f249dadf7c16431205) 
created: 0x91a81d46ee8844ab9e5dcf38a0aa37dd262fe4dd

Geben Sie hier die Bildbeschreibung ein

Wie lautet der Vertragscode? Sie verwenden eine Bibliothek, nicht wahr?
Ich habe meine Frage aktualisiert, sie bezieht sich nicht auf Lib. Derselbe Vertrag wird ohne Probleme auf meinem Server abgebaut. Sowohl der Vertrag als auch die Bibliothek werden nicht abgebaut. Stellen Sie es sich einfach als einen einfachen Vertrag vor, der einen Speicherwert aktualisiert.
Nur zur Information, diese Frage und Ihre Antwort könnten für andere immer noch hilfreich sein. Ich würde es positiv bewerten. Selbstantworten sind ok. Aber ich respektiere, wofür Sie sich entscheiden.
Wie verbindet man die beiden Knoten? Verwenden Sie eine statische IP-Adresse für jeden Knoten, oder jedes Mal, wenn Sie sie miteinander verbinden möchten, finden Sie ihre IP-Adresse manuell und geben sie in admin.addPeer() und die andere Befehlszeile ein?

Antworten (1)

Lösung 1: Wie Sie sehen können, habe ich bei der Verbindung mit meiner privaten Ethereum-Blockchain kein „--mine“-Flag verwendet. Meine Blockchain wurde synchronisiert, aber der Client-Knoten führte kein Mining durch. Das Problem war also, dass ich auf meinem Client-Knoten nicht mit dem Mining begonnen habe. Wenn ich mit dem Mining auf meinem Client-Knoten beginne (miner.start(1) oder mit dem Flag „--mine“), kann ich den Vertrag von Solidity Browser und auch von Geth aus bereitstellen.

Fang an zu schürfen

Die Transaktion, die den Vertrag bereitgestellt hat, muss vom Netzwerk verifiziert werden. Wenn wir eine private Kette mit einem einzigen Knoten betreiben, müssen wir die Transaktion minen.

Der Transaktionsbeleg

Warten, bis die Transaktion abgebaut wird. Sobald wir mit dem Mining begonnen haben (oder wir wissen, dass es Miner im Netzwerk gibt), können wir versuchen, den Transaktionsbeleg abzurufen. Wir benötigen diesen, da er unsere Vertragsadresse enthält.

Die Transaktion wurde möglicherweise noch nicht abgebaut, sodass beim Versuch, die Quittung zu erhalten, möglicherweise ein Nullwert zurückgegeben wird. In diesem Szenario werden wir es weiter versuchen, bis wir ein Nicht-Null-Ergebnis erhalten.

Bergbau stoppen (Nachdem wir fertig sind, können wir den Bergbau einfach beenden.)" [1]

[1] https://nethereum.readthedocs.io/en/latest/contracts/deploying/

Lösung 2: Wie Sie sehen können, dass sich mein Knoten mit dem Flag mit dem Netzwerk verbindet --nodiscover, wurde das Problem gelöst, als ich ihn entfernte.