NodeJs 上的 BEP-20 代币交易

Posted

技术标签:

【中文标题】NodeJs 上的 BEP-20 代币交易【英文标题】:BEP-20 Token Transaction on NodeJs 【发布时间】:2021-08-30 03:56:11 【问题描述】:

您好,我只是对如何交易 BEP-20 代币(例如:Binance-Peg BUSD-T)感到困惑。我只是用这个代码在 Binance Smart Chain 中交易了 bnb:

const tx = await web3.eth.accounts.signTransaction(
  to: '0xB1455f4721b32390f4b65F86D2Cd50e74FaD7A99',
  value: '500000000000000',
  gas: 2000000
, 'SENDER_PRIVATE_KEY');
  
const transaction = await web3.eth.sendSignedTransaction(tx.rawTransaction);

而且它工作得很好。但我只是做任何事情来交易令牌,例如我使用 web3.eth.Contract(abi, contract_addr) 然后

await contract.methods.transfer(toAddress, '500000000000000000').send( 
  from: '0xF9FF794700224fc9a1D6a30eb2A90d11eA1D82D1'
);

或使用 ethereumjs-tx 包和...,但它们都没有交易令牌。我只需要一个示例代码示例或一个有据可查的博客来告诉我应该做什么。谁能帮帮我?!!

【问题讨论】:

【参考方案1】:

为了使用.send(from: ...)方法,你需要

在您的提供商上解锁 from 帐户。

将其私钥添加到 web3 账户钱包 (docs)


解锁的提供商帐户

这种方法主要用于默认为某些帐户提供资金和解锁的本地提供商(例如 Ganache)。

在生产供应商上保留未锁定帐户是不明智的,因为任何查询供应商的人都可以发送交易。


Web3 账户钱包

您需要传递生成from 地址的私钥。

web3.eth.accounts.wallet.add(privateKey);

然后你可以使用.send(from: ...)方法

await contract.methods.transfer(toAddress, '500000000000000000').send( 
  from: '0xF9FF794700224fc9a1D6a30eb2A90d11eA1D82D1'
);

【讨论】:

OHHHHHHH !!!谢啦。你为这个节省了我的洞月。但是还有一个小问题。我能够进行交易并且金额已转移。但是代码会抛出这个错误。 insufficient funds for gas * price + value: address 0xF9FF794700224fc9a1D6a30eb2A90511eA1D82D1 have 91521965000000000 want 500000000000000000 (supplied gas 25000000)。你知道怎么找出气体吗??? 整数 500000000000000000 表明被调用的函数会抛出一个异常,该异常会消耗所有可用的 gas。所以你应该首先调试你的函数并找出它是否以及为什么抛出异常(例如失败的require()assert()语句)......为了估计执行函数所需的气体,你可以使用estimateGas()方法. 好的。正如你所说,在定义web3.eth.Contract 时,这是 gasPrice 的错误。我只是让它200000000,我认为它会一直工作。再次,非常感谢... 你对解决transaction underpriced有什么建议。我读到我应该将 gasPrice 提高 10%。我只是不知道该怎么做,因为我做了很多交易。 请问如何获取发件人私钥?

以上是关于NodeJs 上的 BEP-20 代币交易的主要内容,如果未能解决你的问题,请参考以下文章

BEP-20 代币交易中被低估的交易

如何计算 BSC (BEP-20) 区块链中 USDT 等代币交易的 gasLimit?

我应该为 Bep20 代币设置每笔交易/24 小时的最大卖出限额吗?

具有空投功能的 BEP-20 智能合约

BEP20 如何从 maxlimit 函数中排除销毁钱包

bep20 web3 在帐户之间发送令牌示例