C Führen Sie Solidity Smart Contracts mit EVM auf der Oracle Blockchain Platform aus
Sie können Solidity-Smart Contracts mit einer Ethereum Virtual Machine (EVM) ausführen, die als Chaincode auf Oracle Blockchain Platform bereitgestellt wird.
Die EVM betreibt Solidity Smart Contracts in Ethereum-Netzwerken. Die EVM wurde über das Hyperledger Burrow-Projekt erstellt und in Hyperledger Fabric integriert. Mit diesem Projekt können Sie eine Hyperledger Fabric-berechtigte Blockchain-Plattform verwenden, um mit Ethereum-Smart Contracts zu interagieren, die in einer EVM-kompatiblen Sprache wie Solidity geschrieben wurden. Siehe: Hyperledger Fabric EVM chaincode.
- Laden Sie das EVM Chaincode-Package in Oracle Blockchain Platform hoch.
- Stellen Sie den EVM-Kettencode auf einem Kanal bereit.
- Generieren Sie mithilfe der Remix-IDE Bytecode für einen Solidity-Smart-Vertrag.
- Stellen Sie den Smart Contract-Bytecode im bereitgestellten EVM-Kettencode bereit. Verwenden Sie die vom Deployment zurückgegebene Adresse, um Transaktionen zu senden.
fabric-chaincode-evm:release-0.4 getestet und funktionieren möglicherweise nicht mit anderen Releases.
EVM Chaincode Package einrichten
Bevor Sie den Smart Contract bereitstellen können, müssen Sie das EVM-Chaincode-Package einrichten. Gehen Sie folgendermaßen vor, um den Chaincode-Packageordner zu erstellen.
- Laden Sie das EVM-Chaincode-Paket (
.zip-Datei) aus dem folgenden GitHub-Repository herunter: Hyperledger Fabric EVM chaincode. - Extrahieren Sie die heruntergeladene Datei
fabric-chaincode-evm-release-0.4.zip. - Navigieren Sie in den extrahierten Dateien zum Verzeichnis
fabric-chaincode-evm-release-0.4/evmcc. - Löschen Sie die Datei
go.sumund das Verzeichnisvendor. - Stellen Sie mit dem Befehl
go modalle abhängigen Go-Module bereit:go mod tidy go mod vendor - Navigieren Sie zum Verzeichnis
fabric-chaincode-evm-release-0.4/emvcc/vendor/github.com/hyperledger. - Erstellen Sie das Verzeichnis
fabric-chaincode-evm/evmccim Verzeichnis/hyperledger. - Verschieben Sie die folgenden Ordner aus dem Verzeichnis
fabric-chaincode-evm-release-0.4/evmccin das Verzeichnisfabric-chaincode-evm-release-0.4/evmcc/vendor/github.com/hyperledger/fabric-chaincode-evm/evmcc:/address/event/eventmanager/mocks/statemanager

- Komprimieren Sie den Ordner
fabric-chaincode-evm-release-0.4/evmccder obersten Ebene im Format.zip, und benennen Sie ihn um. In den folgenden Schritten wirdevmcc.zipals Beispielname verwendet.
EVM Chaincode auf Oracle Blockchain Platform bereitstellen
Nachdem Sie das EVM-Chaincode-Package erstellt haben, stellen Sie es auf Oracle Blockchain Platform bereit.
- Melden Sie sich bei der Oracle Blockchain Platform-Konsole an.
- Wählen Sie auf der Registerkarte Chaincodes die Option Neuen Chaincode bereitstellen aus.
- Wählen Sie Schnell-Deployment, und geben Sie die folgenden Informationen ein:
- Packagelabel: Geben Sie eine Beschreibung des Chaincode-Packages ein.
- Chaincode-Sprache: GoLang.
- Chaincode-Name: Geben Sie den Namen des Chaincodes ein. Beispiel: Geben Sie
solidityccein. - Version:
v1. - Init-required: Lassen Sie diese Option deaktiviert.
- Kanal: Wählen Sie die Kanäle aus, in denen Sie den Chaincode installieren möchten.
- Chaincode-Quelle: Laden Sie das Package
evmcc.ziphoch, das Sie in den vorherigen Schritten erstellt haben.
Nachdem Sie Ihre Informationen übermittelt haben, ist der EVM-Chaincode auf der Seite Chaincodes sichtbar und wird als bereitgestellter Chaincode auf jedem Kanal aufgeführt, auf dem Sie ihn installiert haben.
Solidity Smart Contract erstellen und kompilieren
- Öffnen Sie die browserbasierte Remix-IDE: https://remix.ethereum.org/.
- Wenn Sie bereits einen Solidity Smart-Vertrag geschrieben haben, importieren Sie ihn in Remix.
- Wenn kein Solidity Smart Contract geschrieben wurde, erstellen Sie in Remix eine Solidity-Datei (
.sol-Datei), und führen Sie einen der folgenden Schritte aus:- Wenn Sie mit Solidity vertraut sind, erstellen Sie Ihre eigene intelligente Vertragsdatei.
- Verwenden Sie den Beispielcode
SimpleStoragein der Solidity-Dokumentation: Solidity: Introduction to Smart Contracts - Verwenden Sie den Beispielcode, der für dieses Beispiel verwendet wird. Dabei wird der Wert
string nameals Eingabe verwendet und mit den Funktionenset(name)undget()derselbe Wert wie eine Ausgabezeichenfolge ausgegeben.pragma solidity ^0.4.0; contract Myname { string public yourName; function set(string name) public { yourName = name; } function get() public view returns (string) { return yourName; } }
- Kompilieren Sie Ihren Smart Contract. Öffnen Sie den Bereich Solidity Compiler in Remix. Stellen Sie sicher, dass die Registerkarte "Smart Contract" geöffnet ist, und wählen Sie sie als kompilierte Datei aus. Setzen Sie die Compilerversion auf die neueste 4. X-Version, und wählen Sie Kompilieren aus.

- Nachdem die Datei kompiliert wurde, wählen Sie das Symbol Bytecode aus, um den Bytecode als JSON-Dokument in die Zwischenablage zu kopieren.
- Fügen Sie den kopierten Bytecode in einen Texteditor ein, und speichern Sie ihn.
Smart Contract bereitstellen
"object". Dies ist der EVM-Bytecode eines Beispiel-Smart Contracts."object": "608060405234801561001057600080fd5b50610410806100206000396000f30060
8060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463
ffffffff1680634ed3885e1461005c5780636d4ce63c146100c5578063d97d663014610155575b600080fd5b34801561
006857600080fd5b506100c3600480360381019080803590602001908201803590602001908080601f01602080910402
602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101
e5565b005b3480156100d157600080fd5b506100da6101ff565b60405180806020018281038252838181518152602001
91508051906020019080838360005b8381101561011a5780820151818401526020810190506100ff565b505050509050
90810190601f1680156101475780820380516001836020036101000a031916815260200191505b509250505060405180
910390f35b34801561016157600080fd5b5061016a6102a1565b60405180806020018281038252838181518152602001
91508051906020019080838360005b838110156101aa57808201518184015260208101905061018f565b505050509050
90810190601f1680156101d75780820380516001836020036101000a031916815260200191505b509250505060405180
910390f35b80600090805190602001906101fb92919061033f565b5050565b6060600080546001816001161561010002
03166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615
6101000203166002900480156102975780601f1061026c57610100808354040283529160200191610297565b82019190
6000526020600020905b81548152906001019060200180831161027a57829003601f168201915b505050505090509056
5b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190
818152602001828054600181600116156101000203166002900480156103375780601f1061030c576101008083540402
83529160200191610337565b820191906000526020600020905b81548152906001019060200180831161031a57829003
601f168201915b505050505081565b828054600181600116156101000203166002900490600052602060002090601f01
6020900481019282601f1061038057805160ff19168380011785556103ae565b828001600101855582156103ae579182
015b828111156103ad578251825591602001919060010190610392565b5b5090506103bb91906103bf565b5090565b61
03e191905b808211156103dd5760008160009055506001016103c5565b5090565b905600a165627a7a72305820a990d4
0b57c66329a32a18e847b3c18d6c911487ffadfed2098e71e8cafa0c980029",- Die
to-Adresse. - Der
input-Bytecode, der bei Ethereum-Transaktionen erforderlich ist.
Um Smart Contracts bereitzustellen, ist das Feld to die Nulladresse, und input ist der kompilierte EVM-Bytecode des Vertrags. Daher werden dem Befehl invoke zwei Argumente zur Verfügung gestellt. Der erste, der traditionell ein Funktionsname innerhalb des Chaincodes sein sollte, ist jetzt 0000000000000000000000000000000000000000, und das zweite Argument ist der Solidity Smart Contract Bytecode.
- Um den Solidity Smart Contract auf Oracle Blockchain Platform bereitzustellen, können Sie den folgenden REST-Proxyaufruf ausführen, um die beiden Argumente an die EVM zu senden.
{ "chaincode": "<evmcc-ccid>", "args": [ "0000000000000000000000000000000000000000", "<bytecode-of-the-smart-contract>" ], "timeout": 0, "sync": true }Im folgenden Beispiel wird cURL verwendet, um den Solidity-Smart Contract mit dem Namensolidityccin Oracle Blockchain Platform bereitzustellen.curl -L -X POST 'https://<hostname>:443/restproxy/api/v2/channels/<channelname>/transactions' \ -H 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=' \ -H 'Content-Type: application/json' \ --data-raw '{"chaincode":"<evmcc-ccid>","args":["0000000000000000000000000000000000000000","<bytecode-of-the-smart-contract>"],"timeout":0,"sync":true}' - Die Antwort
payloadder Transaktion ist die Vertragsadresse für Ihren bereitgestellten Vertrag. Kopieren Sie diese Adresse und speichern Sie sie. Die Vertragsadresse wird verwendet, wenn Sie Smart Contracts ausführen.
In diesem Beispiel lautet die Smart Contracts-Adresse66b92979bb66d645371b3247177e4b2513cb9834.
- Interagieren Sie mit einem Hash-Wert der Methode und der Eingabeparameter.
- Interagieren Sie, indem Sie den Methodennamen und die Eingabeparameter direkt verwenden.
Mit Smart Contract mit Hash-Werten interagieren
Nachdem Sie die Smart Contracts-Adresse angegeben haben, können Sie mit den folgenden Aufrufen über den REST-Proxy mit dem bereitgestellten Smart Contracts interagieren.
Um Funktionen auszuführen, verwenden Sie aufrufende und abfragende Transaktionen, jedoch mit unterschiedlichen Parametern. Der Beispielvertrag enthält zwei Funktionen: get und set.
In diesen Transaktionen ist das Feld to die Vertragsadresse, und das Feld input ist der Funktionsausführungs-Hash, der mit einem der erforderlichen Argumente verkettet wird.
Sie müssen den Hash der Funktionsausführung anfordern, um eine Transaktion auszuführen. Eine einfache Möglichkeit, dies zu tun, besteht darin, die Funktionen in der Remix-IDE auszuführen und dann den Hash aus den Transaktionsprotokollen zu kopieren:
- Öffnen Sie in der Remix-IDE den Bereich Transaktionen bereitstellen und ausführen. Stellen Sie sicher, dass der Vertrag im Feld Vertrag ausgewählt ist, und wählen Sie Bereitstellen aus.

Nach Abschluss des Deployments wird der Vertrag in der Liste Bereitgestellte Verträge aufgeführt. - Blenden Sie den Vertrag in der Liste Bereitgestellte Verträge ein. Die Smart Contract-Funktionen werden aufgelistet.
- Transaktionen ausführen Geben Sie im angegebenen Beispiel oracle ein, und wählen Sie set aus.
- Im Terminalfenster werden die Transaktionslogs angezeigt. Wenn die Transaktionslogs minimiert sind, erweitern Sie sie, indem Sie das Log auswählen. Kopieren Sie den Wert des Feldes
input(das der Funktionsausführungshash ist), indem Sie das Symbol daneben auswählen. Speichern Sie diesen Wert an demselben Standort wie Ihre Vertragsadresse, und entfernen Sie die führende0x.
- Nachdem Sie den Funktionsausführungs-Hash und die Vertragsadresse verwendet haben, können Sie die festgelegte Transaktion auf Oracle Blockchain Platform mit dem Hash und der Adresse als Raw-Datenargumente ausführen.
Das folgende Beispiel zeigt, wie die Transaktion mit cURL ausgeführt wird:--data-raw '{"chaincode":"<chaincodename>","args":["<contractaddress>","<setfunctionexecutionhash>"]}'curl -L -X POST 'https://<hostname>:443/restproxy/api/v2/channels/<channelname>/transactions' \ -H 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=' \ -H 'Content-Type: application/json' \ --data-raw '{"chaincode":"soliditycc","args":["66b92979bb66d645371b3247177e4b2513cb9834","4ed3885e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000066f7261636c650000000000000000000000000000000000000000000000000000"]}' - Öffnen Sie die Oracle Blockchain Platform-Konsole, und prüfen Sie, ob die Transaktion im Buch aufgeführt ist.
Um eine weitere Transaktion wie eine Abfrage mit der Funktion get des Smart Contracts auszuführen, können Sie den Funktionsausführungs-Hash in Remix generieren und dann mit der Vertragsadresse kombinieren:
- Stellen Sie unter "Remix" im Bereich Transaktionen bereitstellen und ausführen sicher, dass Ihr Vertrag weiterhin unter Bereitgestellte Verträge aufgeführt ist. Falls nicht, stellen Sie es erneut bereit.
- Wählen Sie get aus. Rufen Sie die Eingabe aus der Transaktion ab, und speichern Sie sie wie bei der set-Transaktion, indem Sie die führende
0xentfernen.
- Verwenden Sie diesen Transaktions-Hash und die Vertragsadresse, um eine Abfragetransaktion für den auf Oracle Blockchain Platform bereitgestellten Chaincode auszuführen.
Das folgende Beispiel zeigt, wie die Transaktion mit cURL ausgeführt wird:--data-raw '{"chaincode":"<chaincodename>","args":["<contractaddress>","<getfunctionexecutionhash>"]}'
Die zurückgegebene Payload enthält das abgefragte Asset, in dem Beispiel die Zeichenfolgecurl -L -X POST 'https://<hostname>:443/restproxy/api/v2/channels/<channelname>/chaincode-queries' \ -H 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=' \ -H 'Content-Type: application/json' \ --data-raw '{"chaincode":"soliditycc","args":["66b92979bb66d645371b3247177e4b2513cb9834","6d4ce63c"]}'oracle.