繁体   English   中英

如何用WalletConnect调用智能合约function? (React.js, Node.js)

[英]How to call a smart contract function with WalletConnect? (React.js, Node.js)

是否真的可以使用 WalletConnect 调用智能合约 function?

官方网站上有文档解释了如何通过 WalletConnect 与用户建立连接。 然而,当谈到建立连接后的一些动作时,每个人都使用硬币转移,从一个钱包到另一个钱包:

// Draft transaction
const tx = {
  from: "0xbc28Ea04101F03aA7a94C1379bc3AB32E65e62d3", // Required
  to: "0x89D24A7b4cCB1b6fAA2625Fe562bDd9A23260359", // Required (for non contract deployments)
  data: "0x", // Required
  gasPrice: "0x02540be400", // Optional
  gas: "0x9c40", // Optional
  value: "0x00", // Optional
  nonce: "0x0114", // Optional
};

// Send transaction
walletConnector.sendTransaction(tx);

我的问题是:不是进行硬币转移,而是可以在智能合约中调用应付账款 function 吗? function 接受一些自定义参数(如字符串和 uint256)。 部署智能合约。 如果是 - 怎么样?

谢谢!

value是 function 调用的应付 ETH 金额。

您可以通过使用以太币更简单地构建此交易,并使用myContract.myMethod(param0, ... , paramN, {value: ethAmount})在方法参数列表之后提供选项{value: ethAmount} } 。 (有关如何为部署的合约获取对myContract的引用的信息,请参阅 Ethers 文档。)

要将 Ethers 与 WalletConnect 一起使用,您必须使用Web3Provider

https://docs.walletconnect.com/quick-start/dapps/web3-provider

下面的示例代码演示了将 Etherjs 与 walletConnect 的 web3Modal 库结合使用,该库提供了多个钱包选项,允许用户使用他们选择的钱包连接到 dApp。

import { ethers } from "ethers";
import Web3Modal from "web3modal";
import WalletConnectProvider from "@walletconnect/web3-provider";

    //defining supported provider
     const providerOptions = {
        injected: {
          display: {
            name: "MetaMask",
            description: "Connect with the metamask from your Browser",
          },
          package: null,
        },
        walletconnect: {
          display: {
            name: "WalletConnect",
            description: "Scan qrcode with your mobile wallet",
          },
          package: WalletConnectProvider,
          options: {
            rpc: {
              [CHAIN_ID]: RPC_URL,
            },
          },
        },
      };
        //creating web3 modal instance
        const web3Modal = new Web3Modal({
              cacheProvider: false, // optional
              providerOptions, // required
              });
        
        //invoking wallet modal 
        let instance = await web3Modal.connect();
        
        //creating etherjs instance from wallet connect
        let injectedInstance = new ethers.providers.Web3Provider(instance);
        
        //creating a signer
        const signer = provider.getSigner();
        
        //creating contract instance and invoking contract function
        const contractInstance = new ethers.Contract(
                  CONTRACT_ADDRESS,
                  CONTRACT_ABI,
                  signer
                );
        let transactionHash = await contractInstance.functionName(param1,{value:gweiAmount});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM