如何使用 web3js 与其他智能合约进行交互?

问题描述 投票:0回答:1

web3.js 的文档中,我只能找到描述与您自己的智能合约交互的用例。但是我如何与区块链上的其他智能合约进行交互?

这很容易通过像 etherscan 这样的区块链探索来实现:查找智能合约,点击“合约”,然后点击“写合约”。

但是如何在 web3.js 中做到这一点?

ethereum smartcontracts web3js
1个回答
0
投票

您还可以与其他智能合约进行交互。

一些实施授权方案,其中只有某些发件人地址可以执行某些功能。但大多数智能合约功能是任何人都可以执行的。

请注意,有两种类型的互动。

  • 一笔交易需要发送方的私钥签名,并且会产生gas费用。它可以改变合约的状态。

  • 一次调用只是读取数据,所以是免费的,但不能改变任何状态。

为了与合约进行交互,您的 web3js 实例需要连接到与部署合约位于同一网络上的节点提供者,并且您需要知道通常由合约作者提供的合约 ABI JSON。

以下示例显示与此示例合约的交互。

坚固性:

pragma solidity ^0.8;

contract MyContract {
    uint number;

    // changes state - requires a transaction
    function setNumber(uint _number) external {
        number = _number;
    }

    // a `view` function only reads data - can be called
    function getNumber() external view returns (uint) {
        return number;
    }
}

web3js:

const Web3 = require("web3");
const web3 = new Web3("https://<provider_address>");

async function run() {
    const contract = new web3.eth.Contract(ABI_JSON, ADDRESS);

    // calling the `view` function without having to pay for transaction fees
    const number = await contract.getNumber().call();
    console.log(number);
}

run();
© www.soinside.com 2019 - 2024. All rights reserved.