第02篇 Windows平台以太坊联盟链搭建步骤(2)

本文内容接上篇。

1、添加coinbase账户

上面的日志提示没有账户存在,那么现在我们就在每个节点上创建一个账户,具体在控制台操作命令如下:

> personal.listAccounts
[]
> personal.newAccount("123456")
"0x641f5881bb81b69b7a653836ad0a6bbf5f343ccc"

上面的命令先是查看了节点下的地址,结果为空,然后创建了一个密码为“123456”的账号。

同样的,在另外两个窗口我们执行同样的命令以创建coinbase账户。

将genesis.json中配置的alloc账号拷贝到第一个节点的keystore目录下。再次执行list命令查看添加账户之后的情况。同时可以执行以下命令查看coinbase账号:

> personal.listAccounts
["0x7610fd66c272332edd59a43460ad24eee1973bfe", "0x641f5881bb81b69b7a653836ad0a6bbf5f343ccc"]
> eth.coinbase
INFO [05-14|14:01:54] Etherbase automatically configured       address=0x7610fD66c272332EDD59A43460AD24eEe1973bfe
"0x7610fd66c272332edd59a43460ad24eee1973bfe"
>

 

2、账户余额查询

查询两个账号的余额:

> eth.getBalance("0x7610fd66c272332edd59a43460ad24eee1973bfe")
1000000000
> eth.getBalance("0x641f5881bb81b69b7a653836ad0a6bbf5f343ccc")
0
>

因为在genesis.json中配置的alloc账号时给了账号0x7610fd66c272332edd59a43460ad24eee1973bfe初始值1000000000;此处显示与预期相符,为最小单位的余额。

 

3、联盟链互通

下面我们需要把三个节点之间建立起链接。首先,我们执行以下命令查看以下节点的peers的情况。

> admin.peers
[]

发现节点并没有链接上任何其他节点,这也是我们的nodiscover参数发挥了效果。

下面就通过分享enode地址的方式来让三个节点建立链接。

> admin.nodeInfo
{
  enode: "enode://11ccf92aef003418bbbc278a1fb2d9162a61532bc43061c253ba68e6fd42509afd412a5ef55c065073a7caccaa5b109b2077caf38af0b724b68f9a4d372ce200@[::]:30303?discport=0",
  id: "11ccf92aef003418bbbc278a1fb2d9162a61532bc43061c253ba68e6fd42509afd412a5ef55c065073a7caccaa5b109b2077caf38af0b724b68f9a4d372ce200",
  ip: "::",
  listenAddr: "[::]:30303",
  name: "Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10",
  ports: {
    discovery: 0,
    listener: 30303
  },
  protocols: {
    eth: {
      config: {
        chainId: 202005,
        eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
        eip155Block: 0,
        eip158Block: 0,
        homesteadBlock: 0
      },
      difficulty: 131072,
      genesis: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
      head: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
      network: 202005
    }
  }
}
>

实际上,我们仅需要enode信息:

第一个节点:

> admin.nodeInfo.enode
"enode://11ccf92aef003418bbbc278a1fb2d9162a61532bc43061c253ba68e6fd42509afd412a5ef55c065073a7caccaa5b109b2077caf38af0b724b68f9a4d372ce200@[::]:30303?discport=0"
>

第二个节点:

> admin.nodeInfo.enode
"enode://c05358c5610651823147e9f918bdba87fa40c459d5fc85d36bb422a8e399876b615da12e68c24f5185c189e408995868928902f5cd440f7bbaba26c651a8d8fd@[::]:30305?discport=0"
>

第三个节点:

> admin.nodeInfo.enode
"enode://41afb720b64ca347c932844491773e945b007c21f5482226300c0561c1d58a79ed189681d8b7163ddc84e666939e4188623d04c140c12f73638cc5f5bcb8da22@[::]:30307?discport=0"
>

geth通过这些不同节点的enode信息来连接,在这些不同的节点它们能够分享交易和成功挖掘信息。

其实这个信息如果留心的话,在启动节点的打印日志中已经打印出每个节点的encode信息。

现在,我们要告知一个节点,另外一个节点的encode信息。首先复制节点2和节点3的日志中self等号后面的信息,在节点1的控制台执行以下命令:

> admin.nodeInfo.enode
"enode://11ccf92aef003418bbbc278a1fb2d9162a61532bc43061c253ba68e6fd42509afd412a5ef55c065073a7caccaa5b109b2077caf38af0b724b68f9a4d372ce200@[::]:30303?discport=0"
> admin.addPeer("enode://c05358c5610651823147e9f918bdba87fa40c459d5fc85d36bb422a8e399876b615da12e68c24f5185c189e408995868928902f5cd440f7bbaba26c651a8d8fd@[::]:30305?discport=0")
true
> admin.addPeer("enode://41afb720b64ca347c932844491773e945b007c21f5482226300c0561c1d58a79ed189681d8b7163ddc84e666939e4188623d04c140c12f73638cc5f5bcb8da22@[::]:30307?discport=0")
true
>

返回true,说明执行成功。再次验证一下:

> admin.peers
[{
    caps: ["eth/63"],
    id: "41afb720b64ca347c932844491773e945b007c21f5482226300c0561c1d58a79ed189681d8b7163ddc84e666939e4188623d04c140c12f73638cc5f5bcb8da22",
    name: "Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:50056",
      remoteAddress: "127.0.0.1:30307",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
        version: 63
      }
    }
}, {
    caps: ["eth/63"],
    id: "c05358c5610651823147e9f918bdba87fa40c459d5fc85d36bb422a8e399876b615da12e68c24f5185c189e408995868928902f5cd440f7bbaba26c651a8d8fd",
    name: "Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:50053",
      remoteAddress: "127.0.0.1:30305",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
        version: 63
      }
    }
}]
>

发现节点1已经有两个peer了,正是我们节点2和节点3的端口信息。

在节点2的控制台执行命令将节点3加入peers。

> admin.addPeer("enode://41afb720b64ca347c932844491773e945b007c21f5482226300c0561c1d58a79ed189681d8b7163ddc84e666939e4188623d04c140c12f73638cc5f5bcb8da22@[::]:30307?discport=0")
true
> admin.peers

[{
    caps: ["eth/63"],
    id: "11ccf92aef003418bbbc278a1fb2d9162a61532bc43061c253ba68e6fd42509afd412a5ef55c065073a7caccaa5b109b2077caf38af0b724b68f9a4d372ce200",
    name: "Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10",
    network: {
      inbound: true,
      localAddress: "127.0.0.1:30305",
      remoteAddress: "127.0.0.1:50053",
      static: false,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
        version: 63
      }
    }
}, {
    caps: ["eth/63"],
    id: "41afb720b64ca347c932844491773e945b007c21f5482226300c0561c1d58a79ed189681d8b7163ddc84e666939e4188623d04c140c12f73638cc5f5bcb8da22",
    name: "Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10",
    network: {
      inbound: false,
      localAddress: "127.0.0.1:50132",
      remoteAddress: "127.0.0.1:30307",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
        version: 63
      }
    }
}]
> 

此时发现节点3加入正常,但是显示不出节点1的信息,即使手动添加节点1到peers也不显示。

 

4、挖矿

在节点1执行miner.start()进行挖矿,执行miner.stop()停止挖矿。停止挖矿的时候可以忽略控制台输出,只要正确拼写命令回车即可。

节点1显示如下:

> miner.start()
INFO [05-14|15:23:05] Updated mining threads                   threads=0
INFO [05-14|15:23:05] Transaction pool price threshold updated price=18000000000
InNuFlOl
[> 05-14|15:23:05] Starting mining operation
INFO [05-14|15:23:05] Commit new mining work                   number=1 txs=0 uncles=0 elapsed=0s
INFO [05-14|15:23:06] Generating DAG in progress               epoch=0 percentage=0 elapsed=688.161ms
INFO [05-14|15:23:07] Generating DAG in progress               epoch=0 percentage=1 elapsed=1.370s
INFO [05-14|15:23:08] Generating DAG in progress               epoch=0 percentage=2 elapsed=2.063s
INFO [05-14|15:23:08] Generating DAG in progress               epoch=0 percentage=3 elapsed=2.744s
INFO [05-14|15:23:09] Generating DAG in progress               epoch=0 percentage=4 elapsed=3.411s
INFO [05-14|15:23:10] Generating DAG in progress               epoch=0 percentage=5 elapsed=4.083s
INFO [05-14|15:23:10] Generating DAG in progress               epoch=0 percentage=6 elapsed=4.763s

.........................................................................................................

INFO [05-14|15:24:43] Generating DAG in progress               epoch=0 percentage=98 elapsed=1m37.431s
INFO [05-14|15:24:45] Generating DAG in progress               epoch=0 percentage=99 elapsed=1m39.309s
INFO [05-14|15:24:45] Generated ethash verification cache      epoch=0 elapsed=1m39.318s

...................................epoch=0,这个percenage=100,也就是100%以后.,开始epoch=1................

INFO [05-14|15:24:48] Generating DAG in progress               epoch=1 percentage=0  elapsed=775.880ms
INFO [05-14|15:24:48] Generating DAG in progress               epoch=1 percentage=1  elapsed=1.609s
INFO [05-14|15:24:49] Generating DAG in progress               epoch=1 percentage=2  elapsed=2.444s
INFO [05-14|15:24:50] Generating DAG in progress               epoch=1 percentage=3  elapsed=3.285s
INFO [05-14|15:24:51] Generating DAG in progress               epoch=1 percentage=4  elapsed=4.118s
INFO [05-14|15:24:52] Generating DAG in progress               epoch=1 percentage=5  elapsed=4.956s
INFO [05-14|15:24:53] Generating DAG in progress               epoch=1 percentage=6  elapsed=5.786s

.........................................................................................................

INFO [05-14|15:26:22] Generating DAG in progress               epoch=1 percentage=98 elapsed=1m34.791s
INFO [05-14|15:26:24] Generating DAG in progress               epoch=1 percentage=99 elapsed=1m37.060s
INFO [05-14|15:26:24] Generated ethash verification cache      epoch=1 elapsed=1m37.069s

..............................epoch=1,这个percenage=100,也就是100%以后,就不断的出现下面的提示...........

INFO [05-14|15:27:11] Regenerated local transaction journal    transactions=0 accounts=0
INFO [05-14|15:27:51] Updated mining threads                   threads=0
INFO [05-14|15:27:51] Transaction pool price threshold updated price=18000000000
INFO [05-14|15:27:51] Starting mining operation
INFO [05-14|15:27:51] Commit new mining work                   number=1 txs=0 uncles=0 elapsed=0s
INFO [05-14|15:27:51] Successfully sealed new block            number=1 hash=be6915…766156
INFO [05-14|15:27:52] 🔨 mined potential block                  number=1 hash=be6915…766156
INFO [05-14|15:27:52] Commit new mining work                   number=2 txs=0 uncles=0 elapsed=998.3µs
INFO [05-14|15:27:52] Successfully sealed new block            number=2 hash=b6e5bb…0e8f37
INFO [05-14|15:27:52] 🔨 mined potential block                  number=2 hash=b6e5bb…0e8f37
INFO [05-14|15:27:52] Commit new mining work                   number=3 txs=0 uncles=0 elapsed=0s
INFO [05-14|15:27:52] Successfully sealed new block            number=3 hash=7961d0…220104
INFO [05-14|15:27:52] 🔨 mined potential block                  number=3 hash=7961d0…220104
INFO [05-14|15:27:52] Mining too far in the future             wait=2s
INFO [05-14|15:27:54] Commit new mining work                   number=4 txs=0 uncles=0 elapsed=2.019s
INFO [05-14|15:27:54] Successfully sealed new block            number=4 hash=a86c71…3682b0
INFO [05-14|15:27:54] 🔨 mined potential block                  number=4 hash=a86c71…3682b0
INFO [05-14|15:27:54] Commit new mining work                   number=5 txs=0 uncles=0 elapsed=0s
INFO [05-14|15:27:55] Successfully sealed new block            number=5 hash=937ba8…cdedb5
INFO [05-14|15:27:55] 🔨 mined potential block                  number=5 hash=937ba8…cdedb5
INFO [05-14|15:27:55] Commit new mining work                   number=6 txs=0 uncles=0 elapsed=0s
INFO [05-14|15:27:55] Successfully sealed new block            number=6 hash=33f90f…12f814

当我们在节点1执行挖矿时,我们会发现节点2和节点3的控制台出现了这样的日志信息:

> INFO [05-14|15:27:35] Regenerated local transaction journal    transactions=0 accounts=0
INFO [05-14|15:27:52] Block synchronisation started
INFO [05-14|15:27:52] Imported new state entries               count=1 elapsed=0s processed=1 pending=0 retry=0 duplicate=0 unexpected=0
WARN [05-14|15:27:53] Discarded bad propagated block           number=1 hash=be6915…766156
INFO [05-14|15:27:53] Imported new block headers               count=2 elapsed=851.820ms number=2 hash=b6e5bb…0e8f37 ignored=0
INFO [05-14|15:27:53] Imported new chain segment               blocks=2 txs=0 mgas=0.000 elapsed=1.996ms   mgasps=0.000 number=2 hash=b6e5bb…0e8f37 cache=348.00B
INFO [05-14|15:27:53] Fast sync complete, auto disabling
INFO [05-14|15:27:54] Imported new chain segment               blocks=2 txs=0 mgas=0.000 elapsed=4.989ms   mgasps=0.000 number=4 hash=a86c71…3682b0 cache=645.00B ignored=2
INFO [05-14|15:27:55] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=4.985ms   mgasps=0.000 number=5 hash=937ba8…cdedb5 cache=794.00B
INFO [05-14|15:27:55] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=4.983ms   mgasps=0.000 number=6 hash=33f90f…12f814 cache=943.00B
INFO [05-14|15:27:55] Mining too far in the future             wait=2s
INFO [05-14|15:27:57] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=4.988ms   mgasps=0.000 number=7 hash=7da6ff…b5c72b cache=1.09kB
INFO [05-14|15:27:58] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=4.984ms   mgasps=0.000 number=8 hash=0d1a72…70d14e cache=1.24kB
INFO [05-14|15:27:58] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=4.985ms   mgasps=0.000 number=9 hash=90653c…4a5d97 cache=1.39kB
INFO [05-14|15:27:58] Mining too far in the future             wait=2s
INFO [05-14|15:28:01] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=4.987ms   mgasps=0.000 number=10 hash=45d197…a2d51d cache=1.54kB

也就是说,节点1挖矿,节点2和节点3在同步数据信息。

然后停止挖矿:

INFO [05-14|15:45:26] Commit new mining work                   number=229 txs=0 uncles=0 elapsed=0s
> miner.stop()
INFO [05-14|15:45:26] Successfully sealed new block            number=229 hash=4ec220…496dc6
INFO [05-14|15:45:26] 🔗 block reached canonical chain          number=224 hash=a5e5ac…139b17
INFO [05-14|15:45:26] 🔨 mined potential block                  number=229 hash=4ec220…496dc6
INFO [05-14|15:45:26] Mining too far in the future             wait=2s

INFO [05-14|15:45:28] Commit new mining work                   number=230 txs=0 uncles=0 elapsed=2.017s
true
> eth.getBalance(eth.accounts[0])
1.145000000001e+21
>

显示区块高度为229,节点1挖到的eth是1145个,确定每个区块奖励额度为5个eth;

从节点2和节点3控制台查询节点1的coinbase账号余额,显示为:

> eth.getBalance("0x7610fd66c272332edd59a43460ad24eee1973bfe")
1.145000000001e+21
>

很显然,节点2和节点3中也能查询到节点1中地址的余额。以上信息说明,三个节点的数据是完全同步的。

 

五、查询创世区块信息

使用以下命令查询区块0(创世区块)信息:

> eth.getBlock(0)
{
  difficulty: 131072,
  extraData: "0x68656c6c6f20776f726c642021",
  gasLimit: 3141592,
  gasUsed: 0,
  hash: "0xabff60e6b67d0a4a8007354cf9587075bc9a6e388958b668ccabca4ebee74751",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x0000000000000000000000000000000000000000",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x000000000000002a",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 520,
  stateRoot: "0x240573712c6b9ca6f6da66a952a7b38e41af636b4bd3856f793d938055dafd6d",
  timestamp: 0,
  totalDifficulty: 131072,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}
>

与配置信息一致。

 

六、交易转账

节点1有两个账号,现在从一个账号给另一个账号发一笔交易;

第一步,解锁发交易的账号:

> personal.unlockAccount(eth.accounts[0])
Unlock account 0x7610fd66c272332edd59a43460ad24eee1973bfe
Passphrase:
true
>

第二步,发交易:

> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: 100000000})
INFO [05-14|16:32:59] Submitted transaction                    fullhash=0x4267bf4efe268435f858d00bf17c8685065e34729e83cfc6e266675fb0e17014 recipient=0x641F5881bB81b69B7a653836AD0a6BbF5f343ccc
"0x4267bf4efe268435f858d00bf17c8685065e34729e83cfc6e266675fb0e17014"
>  eth.getBalance(eth.accounts[1])
0
>

查询发现交易没有成功,原因是没有挖矿。

第三步,启动挖矿,然后再查询:

> eth.getBalance(eth.accounts[1])
100000000
>

显示交易发送成功。

在console界面,打包区块信息为,

INFO [05-14|16:33:28] Imported new chain segment               blocks=1 txs=1 mgas=0.021 elapsed=4.987ms   mgasps=4.211 number=568 hash=655f3b…0aa7e1 cache=59.10kB

查询该区块:

> eth.getBlock(568)
{
  difficulty: 153764,
  extraData: "0xd883010803846765746886676f312e31308777696e646f7773",
  gasLimit: 4712388,
  gasUsed: 21000,
  hash: "0x655f3b5e14c6831e79ed5992ea239d6f175bad3dc9f80041d4203b88210aa7e1",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0xd04b665efc5b9f420b6328d9d6af6f2f19a862aa",
  mixHash: "0xcec0c0bf5dafabc0fe8b0ad8b69247be7520c8fed4578133c18d19762cb17a67",
  nonce: "0x0eb16181f4b111ab",
  number: 568,
  parentHash: "0xa9383cc855cc67abd3a06ea3ba99983ebc25b572f4bddc17f56131fa108777b2",
  receiptsRoot: "0xbf8952599c6434352fcb108a6bbc1bcf5c01f5835ebe0e35fd6fb8f0968f74b8",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 651,
  stateRoot: "0xa824bb5b99d79352534c47d67e4c69ff0eeb87ef6828b60670482e6cc6440a8a",
  timestamp: 1589445207,
  totalDifficulty: 81964159,
  transactions: ["0x4267bf4efe268435f858d00bf17c8685065e34729e83cfc6e266675fb0e17014"],
  transactionsRoot: "0x604c67e79a02c62caf452b2510df07d840221069118e6250ffdd68fdc8dd2a12",
  uncles: []
}
>

从得到的交易信息,查询该笔交易:

> eth.getTransaction("0x4267bf4efe268435f858d00bf17c8685065e34729e83cfc6e266675fb0e17014")
{
  blockHash: "0x655f3b5e14c6831e79ed5992ea239d6f175bad3dc9f80041d4203b88210aa7e1",
  blockNumber: 568,
  from: "0x7610fd66c272332edd59a43460ad24eee1973bfe",
  gas: 90000,
  gasPrice: 18000000000,
  hash: "0x4267bf4efe268435f858d00bf17c8685065e34729e83cfc6e266675fb0e17014",
  input: "0x",
  nonce: 0,
  r: "0xac758853fa9a11b6ace37fddb2a4c1208ee4a4dec1553f7324ed43cdc0129409",
  s: "0x1553dde774cd1ddbdeeb36830e39153886edcebfe9b3d9282939f1e7a1bfed6a",
  to: "0x641f5881bb81b69b7a653836ad0a6bbf5f343ccc",
  transactionIndex: 0,
  v: "0x62a4e",
  value: 100000000
}
>

也可以用attach登录界面:

geth attach ipc:\\.\pipe\geth.ipc

注意:如果一个节点重启,则需要重新添加peers。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wonderBlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值