Nodejs

Etherjs 轉賬 BNB 返回 0 且不結束於 Receiver 地址

  • December 23, 2021

嗨,我是智能合約的新手。我正在嘗試使用 etherjs 和 nextjs 編寫一個簡單的傳輸。基本上下面是我的程式碼

import {ethers} from 'ethers';
const ContractAddr = '0xB8c77482e45F1F44dE1745F52C74426C631bDD52'; /* BNB Contract address */
const ContractABI =[{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"}]

const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();

let numberOfTokens = ethers.utils.parseUnits('0.2', 18)
const Contract = new ethers.Contract(ContractAddr,ContractABI,signer)
const receiver = '0x8CA65A3Ce90d31a88FAa747c695183C2aefe537f';

Contract.transfer(receiver, numberOfTokens).then((transferResult) => {
           console.log(transferResult)
           alert("sent token")
         }).catch((error) => {
           console.error('error',error);
         });

在我的元遮罩上,它按我的意願彈出如下:

在此處輸入圖像描述

但是,當我在 BSCscan 測試網檢查交易詳情時,它顯示 0 值,並且接收方是合約地址而不是接收方。

https://testnet.bscscan.com/tx/0x3278d9668391eee98aadf83e8ae58a0b999f2e9c3e5f47a21f504e1c04b24814

幫助。在 Stackoverflow 上被困了一個星期,尋找類似問題的高低 :(

在您的具體情況下:

BNB 代幣合約僅存在於乙太坊主網上: https ://etherscan.io/address/0xb8c77482e45f1f44de1745f52c74426c631bdd52 。在其他網路上,這只是一個沒有任何契約的地址。

在 BSC 和 BSC 測試網上,BNB 是原生代幣(類似於乙太坊上的 ETH)。因此,如果您想在 BSC 上轉移 BNB,您將執行原生硬幣轉移。

一些一般背景:

您必須區分轉移原生代幣和轉移 ERC20 代幣。

當您轉移本地硬幣(例如 BSC 上的 BNB)時,您將發送一筆交易,其中to硬幣的接收者value是應該發送的金額。data在這種情況下不會有。

當您發送 ERC20 代幣時,您將與代幣合約進行互動。通過這種互動,您可以告訴令牌要執行什麼操作。所以交易的目標是代幣合約,價值為 0(因為你沒有轉移原生幣)。您要執行的操作在data欄位中進行了編碼。

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