编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

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

wxchong 2024-07-02 03:27:07 开源技术 13 ℃ 0 评论


当使用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中获取值,进行交叉验证,一切由您来决定。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表