+ All Categories
Home > Internet > The Ethereum Geth Client

The Ethereum Geth Client

Date post: 15-Apr-2017
Category:
Upload: arnold-pham
View: 135 times
Download: 1 times
Share this document with a friend
33
Ethereum Developers Community The Ethereum Geth Client Arnold Pham Lunyr Inc. https://www.linkedin.com/in/ arnoldpham/ Unless otherwise stated, these slides are licensed under the Creative Commons Attribution-NonCommercial 3.0 License (https://creativecommons.org/licenses/by-nc/3.0/us/)
Transcript
Page 1: The Ethereum Geth Client

Ethereum Developers Community

The Ethereum Geth Client

Arnold PhamLunyr Inc.https://www.linkedin.com/in/arnoldpham/

Unless otherwise stated, these slides are licensed under the Creative Commons Attribution-NonCommercial 3.0 License (https://creativecommons.org/licenses/by-nc/3.0/us/)

Page 2: The Ethereum Geth Client

JSON

• JSON – a simple (data interchange or serialization) format that uses human readable text for transmitting data

{ "id": 1, "name": "A green door", "price": 12.50, "tags": ["home", "green"]}

Page 3: The Ethereum Geth Client

A little more detail

• If you have some object and you want to store it in a file or send it over a network or something of that nature, you have to convert it to a string first, because you can't send objects over a network or write objects to a file. You can only write strings. And the other end has to receive that string and reconstitute it into an object before it can work with it.

Page 4: The Ethereum Geth Client

Remote Procedure Call (RPC)

• Fancy word which generally means calling procedures with arguments on remote systems

• Remote Procedure Call (RPC) is a protocol that one program can use to request a service from a program located in another computer on a network without having to understand the network's details.

Page 5: The Ethereum Geth Client

JSON RPC

• A stateless, light-weight remote procedure call (RPC) protocol• http://www.jsonrpc.org/specification#conventions

• Defines data structures and rules around their processing

• Example rpc call with positional parameters:• Client → Request object: {"jsonrpc": "2.0", "method": "subtract", "params":

[42, 23], "id": 1} → Server• Server→ Response object: {"jsonrpc": "2.0", "result": 19, "id": 1} → Client

Page 6: The Ethereum Geth Client

• Library written to allow developers to focus on developing apps instead of plumbing to interact with Ethereum clients and ecosystem

• Web3.js (JavaScript)• Library implementing the JavaScript API for Dapps to conveniently interact with an

Ethereum node

Page 7: The Ethereum Geth Client

Default JSON-RPC endpoints

• Geth: http://localhost:8545

Page 8: The Ethereum Geth Client

Compiler

• Solc• A standalone solidity compiler• You only need this if you want to use your Dapp or console to compile solidity

code

Page 9: The Ethereum Geth Client

Test Networks

• Ropsten testnet (--testnet)• Local private testnet

Page 10: The Ethereum Geth Client

Setting Up a Test Network$ geth --testnet

Flags• --nodiscover (make sure your node is not discoverable by people who do not

manually add you. )• --maxpeers (the number of peers you want connecting to your private chain. Set

as 0)• --gasprice (0 Makes contracts affordable)• --port (The network listening port. 0 for random)• --datadir (the data directory that your private chain data will be stored in. Should

be different from the public Ethereum chain folder)• Don’t use the deprecated –genesis flag

Page 11: The Ethereum Geth Client

Setting Up a Test Network

• $geth attach• >personal.newAccount(‘password’)• miner.start()• miner.stop()

Page 12: The Ethereum Geth Client

Geth Console

• JavaScript console

• geth attach

• attempts to open the console on a running geth instance

• accepts an endpoint in case the geth node is runnign with a non default interprocess communication (ipc) endpoint or you would like to connect over the remote procedure call (rpc) interface$ geth attach ipc:/some/custom/path

$ geth attach http://191.168.1.1:8545

$ geth attach ws://191.168.1.1:8546

Page 13: The Ethereum Geth Client

Starting geth

• By default, doesn’t start the http and websocket service and not all functionality is provided over these interfaces due to security

• defaults can be overridden with geth --rpcapi and --wsapi arguments

Page 14: The Ethereum Geth Client

Managing Accounts with Geth

• It is not possible to access your account without a password• No forgot my password option

• If you lose your keyfile, and thus your private key, then you lose access to your account

Page 15: The Ethereum Geth Client

What you can do

• Create new accounts• List all existing accounts• Import an private key into a new account• Migrate to the newest key format• Change your password

Page 16: The Ethereum Geth Client

Create new accounts

• geth account new• For non-interactive mode supply the --password flag

• geth account --password <passwordfile> new•Create an account that uses an existing private key

•geth --datadir /someOtherDataDrive account import ./key.prv

• Create an account from geth console• personal.newAccount(“password”)

Page 17: The Ethereum Geth Client

List all existing accounts

• geth account list

• For geth console

• eth.accounts

Page 18: The Ethereum Geth Client

Show primary account address

• From geth console

• eth.coinbase

Page 19: The Ethereum Geth Client

Convert a number of Wei into a different unit

Use web3.fromWei(number, unit) converts a number of wei into a different unit

• unit must be a string

• unit can be a kwei/ada, mwei/babbage, gwei/channon, szabo, finney, ether, kether/grand/einstein, mether, gether, tether

Page 20: The Ethereum Geth Client

Checking account balance

• Check the balance (in Wei) of an address

• eth.getBalance(“address”)

• For primary account

• web3.fromWei(eth.getBalance(eth.coinbase), “ether”)

• For a specific address

• web3.fromWei(eth.getBalance(“address”), “ether”)

Page 21: The Ethereum Geth Client

Print all balances with a JavaScript function

Inside of geth console:

function checkAllBalances() {

var i =0;

eth.accounts.forEach( function(e){

console.log(" eth.accounts["+i+"]: " + e + " \tbalance: " + web3.fromWei(eth.getBalance(e), "ether") + " ether");

i++;

})

};

Then call checkAllBalances() inside geth console

Page 22: The Ethereum Geth Client

Spending your gas

• In order to spend your gas to transact you need to unlock the account

• personal.unlockAccount(eth.coinbase)

Page 23: The Ethereum Geth Client

Sending Ether

• eth.sendTransaction({from:sender, to:receiver, value:amount})

• you can use built-in JavaScript to set variables to values

• var sender = eth.accounts[0];

• var receiver = eth.accounts[1];

• var amount = web3.toWei(0.01, “ether”)

• the value is in Wei

• you must have your account password to complete the sendTransaction

Page 24: The Ethereum Geth Client

Mining

• analogous to mining gold or precious metals

• secures the network and verifies computation

Page 25: The Ethereum Geth Client

Proof of Work

• A block is only valid if it contains proof of work of a given difficulty

• the PoW algorithm is called Ethash

Page 26: The Ethereum Geth Client

Ethash

• a modified version of Dagger-Hashimoto which involves finding a nonce input to the algorithm so that the result is below a certain threshold depending on the difficulty

• PoW algorithms rely on the assumption that there’s no better strategy to find such a nonce than enumerating the possibilties

• Verification of a solution is trivial and cheap

Page 27: The Ethereum Geth Client

Difficulty

• the average time needed to find a nonce depends on the difficulty threshold

• the difficulty dynamically adjusts so that the network produces a block every 12 seconds

• the synchronization of system state makes it impossible to maintain a fork or rewrite history without controlling more than half of the network mining power

Page 28: The Ethereum Geth Client

Miners

• The expected revenue of a miner is directly proportional to the miner’s hashrate (the nonces tried per second normalized by the total hashrate of the network)

Page 29: The Ethereum Geth Client

Ethash DAG (Directed Acyclic Graph)

• The algorithm is memory hard, which makes it ASIC resistant

• Calculating the PoW requires choosing subsets of a fixed resource (the DAG) dependent on the block header and nonce

• several gigabytes of data

• Totally different every 30,000 blocks

• 100 hour window called an epoch

• takes a while to generate

• Since the DAG only depends on the block number, it can be pregenerated to avoid long wait times at each epoch transition

Page 30: The Ethereum Geth Client

Ethash DAG

• Geth implements automatic DAG generation by default including when you use “geth --mine”

• maintains two DAGs at a time for smooth epoch transitions

• Clients share a DAG resource, so if you are running multiple instances of any client, make sure automatic DAG generation is only enabled on one client

• to pregenerate a DAG for an arbitrary epoch use

• geth makedag <blocknumber> <outputdir>

Page 31: The Ethereum Geth Client

Extra Data in Block

• As the one who mined the block , you can add a short vanity tag

• Can only be 32 bytes long

• miner.setExtra(“Arnold was here”)

• Interpreted as unicode

Page 32: The Ethereum Geth Client

Start Mining

• from the command line

• use --mine option

• geth --mine

• from the console

• miner.start()

• miner.stop() to stop

• Check your hashrate

• miner.hashrate

Page 33: The Ethereum Geth Client

Mining information anomaly

• Often you’ll find a block that never makes it to the canonical chain

• Locally it may show that your mined block, and the mining reward was credited to your account, however, after a while the better chain is discovered and the network switches to a chain in which your block is not included and therefore no mining reward is credited

• A miner monitoring their coinbase balance will find that it fluctuates quite a bit for this reason


Recommended