[英]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.