Web3js

發送 BUSD 而不是 BNB

  • February 6, 2022

嘿伙計們,所以我正在尋找一個捐贈按鈕,需要一定數量的 BUSD 到我已經部署的智能合約地址!我唯一的問題是我似乎找不到發送 BUSD 而不是自動設置為接受令牌的 BNB 的方法!你會怎麼做?我想發送 0.40 BUSD 而不是 0.40 BNB,我想鎖定按鈕以便它只接受 BUSD 作為付款!

const contractHandler = async({setTxn}) => {
try {
 const {wallet} = window;
 
 if (wallet) {
   const provider = new ethers.providers.Web3Provider(wallet);
   const signer = provider.getSigner();
   
   console.log("Initialize Payment");
   const txn = await signer.sendTransaction({to: contractAddress, value: ethers.utils.parseEther("0.40")});
   setTxn([txn])
 } else {
   console.log("Ethereum object does not exist");
 }
} catch(err) {
 console.log(err);
}

}

試試這個

const signer = <the signer>;
const addressOfYourContract = '0x...';
const amountInTheSmallestUnit = BigNumber.from("10000...");
const busdContractAddress = '0x...';
const busdContractAbi = `....`;
const busdContract = new ethers.Contract(busdContractAddress, busdContractAbi, signer);
const tx = await busdContract.transfer(addressOfYourContract, amountInTheSmallestUnit);
const txResponse = tx.wait();

您可以從 etherscan 獲取 busdContractAbi

需要注意的3件事:

  • 你的合約支持並且可以轉移代幣(如果有的話)(這應該在智能合約程式碼中實現)
  • 給定的金額應該是最小的單位。如果令牌有十進制 18,那麼要發送 1 個令牌,您需要 BigNumber.from(“1000000000000000000”); 並使用 BigNumbers,因為 js 無法處理那些大數字
  • 測試該程式碼它只是一個例子:) 沒有保證

引用自:https://ethereum.stackexchange.com/questions/120969