Conflux智能合約——1.入門篇

2021-9-8    前端達人

Conflux移植了EVM,兼容以太坊的合約虛擬機,使用solidity作為合約語言。所以,開發(fā)需要使用remix進行合約十六進制碼的生成。

Conflux合約需要相應(yīng)的sdk部署到鏈上,形成智能合約地址,再使用call或send的方法,調(diào)用在鏈上的合約 。

我們使用node.js作為開發(fā)環(huán)境,需要安裝node.js的環(huán)境和java sdk。node.js使用express框架,而合約部署需要對應(yīng)的 js-conflux-sdk(npm install即為最新版)。建立文件夾sol,存放下面的.sol和兩個.json文件,其它安裝和檢查辦法略去2000字。

remix下刪除所有的原來.sol文件,添加自己的test.sol文件,代碼:

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);
    }
} 

然后按圖示選擇配置,完成編譯,分別生成一個abi.json和一個bytecode.json。

將bytecode文件里的bytecode字段保留值,其余內(nèi)容都刪除,另存為code.json。code.json內(nèi)的內(nèi)容僅為:“0x60.......”。例如:

"0x6080604052600080553480156100145......5056fea265627a7a72315820b814......0ff600baf64736f6c63430005110032"

寫調(diào)用合約的代碼deploy.js或者call.js。deploy.js 源碼:

 // 私鑰地址,即所用conflux的錢包私鑰,注意保密 const PRIVATE_KEY = '0x20f9169d40801955faada641cdb029f8e42c581c0c991a62753c736a0a168e5e'; // 合約地址 const CONTRACT = ''; const { Conflux } = require('js-conflux-sdk'); async function main() { const cfx = new Conflux({ // 節(jié)點的地址和端口號,這里用的測試網(wǎng)。實際最好用最新的主網(wǎng)地址 url: 'http://testnet-jsonrpc.conflux-chain.org:12537',
    defaultGasPrice: 100,
    defaultGas: 1000000,
    logger: console,
  }); const account = cfx.Account(PRIVATE_KEY); // create account instance console.log(account.address); // create contract instance const contract = cfx.Contract({
    abi: require('./sol/abi.json'),
    code: require('./sol/code.json'),
  }); // deploy the contract const contractinfo = await contract.constructor()

    .sendTransaction({ from: account,

      gas: 100000000, // if not set gas, will use 'cfx.defaultGas' })
    .confirmed(); console.log(contractinfo.contractCreated);
}
main().catch(e => console.error(e)); 

而call.js源碼:

 const { Conflux, util } = require('js-conflux-sdk'); // 這個地址是上面打印出來的 contractAddress 變量,錢包地址及私鑰 const contractAddress = '0x2c692d83b1e4781fa9d894924f8a027c401ea9fa'; const PRIVATE_KEY = '0x20f9169d40801955faada641cdb029f8e42c581c0c991a62753c736a0a168e5e'; async function main() { const cfx = new Conflux({
    url: 'http://testnet-jsonrpc.conflux-chain.org:12537',
    defaultGasPrice: 100,
    defaultGas: 1000000,
  }); const contract = cfx.Contract({
    address : contractAddress,
    abi: require('./sol/abi.json'),
  }); // 不進行記錄。注意,這里的inc就是定義在test.sol中的方法。.sol文件定義合約方法,被外部調(diào)用以實現(xiàn)應(yīng)用目的 console.log("1輸出" + await contract.inc(10)); const account = cfx.Account(PRIVATE_KEY); // 進行記錄并花費燃油 const balance = await contract.inc(10).sendTransaction({ from: account }).confirmed();

}
main().catch(e => console.error(e)); 

call.js里的inc()就是定義在test.sol中的方法。.sol文件定義合約方法,被外部調(diào)用以實現(xiàn)應(yīng)用目的。

將deploy.js和call.js放置在nodejs的工作目錄下。

如果.js中的函數(shù)無錯,鏈上節(jié)點正常使用,sdk版本匹配,啟動node deploy.js或node call.js即可。如果有錯誤會有明顯的error提示。


分享此文一切功德,皆悉回向給文章原作者及眾讀者.
免責(zé)聲明:藍藍設(shè)計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。
來源:開源博客

藍藍設(shè)計www.bouu.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

分享本文至:

日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://www.bouu.cn

存檔