一、筹备合约
本节课程教大家如何讲智能合约部署到 conflux 公链上,首先大家能够看到上面的这个智能合约是不是很简略。咱们将会以这个合约演示部署到 conflux 公链的过程。
pragma solidity ^0.5.0;
contract Counter {
uint public count=0;
event SelfEvent(address indexed sender, uint current);
constructor() public {}
function inc(uint num) public returns (uint){return count += num;}
function self() public {emit SelfEvent(msg.sender, count);
}
}
二、conflux 的 sdk 装置
咱们应用 js-conflux-sdk 作为本教程的 web 教程,交互首先咱们须要进行装置 nodejs 作为咱们的运行环境。飞机票一张收下吧,咱们装置好 nodejs 后,就能够来玩咱们的 sdk 了。废话不多说,间接开始撸。
咱们应用 WIN + R 键关上命令行,而后创立一个文件夹(舒适提醒切换到非系统盘玩切换形式“D:”就切换到 D 盘了)应用“mkdir my-project && cd my-project”创立好我的项目后主动进入文件夹,而后咱们运行“npm init”进行初始化 node 我的项目,这一步会让你确认一些货色,如果你是小白一路回车(Enter 键)就好。如果你是前端大神,我也没啥好教的我也不太懂。为了稳固咱们应用固定版本号形式装置依赖,咱们运行“npm install js-conflux-sdk@0.9.2”命令进行装置 js-conflux-sdk 的 0.9.2 版本依赖(能够应用“npm uninstall package-name”命令删除对应依赖)。前置筹备到这里根本曾经实现。
三、编写调用合约 js 代码
上面请看我的目录构造追随我一起来学习,上面的目录构造请不要间接看到了就创立,因为你不晓得都是什么意思,看玩我的解释在回头创立。
小伙伴应该曾经发现了 node_modules、package-lock.json、package.json 这些文件是咱们在进行装置 sdk 依赖时主动生成的。其余文件目前都没有,咱们来按程序生成他们。
先创立 sol 这个文件夹,而后创立这三个文件。test.sol 就是下面咱们的合约代码间接拷入文件中。abi.json 和 code.json 两个文件是通过这个工具 remix 在线生成的。我来说下生成过程。
首先咱们将外面的文件全副删除,而后点击这里找到咱们的我的项目目录下的 test.sol 文件
咱们应该看到下方我框出来的两个按钮了吧,那两个按钮就是 abi.json 和 code.json 文件的起源。abi.json 咱们能够间接复制过来,code.json 文件咱们要改点货色。
首先咱们看到的 code 文件应该是这样的
{"linkReferences": {},
"object": "608060405260...c63430005110032",
"opcodes": "PUSH1 0x80 PUSH1 ... 1100 ORIGIN",
"sourceMap": "27:337:0 ... 37;;;;;;"
}
代码有省略,太长不难看,咱们看到 object 这个 key 值了吧,咱们把它的值考进去而后在头部加 0x 就好了放在 code.json 文件中。code.js 文件中只寄存 object 的内容后面加 0x,也就是上面的代码,其余信息都不要,千万记住了。这点很重要!!!!
"0x608060405260...c63430005110032"
就是这样的。而后咱们在写另外两个 call 和 deploy 两个文件
先写 deploy 文件
// 私钥地址
const PRIVATE_KEY = '0x20f9169d40801955faada641cdb029f8e42c581c0c991a62753c736a0a168e5e';
// 合约地址
const CONTRACT = '';
const {Conflux} = require('js-conflux-sdk');
async function main() {
const cfx = new Conflux({
url: 'http://mainnet-jsonrpc.conflux-chain.org:12537',
defaultGasPrice: 100,
defaultGas: 1000000,
});
const account = cfx.Account(PRIVATE_KEY); // create account instance
console.log(account.address);
// create contract instance
const contract = cfx.Contract({abi: require('./sol/RC20.abi.json'),
bytecode: require('./sol/RC20.code.json'),
});
const receipt = await contract.constructor()
.sendTransaction({from: account})
.confirmed();
console.log(receipt.contractCreated);
}
main().catch(e => console.error(e));
关上我的项目 cmd 窗口在下面的目录下 运行命令“node deploy.js”就将合约部署下来了
receipt.contractCreated 这个会打印出合约地址。