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/)
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"]
}
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.
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.
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
• 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
Default JSON-RPC endpoints
• Geth: http://localhost:8545
Compiler
• Solc
• A standalone solidity compiler
• You only need this if you want to use your Dapp or console to compile
solidity code
Test Networks
• Ropsten testnet (--testnet)
• Local private testnet
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
Setting Up a Test Network
• $geth attach
• >personal.newAccount(‘password’)
• miner.start()
• miner.stop()
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
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
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
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
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”)
List all existing accounts
• geth account list
• For geth console
• eth.accounts
Show primary account address
• From geth console
• eth.coinbase
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
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”)
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++;
})
};
Spending your gas
• In order to spend your gas to transact you need to unlock the
account
• personal.unlockAccount(eth.coinbase)
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
Mining
• analogous to mining gold or precious metals
• secures the network and verifies computation
Proof of Work
• A block is only valid if it contains proof of work of a given difficulty
• the PoW algorithm is called Ethash
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
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
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)
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
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>
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
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
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

The Ethereum Geth Client

  • 1.
    Ethereum Developers Community The EthereumGeth 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/)
  • 2.
    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"] }
  • 3.
    A little moredetail • 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.
  • 4.
    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.
  • 5.
    JSON RPC • Astateless, 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
  • 6.
    • Library writtento 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
  • 7.
    Default JSON-RPC endpoints •Geth: http://localhost:8545
  • 8.
    Compiler • Solc • Astandalone solidity compiler • You only need this if you want to use your Dapp or console to compile solidity code
  • 9.
    Test Networks • Ropstentestnet (--testnet) • Local private testnet
  • 10.
    Setting Up aTest 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
  • 11.
    Setting Up aTest Network • $geth attach • >personal.newAccount(‘password’) • miner.start() • miner.stop()
  • 12.
    Geth Console • JavaScriptconsole • 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
  • 13.
    Starting geth • Bydefault, 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
  • 14.
    Managing Accounts withGeth • 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
  • 15.
    What you cando • Create new accounts • List all existing accounts • Import an private key into a new account • Migrate to the newest key format • Change your password
  • 16.
    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”)
  • 17.
    List all existingaccounts • geth account list • For geth console • eth.accounts
  • 18.
    Show primary accountaddress • From geth console • eth.coinbase
  • 19.
    Convert a numberof 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
  • 20.
    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”)
  • 21.
    Print all balanceswith 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++; }) };
  • 22.
    Spending your gas •In order to spend your gas to transact you need to unlock the account • personal.unlockAccount(eth.coinbase)
  • 23.
    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
  • 24.
    Mining • analogous tomining gold or precious metals • secures the network and verifies computation
  • 25.
    Proof of Work •A block is only valid if it contains proof of work of a given difficulty • the PoW algorithm is called Ethash
  • 26.
    Ethash • a modifiedversion 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
  • 27.
    Difficulty • the averagetime 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
  • 28.
    Miners • The expectedrevenue of a miner is directly proportional to the miner’s hashrate (the nonces tried per second normalized by the total hashrate of the network)
  • 29.
    Ethash DAG (DirectedAcyclic 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
  • 30.
    Ethash DAG • Gethimplements 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>
  • 31.
    Extra Data inBlock • 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
  • 32.
    Start Mining • fromthe command line • use --mine option • geth --mine • from the console • miner.start() • miner.stop() to stop • Check your hashrate • miner.hashrate
  • 33.
    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