当使用Solidity语言开发完成一个智能合约并部署后,如何在一个Web应用程序(或者手机App)中调用它?使用web3.js库,可以很容易的做到这些。通过一个最简单的例子我们来看看如何做到这些,分为三个步骤。
1. 编写智能合约
简单起见,我们直接使用Remix自带的Storage.sol合约例子,就是简单的存储和获取一个整数数值。
pragma solidity >=0.4.22 <0.7.0;
/**
* @title Storage
* @dev Store & retreive value in a variable
*/
contract Storage {
uint256 number;
/**
* @dev Store value in variable
* @param num value to store
*/
function store(uint256 num) public {
number = num;
}
/**
* @dev Return value
* @return value of 'number'
*/
function retreive() public view returns (uint256){
return number;
}
}
2.部署智能合约
启动 Ganache UI
使用Ganache UI作为以太坊的模拟网络,对应的URL=http://127.0.0.1:7545,NETWORKID=5777,下图中的红色圈圈中内容。
设置 MetaMask
为了在Remix中把合约部署在Ganache上面,我们需要使用MetaMask插件。
在MetaMask的设置中增加新的网络如下图,红色圈圈中的内容按照上张图中的内容原样填写,其他内容根据自己的喜好随意填写。
在MetaMask中增加账号如下图,使用任意一个Ganache UI中的私钥即可。这个私钥就是我们要在Remix中用来部署合约的账号对应的私钥。
最后一步,在MetaMask中选择我们刚才设置的账号和网络即可。
使用Remix部署合约
部署合约时,需要选择 Injected Web3,这样才能把合约部署到Ganache中。
然后我们在Ganache中就能找到新部署的合约的地址。
如果在部署过程中出错,可以在MetaMask中选择重置账户试试。
3.使用Nodejs调用
好,现在我们来做最后一步,使用NodeJS调用已部署的Storage合约,代码如下。其中Storage.json文件中的内容是Storage合约的ABI文件,点击在Remix编译面板底部的ABI按钮可以复制出来然后粘贴到Storage.json文件中。
var Web3 = require("web3");
//连接到Ganache
var web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:7545'));
var fs = require("fs");
var data = fs.readFileSync("./Storage.json", "utf-8");
//创建合约对象
var contract = new web3.eth.Contract(JSON.parse(data),'0xc8b522331e8A2369e87Cb4be6bE7C74Be86f1AAB');
//调用合约的方法
//我们可以在Remix中设置,在这里读取,或者反过来。交叉验证更加直观。
contract.methods.retreive().call().then(console.log);
contract.methods.store(200).send({from:'0x51BF497D8B47C5754220be9256F0Cb9E2Cd688B8'}).then(console.log);
最后,激动人心的时刻来临了,我们可以使用VSCode运行上面的NodeJS程序,验证效果。
我们可以在Remix中设置值为278,然后在NodeJS中获取值得到278,进行交叉验证,更加直观。
或者反过来,先在NodeJS中设置值, 然后在Remix中获取值,进行交叉验证,一切由您来决定。
本文暂时没有评论,来添加一个吧(●'◡'●)