跟着浅浅学开发——开发网节点部署及合约开发踩坑

前言

前天与昨天的风都很温柔,浅浅也是。所以我打开电脑的时候,想起自己还有一台阿里云,本着资源不可浪费的宗旨,我决定从PlatON开发文档开始,学习智能合约的入门、开发、编译与部署、调用。

在这两天的过程中,踩了很多坑,也有自己不理解的地方,很感谢PlatON技术团队和其他技术大佬的耐心指导,我有时候还在想,我会不会太烦人了,啥都要问哈哈哈哈哈。

好啦,煽情的话不说了,让我们开始吧。

操作环境

我有两台机器,后来变成三台,这里一次性都说了叭。

The First Computer

小米笔记本电脑Pro 15.6"
处理器:Intel Core i7-8550U 1.8GHz~2.0GHz
机带RAM:16.0GB
机带SSD:256GB

The Second Computer

阿里云轻量型应用服务器
公网IP:42.121.160.143
操作系统:Ubuntu16.04
CPU情况:1核2G
系统盘:40GSSD

The Third Computer

阿里云共享型ECS
公网IP:120.26.160.143
操作系统:Ubuntu18.04
CPU情况:4核8G
系统盘:100GSSD
数据盘:200GSSD(外部挂载)

由于阿里云服务器在网页端的操作我觉得不够轻巧,因此我选择MobaXterm远程访问这两台云服务器,MobaXterm的操作可以看此链接——《 MobaXterm详细使用教程系列一》

……2000 years later

好的,现在我假设大家已经能够熟练使用MobaXterm,那我们开始吧。

入门过程

所有的入门过程完全沿着PlatON给出的《Solidity智能合约入门手册》即可。但有一些官方文档中没有提及的东西,也是浅浅这几天的踩坑过程,请移步下一节的FQA。

FQA

一、区块链相关配置修改为您真实连接的链配置

此处官方给出的内容是:

networks: {
    development: {
       host: "10.1.1.6",     // 区块链所在服务器主机
       port: 8806,            // 链端口号
       network_id: "*",       // Any network (default: none)
       from: "lat1wxadw8yzr6qxdw5yl3f2surp6ue6f03e07kcqc", //部署合约账号的钱包地址
       gas: 999999,
       gasPrice: 50000000004,
    },
}

但是这里的 host 内容应和网络对应,例如PlatON开发网络,可参考《PlatON设置开发环境——开发网络》;其次,部署合约账号的钱包地址也需要对应网络账号。开发网络就在ATON申请一个开发网络的地址,例如,浅浅社区的PlatON开发网络地址为:lat1ex4ue95ap7tjcrxqnfjp8j479nn0927vuug2l7,有了地址就有对应的私钥和满足各项操作的密码

具体修改如下:

networks: {
    development: {
       host: "35.247.155.162",     // 区块链所在服务器主机
       port: 6789,            // 链端口号
       network_id: "*",       // Any network (default: none)
       from: "lat1ex4ue95ap7tjcrxqnfjp8j479nn0927vuug2l7", //部署合约账号的钱包地址
       gas: 999999,
       gasPrice: 50000000004,
    },
}

这里有个踩坑点,不过目前的开发网络已经不会出现,就是当开发者进入platon-truffle控制台后

 platon-truffle console

导入私钥,会提示该方法不存在【xxx method is not exist】

这是由于九月份之前的开发网络没有打开rpc开关,因此当时的浅浅只能自己部署一个开放网络的普通节点,所以第三台阿里云服务器出现了。

部署普通节点的方法也很简单,根据《成为开发网络验证节点》这一官方教程便可完成,但在启动验证节点有一处坑。

当完成所有步骤后,启动命令如下:

cd ~/platon-node/ && nohup platon --identity platon-node --datadir ./data --port 16789 --rpcport 6789 --rpcapi "db,platon,net,web3,admin,personal" --rpc --nodekey ./data/nodekey --cbft.blskey ./data/blskey --verbosity 1 --rpcaddr 127.0.0.1 --bootnodes enode://c72a4d2cb8228ca6f9072daa66566bcafa17bec6a9e53765c85c389434488c393357c5c7c5d18cf9b26ceda46aca4da20755cd01bcc1478fff891a201042ba84@devnetnode1.platon.network:16789 --syncmode "fast" > ./data/platon.log 2>&1 &

同时开发者可以使用以下命令进入控制台

platon attach http://localhost:6789

这些操作均无问题,但我们回到之前的第二台云服务器,也就是智能合约部署的服务器,它的truffle-config.js文件,如果 host 中填写 120.26.160.143 ,是无法访问的,会出现拒绝访问,这里的本质原因,就在启动命令中,有一个参数 --rpcaddr 127.0.0.1 ,这里应当改为 --rpcaddr 0.0.0.0 那么就可以完美启动了。

二、如何停止platon后台进程

这一步是我踩到的比较奇怪的坑,因为我们启动验证节点之后,如果出现上述的 --rpcaddr 地址填写错误,那么就需要杀掉platon-node进程,但是使用 ps 指令是看不见的。

80aee62825af47c0d66c45b86567012

因此我们需要使用 pstree 指令

能够以树形结构,看出当前的进程树,接着使用 pgrep platon 指令找到它的进程ID

在kill即可。

2 Likes

嗯,就跟写实验报告一样,OMG,我在PlatON写作业……

非常厉害!! :+1: :+1: :+1:

开发者社区的建设就需要这样的角色,加油!

:rofl: :rofl: :rofl: :rofl: :rofl:从现在开始,论坛学习B站一键三连投币支持,:rofl:

1 Like