Solidity

如何使用 web3 和 infura 呼叫合約的函式

  • November 14, 2021

想像一下有以下程式碼:

pragma solidity ^0.8.9;

contract Message {
   address myMessage;

   function setMessage() public {
       myMessage = msg.sender;
   }
}

現在我知道 infura 不支持 eth_sendTransaction。我知道如何簽署交易並使用 web3 庫發送。

但是我唯一的困惑是,如何在交易本身中進行合約呼叫?我不想發送任何價值只是撥打契約電話。

請指教

使用ethers,您需要使用合約地址 + abi 和簽名者創建合約。

import <Your contract deployment address>; 
import <Your contract abi>; 
const connection = await new Web3Modal().connect(); 
const provider = new ethers.providers.Web3Provider(connection); 
const signer = provider.getSigner(); 
const contract = new Contract(contractAddress, contractAbi, signer);

然後,您可以通過以下方式呼叫契約:

await contract.setMessage();

注意我在這裡使用了https://github.com/web3modal/web3modal,但是另一種獲取簽名者的方法可以在 ethers 文件中找到。

引用自:https://ethereum.stackexchange.com/questions/113560