JS调用MetaMask调用启动转账

本文介绍了如何在Nginx环境下使用Web3.js与MetaMask进行以太坊智能合约交互,包括获取账户、查看余额、调用合约方法进行转账,并提供了示例代码和测试账户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 、代码必须跑在nginx下,否则没有eth对象。

2、可以下载ganache来单跑个私服,然后安装谷歌metamask浏览器插件来实验

3、账户1:0xFA387e41FA471172cC729167EBD4862aA7020D91

     账户2:0x818DF62ff0bE3B28AE8be25e2e848E10138018B7

4、1000000000000000 为金额

<!doctype html>
<html class="no-js" lang="en">
<meta charset="UTF-8">
 
<head>
  <script src="https://cdn.jsdelivr.net/npm/const@1.0.0/src/const.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/big.js@6.2.1/big.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/web3@1.8.1/dist/web3.min.js"></script>
  <script type="text/javascript">
 
    send = async () =>{
      alert('test')
      const web3 = new Web3(window.ethereum);
      ethereum.enable()
      //获取地址
      let accounts = await  web3.eth.getAccounts();
      let account = accounts[0];
      console.log("地址:"+account)
      // 返回指定地址账户的余额
      let balance = await web3.eth.getBalance(account);
      console.log("账户余额:"+balance)
      let contractAbi = [这里输入你要交互合约的ABI]
      let contractAddress = '这里输入你自己要交互的0X开头的合约地址'
      let myContract = new web3.eth.Contract(contractAbi, contractAddress, {
        from: account, // default from address
        gasLimit: 70000,
        gasPrice: 1000000000 // default gas price in wei, 10 gwei in this case
      });
      let a = 1000000
      let toAddress = document.getElementById("toAddress").value;
      console.log("转账地址:"+toAddress)
      myContract.methods.transfer(toAddress, 1 * a,).send({from: account}, function(error, transactionHash){
        if(!error) {
          console.log('transactionHash is' + transactionHash);
        } else {
          console.log(error);
        }
      });
    }

function login(){
  var web3Provider;
    if (window.ethereum) {
        web3Provider = window.ethereum;
        try {
            // 请求用户授权
             window.ethereum.enable();
        } catch (error) {
            // 用户不授权时
            console.error("User denied account access")
        }
    }
    web3js = new Web3(web3Provider);//web3js就是你需要的web3实例
 
    web3js.eth.getAccounts(function (error, result) {
        if (!error)
            console.log(result)//授权成功后result能正常获取到账号了
    });
}

 function sendTransaction(){
  console.log(web3js)

web3js.eth.sendTransaction({
        from: '0xFA387e41FA471172cC729167EBD4862aA7020D91',
        to: '0x818DF62ff0bE3B28AE8be25e2e848E10138018B7',
        value: '1000000000000000'
    }).on('transactionHash', function(hash){
        console.info(hash)
    })
        .on('receipt', function(receipt){
        console.info(receipt)
        })
        .on('confirmation', function(confirmationNumber, receipt){
            console.info(confirmationNumber)
            console.info(receipt)
        })
        .on('error', console.error);
 }
  </script>
</head>
 
<body>
<!-- 会导出一个全局的变量: ethers -->
<input type="text" id="toAddress" placeholder="to transfer address"  value="0x615DD7fF9E4CE3eB832551C473a21F4AA4Bd727B"/>
<input type="button" onclick="send()" value="有签名转账(无需提供privateKey)需要metamask解锁"  />


<input type="button" onclick="login()" value="Login"  />


<input type="button" onclick="sendTransaction()" value="Trade"  />
</body>
 
</html>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨航 AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值