Sådan opretter du en privat Ethereum testnet blockchain ved hjælp af Geth og Homebrew

En indgangsvejledning til at starte dine soliditetsprogrammeringsambitioner!

Billede fra https://themerkle.com

Om mig

Hej! Jeg hedder Lander. Jeg er freelance softwareingeniør og produktbygger fra Belgien. Når jeg ikke fordyber mig i soliditet, arbejder jeg på TeamHut, et SaaS, der hjælper freelancere og digitale teams med at organisere og dele deres digitale indhold.

Om denne tutorial

Denne tutorial er en fortolkning af forskellige ressourcer, der hjalp mig med at komme op og køre med at opsætte min første private Ethereum testnet blockchain ved hjælp af Geth og Homebrew. Det fungerer som en fremtidig reference for mig selv og som en hjælp til andre kryptoentusiaster. Jeg forsøgte at liste over de fleste af mine ressourcer i bunden af ​​denne artikel. Fortæl mig venligst, hvis du føler, at der mangler noget.

Privat Ethereum testnet blockchain

Ethereum-software gør det muligt for en bruger at oprette en "privat" eller "testnet" Ethereum-kæde, der er adskilt fra den vigtigste Ethereum-kæde. Dette er nyttigt til test af distribuerede apps, der er bygget på Ethereum uden at skulle udsætte dine apps for det rigtige Ethereum-netværk ved hjælp af ægte Ether. Du præ-genererer eller miner din egen Ether på din private Ethereum-kæde, så det er en meget mere omkostningseffektiv måde at prøve Ethereum på. Har jeg sagt Ethereum nok?

Lad os få noget at slå

Hvad har du brug for denne tutorial?

Et par antagelser

  • Du bruger MacOS
  • Du er en krypto- og / eller softwareudviklingsentusiast, der ønsker at tage sine første skridt til at skrive smarte kontrakter.
  • Du ved hvad Ethereum er og forstår dets grundlæggende anvendelse.
  • Du har en grundlæggende forståelse af MacOS Terminal-brug.

Hvad vil du opnå?

Når du har gennemført denne tutorial, har du en fuldt funktionsdygtig privat Ethereum testnet-blockchain på din lokale computer.

Dette private testnet giver dig mulighed for at udvikle og teste dine nuværende Dapps (decentraliserede apps) isoleret fra den rigtige Ethereum blockchain.

Ordbog

Hvad er Homebrew?

Homebrew installerer de ting, du har brug for, som Apple ikke gjorde. Jeg laver ikke noget, det er hvad deres websted siger. Gå og tjek det, det er fantastisk.

Hvad er Ethereum?

Ethereum er en avanceret blockchain-baseret distribueret computerplatform med smart kontraktfunktionalitet. Det leverer en decentral virtuel maskine, Ethereum Virtual Machine (EVM), der kan udføre peer-to-peer-kontrakter ved hjælp af et krypto-brændstof kaldet Ether.

Læs hvidbogen her.

Hvad er Geth?

geth er kommandolinjegrænsefladen til at køre en fuld ethereum-knude implementeret i Go. Det er den vigtigste leverede af Frontier Release.

Ved at installere og køre geth, kan du deltage i ethereum live-netværket, mine-ether på blockchain, overføre penge mellem adresser, oprette kontrakter og sende transaktioner.

ADVARSEL
Inden du bruger geth eller interagerer med ethereum Frontier live-netværket, skal du sørge for at læse dokumentationen og forstå fuldstændigt advarsler og risici.

tutorial

Sådan installeres Homebrew

Hvis du ikke har gjort det endnu, skal du skyde din terminal op og starte med at installere Homebrew:

/ usr / bin / ruby ​​-e "$ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Hvis du allerede har installeret Homebrew tidligere, skal du sørge for, at det er opdateret:

bryg opdatering
bryg opgradering

Sådan installeres Geth

Den nemmeste måde at installere Geth (go-ethereum) er at bruge Homebrew-hanen

bryg tapet ethereum / ethereum
bryg installere ethereum

Test om installationen var vellykket ved at køre

geth version

Dette skal vise din aktuelt installerede Geth-version:

geth
Version: 1.6.7-stabil
Git Commit: ab5646c532292b51e319f290afccf6a44f874372
Arkitektur: amd64
Protokolversioner: [63 62]
Netværks-id: 1
Go-version: go1.8.3
Operativsystem: darwin
GOPATH =
GOROOT = / usr / local / Cellar / go / 1.8.3 / libexec

Som du kan se, kører vi i øjeblikket Geth version 1.6.7.
Sørg for også at kontrollere de forskellige indstillinger og kommandoer med gethhelp!

Lad os blive farlige

Lets's Get Dangerous - https://giphy.com/gifs/oadZJB3hwMFjy

Tilslutning til testnet

Lad os starte med at oprette en genesis-blok til din private testnet-blockchain. Genesisblokken er starten på blockchain - den første blok, blok 0, og den eneste blok, der ikke peger på en forgængerblok. Protokollen sikrer, at ingen andre noder er enige med din version af blockchain, medmindre de har den samme genesis-blok, så du kan oprette så mange private testnet-blockchains, som du gerne vil! (Se dokumentation)

Opret & gem en * .json-fil kaldet CustomGenesis.json og læg dette indhold i den:

sidenote
Som nævnt i dette blogindlæg er der et Python-værktøj til rådighed til at generere din egen tilpassede Genesis-fil. For enkelhedens skyld kan du bare kopiere indsæt dette eksempel:
{
    "config": {
        "kædeId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "vanskeligheder": "0x400",
    "gasLimit": "0x2100000",
    "alloc": {
        "93f932b3b87e08cdaf0877994e44feb4c93e81aa":
         {"balance": "0x133700000000000000000000"}
    }
}

Filen fungerer som et 'seed' til dit private testnet.

sidenote
Vi har sænket vanskeligheden ned til 400, så minedrift af nye blokke går hurtigere.

Bemærk, at vi tilføjede vores kontoadresse 93f932b3b87e08cdaf0877994e44feb4c93e81aa til "alloc" -objektet, og at vi gav det en saldo på 13370000000000000000000000 wei (1337 ETH):

"alloc": {
        "93f932b3b87e08cdaf0877994e44feb4c93e81aa":
         {"balance": "0x133700000000000000000000"}
    }

Du kan bruge denne teknik til at forfinansiere din konto. Du kan definere flere konti, der skal inkluderes i frøet. Bemærk, at dette trin er valgfrit, da du nemt kan miner Etheren, da du har kontrol over den (lave) vanskelighed!

Du vil henvise til denne fil (CustomGenesis.json), når du initialiserer din genesis-blok ved hjælp af følgende kommando:

geth --identitet "MyTestNetNode" --nodiscover - networkid 1999 - datadir / path / to / test-net-blockchain init /path/to/CustomGenesis.json
Pro Tip
Jeg bruger et brugerdefineret 'datadir'-flag til at adskille testnet blockchain fra det rigtige. Jeg foreslår, at du gør det også. Dette kan være en hvilken som helst mappe, du ønsker.
For at lære mere om de andre anvendte flag, skal du navigere til dokumentationen.

Oprettelse af en konto på det private tesnet

Opret eller find et bibliotek, hvor du gerne vil gemme dine lokale private testnet-data. Til dette eksempel bruger vi

/ Sti / til / test-net-blockchain

Efter at den forrige kommando geth --version kørte med succes, skal du køre

geth-konto ny - datadir / path / to / test-net-blockchain

Denne kommando beder dig om en adgangssætning (= adgangskode). Glem ikke dette.

Pro Tip
Jeg bruger et tilpasset "datadir" -flag for at indikere, at jeg gerne vil bruge mit personlige, lokale testnet. Dette holder det adskilt fra det virkelige testnet.
Som standard bruger geth det samme bibliotek til netværksrelaterede filer som til den offentlige mainnet. Derfor rådes du til at indstille en brugerdefineret - datadir for at forhindre, at det offentlige netværks chaindata bliver nulstillet.
Se dokumentation for at lære mere om dette.

Dette opretter en konto på din friske testnetknudepunkt og returnerer den private testnetadresse sådan:

Adresse: {93f932b3b87e08cdaf0877994e44feb4c93e81aa}

Gem denne adresse og din adgangskode til senere brug.

Forudfinansier din konto

Dette er et valgfrit trin. Da vanskeligheden er så lav, vil det kun tage dig et par minutter at mine nok Ether til at få dig i gang.

Start med at fjerne din tidligere oprettede blockchain-database:

geth fjernetb --datadir / path / to / test-net-blockchain

Opdater din 'CustomGenesis.json' fil:

{
    "config": {
        "kædeId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "vanskeligheder": "0x400",
    "gasLimit": "0x2100000",
    "alloc": {
        "93f932b3b87e08cdaf0877994e44feb4c93e81aa":
         {"balance": "0x133700000000000000000000"}
    }
}

Bemærk, at vi tilføjede vores kontoadresse 93f932b3b87e08cdaf0877994e44feb4c93e81aa til "alloc" -objektet, og at vi gav det en saldo på 13370000000000000000000000 wei (1337 ETH):

Du kan definere flere konti, der skal inkluderes i frøet.

Kør Genesis block initialiseringskommandoen igen

geth --identitet "MyTestNetNode" --nodiscover - networkid 1999 - datadir / path / to / test-net-blockchain init /path/to/CustomGenesis.json

Hvis du ikke har udført præfundering

Brug denne kommando efter start af JavaScript-konsollen (se næste trin: 'Interagere med Geth-konsol'):

geth --identitet "MyTestNetNode" - datadir / path / to / test-net-blockchain --nodiscover - networkid 1999 konsol

Interagere med Geth-konsollen

For at interagere med Geth gennem konsollen, kaldet Geth JavaScript Console brug:

geth --identitet "MyTestNetNode" - datadir / path / to / test-net-blockchain --nodiscover - networkid 1999 konsol

Hvis det kørte med succes, skal du se en bekræftelse:

Hvis du ser denne meddelelse, kan du begynde at køre Geth JavaScript-kommandoer.
Prøv at bruge denne til at kontrollere saldoen på din primære konto

web3.fromWei (eth.getBalance (eth.accounts [0]), "ether")
Pro Tip
Gem disse lange Geth-kommandoer i separate * .sh-filer, så du kan bruge konfigurationen igen (og det er brugerdefinerede flag) på et senere tidspunkt. Dette har du brug for, hver gang du vil bruge dit (brugerdefinerede) private testnet.

Mappestruktur

Rent informativt, det er sådan min mappestruktur ser ud:

Min mappestruktur

Som du kan se, oprettede jeg et * .sh-script til genbrug senere.

* UPDATE *
Jeg har oprettet et lager, der indeholder dem, jeg brugte som reference til denne artikel: https://github.com/WWWillems/medium-attachments/tree/master/01-private-ethereum-testnet

Billede fra https://giphy.com/gifs/hoppip-charlie-chaplin-film-hoppip-S7i2sED2yfDGg

Tillykke!

Du har nu en fungerende privat Ethereum testnet blockchain og en konto / tegnebog, der kører på din personlige computer. Du kan nu starte minedrift, sende transaktioner osv. Jeg skriver nogle nye artikler om disse emner i den nærmeste fremtid.

Nyttige kommandoer / tip

  1. geth fjernetb
    Sletter / fjerner dine lokalt synkroniserede blockchain-data fra det offentlige testnet.
  2. geth fjernetb --datadir / path / to / test-net-blockchain
    Sletter / fjerner dine private blockchain-testnetdata.
  3. geth - hurtig - cache = 1024
    Synkroniserer blockchain hurtigere. Hvis du vælger at bruge det - hurtige flag til at udføre en Ethereum-hurtig synkronisering, beholder du ikke tidligere transaktionsdata.
  4. Når du bruger geth attach, når du kører et privat testnet,
    Sørg for at medtage IPC-endepunktet.
    IPC-endepunktet vises, når du starter din Geth JavaScript-konsol
    som sådan: IPC-endepunkt åbnet: /path/to/endpoint/geth.ipc
    Vedhæft stien til din kommando, så den bliver:
    geth vedhæft /path/to/endpoint/geth.ipc

Geth JavaScript-konsolkommandoer

Brug disse kommandoer, når du er logget ind på Geth-konsollen.

  1. Hvis du modtager en fejl med at sige 'Fejl: godkendelse nødvendig: adgangskode eller låse op', skal du bruge denne kommando til at låse din primære konto op i Geth JavaScript-konsollen:
    personal.unlockAccount (eth.coinbase, 'din kontos adgangskode i tilbud', 0)
  2. For at kontrollere saldoen på din primære konto
web3.fromWei (eth.getBalance (eth.accounts [0]), "ether")

3. For at se en liste over afventende transaktioner

eth.pendingTransactions

Nyttige links

  • Ethereum docs
  • Geth JavaScript Console Wiki
  • Etherscan - En Ethereum Block Explorer og Analytics-platform
  • Ethereum netværksstatistisk skærm
  • https://github.com/WWWillems/medium-attachments/tree/master/01-private-ethereum-testnet

Tak til

Mennesker

  • Vitalik Buterin
  • Joseph Lubin

Ressourcer

  • Ethereum docs
  • https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Mac

Tak for at have læst!

Jeg ville elske at høre fra dig og vide, hvad du synes. Fortæl mig venligst, hvis du synes, at der mangler noget. Hvis du gerne vil holde kontakten, skal du svare på dette indlæg nedenfor, følge mig på Twitter eller tilmelde mig mit nyhedsbrev ved hjælp af nedenstående formular.