Web3js
發送 BUSD 而不是 BNB
嘿伙計們,所以我正在尋找一個捐贈按鈕,需要一定數量的 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 無法處理那些大數字
- 測試該程式碼它只是一個例子:) 沒有保證