Professional Documents
Culture Documents
Table of Contents
Introduction 0
Creating a Private Chain/Testnet 1
Giant Ethereum Resource List 2
Proof-of-Stake Resources 2.1
DEVcon Resources 2.2
2
Ethereum Tutorials and Tips by Hudson
For fast help, find an Ethereum room on Gitter that applies to your problem or private
message me on Gitter.
Introduction 3
Ethereum Tutorials and Tips by Hudson
Tasha at Tech Lab has an excellent write up on the Ethereum genesis block and creating
a private test network. Please go there for more detailed information about custom genesis
blocks and what some of the lines in a custom genesis block mean.
Ade Duke also has a great private Ethereum chain guide that helped me write this article.
What is Geth?
Geth is the CLI Ethereum client that runs on Windows, Mac, and Linux platforms. Geth is
widely used to interact with Ethereum networks.
CustomGensis.json
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0x8000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {
}
}
Save a file called CustomGenesis.json (or whatever you want to call it). You will reference
this when starting your geth node using the flag:
--genesis CustomGenesis.json
Note: The above flag may need to be changed depending on where you saved the JSON
file.
--nodiscover
Use this to make sure that your node is not discoverable by people who do not manually add
you. Otherwise, there is a chance that your node may be inadvertently added to a stranger's
node if they have the same genesis file and network id.
--maxpeers 0
Use maxpeers 0 if you do not want anyone else connecting to your test chain. Alternatively,
you can adjust this number if you know exactly how many peers you want connecting to your
private chain.
--rpc
This will enable RPC interface on your node. This is generally enabled by default in Geth.
--rpcapi "db,eth,net,web3"
This dictates what APIs that are allowed to be accessed over RPC. By default, Geth enables
the web3 interface over RPC.
IMPORTANT: Please note that offering an API over the RPC/IPC interface will give
everyone access to the API who can access this interface (e.g. DApp's). Be careful
which API's you enable. By default geth enables all API's over the ipc interface and
only the db,eth,net and web3 API's over the RPC interface.
--rpcport "8080"
Change 8000 to any port that is open on your network. The default for geth is 8080 and
althzero is 8545.
--rpccorsdomain "*"
This dictates what URLs can connect to your node in order to perform RPC client tasks. Be
very careful with this and when possible, put a specific URL rather than the wildcard (*)
which allows any URL to connect to your RPC instance. Since this is a private chain that will
not hold real Ether, I usually put a wildcard so I can use sites such as Browser Solidity or
DApps like Notareth. When you build DApps outside of Mist or Alethzero, you will need to
connect your website to an Ethereum node.
--datadir "/home/HudsonChain1"
This is the data directory that your private chain data will be stored in. Choose a location that
is separate from the public Ethereum chain folder.
--port "30303"
This is the "network listening port", which you will use to connect with other peers manually.
--nat "any"
I use the NAT any setting, but this will be dependent on your network configuration.
--identity "HudsonMainNode" This will set up an identity for your node so it can be identified
more easily in a list of peers. Here is an example of how these identities show up on the
network.
After you have created your custom genesis block JSON file and created a directory for your
chain to go into, type the following command into your console that has access to geth:
geth --identity "MyNodeName" --genesis CustomGenesis.json --rpc --rpcport "8000" --
rpccorsdomain "*" --datadir "C:\chains\VPSChain" --port "30303" --nodiscover --ipcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --
autodag --networkid 1900 --nat "any" console
You will need to start your geth instance with your custom chain command every time you
want to access your custom chain. If you just type "geth" in your console, it will not
remember all of the flags you have set. Different operating systems have ways to make this
easier. Most allow you to make a shortcut file that will automatically open a console window
and run commands that you specify. On Windows systems, look up how to create a .bat or
.cmd file that runs the commands you require. On Linux/Unix/Mac systems, look up .sh files.
Logging verbosity: 0-6 (0=silent, 1=error, 2=warn, 3=info, 4=core, 5=debug, 6=debug
detail)
It can be compared to a log-level flag that you may find on other programs. If is possible to
have 2 console windows open with different levels log levels. I do this because if I have my
miner running on my first console window, it will sometimes be spitting out log details too fast
for me to type commands cleanly. Once you have your first geth instance open, open
another console/terminal and type the following:
geth attach
This will connect your 2nd console to the Geth instane on your first console. If you'd like to
attach a remote console to a Geth instance using either the IPC or RPC interface, see this
article in the Ethereum wiki.
1. Create a new Ethereum account after you create your private chain
2. Copy your new account address
3. Add the following command to your Custom_Genesis.json file:
"alloc":
{
"<your account address e.g. 0x1fb891f92eb557f4d688463d0d7c560552263b5a>":
{ "balance": "20000000000000000000" }
}
Save your genesis file and re-run your private chain command. Once geth is fully loaded,
close Geth.
Run the command geth account list in your console to see what account # your new
address was assigned.
Take note of which account # is the one that you pre-allocated Ether to.
Note: Replace 0 with your accounts number. This console command should return your
primary Ethereum address.
This should return you 20 Ether in your account. The reason we had to put such a large
number in the alloc section of your genesis file is because the balance field takes a number
in wei which is the smallest sub-unit of Ether.
[
"enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325
"enode://pubkey@ip:port"
]
You can also add static nodes at runtime via the Javascript console using admin.addPeer()
> admin.addPeer("enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e82
After making sure nohup is installed, simply add nohup to the beginning your geth
command, delete console , and add & to the end of the statement:
nohup geth --identity "MyNodeName" --genesis CustomGenesis.json --rpc --rpcport "8000" --
rpccorsdomain "*" --datadir "C:\chains\VPSChain" --port "30303" --nodiscover --ipcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --
autodag --networkid 1900 --nat "any" &
Your console output is placed in a nohup logfile in the directory that you ran nohup from. To
make sure your geth instance is running in the background, run the following command (or
an equivalent for your OS):
ps aux | less
Proof-of-Stake and DEVCon resources are on the nested under this page in the menu on
the left.
Official Links
Ethereum Frontier Guide GitBook
Solidity Documentation
Ethereum Repos
THSPH Repos
Ethereum Blog
Ethereum Forum
Ethereum Reddit
Ethereum StackExchange
DApps
State of DApps List
LottoPollo
Ether.Camp
EtherScan
EtherChain
BlockApps Strato
EtherScripter (out-of-date)
ethereumjs-tx Github
Coinlock GitHub
Other
Most of the diagrams Vitalik Buterin has ever created
Proof-of-Stake Resources
CASPER
Casper is a security-deposit based economic consensus protocol that is set to eventually
replace the proof-of-work incentive system currently in place for the Ethereum public
network. The developers working on CASPER include Vitalik Buterin, Greg Meredith, and
Vlad Zamfir.
My recommendation is to read these links in order to gain the best perspective on the
thought behind CASPER proof-of-stake previously vs today:
"Slasher Ghost, and Other Developments in Proof of Stake" - Vitalik Buterin (10/3/14)
"Proof of Stake: How I Learned to Love Weak Subjectivity" - Vitalik Buterin (11/25/14)
"Vitalik Buterin Speaks About the Ethereum Foundation, Proof-of-Stake and More" -
Coinjournal
"If Ethereum adopts Casper Proof of Stake, it is very likely that it will become more
decentralized." Reddit post by Vlad Zamfir
Proof-of-Stake Resources 15
Ethereum Tutorials and Tips by Hudson
Tendermint
Tendermint is a proof-of-stake consensus protocol developed by Jae Kwon and Ethan
Buchman. I have seen it implemented in Eris with an Ethereum VM backing.
Tendermint.com
Tendermint Whitepaper
Tendermint Wiki
Tendermint Go Implementation
Proof-of-Stake Resources 16
Ethereum Tutorials and Tips by Hudson
DEVcon Resources
Official Site - The schedule section has panel descriptions and slides
Videos
Links copied from this post by hughlang and this post by George Hallam.
Day 1 - Research (This stream was taken down by Sony Music Entertainment - we
apologize for the centralization and censorship. They will be posting edited versions of
the talks in the coming weeks.)
Day 4 - DApps
Individual Talks
DEVcon Resources 17
Ethereum Tutorials and Tips by Hudson
Click Here
Slides
Official Site - The schedule section has panel descriptions and slides
DEVcon Resources 18