1.准备工作
所用环境:windows 7 64bits
安装geth:https://ethfans.org/wikis/Ethereum-Geth-Mirror
2.搭建私有链的步骤
2.1 启动私有链,创建帐户
cmd进入geth安装目录
geth –datadir chain1 –nodiscover console
进入geth控制台模式,其中chain1为帐户和区块数据目录,在chain1目录下,geth/chaindata目录中存放的是区块数据,keystore存放的是账户数据
随后进入一个交互式Javascript执行环境,这些对象主要包括:
- eth:包含一些跟操作区块链相关的方法
- net:包含以下查看p2p网络状态的方法
- admin:包含一些与管理节点相关的方法
- miner:包含启动&停止挖矿的一些方法
- personal:主要包含一些管理账户的方法
- txpool:包含一些查看交易内存池的方法
- web3:包含了以上对象,还包含一些单位换算的方法
下面创建两个帐户,其中1234为密码:
> personal.newAccount("1234")
"0x8f653457d24796d1324149ecc7d5dfe0671d6c1b"
> personal.newAccount("1234")
"0x85366308dab822e97d896552f330e73ef6f20b14"
eth.getBalance(参数) 命令可以用于获取帐户余额,上述两个帐户目前余额都是0.
eth.accounts命令查看现有帐户,当前是空。
> eth.accounts
["0x8f653457d24796d1324149ecc7d5dfe0671d6c1b", "0x85366308dab822e97d896552f330e73ef6f20b14"]
> eth.getBalance(eth.accounts[0])
999000000000000000000
2.2 创建创世块
在geth目录下新建gensis.json文件,文件内容如下:
{
"alloc": {
"0x8f653457d24796d1324149ecc7d5dfe0671d6c1b": {
"balance": "999000000000000000000"
}
},
"config":{
"chainId":10,
"homesteadBlock":0,
"eip155Block":0,
"eip158Block":0
},
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x2000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit":"0xffffffff"
}
注意:你需要修改上述alloc中的帐户地址,要用你自己机器上第一步骤中实际创建的帐户地址。
balance值有很多0,其实只有999个以太币。
各个参数的含义如下:
- mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.
- nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
- difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
- alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
- coinbase: 矿工的账号,随便填
- timestamp: 设置创世块的时间戳
- parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
- extraData: 附加信息,随便填,可以填你的个性信息
- gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
用如下命令创建创世块:
geth --datadir chain1 init genesis.json
若出现错误提示如下:
Fatal: Failed to write genesis block: database already contains an incompatible genesis block
原因是前面启动私有链时候已经创建了默认的创世块。
需要先删除原来创世块,如下:
geth removedb --datadir chain1
然后再次执行如下命令,即可创建创世块成功。
geth --datadir chain1 init genesis.json
如下命令再次进入geth控制台
geth --datadir chain1 --nodiscover console
用eth.getBalance可以查看到帐户0现在的余额是999以太币。
> eth.accounts
["0xc9228294cc6bc3e3fcdba0f5d393d68f920c7789", "0x5f0880e6c3507f609548732151a99f6ddc71cb95"]
> eth.getBalance(eth.accounts[0])
999000000000000000000
> web3.fromWei(eth.getBalance(eth.accounts[0]))
999
注:Wei是以太币的最小单位,web3.fromWei函数可以把Wei单位转换成以太币单位。
2.3 转账交易
从帐户0转10个以太币到帐户1
付款帐户在转账前,需要用personal.unlockAccount命令进行解锁。
> eth.accounts
["0x8f653457d24796d1324149ecc7d5dfe0671d6c1b", "0x85366308dab822e97d896552f330e73ef6f20b14"]
> eth.getBalance(eth.accounts[0])
999000000000000000000
> web3.fromWei(eth.getBalance(eth.accounts[0]))
999
> a0=eth.accounts[0]
"0x8f653457d24796d1324149ecc7d5dfe0671d6c1b"
> a1=eth.accounts[1]
"0x85366308dab822e97d896552f330e73ef6f20b14"
> personal.unlockAccount(a0,"1234")
true
> eth.sendTransaction({from:a0, to:a1, value:web3.toWei(10,"ether")})
INFO [03-19|20:56:58] Submitted transaction fullhash=0x33e4427b79e1b43e0ecfecaff2a33aa1984d51d090c2b8
c88d6a742f3982c9c3 recipient=0x85366308dAB822e97D896552F330E73Ef6f20B14
"0x33e4427b79e1b43e0ecfecaff2a33aa1984d51d090c2b8c88d6a742f3982c9c3"
> eth.getBalance(a0)
999000000000000000000
> eth.getBalance(a1)
0
此时转账交易并未生效,因为这笔交易没有经过区块的确认,需要先打包为区块,然后形成链才能生效
2.4 挖矿
重新启动一个cmd新控制台来挖矿,用下面的命令来attach到已启动的私有链上
geth attach \\.\pipe\geth.ipc
miner.start()命令启动挖矿,在第一个cmd窗口会看到挖矿成功的信息。
> INFO [03-19|20:57:41] Updated mining threads threads=0
INFO [03-19|20:57:41] Transaction pool price threshold updated price=18000000000
INFO [03-19|20:57:41] Starting mining operation
INFO [03-19|20:57:41] Commit new mining work number=1 txs=1 uncles=0 elapsed=0s
INFO [03-19|20:57:46] Generating DAG in progress epoch=0 percentage=0 elapsed=3.670s
INFO [03-19|20:57:49] Generating DAG in progress epoch=0 percentage=1 elapsed=7.111s
INFO [03-19|20:57:53] Generating DAG in progress epoch=0 percentage=2 elapsed=10.561s
INFO [03-19|20:57:56] Generating DAG in progress epoch=0 percentage=3 elapsed=14.222s
INFO [03-19|20:58:00] Generating DAG in progress epoch=0 percentage=4 elapsed=17.669s
INFO [03-19|20:58:03] Generating DAG in progress epoch=0 percentage=5 elapsed=21.203s
INFO [03-19|20:58:07] Generating DAG in progress epoch=0 percentage=6 elapsed=24.680s
INFO [03-19|20:58:11] Generating DAG in progress epoch=0 percentage=7 elapsed=28.316s
INFO [03-19|20:58:14] Generating DAG in progress epoch=0 percentage=8 elapsed=31.856s
INFO [03-19|20:58:18] Generating DAG in progress epoch=0 percentage=9 elapsed=35.554s
INFO [03-19|20:58:22] Generating DAG in progress epoch=0 percentage=10 elapsed=39.561s
INFO [03-19|20:58:26] Generating DAG in progress epoch=0 percentage=11 elapsed=43.722s
INFO [03-19|20:58:29] Generating DAG in progress epoch=0 percentage=12 elapsed=47.273s
INFO [03-19|20:58:33] Generating DAG in progress epoch=0 percentage=13 elapsed=50.713s
INFO [03-19|20:58:36] Generating DAG in progress epoch=0 percentage=14 elapsed=54.117s
INFO [03-19|20:58:40] Generating DAG in progress epoch=0 percentage=15 elapsed=57.516s
INFO [03-19|20:58:43] Generating DAG in progress epoch=0 percentage=16 elapsed=1m0.981s
INFO [03-19|20:58:47] Generating DAG in progress epoch=0 percentage=17 elapsed=1m4.380s
INFO [03-19|20:58:50] Generating DAG in progress epoch=0 percentage=18 elapsed=1m7.972s
INFO [03-19|20:58:54] Generating DAG in progress epoch=0 percentage=19 elapsed=1m11.486s
INFO [03-19|20:58:57] Generating DAG in progress epoch=0 percentage=20 elapsed=1m15.075s
INFO [03-19|20:59:01] Generating DAG in progress epoch=0 percentage=21 elapsed=1m18.574s
INFO [03-19|20:59:04] Generating DAG in progress epoch=0 percentage=22 elapsed=1m22.148s
INFO [03-19|20:59:08] Generating DAG in progress epoch=0 percentage=23 elapsed=1m25.700s
INFO [03-19|20:59:11] Generating DAG in progress epoch=0 percentage=24 elapsed=1m29.167s
INFO [03-19|20:59:15] Generating DAG in progress epoch=0 percentage=25 elapsed=1m32.871s
INFO [03-19|20:59:18] Generating DAG in progress epoch=0 percentage=26 elapsed=1m36.281s
INFO [03-19|20:59:22] Generating DAG in progress epoch=0 percentage=27 elapsed=1m39.679s
INFO [03-19|20:59:25] Generating DAG in progress epoch=0 percentage=28 elapsed=1m43.101s
INFO [03-19|20:59:29] Generating DAG in progress epoch=0 percentage=29 elapsed=1m46.461s
INFO [03-19|20:59:32] Generating DAG in progress epoch=0 percentage=30 elapsed=1m49.834s
INFO [03-19|20:59:35] Generating DAG in progress epoch=0 percentage=31 elapsed=1m53.248s
INFO [03-19|20:59:39] Generating DAG in progress epoch=0 percentage=32 elapsed=1m57.132s
INFO [03-19|20:59:43] Generating DAG in progress epoch=0 percentage=33 elapsed=2m0.561s
INFO [03-19|20:59:46] Generating DAG in progress epoch=0 percentage=34 elapsed=2m4.276s
INFO [03-19|20:59:50] Generating DAG in progress epoch=0 percentage=35 elapsed=2m8.024s
INFO [03-19|20:59:54] Generating DAG in progress epoch=0 percentage=36 elapsed=2m11.638s
INFO [03-19|20:59:58] Generating DAG in progress epoch=0 percentage=37 elapsed=2m15.361s
INFO [03-19|21:00:01] Generating DAG in progress epoch=0 percentage=38 elapsed=2m18.914s
INFO [03-19|21:00:05] Generating DAG in progress epoch=0 percentage=39 elapsed=2m22.328s
INFO [03-19|21:00:08] Generating DAG in progress epoch=0 percentage=40 elapsed=2m25.672s
INFO [03-19|21:00:11] Generating DAG in progress epoch=0 percentage=41 elapsed=2m29.057s
INFO [03-19|21:00:15] Generating DAG in progress epoch=0 percentage=42 elapsed=2m32.500s
INFO [03-19|21:00:18] Generating DAG in progress epoch=0 percentage=43 elapsed=2m36.077s
INFO [03-19|21:00:22] Generating DAG in progress epoch=0 percentage=44 elapsed=2m39.457s
INFO [03-19|21:00:25] Generating DAG in progress epoch=0 percentage=45 elapsed=2m43.231s
INFO [03-19|21:00:29] Generating DAG in progress epoch=0 percentage=46 elapsed=2m46.880s
INFO [03-19|21:00:32] Generating DAG in progress epoch=0 percentage=47 elapsed=2m50.262s
INFO [03-19|21:00:36] Generating DAG in progress epoch=0 percentage=48 elapsed=2m53.633s
INFO [03-19|21:00:39] Generating DAG in progress epoch=0 percentage=49 elapsed=2m56.956s
INFO [03-19|21:00:43] Generating DAG in progress epoch=0 percentage=50 elapsed=3m0.311s
INFO [03-19|21:00:46] Generating DAG in progress epoch=0 percentage=51 elapsed=3m3.655s
INFO [03-19|21:00:49] Generating DAG in progress epoch=0 percentage=52 elapsed=3m7.224s
INFO [03-19|21:00:53] Generating DAG in progress epoch=0 percentage=53 elapsed=3m10.674s
INFO [03-19|21:00:56] Generating DAG in progress epoch=0 percentage=54 elapsed=3m14.111s
INFO [03-19|21:01:00] Generating DAG in progress epoch=0 percentage=55 elapsed=3m17.773s
INFO [03-19|21:01:04] Generating DAG in progress epoch=0 percentage=56 elapsed=3m21.498s
INFO [03-19|21:01:07] Generating DAG in progress epoch=0 percentage=57 elapsed=3m25.233s
INFO [03-19|21:01:11] Generating DAG in progress epoch=0 percentage=58 elapsed=3m28.753s
INFO [03-19|21:01:15] Generating DAG in progress epoch=0 percentage=59 elapsed=3m32.452s
INFO [03-19|21:01:18] Generating DAG in progress epoch=0 percentage=60 elapsed=3m35.963s
INFO [03-19|21:01:22] Generating DAG in progress epoch=0 percentage=61 elapsed=3m39.525s
INFO [03-19|21:01:26] Generating DAG in progress epoch=0 percentage=62 elapsed=3m43.419s
INFO [03-19|21:01:29] Generating DAG in progress epoch=0 percentage=63 elapsed=3m47.084s
INFO [03-19|21:01:33] Generating DAG in progress epoch=0 percentage=64 elapsed=3m50.621s
INFO [03-19|21:01:36] Generating DAG in progress epoch=0 percentage=65 elapsed=3m54.261s
INFO [03-19|21:01:40] Generating DAG in progress epoch=0 percentage=66 elapsed=3m58.004s
INFO [03-19|21:01:44] Generating DAG in progress epoch=0 percentage=67 elapsed=4m2.181s
INFO [03-19|21:01:48] Generating DAG in progress epoch=0 percentage=68 elapsed=4m5.814s
INFO [03-19|21:01:52] Generating DAG in progress epoch=0 percentage=69 elapsed=4m9.570s
INFO [03-19|21:01:56] Generating DAG in progress epoch=0 percentage=70 elapsed=4m13.618s
INFO [03-19|21:01:59] Generating DAG in progress epoch=0 percentage=71 elapsed=4m17.241s
INFO [03-19|21:02:03] Generating DAG in progress epoch=0 percentage=72 elapsed=4m20.767s
INFO [03-19|21:02:06] Generating DAG in progress epoch=0 percentage=73 elapsed=4m24.200s
INFO [03-19|21:02:10] Generating DAG in progress epoch=0 percentage=74 elapsed=4m27.677s
INFO [03-19|21:02:13] Generating DAG in progress epoch=0 percentage=75 elapsed=4m31.238s
INFO [03-19|21:02:17] Generating DAG in progress epoch=0 percentage=76 elapsed=4m34.766s
INFO [03-19|21:02:20] Generating DAG in progress epoch=0 percentage=77 elapsed=4m38.154s
INFO [03-19|21:02:24] Generating DAG in progress epoch=0 percentage=78 elapsed=4m41.602s
INFO [03-19|21:02:27] Generating DAG in progress epoch=0 percentage=79 elapsed=4m45.045s
INFO [03-19|21:02:31] Generating DAG in progress epoch=0 percentage=80 elapsed=4m48.545s
INFO [03-19|21:02:34] Generating DAG in progress epoch=0 percentage=81 elapsed=4m52.027s
INFO [03-19|21:02:38] Generating DAG in progress epoch=0 percentage=82 elapsed=4m55.438s
INFO [03-19|21:02:41] Generating DAG in progress epoch=0 percentage=83 elapsed=4m59.112s
INFO [03-19|21:02:45] Generating DAG in progress epoch=0 percentage=84 elapsed=5m2.789s
INFO [03-19|21:02:48] Generating DAG in progress epoch=0 percentage=85 elapsed=5m6.294s
INFO [03-19|21:02:52] Generating DAG in progress epoch=0 percentage=86 elapsed=5m10.112s
INFO [03-19|21:02:56] Generating DAG in progress epoch=0 percentage=87 elapsed=5m13.727s
INFO [03-19|21:02:59] Generating DAG in progress epoch=0 percentage=88 elapsed=5m17.246s
INFO [03-19|21:03:03] Generating DAG in progress epoch=0 percentage=89 elapsed=5m21.279s
INFO [03-19|21:03:07] Generating DAG in progress epoch=0 percentage=90 elapsed=5m24.986s
INFO [03-19|21:03:11] Generating DAG in progress epoch=0 percentage=91 elapsed=5m28.720s
INFO [03-19|21:03:14] Generating DAG in progress epoch=0 percentage=92 elapsed=5m32.178s
INFO [03-19|21:03:18] Generating DAG in progress epoch=0 percentage=93 elapsed=5m35.590s
INFO [03-19|21:03:21] Generating DAG in progress epoch=0 percentage=94 elapsed=5m39.017s
INFO [03-19|21:03:25] Generating DAG in progress epoch=0 percentage=95 elapsed=5m42.592s
INFO [03-19|21:03:28] Generating DAG in progress epoch=0 percentage=96 elapsed=5m45.997s
INFO [03-19|21:03:32] Generating DAG in progress epoch=0 percentage=97 elapsed=5m49.503s
INFO [03-19|21:03:35] Generating DAG in progress epoch=0 percentage=98 elapsed=5m52.971s
INFO [03-19|21:03:39] Generating DAG in progress epoch=0 percentage=99 elapsed=5m56.501s
INFO [03-19|21:03:39] Generated ethash verification cache epoch=0 elapsed=5m56.506s
INFO [03-19|21:03:44] Successfully sealed new block number=1 hash=5d37e3…aaa433
INFO [03-19|21:03:44] 🔨 mined potential block number=1 hash=5d37e3…aaa433
INFO [03-19|21:03:44] Commit new mining work number=2 txs=0 uncles=0 elapsed=1.000ms
INFO [03-19|21:03:45] Successfully sealed new block number=2 hash=4d4da9…078c0b
INFO [03-19|21:03:45] 🔨 mined potential block number=2 hash=4d4da9…078c0b
INFO [03-19|21:03:45] Commit new mining work number=3 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:03:48] Successfully sealed new block number=3 hash=a39bae…efb2a7
INFO [03-19|21:03:48] 🔨 mined potential block number=3 hash=a39bae…efb2a7
INFO [03-19|21:03:48] Commit new mining work number=4 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:03:48] Generating DAG in progress epoch=1 percentage=0 elapsed=7.375s
INFO [03-19|21:03:53] Successfully sealed new block number=4 hash=2dcbfb…0027ea
INFO [03-19|21:03:53] 🔨 mined potential block number=4 hash=2dcbfb…0027ea
INFO [03-19|21:03:53] Commit new mining work number=5 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:03:56] Generating DAG in progress epoch=1 percentage=1 elapsed=14.670s
INFO [03-19|21:03:59] Successfully sealed new block number=5 hash=73695b…ff4045
INFO [03-19|21:03:59] 🔨 mined potential block number=5 hash=73695b…ff4045
INFO [03-19|21:03:59] Commit new mining work number=6 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:03] Generating DAG in progress epoch=1 percentage=2 elapsed=21.786s
INFO [03-19|21:04:06] Successfully sealed new block number=6 hash=8d31e5…3e8f3d
INFO [03-19|21:04:06] 🔗 block reached canonical chain number=1 hash=5d37e3…aaa433
INFO [03-19|21:04:06] 🔨 mined potential block number=6 hash=8d31e5…3e8f3d
INFO [03-19|21:04:06] Commit new mining work number=7 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:08] Successfully sealed new block number=7 hash=5f9d01…1caea2
INFO [03-19|21:04:08] 🔗 block reached canonical chain number=2 hash=4d4da9…078c0b
INFO [03-19|21:04:08] 🔨 mined potential block number=7 hash=5f9d01…1caea2
INFO [03-19|21:04:08] Commit new mining work number=8 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:08] Successfully sealed new block number=8 hash=5d3e25…559a6d
INFO [03-19|21:04:08] 🔗 block reached canonical chain number=3 hash=a39bae…efb2a7
INFO [03-19|21:04:08] 🔨 mined potential block number=8 hash=5d3e25…559a6d
INFO [03-19|21:04:08] Commit new mining work number=9 txs=0 uncles=0 elapsed=1.000ms
INFO [03-19|21:04:09] Successfully sealed new block number=9 hash=c740de…7c0f81
INFO [03-19|21:04:09] 🔗 block reached canonical chain number=4 hash=2dcbfb…0027ea
INFO [03-19|21:04:09] 🔨 mined potential block number=9 hash=c740de…7c0f81
INFO [03-19|21:04:09] Commit new mining work number=10 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:10] Generating DAG in progress epoch=1 percentage=3 elapsed=29.448s
INFO [03-19|21:04:12] Successfully sealed new block number=10 hash=ff779e…e815e1
INFO [03-19|21:04:12] 🔗 block reached canonical chain number=5 hash=73695b…ff4045
INFO [03-19|21:04:12] 🔨 mined potential block number=10 hash=ff779e…e815e1
INFO [03-19|21:04:12] Commit new mining work number=11 txs=0 uncles=0 elapsed=141.008ms
INFO [03-19|21:04:14] Successfully sealed new block number=11 hash=e5b839…98b383
INFO [03-19|21:04:14] 🔗 block reached canonical chain number=6 hash=8d31e5…3e8f3d
INFO [03-19|21:04:14] 🔨 mined potential block number=11 hash=e5b839…98b383
INFO [03-19|21:04:14] Commit new mining work number=12 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:14] Successfully sealed new block number=12 hash=1bd8c5…05fcd3
INFO [03-19|21:04:14] 🔗 block reached canonical chain number=7 hash=5f9d01…1caea2
INFO [03-19|21:04:14] 🔨 mined potential block number=12 hash=1bd8c5…05fcd3
INFO [03-19|21:04:14] Commit new mining work number=13 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:18] Generating DAG in progress epoch=1 percentage=4 elapsed=36.693s
INFO [03-19|21:04:18] Successfully sealed new block number=13 hash=f12295…0e6af8
INFO [03-19|21:04:18] 🔗 block reached canonical chain number=8 hash=5d3e25…559a6d
INFO [03-19|21:04:18] 🔨 mined potential block number=13 hash=f12295…0e6af8
INFO [03-19|21:04:18] Commit new mining work number=14 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:23] Successfully sealed new block number=14 hash=02a0d9…527fe0
INFO [03-19|21:04:23] 🔗 block reached canonical chain number=9 hash=c740de…7c0f81
INFO [03-19|21:04:23] 🔨 mined potential block number=14 hash=02a0d9…527fe0
INFO [03-19|21:04:23] Commit new mining work number=15 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:26] Generating DAG in progress epoch=1 percentage=5 elapsed=44.956s
INFO [03-19|21:04:26] Successfully sealed new block number=15 hash=fa30d6…fd420b
INFO [03-19|21:04:26] 🔗 block reached canonical chain number=10 hash=ff779e…e815e1
INFO [03-19|21:04:26] 🔨 mined potential block number=15 hash=fa30d6…fd420b
INFO [03-19|21:04:26] Commit new mining work number=16 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:26] Successfully sealed new block number=16 hash=a95cfa…7c0c22
INFO [03-19|21:04:26] 🔗 block reached canonical chain number=11 hash=e5b839…98b383
INFO [03-19|21:04:26] 🔨 mined potential block number=16 hash=a95cfa…7c0c22
INFO [03-19|21:04:26] Commit new mining work number=17 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:26] Successfully sealed new block number=17 hash=61bc84…708480
INFO [03-19|21:04:26] 🔗 block reached canonical chain number=12 hash=1bd8c5…05fcd3
INFO [03-19|21:04:26] 🔨 mined potential block number=17 hash=61bc84…708480
INFO [03-19|21:04:26] Mining too far in the future wait=2s
INFO [03-19|21:04:29] Commit new mining work number=18 txs=0 uncles=0 elapsed=2.099s
INFO [03-19|21:04:31] Successfully sealed new block number=18 hash=d0c4ac…a34def
INFO [03-19|21:04:31] 🔗 block reached canonical chain number=13 hash=f12295…0e6af8
INFO [03-19|21:04:31] 🔨 mined potential block number=18 hash=d0c4ac…a34def
INFO [03-19|21:04:31] Generating DAG in progress epoch=1 percentage=6 elapsed=50.523s
INFO [03-19|21:04:32] Commit new mining work number=19 txs=0 uncles=0 elapsed=0s
INFO [03-19|21:04:36] Generating DAG in progress epoch=1 percentage=7 elapsed=54.569s
INFO [03-19|21:04:39] Generating DAG in progress epoch=1 percentage=8 elapsed=58.061s
INFO [03-19|21:04:43] Generating DAG in progress epoch=1 percentage=9 elapsed=1m1.591s
INFO [03-19|21:04:47] Generating DAG in progress epoch=1 percentage=10 elapsed=1m5.617s
INFO [03-19|21:04:50] Generating DAG in progress epoch=1 percentage=11 elapsed=1m9.429s
INFO [03-19|21:04:54] Generating DAG in progress epoch=1 percentage=12 elapsed=1m13.523s
INFO [03-19|21:04:58] Generating DAG in progress epoch=1 percentage=13 elapsed=1m17.091s
INFO [03-19|21:05:01] Generating DAG in progress epoch=1 percentage=14 elapsed=1m20.518s
INFO [03-19|21:05:05] Generating DAG in progress epoch=1 percentage=15 elapsed=1m24.352s
INFO [03-19|21:05:09] Generating DAG in progress epoch=1 percentage=16 elapsed=1m28.043s
INFO [03-19|21:05:13] Generating DAG in progress epoch=1 percentage=17 elapsed=1m31.621s
INFO [03-19|21:05:16] Generating DAG in progress epoch=1 percentage=18 elapsed=1m35.314s
INFO [03-19|21:05:20] Generating DAG in progress epoch=1 percentage=19 elapsed=1m38.909s
INFO [03-19|21:05:23] Generating DAG in progress epoch=1 percentage=20 elapsed=1m42.363s
INFO [03-19|21:05:27] Generating DAG in progress epoch=1 percentage=21 elapsed=1m45.814s
INFO [03-19|21:05:30] Generating DAG in progress epoch=1 percentage=22 elapsed=1m49.243s
INFO [03-19|21:05:34] Generating DAG in progress epoch=1 percentage=23 elapsed=1m52.619s
INFO [03-19|21:05:37] Generating DAG in progress epoch=1 percentage=24 elapsed=1m56.088s
INFO [03-19|21:05:41] Generating DAG in progress epoch=1 percentage=25 elapsed=1m59.862s
INFO [03-19|21:05:44] Generating DAG in progress epoch=1 percentage=26 elapsed=2m3.367s
INFO [03-19|21:05:48] Generating DAG in progress epoch=1 percentage=27 elapsed=2m6.964s
INFO [03-19|21:05:51] Generating DAG in progress epoch=1 percentage=28 elapsed=2m10.400s
INFO [03-19|21:05:55] Generating DAG in progress epoch=1 percentage=29 elapsed=2m13.947s
INFO [03-19|21:05:58] Generating DAG in progress epoch=1 percentage=30 elapsed=2m17.511s
INFO [03-19|21:06:02] Generating DAG in progress epoch=1 percentage=31 elapsed=2m21.032s
INFO [03-19|21:06:06] Generating DAG in progress epoch=1 percentage=32 elapsed=2m24.593s
INFO [03-19|21:06:09] Generating DAG in progress epoch=1 percentage=33 elapsed=2m28.113s
INFO [03-19|21:06:13] Generating DAG in progress epoch=1 percentage=34 elapsed=2m31.686s
INFO [03-19|21:06:16] Generating DAG in progress epoch=1 percentage=35 elapsed=2m35.244s
INFO [03-19|21:06:20] Generating DAG in progress epoch=1 percentage=36 elapsed=2m38.774s
INFO [03-19|21:06:24] Generating DAG in progress epoch=1 percentage=37 elapsed=2m42.720s
INFO [03-19|21:06:28] Generating DAG in progress epoch=1 percentage=38 elapsed=2m46.584s
INFO [03-19|21:06:31] Generating DAG in progress epoch=1 percentage=39 elapsed=2m50.176s
INFO [03-19|21:06:35] Generating DAG in progress epoch=1 percentage=40 elapsed=2m53.729s
INFO [03-19|21:06:38] Generating DAG in progress epoch=1 percentage=41 elapsed=2m57.371s
INFO [03-19|21:06:42] Generating DAG in progress epoch=1 percentage=42 elapsed=3m0.972s
INFO [03-19|21:06:46] Generating DAG in progress epoch=1 percentage=43 elapsed=3m4.625s
INFO [03-19|21:06:49] Generating DAG in progress epoch=1 percentage=44 elapsed=3m8.263s
INFO [03-19|21:06:53] Generating DAG in progress epoch=1 percentage=45 elapsed=3m11.768s
INFO [03-19|21:06:56] Generating DAG in progress epoch=1 percentage=46 elapsed=3m15.419s
INFO [03-19|21:07:00] Generating DAG in progress epoch=1 percentage=47 elapsed=3m18.946s
INFO [03-19|21:07:04] Generating DAG in progress epoch=1 percentage=48 elapsed=3m22.744s
INFO [03-19|21:07:07] Generating DAG in progress epoch=1 percentage=49 elapsed=3m26.361s
INFO [03-19|21:07:11] Generating DAG in progress epoch=1 percentage=50 elapsed=3m29.902s
INFO [03-19|21:07:14] Generating DAG in progress epoch=1 percentage=51 elapsed=3m33.437s
INFO [03-19|21:07:18] Generating DAG in progress epoch=1 percentage=52 elapsed=3m37.135s
INFO [03-19|21:07:22] Generating DAG in progress epoch=1 percentage=53 elapsed=3m40.922s
INFO [03-19|21:07:25] Generating DAG in progress epoch=1 percentage=54 elapsed=3m44.410s
INFO [03-19|21:07:29] Generating DAG in progress epoch=1 percentage=55 elapsed=3m47.983s
INFO [03-19|21:07:33] Generating DAG in progress epoch=1 percentage=56 elapsed=3m51.589s
INFO [03-19|21:07:36] Generating DAG in progress epoch=1 percentage=57 elapsed=3m55.478s
INFO [03-19|21:07:40] Generating DAG in progress epoch=1 percentage=58 elapsed=3m59.399s
INFO [03-19|21:07:44] Generating DAG in progress epoch=1 percentage=59 elapsed=4m2.985s
INFO [03-19|21:07:47] Generating DAG in progress epoch=1 percentage=60 elapsed=4m6.508s
INFO [03-19|21:07:51] Generating DAG in progress epoch=1 percentage=61 elapsed=4m10.039s
INFO [03-19|21:07:55] Generating DAG in progress epoch=1 percentage=62 elapsed=4m13.608s
INFO [03-19|21:07:58] Generating DAG in progress epoch=1 percentage=63 elapsed=4m17.174s
INFO [03-19|21:08:02] Generating DAG in progress epoch=1 percentage=64 elapsed=4m20.902s
INFO [03-19|21:08:05] Generating DAG in progress epoch=1 percentage=65 elapsed=4m24.456s
INFO [03-19|21:08:09] Generating DAG in progress epoch=1 percentage=66 elapsed=4m27.996s
INFO [03-19|21:08:13] Generating DAG in progress epoch=1 percentage=67 elapsed=4m31.673s
INFO [03-19|21:08:16] Generating DAG in progress epoch=1 percentage=68 elapsed=4m35.354s
INFO [03-19|21:08:20] Generating DAG in progress epoch=1 percentage=69 elapsed=4m39.190s
INFO [03-19|21:08:24] Generating DAG in progress epoch=1 percentage=70 elapsed=4m43.105s
INFO [03-19|21:08:31] Generating DAG in progress epoch=1 percentage=71 elapsed=4m50.369s
INFO [03-19|21:08:35] Generating DAG in progress epoch=1 percentage=72 elapsed=4m53.948s
INFO [03-19|21:08:38] Generating DAG in progress epoch=1 percentage=73 elapsed=4m57.372s
INFO [03-19|21:08:42] Generating DAG in progress epoch=1 percentage=74 elapsed=5m0.876s
INFO [03-19|21:08:45] Generating DAG in progress epoch=1 percentage=75 elapsed=5m4.317s
INFO [03-19|21:08:49] Generating DAG in progress epoch=1 percentage=76 elapsed=5m7.719s
INFO [03-19|21:08:52] Generating DAG in progress epoch=1 percentage=77 elapsed=5m11.113s
INFO [03-19|21:08:56] Generating DAG in progress epoch=1 percentage=78 elapsed=5m14.559s
INFO [03-19|21:08:59] Generating DAG in progress epoch=1 percentage=79 elapsed=5m18.024s
INFO [03-19|21:09:02] Generating DAG in progress epoch=1 percentage=80 elapsed=5m21.481s
INFO [03-19|21:09:06] Generating DAG in progress epoch=1 percentage=81 elapsed=5m24.905s
INFO [03-19|21:09:09] Generating DAG in progress epoch=1 percentage=82 elapsed=5m28.377s
INFO [03-19|21:09:13] Generating DAG in progress epoch=1 percentage=83 elapsed=5m31.858s
INFO [03-19|21:09:16] Generating DAG in progress epoch=1 percentage=84 elapsed=5m35.476s
INFO [03-19|21:09:20] Generating DAG in progress epoch=1 percentage=85 elapsed=5m38.944s
INFO [03-19|21:09:24] Generating DAG in progress epoch=1 percentage=86 elapsed=5m42.605s
INFO [03-19|21:09:27] Generating DAG in progress epoch=1 percentage=87 elapsed=5m46.334s
INFO [03-19|21:09:31] Generating DAG in progress epoch=1 percentage=88 elapsed=5m49.908s
INFO [03-19|21:09:34] Generating DAG in progress epoch=1 percentage=89 elapsed=5m53.448s
INFO [03-19|21:09:38] Generating DAG in progress epoch=1 percentage=90 elapsed=5m57.032s
INFO [03-19|21:09:42] Generating DAG in progress epoch=1 percentage=91 elapsed=6m0.574s
INFO [03-19|21:09:45] Generating DAG in progress epoch=1 percentage=92 elapsed=6m4.095s
INFO [03-19|21:09:49] Generating DAG in progress epoch=1 percentage=93 elapsed=6m7.633s
INFO [03-19|21:09:53] Generating DAG in progress epoch=1 percentage=94 elapsed=6m11.551s
INFO [03-19|21:09:56] Generating DAG in progress epoch=1 percentage=95 elapsed=6m15.118s
INFO [03-19|21:10:00] Generating DAG in progress epoch=1 percentage=96 elapsed=6m18.557s
INFO [03-19|21:10:03] Generating DAG in progress epoch=1 percentage=97 elapsed=6m21.952s
INFO [03-19|21:10:06] Generating DAG in progress epoch=1 percentage=98 elapsed=6m25.326s
INFO [03-19|21:10:10] Generating DAG in progress epoch=1 percentage=99 elapsed=6m28.851s
INFO [03-19|21:10:10] Generated ethash verification cache epoch=1 elapsed=6m28.856s
> eth.getBalance(a0)
1.079e+21
> eth.getBalance(a1)
10000000000000000000
> web3.fromWei(eth.getBalance(a0))
1079
> web3.fromWei(eth.getBalance(a1))
10
> INFO [03-19|21:55:34] Regenerated local transaction journal transactions=0 accounts=0
PS C:\Program Files\Geth> geth attach \\.\pipe\geth.ipc
Welcome to the Geth JavaScript console!
instance: Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10
coinbase: 0x8f653457d24796d1324149ecc7d5dfe0671d6c1b
at block: 0 (Thu, 01 Jan 1970 08:00:00 CST)
datadir: C:\Program Files\Geth\chain1
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
> miner.start()
null
> miner.stop()
true
此时再用eth.getBalance查两个帐户的余额,发现帐户1收到了10个以太币,帐户0的余额反而增加了,因为挖矿奖励默认存入帐户0
3.部署智能合约
3.1 remix
remix remix-ide 是一个浏览器版的solidity开发 IDE,你可以使用在线版的也可以下载安装到本地。
Solidity:类似JavaScript,这是以太坊官方推荐语言,也是最流行的智能合约语言。具体用法参考Solidity文档地址
刚开始学,我在web端使用的。
3.2 编写合约
pragma solidity ^0.4.0;
//声明solidity的版本
contract Mod100{
//声明合约名称
event Print(uint);
function Mod(uint input) returns (uint) {
//定义函数
Print(input % 100);
return input % 100;
//输出结果
}
}
调用方法:
> mod100.Mod.call(122)
22
3.3 编译
在remix上编译智能合约,编译产生的格式选择WEB3DEPLOY。
web3是基于以太坊的Javascript API,可以使用HTTP或IPC连接本地或远程以太它节点进行交互。 web3的JavaScript库能够与以太坊区块链交互。 它可以检索用户帐户,发送交易,与智能合约交互等。
上面的取模合约的web3格式编译结果如下
var mod100Contract = web3.eth.contract([{"constant":false,"inputs":[{"name":"input","type":"uint256"}],"name":"Mod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"","type":"uint256"}],"name":"Print","type":"event"}]);
var mod100 = mod100Contract.new(
{
from: web3.eth.accounts[0],
data: '0x608060405234801561001057600080fd5b50610105806100206000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635669f823146044575b600080fd5b348015604f57600080fd5b50606c600480360381019080803590602001909291905050506082565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da60648381151560b057fe5b066040518082815260200191505060405180910390a160648281151560d157fe5b0690509190505600a165627a7a7230582018f07efe6ee8c38719e7ba7c974a26a23c1615ca565d08b5a7b30936483795c00029',
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
然后将其复制到geth命令行运行。
3.4 geth步骤
使用以下命令将要部署合约的账户解锁,如果合约部署不成功,多半是因为账户锁定了
personal.unlockAccount(eth.accounts[0])
成功的结果如下所示:
> mod100
{
abi: [{
constant: false,
inputs: [{...}],
name: "Mod",
outputs: [{...}],
payable: false,
stateMutability: "nonpayable",
type: "function"
}, {
anonymous: false,
inputs: [{...}],
name: "Print",
type: "event"
}],
address: undefined,
transactionHash: "0x448fc7eddd850c790cbfa6e02651bf8a69120bbcb2daccf7cfa5e7428961ee13"
}
然后需要通过挖矿来使合约生效,超过12个块,命令如下
miner.start(1);admin.sleepBlocks(13);miner.stop()
结果如下
> mod100.Mod.call(122)
22
> mod100.Mod.call(1737813678)
78
>