Solidity

代幣銷售智能合約

  • December 26, 2021

我是乙太坊區塊鏈的新手,並且一直在嘗試一些用 Solidity 編寫的程式碼,如下所示。

pragma solidity ^0.5.0;

import "./MyERC20Token.sol";
import "./ERC20Burnable.sol";


contract MyERC20TokenSale {
address payable admin;
MyERC20Token public tokenContract;
uint256 public tokenPrice;
uint256 public tokensSold;

event Sell(address _buyer, uint256 _amount);

constructor(MyERC20Token _tokenContract, uint256 _tokenPrice) public {
   admin = msg.sender;
   tokenContract = _tokenContract;
   tokenPrice = _tokenPrice;
}

function multiply(uint x, uint y) internal pure returns (uint z) {
   require(y == 0 || (z = x * y) / y == x);
}

function buyTokens(uint256 _numberOfTokens) public payable {
   require(msg.value == multiply(_numberOfTokens, tokenPrice));
   require(tokenContract.balanceOf(address(this)) >= _numberOfTokens);
   require(tokenContract.transfer(msg.sender, _numberOfTokens));

   tokensSold += _numberOfTokens;

   emit Sell(msg.sender, _numberOfTokens);
}

function endSale() public {
   require(msg.sender == admin);
   require(tokenContract.transfer(admin, tokenContract.balanceOf(address(this))));

   admin.transfer(address(this).balance);
}
}

我希望將所有籌集的代幣歸還給管理員並銷毀未使用的代幣。但是當我在做 endSale() 時,我得到了錯誤:無效的操作碼。

如果有人可以通過此程式碼,這將是一個真正的幫助。

要求(msg.sender == 管理員);

您需要從部署合約的同一賬戶發送交易。admin在部署時admin = msg.sender;在建構子中設置。

需要(tokenContract.transfer(admin, tokenContract.balanceOf(address(this))));

將銷售契約的代幣餘額轉移給管理員。應該沒問題。

admin.transfer(address(this).balance);

將乙太幣餘額轉給管理員。應該沒問題。

最好的猜測是你沒有滿足第一個要求。

希望能幫助到你。

pragma solidity ^0.5.0更改為 即可解決此問題pragma solidity ^0.5.1。它現在正在工作。謝謝您的幫助。

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