Skip to content

Latest commit

 

History

History
90 lines (56 loc) · 3.1 KB

6 多节点树状区块链的部署.md

File metadata and controls

90 lines (56 loc) · 3.1 KB

00 准备工作

关于合约的编译、部署等详细操作,可以参考这篇文章

该实验和上一个实验有相似之处,故在建立DeployMultiNodes文件夹之后,将上个实验的所有文件直接复制过来:

cp LaunchMultiNodes/* DeployMultiNodes -r

在VS Code中打开DeplyMultiNodes文件夹之后,启动两个终端,分别命名为N1N2,分别更改工作目录到Node1Node2文件夹中。

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说明两个节点已经建立连接。

01 建立新的账户

由于上一个实验中我们仅创建了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) }

02 部署合约

按照原文的指示,将两份合约部署到区块链上。将给定的合约代码(一共有2份合约,StoreMap.solStoreTraffic.sol。后面两份没有名字的合约经过验证,发现它们和Storeraffic.sol完全一致)粘贴到N1的控制台中。由于代码过长,此处不再赘述。

!不明晰点!报错,提示需要unlock之类的。

解决方法:确认03中最后一步确实有正确执行。

03 开始挖矿

部署合约完成之后,在N1所在的终端中输入:

miner.start()

等待一段时间,就能获得合约地址。在控制台中输入如下指令,确认两份合约各自的地址。

storeMap.address  //"0x5bdcb6a89c990b0c82ba78f38716ad46a17049fc"
traffic.address  // "0x1249f7546f04ac60d83f15bdfc7030affe457612"