web3.js两种调用payable的fuction的方法

/ 默认分类 / 0 条评论 / 1590浏览

第一种

<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>

<script>
document.getElementById("发送").onclick = async () => {
		let abi = [{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "code",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "amount",
				"type": "uint256"
			}
		],
		"name": "withdraw",
		"outputs": [],
		"stateMutability": "payable",
		"type": "function"
	}];

    // connect to metamask
        var web3Provider;
        if (window.ethereum) {
            web3Provider = window.ethereum;
        } else if (window.web3) {
            web3Provider = window.web3.currentProvider;
            await window.web3.currentProvider.enable();

            console.log("web3.currentProvider:");
            console.log(window.web3.currentProvider);
        } else {
            console.log('noWeb3')
        }
		
		let web3 = new Web3(web3Provider);

        web3.eth.requestAccounts().then(res => console.log(res, "requestAccounts"));

        const accounts = await web3.eth.getAccounts()
		console.log(abi)
		const myContract = new web3.eth.Contract(
			abi,
			"contractAddress"
		);
        myContract.methods
        .withdraw(123456465, 1000000000000)
        .send({ from: accounts[0], value: 2000000000000 })
        .then((res) => {
          console.log(res);
          this.form.result = res.transactionHash;
        });

</script>

第二种,使用Web3Modal连接钱包


<script type="text/javascript" src="https://unpkg.com/web3modal"></script>
<script type="text/javascript" src="https://unpkg.com/evm-chains/lib/index.js"></script>
<script type="text/javascript" src="https://unpkg.com/@walletconnect/web3-provider"></script>
<script type="text/javascript" src="https://unpkg.com/fortmatic@2.0.6/dist/fortmatic.js"></script>
<script src="https://cdn.ethers.io/scripts/ethers-v3.min.js"
        charset="utf-8"
        type="text/javascript">
</script>

<script>
 document.getElementById("发送").onclick = async () => {
		let abi = [{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "code",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "amount",
				"type": "uint256"
			}
		],
		"name": "withdraw",
		"outputs": [],
		"stateMutability": "payable",
		"type": "function"
	}];

        const Web3Modal = window.Web3Modal.default;
	
	var web3Modals = new Web3Modal({
	  cacheProvider: true,
	});
	const connection = await web3Modals.connect();
	const provider = new ethers.providers.Web3Provider(connection);
	const signer = provider.getSigner();
	const myContract = new ethers.Contract(
			"contractAddress", abi, signer);
	console.log(myContract);
	myContract
		.withdraw(123456466, 1000000000000, {value: 2000000000000 })
		.then((res) => {
		  console.log(res);
		});
    }
</script>