关于智能合约的学习,我们需要先从他的基础开始学习,首先智能合约是一种编程代码语言,运行在区块链上的一种语言。 智能合约开发者需要编写sol文件,然后使用编译工具进行生成sol.abi.json文件以及sol.code.json文件。然后通过对应的sdk将sol部署在链上,形成智能合约地址,然后在使用call或send的方式,调用在链上的合约方法。 我们通过编写代码、部署合约、调用合约三个阶段就可以愉快的得到我们想要的智能合约了。
一、智能合约语言的学习
送你两种张飞机票入门票, 进阶票 这两张票估计价值千金,且行且珍惜,认真看,看完后合约代码能力有个飞一般的提升,小白变小黑哈哈哈!!!。
上面两张飞机票自己返程啊,下面我们进修玩后来一波考核吧,看看你是否达到了毕业的水平。
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);
}
}
上面的代码很简单吧,小伙伴们!相信认真进修的小伙伴们应该都能看懂了,我就不在罗嗦了。我们将会使用inc这个方法,进行下面的学习内容。
二、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.8.0-alpha版本依赖(可以使用“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));
再写call文件
const { Conflux, util } = require('js-conflux-sdk');
// 这个地址是上面打印出来的 receipt.contractCreated
const contractAddress = '0x2c692d83b1e4781fa9d894924f8a027c401ea9fa';
const PRIVATE_KEY = '0x20f9169d40801955faada641cdb029f8e42c581c0c991a62753c736a0a168e5e';
async function main() {
const cfx = new Conflux({
url: 'http://mainnet-jsonrpc.conflux-chain.org:12537',
defaultGasPrice: 100,
defaultGas: 1000000,
});
const contract = cfx.Contract({
address : contractAddress,
abi: require('./sol/abi.json'),
});
// 不进行记录
let inc = await contract.inc(10);
console.log("1输出" + inc.toString());
const account = cfx.Account(PRIVATE_KEY);
// 进行记录并花费燃油
await contract.inc(10).sendTransaction({ from: account }).confirmed();
}
main().catch(e => console.error(e));
运行代码 “node deploy.js”或“node call.js”好了,完成,小伙伴们快点动手试试吧!!!