genesis.json 文件
{
"config": {
"chainId": 1000, --- 区块链的ID,在geth命令中的 --networkid 参数需要与chainId的值一致
"homesteadBlock": 0, --- Homestead 硬分叉区块高度,不需要关注
"eip155Block": 0, --- EIP 155 硬分叉高度,不需要关注
"eip158Block": 0 --- EIP 158 硬分叉高度,不需要关注
},
"coinbase" : "0x0000000000000000000000000000000000000000", --- 矿工账号,第一个区块挖出后将给这个矿工账号发送奖励的以太币
"difficulty" : "0x400", --- 难度值,越大越难
"extraData" : "Some Informatica", --- 附加信息随便填
"gasLimit" : "0x2fefd8", --- gas的消耗总量限制,用来限制区块能包含的交易信息总和,因为是私有链,所以填最大
"nonce" : "0x0000000000000042", --- 一个 64 位随机数
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", --- 与nonce 配合用于挖矿,由上一个区块的一部分生成的 hash
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", --- 上一个区块的 hash 值
"timestamp" : "0x00",
"alloc": {} --- 预设账号以及账号的以太币数量,私有链挖矿比较容易可以不配置
}
keystore 文件
{
"crypto" : {
"cipher" : "aes-128-ctr", --- 对称AES算法的名称
"cipherparams" : { --- 上述 cipher 算法需要的参数
"iv" : "83dbcc02d8ccb40e466191a123791e0e"
},
"ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", ---以太坊私钥使用上述cipher算法进行加密
"kdf" : "scrypt", --- 密钥生成函数,用于让用户使用密码加密keystore文件
"kdfparams" : { --- 上述 kdf 算法需要的参数
"dklen" : 32,
"n" : 262144,
"r" : 1,
"p" : 8,
"salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
},
"mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097" --- 用于验证密码的代码
},
"id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
"version" : 3
}
命令行创建方式
bogon:geth zzs$ ./geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {0f7b73f3034d0d17a165e4cf50bd77051235b4e6}
bogon:geth zzs$ ./geth account list
Account #0: {0f7b73f3034d0d17a165e4cf50bd77051235b4e6} keystore:///Users/zzs/Library/Ethereum/keystore/UTC--2018-02-21T02-56-46.285140000Z--0f7b73f3034d0d17a165e4cf50bd77051235b4e6
bogon:geth zzs$
初始化创世文件
geth --datadir $HOME/privateNet/bootnode init genesis.json
: 初始化genesis,datadir 指定数据存放的目录
启动bootnode
bootnode --genkey=boot.key
: 生成boot.key,下次启动bootnode则直接使用,不必再次生成
bootnode --nodekey=boot.key
: 启动bootnode,输出显示enode
启动节点
geth --identity "richard" --rpc --rpcport "8545" --datadir book_sharing --port "30303" --bootnodes "enode://b4c360879ca11b222ac910136f3fbd3939a376b346aad1fdf1f825bd35864835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@10.222.49.22:30301" --networkid="1024" --rpccorsdomain="*" console 2>>geth.log
参数 | 说明 |
---|---|
identity | 自定义节点的名字,方便节点中互相辨认识别 |
rpc | 启用HTTP-RPC服务器 |
rpcport | HTTP-RPC服务器监听端口(默认值:8545) |
datadir | 数据库目录 |
port | 网络监听端口(默认值:30303) |
bootnodes | 逗号分隔的enode url,用于P2P发现引导 |
networkid | 网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1) |
rpccorsdomain | 允许跨域请求的域名列表(逗号分隔),*允许所有主机连接 |
加入已有私链
geth --identity "richard1" --rpc --rpcport "8545" --datadir book_sharing --port "30303" --bootnodes "enode://b4c360879ca11b222ac9104657456739a376b346aad1fdf1f828675678564835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@10.222.49.22:30301" --networkid="1024" --rpccorsdomain="*" console 2>>geth.log
admin.addPeer("enode://d23769667654746745672d9b694dcf3574b17568765895692ee7b9e488503f46f97b6c1cc6bf55c9309ceab4fa7bb05427e7a213bb3efa43beeac5dae580ae12@0.0.0.0:30303");
参考:
https://www.jianshu.com/p/1568a8097d7e
https://ethfans.org/posts/what-is-an-ethereum-keystore-file
https://weibo.com/ttarticle/p/show?id=2309404156730958348129
https://blog.csdn.net/wo541075754/article/details/79342624