Solidity
代幣銷售智能合約
我是乙太坊區塊鏈的新手,並且一直在嘗試一些用 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
。它現在正在工作。謝謝您的幫助。