智能合约部署

1、编译环境准备

1) 下载nodejs:

# curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
  1. 安装nodejs
# yum install -y git nodejs
  1. nodejs仓库更改到淘宝node仓库 
# npm config set registry https://registry.npm.taobao.org
  1. 更新nodejs1

 

# npm install -g n
  1. 更新nodejs到稳定版本或12.18.3,目前是更新到12.18.3
# n 12.18.3 或
# n stable
  1. 安装智能合约编译环境
# npm install -g truffle

出现报错如下

解决办法:

npm install -g --unsafe-perm=true --allow-root truffle

2、代码拉取

svn或git上拉取代码将代码迁移到/data/workspace/YYXCoin/目录下

# cd /data/workspace/
# cd YYXACoin/

3、解压智能合约代码

1) 解压代码

# tar -xf /home/centos/YYXcoin.tar.gz
# ls
flowrevenue  nodepledge  teamlock
  1. 修改配置文件
# vim teamlock/truffle-config.js

 

注:四个智能合约的配置文件一样,最终是gas和gasprice自定义

4、分别编译三个智能合约源码

注: 整个部署过程选择在其中一台代理节点主机上操作,在对应的代理节点上解锁初始化专管账号

  1. 编译流量挖矿智能合约代码
# cd flowrevenue/

# truffle compile



Compiling your contracts...

===========================

> Compiling ./contracts/Migrations.sol

> Compiling ./contracts/TrafficProfitLockUp.sol

> Compiling openzeppelin-solidity/contracts/math/SafeMath.sol

> Artifacts written to /data/workspace/YYXACoin/flowrevenue/build/contracts

> Compiled successfully using:

   - solc: 0.5.1+commit.c8a2cb62.Emscripten.clang
  1. 编译节点质押智能合约代码
# cd ../nodepledge/

# truffle compile



Compiling your contracts...

===========================

> Compiling ./contracts/Migrations.sol

> Compiling ./contracts/NodePledgeLockUp.sol

> Compiling openzeppelin-solidity/contracts/math/SafeMath.sol

> Artifacts written to /data/workspace/YYXACoin/nodepledge/build/contracts

> Compiled successfully using:

   - solc: 0.5.1+commit.c8a2cb62.Emscripten.clang
  1. 编译团队锁仓智能合约代码
# cd ../teamlock/

# truffle compile



Compiling your contracts...

===========================

> Compiling ./contracts/Migrations.sol

> Compiling ./contracts/TeamFundLockUp.sol

> Compiling openzeppelin-solidity/contracts/math/SafeMath.sol

> Artifacts written to /data/workspace/YYXACoin/teamlock/build/contracts

> Compiled successfully using:

   - solc: 0.5.1+commit.c8a2cb62.Emscripten.clang
  1. 编译代币智能合约代码
# cd /data/workspace/SDVN/

# truffle compile

5、部署前条件准备

  1. 从基金转管账号0x9e0048eb2d9a03d32bf6d6b411bf75b9c1bfb0dc转100个NFC到初始化专管账号0x87b8d97b95e155a9462aa14f82d857709b53c36a

形如:

eth.sendTransaction({from:'0x9e0048eb2d9a03d32bf6d6b411bf75b9c1bfb0dc',to:'0x87b8d97b95e155a9462aa14f82d857709b53c36a',value:web3.toWei(100,"ether")})
  1. 解锁初始化专管账户

进入链节点和智能合约部署机器为同一台节点的控制台(一般为代理节点),一般解锁1000秒足够

./bin/nfc attach test/nfc.ipc
> personal.unlockAccount("0x87b8d97b95e155a9462aa14f82d857709b53c36a","nfc123",1000)
true

6、智能合约部署

管理权移交命令:

eth.sendTransaction({from:"初始专管账户",to:"智能合约地址",gas:160000,value:0x0,data:"0xf2fde38b000000000000000000000000新专管账户"}), 新专管账户填写时不要加0x,初始专管账户也就是配置在配置文件的from地址
  1. 团队锁仓智能合约部署
# cd /data/workspace/YYXACoin/teamlock/
# truffle migrate

 

将初始化专管帐户3.15亿转给团队资金锁仓智能合约

eth.sendTransaction({from: "0x87b8d97b95e155a9462aa14f82d857709b53c36a", to: "0xE0983f2AcaA23A8a7F106A6B80FcB76c62A28940", gas: 160000, value: 315000000000000000000000000, data:"0x1f5d7810"})

将智能合约控制权移交给团队资金专管帐户

eth.sendTransaction({from:"0x87b8d97b95e155a9462aa14f82d857709b53c36a",to:"0xE0983f2AcaA23A8a7F106A6B80FcB76c62A28940",gas:160000,value:0x0,data:"0xf2fde38b000000000000000000000000cff88cf74a4953e31ca8c22f70ca012ddf969767"})

专管账号查询

eth.call({to:"0xE0983f2AcaA23A8a7F106A6B80FcB76c62A28940",data:"0x8da5cb5b"})
  1. 节点质押智能合约部署
# cd /data/workspace/YYXACoin/nodepledge/
# truffle migrate

 

专管账号管理权限转移给节点质押智能合约管理地址

eth.sendTransaction({from:"0x87b8d97b95e155a9462aa14f82d857709b53c36a",to:"0x5E198c48fF7faA5B44a463692495284B3f7DEDD6",gas:160000,value:0x0,data:"0xf2fde38b000000000000000000000000524e3758e1eec73c9d970c1b528ddbb68852ceae"})

查询管理权账号地址

eth.call({to:"0x5E198c48fF7faA5B44a463692495284B3f7DEDD6",data:"0x8da5cb5b"})

将矿工账号的质押币转到节点质押智能合约地址账号中

节点1

personal.unlockAccount("0xf5f78a346805d44f2ccd5d9b823360fbc40f271c", "123123")
eth.sendTransaction({from: "0xf5f78a346805d44f2ccd5d9b823360fbc40f271c", to: "0x5E198c48fF7faA5B44a463692495284B3f7DEDD6", gas: 160000, value: 1000000000000000000000000, data:"0x046b3703"})

节点2

personal.unlockAccount("0x8e798a1afab6040fb98fc1697d2b33b8e5e94488", "1223123")
eth.sendTransaction({from: "0x8e798a1afab6040fb98fc1697d2b33b8e5e94488", to: "0x5E198c48fF7faA5B44a463692495284B3f7DEDD6", gas: 160000, value: 1000000000000000000000000, data:"0x046b3703"})

节点3

personal.unlockAccount("0x5a97940718fb63a3f58473b0bce7ed97944c95da", "nfc123")
eth.sendTransaction({from: "0x5a97940718fb63a3f58473b0bce7ed97944c95da", to: "0x5E198c48fF7faA5B44a463692495284B3f7DEDD6", gas: 160000, value: 1000000000000000000000000, data:"0x046b3703"})

节点4

personal.unlockAccount("0xd7d71bde444c1b9eb54c17c66e1355f705c50bc4", "123123")
eth.sendTransaction({from: "0xd7d71bde444c1b9eb54c17c66e1355f705c50bc4", to: "0x5E198c48fF7faA5B44a463692495284B3f7DEDD6", gas: 160000, value: 1000000000000000000000000, data:"0x046b3703"})

节点5

personal.unlockAccount("0xf4503bfe539c2fb56a3e73c51a06d0f0513f8a00", "123123")
eth.sendTransaction({from: "0xf4503bfe539c2fb56a3e73c51a06d0f0513f8a00", to: "0x5E198c48fF7faA5B44a463692495284B3f7DEDD6", gas: 160000, value: 1000000000000000000000000, data:"0x046b3703"})
  1. 流量挖矿智能合约部署
# cd /data/workspace/YYXACoin/flowrevenue/
# truffle migrate

 

专管账号管理权限转移到流量挖矿智能合约管理地址

eth.sendTransaction({from:"0x87b8d97b95e155a9462aa14f82d857709b53c36a",to:"0xf8b161bc8425177D7Af4DA43E28a1AEDDcd6EcA2",gas:160000,value:0x0,data:"0xf2fde38b00000000000000000000000074fc1f10d99937a6a4dcb343738d33cea0915f0b"})

专管账号管理权限地址查询

eth.call({to:"0xf8b161bc8425177D7Af4DA43E28a1AEDDcd6EcA2",data:"0x8da5cb5b"})
  1. 代币智能合约部署(本次安装代币名称为SDVN)
# cd /data/workspace/YYXACoin/SDVN/
# truffle migrate

 

  1. 剩余初始化专管账户返回基金会专管地址
eth.sendTransaction({from:'0x87b8d97b95e155a9462aa14f82d857709b53c36a',to:'0x9e0048eb2d9a03d32bf6d6b411bf75b9c1bfb0dc',value:web3.toWei(84,"ether")})

结:综合上述三个智能合约地址分别为

teamlock(团队锁仓):0xE0983f2AcaA23A8a7F106A6B80FcB76c62A28940
nodepledge(节点质押):0x5E198c48fF7faA5B44a463692495284B3f7DEDD6
flowrevenue(流量挖矿):0xf8b161bc8425177D7Af4DA43E28a1AEDDcd6EcA2
SDVN代币只能合约地址:0x1ED73319774e2ccB7147b35f2e8516B76e25cF95

 

Truffle框架是一个用于以太坊智能合约开发的开发环境和工具集,Ganache则是一个用于本地测试以太坊智能合约的工具。下面是使用Truffle框架和Ganache网络进行智能合约部署的具体流程和代码。 1. 安装Truffle框架和Ganache网络 首先需要在本地安装Truffle框架和Ganache网络。可以使用npm命令进行安装: ``` npm install -g truffle npm install -g ganache-cli ``` 2. 创建Truffle项目 使用Truffle框架创建一个新的项目: ``` truffle init ``` 这将会在当前目录下创建一个名为`truffle-config.js`的配置文件和一个名为`contracts`的合约目录。 3. 编写智能合约代码 在`contracts`目录下创建一个名为`MyContract.sol`的智能合约文件,并编写合约代码。例如,创建一个简单的存储合约: ``` pragma solidity ^0.8.0; contract MyContract { uint256 private value; function setValue(uint256 newValue) public { value = newValue; } function getValue() public view returns (uint256) { return value; } } ``` 4. 配置Truffle项目 在`truffle-config.js`文件中配置Truffle项目。首先需要指定要使用的网络,这里使用Ganache网络: ``` module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" } } }; ``` 5. 编译智能合约 使用Truffle框架编译智能合约: ``` truffle compile ``` 6. 部署智能合约 使用Truffle框架部署智能合约: ``` truffle migrate ``` 这将会将智能合约部署到Ganache网络上。 7. 与智能合约交互 现在可以使用Web3.js或其他以太坊客户端库与智能合约进行交互。以下是一个使用Web3.js与上一步中部署的存储合约进行交互的示例代码: ``` const Web3 = require('web3'); const web3 = new Web3('http://localhost:8545'); const myContract = new web3.eth.Contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}], '0x1234567890123456789012345678901234567890'); myContract.methods.setValue(42).send({from: '0x1234567890123456789012345678901234567890'}) .then(() => myContract.methods.getValue().call()) .then(value => console.log(value)); ``` 这段代码首先创建了一个Web3实例,并连接到Ganache网络。然后创建了一个`myContract`实例,它表示上一步中部署的存储合约。最后使用`myContract`实例调用`setValue`方法将值设置为42,并使用`getValue`方法获取当前值并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yunson_Liu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值