动手部署Cybermiles的全节点。超级详细,电商公链

本文详细介绍如何在云服务器上部署电商公链的测试网络节点,包括环境配置、二进制文件下载、初始化数据库、设置Docker节点及智能合约交互等步骤。

首先,我们需要一台机器,虚拟机也行,但是,你要把你的虚拟机暴露在公网上,而且你的保持他能稳定的运行,推荐云服务器。配置如下。

Physical Server:

CPU: 8 cores, 16 threads
Memory: 14 RAM
Port: 26656, 26657
Networking: 10 Gbps

linux的版本的话,必须是centos7和ubantu16.04

 

准备开始了:首先我们下载预构建的二进制文件

 rm -rf $HOME/release
mkdir -p $HOME/release
cd $HOME/release

# if your os is Ubuntu 16.04
wget https://github.com/CyberMiles/travis/releases/download/v0.1.2-beta/travis_v0.1.2-beta_ubuntu-16.04.zip
unzip travis_v0.1.2-beta_ubuntu-16.04.zip

# if your os is CentOs 7
wget https://github.com/CyberMiles/travis/releases/download/v0.1.2-beta/travis_v0.1.2-beta_centos-7.zip
unzip travis_v0.1.2-beta_centos-7.zip

 

初始化阶段环境配置

rm -rf $HOME/.travis
mkdir -p $HOME/.travis
cd $HOME/release

curl https://raw.githubusercontent.com/CyberMiles/testnet/master/travis/init-staging/vm-genesis.json > $HOME/.travis/vm-genesis.json
./travis node init --env staging --vm-genesis $HOME/.travis/vm-genesis.json

INFO [10-03|13:57:31.498] Successfully init travis database and create tables!
INFO [10-03|13:57:31.522] Allocated cache and file handles database=/root/.travis/vm/chaindata cache=16 handles=16
INFO [10-03|13:57:31.533] Writing custom genesis block
INFO [10-03|13:57:31.677] Persisted trie from memory database nodes=2980 size=465.04kB time=31.4273ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [10-03|13:57:31.678] successfully wrote genesis block and/or chain rule set hash=637fcf…db4ac8

curl https://raw.githubusercontent.com/CyberMiles/testnet/master/travis/init-staging/config/config.toml > $HOME/.travis/config/config.toml
curl https://raw.githubusercontent.com/CyberMiles/testnet/master/travis/init-staging/config/genesis.json > $HOME/.travis/config/genesis.json

cd $HOME/.travis
vim $HOME/.travis/config/config.toml
# moniker = "my_validator"

设置libeni

mkdir -p $HOME/.travis/eni
cp -r $HOME/release/lib/. $HOME/.travis/eni/lib

# set env variables for eni lib
export ENI_LIBRARY_PATH=$HOME/.travis/eni/lib
export LD_LIBRARY_PATH=$HOME/.travis/eni/lib

 

运行一个完整节

cd $HOME/release
./travis node start

# find pub key in config file
cat $HOME/.travis/config/priv_validator.json

{
"address": "D46FD46192B3CADBEA9186FD132AC75270F65D33",
"pub_key": {
"type": "tendermint/PubKeyEd25519",
"value": "MLP5Ziz6VdayhDc/O/OvGNM533H0OQ1hARDGSvnoS3I="
},
"last_height": "0",
"last_round": "0",
"last_step": 0,
"priv_key": {
"type": "tendermint/PrivKeyEd25519",
"value": "BjezqaMRm/aLQASwEF7dC3U1KPb7onyAo/jOxD+nwDwws/lmLPpV1rKENz87868Y0znfcfQ5DWEBEMZK+ehLcg=="
}
 

设置docker节点

 

Travis的Docker映像存储在Docker Hub上。TestNet环境使用“vTestnet”版本,可以自动从Travis:

 

docker pull cybermiles/travis:vTestnet

 

注意:配置和数据将存储在容器中的/travis目录中。目录也将作为卷公开。端口8545、26656和26657将被公开以便连接。

 

rm -rf $HOME/.travis
docker run --rm -v $HOME/.travis:/travis -t cybermiles/travis:vTestnet node init --env testnet --home /travis
curl https://raw.githubusercontent.com/CyberMiles/testnet/master/travis/init/config/config.toml > $HOME/.travis/config/config.toml
curl https://raw.githubusercontent.com/CyberMiles/testnet/master/travis/init/config/genesis.json > $HOME/.travis/config/genesis.json

 

启动节点并加入Travis TestNet

 

im ~/.travis/config/config.toml

# here you can change your name
moniker = "<your_custom_name>"  改为local 默认现在也是local

 

docker run --name travis -v $HOME/.travis:/travis -p 26657:26657 -p 8545:8545 -t cybermiles/travis:vTestnet node start --home /travis

 

现在您的节点正在与TestNet同步,输出将如下所示。等待它完全同步。

 

INFO [07-20|03:13:26.229] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=1.002ms   mgasps=0.000    number=3363 hash=4884c0…212e75 cache=2.22mB
I[07-20|03:13:26.241] Committed state                              module=state height=3363 txs=0 appHash=3E0C01B22217A46676897FCF2B91DB7398B34262
I[07-20|03:13:26.443] Executed block                               module=state height=3364 validTxs=0 invalidTxs=0
I[07-20|03:13:26.443] Updates to validators                        module=state updates="[{\"address\":\"\",\"pub_key\":\"VPsUJ1Eb73tYPFhNjo/8YIWY9oxbnXyW+BDQsTSci2s=\",\"power\":27065},{\"address\":\"\",\"pub_key\":\"8k17vhQf+IcrmxBiftyccq6AAHAwcVmEr8GCHdTUnv4=\",\"power\":27048},{\"address\":\"\",\"pub_key\":\"PoDmSVZ/qUOEuiM38CtZvm2XuNmExR0JkXMM9P9UhLU=\",\"power\":27048},{\"address\":\"\",\"pub_key\":\"2Tl5oI35/+tljgDKzypt44rD1vjVHaWJFTBdVLsmcL4=\",\"power\":27048}]"

 

这个过程看报错,因为自从主网升级后,我卡这个地方卡了很久,因为区块无法继续同步,快照的问题,需要下载最新的快照,重新启动节点。

要访问TestNet类型,请在单独的终端控制台中输入以下内容以获得您的IP地址,然后使用您的IP地址连接到TestNet。

 

docker inspect -f '{{ .NetworkSettings.IPAddress }}' travis
172.17.0.2
docker run --rm -it cybermiles/travis:vTestnet attach http://172.17.0.2:8545

 

现在,您应该看到web3-cmt JavaScript控制台,现在可以跳转到“测试事务”部分来发送测试事务。

> 前面有个小箭头,这样就已经进入到JS控制台了

测试事务
您可以测试两个帐户之间的事务。记得解锁你的两个账户。

 

> personal.unlockAccount("0x1234FROM","password")
true
...
> cmt.sendTransaction({from:"0x1234FROM", to:"0x1234DEST",value:1000})
...
> cmt.getBalance("0x1234DEST")

您还可以为测试令牌测试智能契约事务,如下所示。

 

> abi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
> tokenContract = web3.cmt.contract(abi)
> tokenInstance = tokenContract.at("0xb6b29ef90120bec597939e0eda6b8a9164f75deb")
> tokenInstance.transfer.sendTransaction("0x1234DEST", 1000, {from: "0x1234FROM"})

10秒后,您可以查看收款账户余额如下

> tokenInstance.balanceOf.call("0x1234DEST")

 

还有很多方法可以参考CMT官方的github和他们自己的文档。

以上就是现如今电商公链的节点部署,testnet ,mainnet 可以参考,stating已经关闭。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值