You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dapp开发中调用MetaMask实现BUSD转账功能

实现Metamask调起BUSD转账的完整方案

BNB是BSC链的原生代币,你之前用到的原生转账接口仅支持转原生币种,BUSD属于BEP20(符合ERC20标准)代币,可通过以下两种方案实现指定BUSD转账:

方案1:使用Metamask专属wallet_sendAsset方法(推荐,实现最简单)

这个方法可以直接唤起Metamask的指定代币转账弹窗,自动识别代币信息,无需手动编码合约调用:

// 先确认当前链对应的BUSD官方合约地址,以下为BSC主网BUSD示例
const BUSD_CONTRACT = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56";
const BUSD_DECIMALS = 18;

async function sendBUSD(toAddress, amount) {
  try {
    await window.ethereum.request({
      method: 'wallet_sendAsset',
      params: [{
        type: 'ERC20',
        options: {
          address: BUSD_CONTRACT,
          symbol: 'BUSD',
          decimals: BUSD_DECIMALS,
          // 可选填写BUSD的官方logo地址
          image: 'https://bscscan.com/token/images/binanceusd_32.png'
        },
        to: toAddress,
        // 金额需要乘以对应精度,比如转1个BUSD就是1*10^18,转成十六进制字符串传入
        amount: (amount * 10 ** BUSD_DECIMALS).toString(16)
      }]
    });
    console.log("转账发起成功");
  } catch (error) {
    console.error("转账失败", error);
  }
}

调用该方法后,Metamask会直接弹出BUSD的转账确认窗口,不需要用户手动切换币种。

方案2:通用ERC20合约调用方式(兼容所有支持EIP-1193标准的钱包)

如果需要兼容Metamask之外的其他钱包,可以构造ERC20的transfer方法调用,通过eth_sendTransaction发起请求:

import { ethers } from 'ethers'; // 需要引入ethers.js库做合约方法编码
const BUSD_CONTRACT = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56";
// 只需要用到transfer方法,所以ABI可以只写这一个接口
const BUSD_ABI = ["function transfer(address to, uint256 amount) public returns (bool)"];

async function sendBUSD(toAddress, amount) {
  const provider = new ethers.providers.Web3Provider(window.ethereum);
  const signer = provider.getSigner();
  const busdContract = new ethers.Contract(BUSD_CONTRACT, BUSD_ABI, signer);
  // 金额转成对应精度的单位
  const parsedAmount = ethers.utils.parseUnits(amount.toString(), 18);
  const tx = await busdContract.transfer(toAddress, parsedAmount);
  await tx.wait();
  console.log("转账确认成功", tx.hash);
}

可选前置操作:给用户钱包添加BUSD资产

如果用户钱包内还没有添加BUSD代币,可以先调用以下方法让用户一键添加,避免转账时识别不到币种:

async function addBUSDToWallet() {
  await window.ethereum.request({
    method: 'wallet_watchAsset',
    params: {
      type: 'ERC20',
      options: {
        address: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',
        symbol: 'BUSD',
        decimals: 18,
        image: 'https://bscscan.com/token/images/binanceusd_32.png',
      },
    },
  });
}

效果说明

你当前的原生BNB转账弹窗效果如下:
当前默认调起BNB转账的Metamask弹窗
按照以上方案实现后,即可得到你期望的BUSD转账弹窗效果:
期望实现的BUSD转账Metamask弹窗


内容的提问来源于stack exchange,提问作者Surrender Oz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:27:02