Übersicht: Beste Tools für die intelligente Vertragsentwicklung (Web3 und Private Ethereum Blockchain)

Dies ist ein Gastbeitrag von KC TAM zur Verwendung verschiedener Tools für die intelligente Vertragsentwicklung: Remix, Web3 auf TestRPC.

Dieses Setup ist dem vorherigen sehr nahe. Der Unterschied besteht darin, den Vertrag in einer privaten Ethereum-Blockchain bereitzustellen, die auf localhost ausgeführt wird, anstatt TestRPC zu verwenden.

Der Teil der Knotenkonsole ist fast identisch, aber wir benötigen einige Aufgaben in der privaten Blockchain, bevor die Dinge wie gewünscht ausgeführt werden. Sie sind die Blockchain-Initialisierung und das Ausführen der Blockchain, die Kontoerstellung und das Mining. Alle diese Aufgaben werden von TestRPC in der vorherigen Sitzung ausgeführt.

Teil 1: Die besten Tools für die intelligente Vertragsentwicklung 

Intelligente Vertragsentwicklung (Teil 2)

Vorbereitung: Ethereuem Client (geth)

Es gibt verschiedene Implementierungen des Ethereum-Clients. Der beliebteste ist der Go-Client (geth genannt). Installation von Geth kann gefunden werden Hier. Wählen Sie eine aus, die Ihrem Betriebssystem entspricht.

Genesis.json-Datei

Dies ist die Datei, die zum Initialisieren der privaten Ethereum-Blockchain verwendet wird. Ich zeige nur den, den ich benutze.

{

"Münzbasis" :: "0x000000000000000000000000000000000000000001",

"Schwierigkeit" :: "0x20000",

"extraData" :: "",

"gasLimit" :: "0x4c4b40",

"nonce" :: "0x0000000000000042",

"Mixhash" :: "0x000000000000000000000000000000000000000000000000000000000000000000",

"parentHash" :: "0x000000000000000000000000000000000000000000000000000000000000000000",

"Zeitstempel" :: "0x00",

"zuweisen": {},

"config": {

"chainId": 15,

"HomesteadBlock": 0,

"eip155Block": 0,

"eip158Block": 0

}}

}}

Das solltest du schon haben. Weitere Informationen finden Sie in der Vorbereitungssitzung im vorherigen Setup. Knoten- und Web3-Modul

Richten Sie eine private Ethereum-Blockchain ein

1. Initialisieren Sie die Blockchain

Hier liste ich nur die Schritte auf, die für diese Demo gut genug sind, mit einer kurzen Erklärung. Weitere Details finden Sie hier Wiki.

Öffnen Sie das Arbeitsverzeichnis. Der Einfachheit halber verwenden wir das Verzeichnis in der vorherigen Sitzung, in dem die Knotenmodule bereits installiert wurden. Stellen Sie sicher, dass die Datei genesis.json hier gespeichert ist. Erstellen Sie hier ein Verzeichnis mit dem Namen “chaindata”. In diesem Verzeichnis werden alle Blockchain-Informationen und Benutzerkonten gespeichert.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Von nun an werden wir unseren Bildschirm für verschiedene Zwecke in drei Teile teilen.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Initialisieren Sie nun die Blockchain mit geth init. Beachten Sie, dass wir das Datenverzeichnis für das Verzeichnis angeben müssen, in dem wir die Blockchain speichern.

Blockchain

$ geth –datadir = ~ // chaindata / init genesis.json

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Nach der Initialisierung werden im Chaindata-Verzeichnis zwei Verzeichnisse erstellt:

  • geth enthält alle Blockchain-bezogenen Daten
  • Der Keystore enthält die Benutzerkontoinformationen (derzeit leer)..

2. Starten Sie die Blockchain

Wir können jetzt die Blockchain starten.

Blockchain

$ geth –datadir = ~ // chaindata / s.json

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Die Blockchain ist in Betrieb. Wir interagieren nicht mit der Blockchain in diesem Terminal. Während unseres Setups werden in diesem Terminal weiterhin einige nützliche Informationen angezeigt.

3. Greifen Sie mit der Geth-Konsole auf Blockchain zu

Wir können über die Geth-Konsole auf die Blockchain zugreifen, die wir gestartet haben. Beachten Sie die letzte Zeile im Blockchain-Terminal: Dort ist der IPC-Endpunkt geöffnet (der Pfad für die Datei geth.ipc). Wir verwenden den IPC-Endpunkt, um auf die Konsole zuzugreifen.

Die Geth-Konsole befindet sich am unteren rechten Terminal.

Geth Konsole

$ geth ipc anhängen: /chaindata/geth.ipc

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Hier ist die Geth-Konsole, und wir können die Geth-Befehle hier ausgeben.

4. Fügen Sie einige Konten für die Demo hinzu

Wenn diese private Ethereum-Blockchain initialisiert wird, gibt es keine Konten. Für diese Demo werden wir vier erstellen.

Die erste ist unsere Basis, die für die Vertragsbereitstellung und die Funktionsausführung verantwortlich ist. Darüber hinaus ist dieses Konto für den Abbau verantwortlich, da wir in der privaten Ethereum-Blockchain jemanden benötigen, der den Block abbaut.

Drei weitere Konten werden nur zur Demonstration der Umsatzbeteiligung erstellt.

Beachten Sie, dass für jedes Konto ein Paraphrasenschutz erforderlich ist.

Geth Konsole

$ eth.accounts

$ personal.newAccount () // viermal wiederholen

$ eth.accounts

Wenn Sie das Verzeichnis in chaindata / keystore überprüfen, werden alle diese vier Konten angezeigt.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Hier sind die Konten. Wir werden sie später weiterleiten.

"0x822539842f2d65f7f6e45ef913ab6eb226cd1056"

"0x57f6b66543c6a5650809f5ba2d3e0e808201fe8b"

"0xf1314446d331a023a95e6e5ff5302ccf7a73adec"

"0x595c788ba7b408afeee4cd4e359568dbcd5a5617"

5. Überprüfen Sie den Kontostand

Wir können jetzt den Kontostand dieser vier Adressen überprüfen. Kein Wunder, dass sich in diesen Konten keine Ether befinden, da sie neu erstellt wurden.

Geth Konsole

$ eth.getBalance (eth.accounts [0]) // mit 1, 2 und 3 wiederholen

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

6. Bergbau

Wir sind bereit zu sehen, wie Bergbau betrieben wird. Private Ethereum-Blockchain erfordert Mining, um den Block zu erstellen. Da wir in genesis.json eine sehr geringe Schwierigkeit festgelegt haben, dauert es nicht zu lange, bis ein Block abgebaut wird. Nachdem ein Block zur Blockchain hinzugefügt wurde, werden 5 Ether auf Konten [0] belohnt (was auch als Etherbase- oder Coinbase-Konto bezeichnet wird)..

Der erste Block kann eine Weile dauern. Wenn Sie den Kontostand [0] und die Anzeige im Blockchain-Fenster (Terminal oben rechts) untersuchen, wissen Sie, dass das Mining gut funktioniert.

Geth Konsole

$ mineral.start ()

$ eth.getBalance (eth.accounts [0])

$ web3.fromWei (eth.getBalance (eth.accounts [0])) // weis in ether konvertieren

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Beachten Sie, dass alle Ether zu eth.accounts [0] gehen und wir web3.fromWei verwenden können, um den Saldo von wei in Ether umzuwandeln. Und wir können jederzeit aufhören und mit dem Bergbau beginnen. Wir stoppen es zuerst und können es später starten, wenn wir den Vertrag bereitstellen und die Funktion ausführen. (Im wirklichen Leben erledigen einige Bergleute die Arbeit, und Sie müssen nicht selbst Bergbau betreiben, es sei denn, Sie möchten durch Bergbau einige Äther verdienen.)

Wir haben einige Ether für eth.accounts [0], die für die Vertragsbereitstellung und die Ausführung der Funktion verwendet werden können. Und meine private Blockchain ist einsatzbereit. Jetzt wechseln wir zur Vertragsbereitstellung.

Stellen Sie den Vertrag bereit

Die Vorgehensweise ist fast identisch mit der in der vorherigen Sitzung. Es gibt jedoch einige zusätzliche Arbeiten an der Geth-Konsole, und wir werden dies hervorheben.

1. Bereiten Sie die Knotenkonsole vor

Auf der Knotenkonsole, dem Terminal auf der linken Seite, greifen wir zuerst auf die Knotenkonsole zu und definieren das web3-Objekt für den Zugriff auf die private Kette.

Knotenkonsole

$ node

> Web3 = erforderlich (‘web3’)

> web3 = neues Web3 (neuer Web3.providers.HttpProvider ("http: // localhost: 8545"))

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

2. Schalten Sie RPC auf der Geth-Konsole ein

Wenn wir die private Blockchain starten, ist der RPC (Zugriff über http: // localhost: 8545) standardmäßig deaktiviert. Wir müssen es über die Geth-Konsole einschalten.

Geth Konsole

$ admin.startRPC ()

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Und wir können auf dem Blockchain-Terminal diese Nachricht sehen:

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Das bedeutet, dass web3 vom Knoten über RPC auf die Blockchain zugreifen kann. Dies ist für TestRPC nicht erforderlich, da es bereits geöffnet ist. Wir können RPC auch aktivieren, wenn wir die Blockchain starten (mit der Option –rpc)..

3. Testen Sie den Blockchain-Zugriff auf der Knotenkonsole

Überprüfen Sie die zuvor erstellten Adressen.

Knotenkonsole

> web3.eth.accounts

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Wir sehen die genauen Adressen, die wir auf der Geth-Konsole erstellt haben.

4. Überprüfen Sie die Balance Handy-Funktion

Wir verwenden wieder dasselbe checkAllBalances (), das aus entnommen wurde Hier.

Funktion checkAllBalances () {

var i = 0;

web3.eth.accounts.forEach (Funktion (e) {

console.log (" web3.eth.accounts ["+ich+"]: " + e + " Gleichgewicht: " + web3.fromWei (web3.eth.getBalance (e), "Äther") + " Äther");

i ++;

})

};

Kopieren und fügen Sie diese Funktion einfach in die Knotenkonsole ein. Jetzt können wir die Funktion checkAllBalances () jederzeit aufrufen und sie zeigt den Saldo aller Konten in Ether an.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Das Gleichgewicht ist korrekt. Die Ether in Konten [0] sind auf den Bergbau zurückzuführen. Wir werden nicht darauf verweisen, da diese Menge während des Bergbaus weiter zunimmt. Wir werden den Saldo der anderen drei Konten überprüfen, der derzeit Null ist.

5. Stellen Sie den Vertrag bereit

Wieder folgen wir dem, was wir zuvor getan haben. Und ich kopiere einfach die Informationen aus der vorherigen Sitzung. Lesen Sie in der vorherigen Sitzung nach, wie ich sie erhalte.

Erstellen Sie eine variable Adresse, die die drei Zielfreigabekonten enthält.

Knotenkonsole

> var address = [web3.eth.accounts [1], web3.eth.accounts [2], web3.eth.accounts [3]];

> Adressen

Erstellen Sie eine Klasse für RevenueSharingContract basierend auf dem ABI.

Knotenkonsole

> var RevenueharingContract = web3.eth.contract ([{"Konstante":wahr,"Eingänge": [],"Name"::"Schöpfer","Ausgänge": [{"Name"::"","Art"::"Adresse"}],"zahlbar":falsch,"stateMutability"::"Aussicht","Art"::"Funktion"}, {"Konstante":falsch,"Eingänge": [],"Name"::"töten","Ausgänge": [],"zahlbar":falsch,"stateMutability"::"nicht zahlbar","Art"::"Funktion"}, {"Konstante":wahr,"Eingänge": [],"Name"::"Anzahl Aktionäre","Ausgänge": [{"Name"::"","Art"::"uint256"}],"zahlbar":falsch,"stateMutability"::"Aussicht","Art"::"Funktion"}, {"Konstante":wahr,"Eingänge": [{"Name"::"","Art"::"uint256"}],"Name"::"Aktionäre","Ausgänge": [{"Name"::"","Art"::"Adresse"}],"zahlbar":falsch,"stateMutability"::"Aussicht","Art"::"Funktion"}, {"Konstante":falsch,"Eingänge": [],"Name"::"shareRevenue","Ausgänge": [{"Name"::"Erfolg","Art"::"Bool"}],"zahlbar":wahr,"stateMutability"::"zahlbar","Art"::"Funktion"}, {"Eingänge": [{"Name"::"Adressen","Art"::"Adresse[]"}],"zahlbar":falsch,"stateMutability"::"nicht zahlbar","Art"::"Konstrukteur"}, {"anonym":falsch,"Eingänge": [{"indiziert":falsch,"Name"::"_Menge","Art"::"uint256"}, {"indiziert":falsch,"Name"::"_numShareholder","Art"::"uint256"}],"Name"::"Auszahlen","Art"::"Veranstaltung"}]);

Bis jetzt haben wir noch nichts in der privaten Blockchain bereitgestellt. Daher ist kein Bergbau erforderlich. Für die Vertragsbereitstellung wird Gas benötigt. Daher müssen wir die eth.accounts [0] entsperren, da wir Konten [0] für die Bereitstellung dieses Vertrags verwenden. Es wird auf der Geth-Konsole gemacht.

Geth Konsole

$ personal.unlockAccount (eth.accounts [0])

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Falls Sie aufgrund eines Zeitlimits aufgefordert werden, das Konto zu entsperren, müssen Sie dies erneut tun.

Jetzt können wir den Vertrag mit Bytecode und den erforderlichen Informationen bereitstellen.

Knotenkonsole

> var Revenueharing = RevenueharingContract.new (

Adressen,

{

von: web3.eth.accounts [0],

Daten: ‚0x6060604052341561000f57600080fd5b60405161049d38038061049d833981016040528080518201919050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508151600281905550600090505b81518110156100f957818181518110151561009157fe5b906020019060200201516001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061007a565b50506103938061010a6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302d05d3f1461007257806341c0e1b5146100c757806368eca613146100dc578063ab377daa14610105578063e579a0bd14610168575b600080fd5b341561007d57600080fd5b61008561018a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100d257600080fd5b6100da6101af565b005b34156100e75760008 0fd5b6100ef610240565b6040518082815260200191505060405180910390f35b341561011057600080fd5b6101266004808035906020019091905050610246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610170610279565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60025481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006002543481151561028b57fe5b049150600090505b60025481101561031d576001600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673fffffffffffff fffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561031057600080fd5b8080600101915050610293565b7f9c26340b8d01b4e039192edfd25f4a56ed070d45afe866b8685658b1ed3cd74d34600254604051808381526020018281526020019250505060405180910390a1600192505050905600a165627a7a72305820f0e717ba935e00c43896cc9266a85af91a519061c044503be0a52b93f721d1610029′,

Gas: ‘4700000’

}, Funktion (e, Vertrag) {

console.log (e, Vertrag);

if (typeof contract.address! == ‘undefined’) {

console.log (‘Contract mined! address:’ + contract.address + ‘transactionHash:’ + contract.transactionHash);

}}

})

0])

Anders als in der vorherigen Sitzung wird die Transaktion bereits im Blockchain-Terminal angezeigt, aber noch nicht abgebaut. Es wurde noch keine Nachricht von der Knotenkonsole beobachtet.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Jetzt müssen wir das Mining auf der Geth-Konsole aktivieren.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Wenn wir das Mining aktivieren, werden sehr bald einige Blöcke abgebaut, und auf der Knotenkonsole wird auch die Meldung angezeigt, dass der Vertrag erfolgreich bereitgestellt wurde.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Interaktion mit dem bereitgestellten Vertrag

Ähnlich wie in der vorherigen Sitzung wird auf den bereitgestellten Vertrag über die Objekt-Umsatzbeteiligung zugegriffen.

1. Untersuchen Sie die öffentlichen Variablen

Das Untersuchen öffentlicher Variablen erfordert kein Gas, und daher müssen wir keine Konten und kein Mining entsperren, um dies durchzuführen.

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

2. Führen Sie die Funktion shareRevenue () aus

Da für die Ausführung der Funktion Transaktionskosten und Mining erforderlich sind, können wir beide zuerst von der Geth-Konsole aus starten.

Der Befehl, mit dem wir die Funktion ausführen, ist der gleiche. Wie in der vorherigen Sitzung überprüfen wir den Kontostand vor und nach dem Befehl.

Knotenkonsole

> checkAllBalance ()

> Revenueharing.shareRevenue ({von: web3.eth.accounts [0], Wert: web3.toWei (30), Gas: 4700000});

> checkAllBalance ()

Die besten Tools für eine intelligente Vertragsentwicklung (Teil 2)

Wir haben unser gewünschtes Ergebnis erzielt. Die 30 Ether von Konten [0] werden jetzt auf Konten [1] auf Konten [3] verteilt. Wir können die Konten [0] nicht überprüfen, da aufgrund des Bergbaus neue Ether eingehen.

Zusammenfassung

Wir haben erneut web3 über die Knotenkonsole verwendet, um den Vertrag bereitzustellen und mit ihm zu interagieren. Diesmal machen wir das in einer privaten Ethernet-Blockchain. Der Gesamtprozess ist auf der Seite der Knotenkonsole fast der gleiche, aber wir müssen uns um die Kontoerstellung, das Entsperren des Kontos, das Mining usw. kümmern, um den gesamten Prozess abzuschließen. Dies ist in TestRPC nicht erforderlich, da TestRPC alle diese Aufgaben ausführt.

Das nächste Mal werden wir an MIST arbeiten, einer Benutzeroberfläche, und erneut an einer privaten Ethereum-Blockchain interagieren.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me