To-node oppsett av et privat eterum på AWS med kontraktutplassering (del 2)

oppsummering

I del 1 har vi fullført et oppsett av to-node privat Ethereum blockchain. Nå distribuerer vi en kontrakt på denne blockchain, og kontoene til begge noder kan få tilgang til kontrakten og utføre funksjonene.

Min plan er å distribuere kontrakten på Node 1 og se hvordan Node 2 får tilgang til denne kontrakten.

Kontrakten jeg bruker er “Voting.sol” av Mahesh Murthy i bloggen hans (lenke). Han skrev en veldig omfattende guide om Ethereum-applikasjonen. Mens han distribuerte applikasjonen på testrpc, planlegger jeg å distribuere den samme kontrakten på min private blockchain med samme distribusjonseksempel. Du kan enkelt kryssjekke distribusjonsprosedyren.

Siden han har forklart seg veldig detaljert hvordan kodekompilering fungerer, vil jeg hoppe over detaljene og bare referere til noen punkter som er relevante for kontraktsutrullingen min. Se hans del 1 (lenke) på detaljene om koden og samlingen.

Koden “Voting.sol”

Voting.sol (kilde: lenke)

pragmasoliditet ^ 0.4.11;

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

// Vi må spesifisere hvilken versjon av kompilatoren denne koden vil kompilere med

kontraktsstemming {

/ * kartleggingsfeltet nedenfor tilsvarer en assosiativ matrise eller hash.

Nøkkelen til kartleggingen er kandidatnavnet lagret som type bytes32 og verdien er

et usignert heltall for å lagre antall stemmer

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

* /

kartlegging (bytes32 => uint8) offentlige stemmer mottatt;

/ * Soliditet lar deg ikke passere i en rekke strenger i konstruktøren (ennå).

Vi bruker i stedet en rekke bytes32 til å lagre kandidatlisten

* /

bytes32 [] offentlig kandidatliste;

/ * Dette er konstruktøren som blir ringt en gang når du

distribuere kontrakten til blockchain. Når vi distribuerer kontrakten,

vi vil passere en rekke kandidater som vil konkurrere i valget

* /

funksjon Stemmegivning (bytes32 [] kandidatnavn) {

kandidatliste = kandidatnavn;

}

// Denne funksjonen returnerer det totale antallet stemmer en kandidat har fått så langt

funksjon totalVotesFor (bytes32 kandidat) returnerer (uint8) {

hvis (validCandidate (kandidat) == usann) kast;

tilbake stemmer Mottatt [kandidat];

}

// Denne funksjonen øker antall stemmer for den spesifiserte kandidaten. Dette

// tilsvarer å avgi stemme

funksjon voteForCandidate (bytes32 kandidat) {

hvis (validCandidate (kandidat) == usann) kast;

mottok [kandidat] + = 1;

}

funksjon validCandidate (bytes32 kandidat) returnerer (bool) {

for (uint i = 0; i < kandidatliste.lengde; i ++) {

hvis (kandidatliste [i] == kandidat) {

returner sant;

}

}

returner falsk;

}

}

d! ‘

Dette er en enkel kontrakt for å illustrere hvordan soliditetskoden fungerer. Her er noen punkter vi vil referere til i denne delen.

  1. Kontrakten krever en liste over kandidater (se konstruktøren). Vi vil legge inn dette når vi distribuerer en ny kontrakt.
  2. To funksjoner er definert i denne kontrakten: Stemmegivning for og stemme på kandidat. Vi vil bruke disse to funksjonene til å samhandle med kontrakten fra begge noder.

Du kan finne detaljprosessen med kompilering (ved hjelp av solc) her. Etter kompilering trenger vi to opplysninger for distribusjon av kontrakt. De er Application Binary Interface (ABI) og Bytecode.

Application Binary Interface (ABI)

Den inneholder metodene som er tilgjengelige i denne kontrakten som brukere kan samhandle med. Her er ABI for denne stemmekontrakten.

‘[{"konstant":falsk,"innganger": [{"Navn":"kandidat","type":"bytes32"}],"Navn":"totalVotesFor","utganger": [{"Navn":"","type":"uint8"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"kandidat","type":"bytes32"}],"Navn":"valid Kandidat","utganger": [{"Navn":"","type":"bool"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [{"Navn":"","type":"bytes32"}],"Navn":"mottatt","utganger": [{"Navn":"","type":"uint8"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [{"Navn":"","type":"uint256"}],"Navn":"kandidatliste","utganger": [{"Navn":"","type":"bytes32"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"kandidat","type":"bytes32"}],"Navn":"voteForCandidate","utganger": [],"som skal betales":falsk,"type":"funksjon"}, {"innganger": [{"Navn":"kandidatnavn","type":"bytes32 []"}],"som skal betales":falsk,"type":"konstruktør"}] ‘

Bytecode

Det er den faktiske kontraktkoden som skal distribueres på blockchain. Her er bytekoden.

‘0x6060604052341561000c57fe5b6040516103d83803806103d8833981016040528080518201919050505b806001908051906020019061003f929190610047565b505b506100bf565b828054828255906000526020600020908101928215610089579160200282015b82811115610088578251829060001916905591602001919060010190610067565b5b509050610096919061009a565b5090565b6100bc91905b808211156100b85760008160009055506001016100a0565b5090565b90565b61030a806100ce6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632f265cf714610067578063392e6678146100a55780637021939f146100e1578063b13c744b1461011f578063cc9ab2671461015b575bfe5b341561006f57fe5b61008960048080356000191690602001909190505061017f565b604051808260ff1660ff16815260200191505060405180910390f35b34156100ad57fe5b6100c76004808035600019169060200190919050506101cd565b604051808215151515815260200191505060405180910390f35b34156100e957fe5b610103600480803560001916906020019091905050610233565b604051808260ff1660ff16815260200191505060405180910390f35b341561012 757fe5b61013d6004808035906020019091905050610253565b60405180826000191660001916815260200191505060405180910390f35b341561016357fe5b61017d600480803560001916906020019091905050610278565b005b60006000151561018e836101cd565b1515141561019c5760006000fd5b60006000836000191660001916815260200190815260200160002060009054906101000a900460ff1690505b919050565b60006000600090505b6001805490508110156102285782600019166001828154811015156101f757fe5b906000526020600020900160005b505460001916141561021a576001915061022d565b5b80806001019150506101d6565b600091505b50919050565b60006020528060005260406000206000915054906101000a900460ff1681565b60018181548110151561026257fe5b906000526020600020900160005b915090505481565b60001515610285826101cd565b151514156102935760006000fd5b600160006000836000191660001916815260200190815260200160002060008282829054906101000a900460ff160192506101000a81548160ff021916908360ff1602179055505b505600a165627a7a72305820994b2ebbfeec46890216bc547cf9a1292547cc43f08440506866c34b2ff0ac9e0029’

Fremgangsmåte

Trinn 1: Installer node.js og web3 på begge noder

Interaksjonen med kontrakt er gjennom nodejs og web3js. Vi må installere nodejs og web3-modulene. Jeg følger fremgangsmåten som er foreslått her (lenke).

Node 1

$ sudo apt-get install python-software-egenskaper

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –

$ sudo apt-get install nodejs

For å bekrefte vellykket installasjon, bruk $ node -v og $ npm -v, og deres versjon vises.

Deretter installerer du web3-modulen.

Node 1

$ npm installer web3

Gjenta dette trinnet i node 2 også.

Trinn 2: Få tilgang til Blockchain via web3 i Node Console

Vi er klare til å få tilgang til noden. Siden vi trenger både geth-klient og node-konsoll, vil vi bruke delt skjerm igjen. Toppterminalen er geth, og bunnen er node-konsoll.

For å starte geth, avhengig av om du fortsatt har geth i gang, skal begge kommandoene bringe deg tilbake til konsollen.

Node 1 (geth)

$ geth – gjenoppdage konsoll 2>>eth.log ELLER

$ geth vedlegg

For å starte nodekonsollen, bruk bare denne

Node 1 (node)

$ node

To-node oppsett av et privat eterum på AWS med kontraktutplassering (del 2)

Vi er nå klare til å bruke node-konsoll for å få tilgang til geth av rpc. Standard RPC er på http: // localhost: 8545 /.

Slå først på rpc på geth:

Node 1 (geth)

> admin.startRPC ()

På node-konsoll,

Node 1 (geth)

> admin.startRPC ()

For å verifisere om noden kan nå geth vellykket kan vi bruke > web3.eth.accounts på node-konsoll. Vi bør se kontoen vi opprettet på geth-konsollen.

To-node oppsett av et privat eterum på AWS med kontraktutplassering (del 2)

Gjenta dette trinnet på node 2.

Trinn 3: Distribuere kontrakt på node 1

Vi distribuerer nå kontrakten på denne private blockchain fra Node 1.

Node 1 (node)

> abi = <abi vist ovenfor>

> VotingContract = web3.eth.contract (JSON.parse (abi))

> byteCode = <bytekode vist ovenfor>

Ettersom distribusjonen krever gass, må vi låse opp kontoen og slå på gruvedrift

Node 1 (geth)

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

> miner.start ()

Nå distribuerer vi kontrakten. Denne kontrakten krever en liste over kandidater. Vi vil ta med dette når vi distribuerer kontrakten.

Node 1 (node)

> deployedContract = VotingContract.new ([‘Rama’, ‘Nick’, ‘Jose’], {data: byteCode, fra: web3.eth.accounts [0], gass: 4700000})

Nå er kontrakten utplassert. Og vi kan utføre funksjonene for verifisering. Vi vil se at avstemningen øker når vi fortsetter å utføre funksjonene.

Node 1 (node)

> deployedContract.totalVoteFor.call (‘Rama’)

> deployedContract.voteForCandidate (‘Rama’, {fra: web3.eth.accounts [0]})

To-node oppsett av et privat eterum på AWS med kontraktutplassering (del 2)

Kontrakten er vellykket distribuert. Nå går vi til Node 2 og ser hvordan konto i Node 2 også kan få tilgang til denne kontrakten.

Trinn 4: Få tilgang til kontrakt fra node 2

Forsikre deg om at Node 1 og Node 2 allerede har peered. Bekreft ved > admin.peers på geth-konsollen på begge noder. Se del 1 hvordan du gjør om nødvendig.

Informasjonen som kreves for en konto i Node 2 som får tilgang til denne distribuerte kontrakten, er (1) ABI og (2) dens distribuerte adresse. Vi har allerede ABI-informasjon. Nå fra node 1 kan vi få tak i denne distribuerte adressen.

Node 1 (node)

> deployedContract.address

‘0x97a4b975c8fde24d8e40551054342c95676ed959’

0]})

For ABI definerer vi VotingContract med samme abi på Node 2.

Node 2 (node)

> abi = <abi vist ovenfor>

> VotingContract = web3.eth.contract (JSON.parse (abi))

Vi trenger ikke distribuere en ny kontrakt slik vi gjorde på node 1. I stedet definerer vi kontraktforekomsten basert på VotingContract og adressen vi fikk fra Node 1.

Node 2 (node)

> contractInstance = VotingContract.at (‘0x97a4b975c8fde24d8e40551054342c95676ed959’)

Venstre side er Node 1, og høyre side er Node 2.

To-node oppsett av et privat eterum på AWS med kontraktutplassering (del 2)

Nå er kontraktforekomst poenget vi kan få tilgang til denne distribuerte kontrakten i node 2. Vi kan utstede kommandoene akkurat som vi gjør på node 1:

Node 2 (node)

> contractInstance.totalVoteFor.call (‘Rama’)

> contractInstance.voteForCandidate (‘Rama’, {fra: web3.eth.accounts [0]})

)

Ikke glem å låse opp kontoen på Node 2 når du stemmer, da dette bruker gass for å utføre en funksjon på kontrakten.

Trinn 5: Bekreftelse

Ved å samhandle på begge noder ser vi at kontoer på begge noder handler på samme kontrakt. Her fanger jeg samspillet mellom de to nodene.

  1. Begge nodene ser det samme resultatet (antall stemmer for Rama er 4).
  2. En konto på Node 1 stemmer på Rama en gang.
  3. Fra node 2 ser vi at antall stemmer for Rama nå er 5.
  4. En konto på Node 2 stemmer på Rama igjen.
  5. Fra node 1 nå ser vi at antall stemmer nå er 6.

Lukking

Dette oppsettet etterligner den virkelige eteroperasjonen. Nye noder kan enkelt bli med i den offentlige kjeden og få tilgang til distribuert kontrakt. Selvfølgelig er applikasjonen i det virkelige liv mest sannsynlig tilgjengelig via webgrensesnitt. Likevel hjelper bruk av konsoll å forstå mer interaksjonen bak.

Nok en gang takk for mange verk av andre som inspirerer og veileder det generelle oppsettet mitt. Her er de,

  • JJ’s World: Sette opp en privat Ethereum blockchain (lenke)
  • Mahesh Murthy: Ethereum for webutviklere (lenke)
  • MLG Blockchain Consulting: Bruk Go-Ethereum til å sette opp en Ethereum Blockchain på AWS (lenke)

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