{
"config": {
"chainId": 168,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" :"0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" :"",
"gasLimit" :"0x2fefd8",
"nonce" :"0x0000000000000042",
"mixhash" :"0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" :"0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" :"0x00"
}
Geth –datadir /home/hlf/eth/data/00 initgenesis.json
hlf@ubuntu:~/eth$ geth --datadir/home/hlf/eth/data/00 init genesis.json
INFO [03-24|23:26:32] Maximum peercount ETH=25 LES=0total=25
INFO [03-24|23:26:32] Allocated cache andfile handles database=/home/hlf/eth/data/00/geth/chaindata cache=16 handles=16
INFO [03-24|23:26:34] Writing custom genesisblock
INFO [03-24|23:26:34] Persisted trie frommemory database nodes=0 size=0.00Btime=5.673µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [03-24|23:26:34] Successfully wrotegenesis state database=chaindata hash=5e1fc7…d790e0
INFO [03-24|23:26:34] Allocated cache andfile handles database=/home/hlf/eth/data/00/geth/lightchaindata cache=16 handles=16
INFO [03-24|23:26:34] Writing customgenesis block
INFO [03-24|23:26:34] Persisted trie frommemory database nodes=0 size=0.00Btime=5.716µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [03-24|23:26:34] Successfully wrotegenesis state database=lightchaindata hash=5e1fc7…d790e0
geth --identity “hlfnode” --rpc –datadir /home/hlf/eth/data/00 –port “30303” –rpcapi “db,eth,net,web3”–networkid 168 console dumpconfig > gethconfig.toml
使用dumpconfig命令根据输入参数创建了配置文件,gethconfig.toml。内容如下:
[Eth]
NetworkId = 168
SyncMode = "fast"
LightPeers = 100
DatabaseCache = 768
GasPrice = 18000000000
EnablePreimageRecording = false
[Eth.Ethash]
CacheDir = "ethash"
CachesInMem = 2
CachesOnDisk = 3
DatasetDir = "/home/hlf/.ethash"
DatasetsInMem = 1
DatasetsOnDisk = 2
PowMode = 0
[Eth.TxPool]
NoLocals = false
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1
PriceBump = 10
AccountSlots = 16
GlobalSlots = 4096
AccountQueue = 64
GlobalQueue = 1024
Lifetime = 10800000000000
[Eth.GPO]
Blocks = 20
Percentile = 60
[Shh]
MaxMessageSize = 1048576
MinimumAcceptedPOW = 2e-01
[Node]
UserIdent = "hlfnode"
DataDir ="/home/hlf/geth/data/00"
IPCPath = "geth.ipc"
HTTPHost = "127.0.0.1"
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["db","eth", "net", "web3"]
WSPort = 8546
WSModules = ["net","web3", "eth", "shh"]
[Node.P2P]
MaxPeers = 25
NoDiscovery = false
BootstrapNodes =["enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303","enode://3f1d12044546b76342d59d4a05532c14b85aa669704bfe1f864fe079415aa2c02d743e03218e57a33fb94523adb54032871a6c51b2cc5514cb7c7e35b3ed0a99@13.93.211.84:30303","enode://78de8a0916848093c73790ead81d1928bec737d565119932b98c6b100d944b7a95e94f847f689fc723399d2e31129d182f7ef3863f2b4c820abbf3ab2722344d@191.235.84.50:30303","enode://158f8aab45f6d19c6cbf4a089c2670541a8da11978a2f90dbf6a502a4a3bab80d288afdbeb7ec0ef6d92de563767f3b1ea9e8e334ca711e9f8e2df5a0385e8e6@13.75.154.138:30303","enode://1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082@52.74.57.123:30303","enode://979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9@5.1.83.226:30303"]
BootstrapNodesV5 =["enode://06051a5573c81934c9554ef2898eb13b33a34b94cf36b202b69fde139ca17a85051979867720d4bdae4323d4943ddf9aeeb6643633aa656e0be843659795007a@35.177.226.168:30303","enode://0cc5f5ffb5d9098c8b8c62325f3797f56509bff942704687b6530992ac706e2cb946b90a34f1f19548cd3c7baccbcaea354531e5983c7d1bc0dee16ce4b6440b@40.118.3.223:30304","enode://1c7a64d76c0334b0418c004af2f67c50e36a3be60b5e4790bdac0439d21603469a85fad36f2473c9a80eb043ae60936df905fa28f1ff614c3e5dc34f15dcd2dc@40.118.3.223:30306","enode://85c85d7143ae8bb96924f2b54f1b3e70d8c4d367af305325d30a61385a432f247d2c75c45c6b4a60335060d072d7f5b35dd1d4c45f76941f62a4f83b6e75daaf@40.118.3.223:30307"]
StaticNodes = []
TrustedNodes = []
ListenAddr = ":30303"
EnableMsgEvents = false
[Dashboard]
Host = "localhost"
Port = 8080
Refresh = 5000000000
geth --identity “hlfnode” --rpc –datadir /home/hlf/eth/data/00 –port “30303” –rpcapi “db,eth,net,web3”–networkid 168 console
或者
geth --config ./config/gethconfig.toml console
geth attach /home/hlf/eth/data/00/geth.ipc
personal.newAccount("11111111")
"0xc6003745e17f91afc01fa1d15ab136f93247e4ce"
miner.start()
miner.stop()
> eth.blockNumber
102
> eth.getBalance(personal.listAccounts[0])
510000000000000000000
> address=eth.accounts[0]
"0xc6003745e17f91afc01fa1d15ab136f93247e4ce"
>personal.unlockAccount(address,"11111111",10000)
sudo apt-get update
sudo apt-get installsoftware-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install Ethereum (可以不执行,如果执行则会安装geth)
sudo apt-get install solc
源代码安装
git clone --recursivehttps://github.com/ethereum/solidity.git
输入:
personal.newAccount(“12345678”)
输出:
"0x6044ed10194c63e3136b5f504a6d4e74f545d627"
12345678为密码,输出为地址
myAddress="0xc6003745e17f91afc01fa1d15ab136f93247e4ce" //--使用该账号密码是:11111111
eth.getBalance(myAddress)
testContract.sol
pragma solidity ^0.4.0;
contract testContract {
functionmultiply(uint a) returns(uint d){
d= a* 7;
}
}
solc --bin testContract.sol
======= testContract.sol:testContract=======
Binary:
6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820565a525585db1df64f2dc06fb89e6a79095be25d42b24d742a109c8329b36b0d0029
solc --abi testContract.sol
======= testContract.sol:testContract=======
Contract JSON ABI
[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
回到Geth的javascript环境命令行界面,用变量记录上述两个值。注意在code前加上0x前缀
code=”0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820565a525585db1df64f2dc06fb89e6a79095be25d42b24d742a109c8329b36b0d0029”
abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
发送部署合约
myContract=eth.contract(abi)
contract=myContract.new({from:myAddress,data:code,gas:1000000})
解锁账户
personal.unlockAccount(myAddress)
txpool.status看到本地交易池中有一个待确认的交易。也可以使用以下命令查看待确认的交易。
eth.getBlock(“pending”,true).transactions
contract.multiply.sendTransaction(10,{from:myAddress})
contract.multiply.call(10)
USAGE : geth [options] command [commandoptions] [arguments…]
Account |
Manage accounts |
Attach |
Start a interactive JavaScript environment(connect to node) |
Bug |
Open a window to report a bug on the geth repo |
Console |
Start an interactive JavaScript environment |
Copydb |
Create a local chain from a target chaindata folder |
Dump |
Dump a specific block from storage |
Dumpconfig |
Show configuration values |
Export |
Export blockchain into file |
Import |
Import a blockchain file |
Init |
Bootstrap and initialize a new genesis block |
Js |
Execute the specified Javascript files |
License |
Display license information |
Makecache |
Generate ethash verification cache (for testing) |
Makedag |
Generate ethash mining DAG (for testing) |
Monitor |
Monitor and visualize node metrics |
Removed |
Remove blockchain and state databases |
Version |
Prient version numbers |
Wallet |
Manage Ethereum presale wallets |
Help, h |
Shows a list of commands or help for one command |
|
|
--config value |
TOML configuration file |
--datadir value |
Data directory for the databases and keystore |
--keystore |
Directory for the keystore (default = inside the datadir) |
--nousb |
Disables monitoring for and managing USB hardware wallets |
--networkid value |
Network identifier |
--testnet |
|
|
|
挖矿同时可以用 geth attach 命令打开另一个终端查看账户余额
geth attach$HOME/privateNet/bootnode/geth.ipc
...
> eth.getBalance(eth.accounts[0])
Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。
熟悉Geth可以让我们有更好的效率,大家可收藏起来作为Geth命令用法手册。本文主要是对gethhelp的翻译,基于最新的geth1.7.3-stable版本。
如果你还不知道geth是什么,请先阅读入门篇:以太坊是什么。
以下开始正文。
geth[选项]命令
[命令选项][参数…]
1
.7.3-stable
account 管理账户
attach 启动交互式
JavaScript环境(连接到节点)
bug 上报bug
Issues
console 启动交互式
JavaScript环境
copydb 从文件夹创建本地链
dumpDump
(分析)一个特定的块存储
dumpconfig 显示配置值
export 导出区块链到文件
import 导入一个区块链文件
init 启动并初始化一个新的创世纪块
js 执行指定的
JavaScript文件(多个)
license 显示许可信息
makecache 生成ethash验证缓存(用于测试)
makedag 生成ethash 挖矿
DAG(用于测试)
monitor 监控和可视化节点指标
removedb 删除区块链和状态数据库
version 打印版本号
wallet 管理
Ethereum预售钱包
help,h 显示一个命令或帮助一个命令列表
--config value TOML 配置文件
--datadir “xxx” 数据库和keystore密钥的数据目录
--keystore keystore存放目录(默认在datadir内)
--nousb 禁用监控和管理USB硬件钱包
--networkid value 网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
--testnet Ropsten网络:预先配置的POW(proof-of-work)测试网络
--rinkeby Rinkeby网络: 预先配置的POA(proof-of-authority)测试网络
--syncmode "fast" 同步模式 ("fast", "full", or "light")
--ethstats value 上报ethstats service URL (nodename:secret@host:port)
--identity value 自定义节点名
--lightserv value 允许LES请求时间最大百分比(0 – 90)(默认值:0)
--lightpeers value 最大LES client peers数量(默认值:20)
--lightkdf 在KDF强度消费时降低key-derivation RAM&CPU使用
--dev 使用POA共识网络,默认预分配一个开发者账户并且会自动开启挖矿。
--dev.period value 开发者模式下挖矿周期 (0 = 仅在交易时) (默认: 0)
--ethash.cachedir ethash验证缓存目录(默认 = datadir目录内)
--ethash.cachesinmem value 在内存保存的最近的ethash缓存个数 (每个缓存16MB ) (默认: 2)
--ethash.cachesondisk value 在磁盘保存的最近的ethash缓存个数 (每个缓存16MB) (默认: 3)
--ethash.dagdir "" 存ethash DAGs目录 (默认 = 用户hom目录)
--ethash.dagsinmem value 在内存保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 1)
--ethash.dagsondisk value 在磁盘保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 2)
--txpool.nolocals 为本地提交交易禁用价格豁免
--txpool.journalvalue本地交易的磁盘日志:用于节点重启 (默认: "
transactions.rlp")
--txpool.rejournalvalue 重新生成本地交易日志的时间间隔 (默认: 1小时)
--txpool.pricelimitvalue加入交易池的最小的
gas价格限制(默认: 1)
--txpool.pricebumpvalue 价格波动百分比(相对之前已有交易) (默认: 10)
--txpool.accountslotsvalue 每个帐户保证可执行的最少交易槽数量 (默认: 16)
--txpool.globalslotsvalue 所有帐户可执行的最大交易槽数量 (默认: 4096)
--txpool.accountqueuevalue 每个帐户允许的最多非可执行交易槽数量 (默认: 64)
--txpool.globalqueuevalue 所有帐户非可执行交易最大槽数量 (默认: 1024)
--txpool.lifetimevalue 非可执行交易最大入队时间(默认: 3小时)
--cache value 分配给内部缓存的内存MB数量,缓存值
(最低16 mb /数据库强制要求)(默认:128)
--trie-cache-gens value 保持在内存中产生的trie node数量
(默认:120)
--unlock
value需解锁账户用逗号分隔
--password
value用于非交互式密码输入的密码文件
--rpc 启用HTTP-RPC服务器
--rpcaddr value HTTP-RPC服务器接口地址(默认值:“localhost”)
--rpcport value HTTP-RPC服务器监听端口(默认值:8545)
--rpcapi value 基于HTTP-RPC接口提供的API
--ws 启用WS-RPC服务器
--wsaddr value WS-RPC服务器监听接口地址(默认值:“localhost”)
--wsport value WS-RPC服务器监听端口(默认值:8546)
--wsapi value 基于WS-RPC的接口提供的API
--wsorigins value websockets请求允许的源
--ipcdisable 禁用IPC-RPC服务器
--ipcpath 包含在datadir里的IPC socket/pipe文件名(转义过的显式路径)
--rpccorsdomain value 允许跨域请求的域名列表(逗号分隔)(浏览器强制)
--jspath loadScript JavaScript加载脚本的根路径(默认值:“.”)
--exec value 执行JavaScript语句(只能结合console/attach使用)
--preload value 预加载到控制台的JavaScript文件列表(逗号分隔)
--bootnodes value 用于P2P发现引导的enode urls
(逗号分隔)(对于light servers用v4+v5代替)
--bootnodesv4 value 用于P2P v4发现引导的enode urls
(逗号分隔)(light server, 全节点)
--bootnodesv5 value 用于P2P v5发现引导的enode urls
(逗号分隔)(light server, 轻节点)
--port value 网卡监听端口
(默认值:30303)
--maxpeers value 最大的网络节点数量
(如果设置为0,网络将被禁用)(默认值:25)
--maxpendpeers value 最大尝试连接的数量
(如果设置为0,则将使用默认值)(默认值:0)
--nat value NAT端口映射机制
(any|none|upnp|pmp|extip:) (默认: “any”)
--nodiscover 禁用节点发现机制
(手动添加节点)
--v5disc 启用实验性的RLPx V5
(Topic发现)机制
--nodekey value P2P节点密钥文件
--nodekeyhex value 十六进制的P2P节点密钥
(用于测试)
--mine 打开挖矿
--minerthreads value 挖矿使用的CPU线程数量(默认值:8)
--etherbase value 挖矿奖励地址(默认=第一个创建的帐户)(默认值:“0”)
--targetgaslimit value 目标gas限制:设置最低gas限制(低于这个不会被挖?) (默认值:“4712388”)
--gasprice value 挖矿接受交易的最低gas价格
--extradata value 矿工设置的额外块数据(默认=client version)
--gpoblocks
value用于检查gas价格的最近块的个数 (默认:
10)
--gpopercentile
value建议gas价参考最近交易的gas价的百分位数,(默认:
50)
--vmdebug 记录VM及合约调试信息
--metrics 启用metrics收集和报告
--fakepow 禁用proof-of-work验证
--verbosity value 日志详细度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
--vmodule value 每个模块详细度:以= 的逗号分隔列表 (比如 eth/*=6,p2p=5)
--backtrace value 请求特定日志记录堆栈跟踪 (比如 “block.go:271”)
--debug 突出显示调用位置日志(文件名及行号)
--pprof 启用pprof HTTP服务器
--pprofaddr value pprof HTTP服务器监听接口(默认值:127.0.0.1)
--pprofport value pprof HTTP服务器监听端口(默认值:6060)
--memprofilerate value 按指定频率打开memory profiling (默认:524288)
--blockprofilerate value 按指定频率打开block profiling (默认值:0)
--cpuprofile value 将CPU profile写入指定文件
--trace value 将execution trace写入指定文件
--shh 启用Whisper
--shh.maxmessagesize value 可接受的最大的消息大小 (默认值: 1048576)
--shh.pow value 可接受的最小的POW (默认值: 0.2)
--fast 开启快速同步
--light 启用轻客户端模式
–
help, -h 显示帮助
Copyright
2013-2017The
go-ethereum Authors
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWin(5,’win’)})
mkdir ~/home/hlf/eth/data/01
geth --datadir /home/hlf/geth/data/01 init./genesis/genesis.json
admin.nodeInfo.enode
结果为:
"enode://5572b72e701fb9f8a9c40e451ae6939e6ae2e476a79efe7a294e5efc7cfa9ba5a52d896a4ba3e8f104c63c8c91ed9f69a02e55878548913ff07b5746a7e327fb@[::]:30303"
启动第二个节点:
geth --datadir ./data/01 --networkid168 --rpc --rpcport 8546 --port 30304--rpcapi "db,eth,net,web3" console
admin.addPeer("enode://5572b72e701fb9f8a9c40e451ae6939e6ae2e476a79efe7a294e5efc7cfa9ba5a52d896a4ba3e8f104c63c8c91ed9f69a02e55878548913ff07b5746a7e327fb@192.168.2.12:30303")
也可以使用:
geth --datadir ./data/01 --networkid168 --rpc --rpcport 8546 --port 30304--rpcapi "db,eth,net,web3" --bootnodes"enode://5572b72e701fb9f8a9c40e451ae6939e6ae2e476a79efe7a294e5efc7cfa9ba5a52d896a4ba3e8f104c63c8c91ed9f69a02e55878548913ff07b5746a7e327fb@192.168.2.12:30303"
使用admin.peers查看对端
使用net.pperCount查看对端个数