使用web3调用智能合约的简单例子

当使用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,下图中的红色圈圈中内容。

使用web3调用智能合约的简单例子_第1张图片
设置 MetaMask
为了在Remix中把合约部署在Ganache上面,我们需要使用MetaMask插件。

在MetaMask的设置中增加新的网络如下图,红色圈圈中的内容按照上张图中的内容原样填写,其他内容根据自己的喜好随意填写。使用web3调用智能合约的简单例子_第2张图片
在MetaMask中增加账号如下图,使用任意一个Ganache UI中的私钥即可。这个私钥就是我们要在Remix中用来部署合约的账号对应的私钥。
使用web3调用智能合约的简单例子_第3张图片
最后一步,在MetaMask中选择我们刚才设置的账号和网络即可。使用web3调用智能合约的简单例子_第4张图片
使用Remix部署合约
部署合约时,需要选择 Injected Web3,这样才能把合约部署到Ganache中。
使用web3调用智能合约的简单例子_第5张图片
然后我们在Ganache中就能找到新部署的合约的地址。
使用web3调用智能合约的简单例子_第6张图片
如果在部署过程中出错,可以在MetaMask中选择重置账户试试。
使用web3调用智能合约的简单例子_第7张图片

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程序,验证效果。
使用web3调用智能合约的简单例子_第8张图片
我们可以在Remix中设置值为278,然后在NodeJS中获取值得到278,进行交叉验证,更加直观。
使用web3调用智能合约的简单例子_第9张图片
使用web3调用智能合约的简单例子_第10张图片
或者反过来,先在NodeJS中设置值, 然后在Remix中获取值,进行交叉验证,一切由您来决定。

你可能感兴趣的:(智能合约)