Date post: | 15-Apr-2017 |
Category: |
Internet |
Upload: | arnold-pham |
View: | 135 times |
Download: | 1 times |
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/)
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++;
})
};
Then call checkAllBalances() inside geth console
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 pregenerated to avoid long wait times at each epoch transition
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