Erc-20
向合約發送 ETH 時總是用完 gas
我正在嘗試使用 OpenZeppelin 4.x 實施 Crowdsale 契約,因為此版本已從其儲存庫中刪除了 Crowdsale.sol。
我的目標是將 ETH 發送到合約,作為交換接收“黃金”並將收到的 ETH 重定向到罐子錢包。
Gold 是一個簡單的 ERC20 預設代幣。
這是程式碼:
// SPDX-License-Identifier: BSD-Protection pragma solidity ^0.8.0; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/token/ERC20/ERC20.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/math/SafeMath.sol"; import "./gold.sol"; contract Crowdsale { using SafeMath for uint256; ERC20 private token; address payable private wallet; uint256 private rate; uint256 public weiRaised; constructor( uint256 _rate, address payable _wallet, address _token ) { require(_rate > 0); require(_wallet != address(0)); rate = _rate; wallet = _wallet; token = Gold(_token); } receive() external payable { require( msg.value > 0 ); uint256 tokens = msg.value.mul( rate ); weiRaised = weiRaised.add( msg.value ); token.transfer( msg.sender, tokens ); wallet.transfer( msg.value ); } }
我總是沒油….
明白了!
這裡有很多問題:
- 眾籌合約的黃金代幣餘額中沒有一枚硬幣。解決了使用 Metamask 向 Crowdsale 地址發送一些黃金的問題。
- 我正在計算
uint256 tokens = msg.value.mul( rate );
,但 msg.value 在 wei 中。所以發送 0.001 ETH 仍然是太多的錢。(100000000000 wei 乘以匯率將是太多的黃金無法發送)。這個我看不出如何解決,因為我的意圖是使用 BSC,我不知道 BNB 在這種情況下是如何工作的。- 至少正如理查德霍羅克斯在他的回答中指出的那樣,我花費了太多的汽油。