在 web3.js 的文档中,我只能找到描述与您自己的智能合约交互的用例。但是我如何与区块链上的其他智能合约进行交互?
这很容易通过像 etherscan 这样的区块链探索来实现:查找智能合约,点击“合约”,然后点击“写合约”。
但是如何在 web3.js 中做到这一点?
您还可以与其他智能合约进行交互。
一些实施授权方案,其中只有某些发件人地址可以执行某些功能。但大多数智能合约功能是任何人都可以执行的。
请注意,有两种类型的互动。
一笔交易需要发送方的私钥签名,并且会产生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();