Я создал смарт-контракт, но получил ошибку при его развертывании, после того как я указал лимит газа в 3000000 и случайное значение (wei) и нажал «Создать», я получил следующую ошибку:
(я использую Remix IDE, расширение Metatmask и сеть Ropsten. У меня на балансе 10 Eth, и я также пытался использовать компилятор Solidity 0.4.9 и 0.4.20, но все равно получаю ту же ошибку)
Ошибка :
Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Error: gas required exceeds allowance or always failing transaction at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:1391377 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:927906 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:346093 at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:364324) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:348923 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:346093 at c (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:349199) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:349237 at Ht (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:358606) at Object.<anonymous> (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:349326) at e.value (chrome-
Это мой код:
pragma solidity ^0.4.21;
contract admined{
address public admin;
function admined(){
admin = msg.sender;
}
modifier onlyAdmin(){
require(msg.sender == admin);
_;
}
function transferAdminRol(address newAdmin)public onlyAdmin {
admin = newAdmin;
}
}
contract ERC20{
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
string public standard = "Test Africa v0.1";
string public name;
string public symbol;
uint8 public decimal;
uint256 public totalSupply;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function ERC20(uint256 initialSupply, string _name, string _symbol, uint8 _decimal) public{
balanceOf[msg.sender] = initialSupply;
name = _name;
symbol = _symbol;
decimal = _decimal;
totalSupply = initialSupply;
}
function transfer(address _to, uint256 _value)public returns (bool success){
require(balanceOf[msg.sender] >= _value);
require(balanceOf[_to] + _value >= balanceOf[_to]);
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public returns (bool success){
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function allowance(address _owner, address _spender) public returns (uint256 remaining) {
return allowance[_owner][_spender];
}
function transferFrom(address _from, address _to, uint256 _value)public returns (bool success){
require(balanceOf[_from] >= _value);
require(balanceOf[_to] + _value >= balanceOf[_to]);
require(_value <= allowance[_from][msg.sender]);
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
allowance[_from][msg.sender] -= _value;
emit Transfer(_from, _to, _value);
return true;
}
function balanceOf(address _owner)public constant returns (uint256 balance) {
return balanceOf[_owner];
}
}
contract testaAFC is admined, ERC20{
uint public minBalanceForAccounts = 50000000000000 wei;
uint256 public sellPrice = 500;
uint256 public buyPrice = 500;
bytes32 public currentChallenge;
uint public timeOfLastProof;
uint public difficulty = 10**32;
mapping (address => bool) public frozenAccount;
event FrozenFunds(address target, bool frozen);
function testaAFC(uint256 initialSupply, string _name, string _symbol,
uint8 _decimal, address _admin)public ERC20(0, _name, _symbol, _decimal){
if(_admin != 0)
admin = _admin;
else
admin = msg.sender;
balanceOf[admin] = initialSupply;
totalSupply = initialSupply;
}
function transfer(address _to, uint256 _value)public returns (bool success){
//
}
function transferFrom(address _from, address _to, uint256 _value)public returns (bool success){
//
}
function setMinBalance(uint minimumBalanceInFinney)public onlyAdmin {
minBalanceForAccounts = minimumBalanceInFinney * 1 wei;
}
function mintToken(address target, uint256 mintedAmount)public onlyAdmin {
balanceOf[target] += mintedAmount;
totalSupply += mintedAmount;
emit Transfer(0, this, mintedAmount);
emit Transfer(this, target, mintedAmount);
}
function setPrices(uint256 newSellPrice, uint256 newBuyPrice)public onlyAdmin {
sellPrice = newSellPrice;
buyPrice = newBuyPrice;
}
function buy()public payable returns (uint amount){
amount = msg.value * buyPrice;
require(balanceOf[this] >= amount);
balanceOf[msg.sender] += amount;
balanceOf[this] -= amount;
emit Transfer(this, msg.sender, amount);
return amount;
}
function sell(uint amount)public returns (uint revenue){
require(balanceOf[msg.sender] >= amount);
balanceOf[this] += amount;
balanceOf[msg.sender] -= amount;
revenue = amount / sellPrice;
msg.sender.transfer(revenue);
emit Transfer(msg.sender, this, amount);
return revenue;
}
}
ПОЖАЛУЙСТА, ПОМОГИТЕ, СПЕШУ СПАСИБО!!!
Нет необходимости вводить какое-либо значение в value
поле, если вы не хотите перевести некоторое количество ETH вместе с вашей транзакцией. Также не забывайте использовать payable
ключевое слово в любом таком случае.
Аникет
Аникет
testaAFC
контракт, используя метамаску и ремикс на Ropsten.Абдельджалил ХАЛЛУМИ
Аникет
Абдельджалил ХАЛЛУМИ
Аникет
100,"hello","HLO",18,"0x7f75e578b4c55a9f5c01eb7380149ed5e33987c8"
. Вот хэш транзакций: ropsten.etherscan.io/tx/…Абдельджалил ХАЛЛУМИ
Аникет