关于合约的编译、部署等详细操作,可以参考这篇文章
该实验和上一个实验有相似之处,故在建立DeployMultiNodes
文件夹之后,将上个实验的所有文件直接复制过来:
cp LaunchMultiNodes/* DeployMultiNodes -r
在VS Code中打开DeplyMultiNodes
文件夹之后,启动两个终端,分别命名为N1
和N2
,分别更改工作目录到Node1
,Node2
文件夹中。
在N1
中,运行如下指令:
geth1 --datadir ./gethdata --networkid 91036 --port 30303 --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --rpcapi 'db,net,eth,web3,personal' --rpccorsdomain "*" --ws --wsaddr "localhost" --wsport "8546" --wsorigins "*" --wsapi 'personal,net,eth,web3,admin' --nodiscover --allow-insecure-unlock --dev.period 1 --syncmode "full" console
在N2
中,运行如下指令:
geth1 --datadir ./gethdata --networkid 91036 --port 30304 --rpc --rpcaddr 127.0.0.1 --rpcport 8547 --rpcapi 'db,net,eth,web3,personal' --rpccorsdomain "*" --ws --wsaddr "localhost" --wsport "8548" --wsorigins "*" --wsapi 'personal,net,eth,web3,admin' --nodiscover --allow-insecure-unlock --dev.period 1 --syncmode "full" console
待两个控制台均开始运行之后,在N1
中运行:
admin.nodeInfo.enode
// "enode://346f8a4e78a96806251997b5c01e99cedf94edab39713f3149bee3381adab7a80449b29d57d6bcc4bd23b6ec23d4d5cf214caf30c47a566d877b6458bdf73a80@127.0.0.1:30303?discport=0"
然后在N2
中尝试建立链接:
admin.addPeer("enode://346f8a4e78a96806251997b5c01e99cedf94edab39713f3149bee3381adab7a80449b29d57d6bcc4bd23b6ec23d4d5cf214caf30c47a566d877b6458bdf73a80@127.0.0.1:30303?discport=0")
验证连接是否建立。在N2
中输入:
net.peerCount // 1
看到1说明两个节点已经建立连接。
由于上一个实验中我们仅创建了4个账号,故我们还需要创建4个新的账号。在N1
中输入:
for (i = 4; i < 8; i++) { personal.newAccount("123456") }
输入以下指令,确定确实有8个账号已经被创建:
eth.accounts.length // 8
为新的4个账号解锁:
for (i = 0; i < 8; i++) { personal.unlockAccount(eth.accounts[i],"123456",0) }
按照原文的指示,将两份合约部署到区块链上。将给定的合约代码(一共有2份合约,StoreMap.sol
、StoreTraffic.sol
。后面两份没有名字的合约经过验证,发现它们和Storeraffic.sol
完全一致)粘贴到N1
的控制台中。由于代码过长,此处不再赘述。
!不明晰点!报错,提示需要unlock之类的。
解决方法:确认03中最后一步确实有正确执行。
部署合约完成之后,在N1
所在的终端中输入:
miner.start()
等待一段时间,就能获得合约地址。在控制台中输入如下指令,确认两份合约各自的地址。
storeMap.address //"0x5bdcb6a89c990b0c82ba78f38716ad46a17049fc"
traffic.address // "0x1249f7546f04ac60d83f15bdfc7030affe457612"