Author

Topic: Создание нового токена на Ethereum - вопрос по remix (Read 264 times)

jr. member
Activity: 75
Merit: 2
проблема решена. вырубил mew, зашел через метамаск в remix, сделал компиляцию
кода и задеплоил за 30 секунд
Какую же версию remix использовал - старую или новую?

старую, ту что ты мне дал.
но там скорее с mew был глюк, тк я даже сам себе эфиры с одного адреса на другой не мог послать, пока в него был залогинен
member
Activity: 196
Merit: 52
проблема решена. вырубил mew, зашел через метамаск в remix, сделал компиляцию
кода и задеплоил за 30 секунд
Какую же версию remix использовал - старую или новую?
jr. member
Activity: 75
Merit: 2

проблема похоже не в коде, а в самих кошельках.
ничего никуда не посылает с кошелька. ни на обменник, ни на мой собственный второй
адрес. я его ввожу, нажимаю отправить, а она мне пишет введите рабочий адрес.
бред удивительный


проблема решена. вырубил mew, зашел через метамаск в remix, сделал компиляцию
кода и задеплоил за 30 секунд
jr. member
Activity: 75
Merit: 2
Выложи здесь код своего контракта, если это конечно не военная тайна.

не тайна, код в открытых брал. это копия какого-то мануала-примера, нашел на vc.ru вроде




pragma solidity ^0.5.0;

// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
//
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

// ----------------------------------------------------------------------------
// Safe Math Library
// ----------------------------------------------------------------------------
contract SafeMath {
    function safeAdd(uint a, uint b) public pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function safeSub(uint a, uint b) public pure returns (uint c) {
        require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0);
        c = a / b;
    }
}


contract TESTtoken is ERC20Interface, SafeMath {
    string public name;
    string public symbol;
    uint8 public decimals; // 18 decimals is the strongly suggested default, avoid changing it
   
    uint256 public _totalSupply;
   
    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;
   
    /**
     * Constructor function
     *
     * Initializes contract with initial supply tokens to the creator of the contract
     */
    constructor() public {
        name = "TEST token";
        symbol = "TST";
        decimals = 18;
        _totalSupply = 1000000000000000000000000;
       
        balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
   
    function totalSupply() public view returns (uint) {
        return _totalSupply  - balances[address(0)];
    }
   
    function balanceOf(address tokenOwner) public view returns (uint balance) {
        return balances[tokenOwner];
    }
   
    function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }
   
    function approve(address spender, uint tokens) public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }
   
    function transfer(address to, uint tokens) public returns (bool success) {
        balances[msg.sender] = safeSub(balances[msg.sender], tokens);
        balances[to] = safeAdd(balances[to], tokens);
        emit Transfer(msg.sender, to, tokens);
        return true;
    }
   
    function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        balances[from] = safeSub(balances[from], tokens);
        allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
        balances[to] = safeAdd(balances[to], tokens);
        emit Transfer(from, to, tokens);
        return true;
    }
}


еще есть такой, этот я на happyhodler взял. я их оба ставил, оба в тестовой сети проходили, а в обычной нет



pragma solidity ^0.4.21;

contract TESTtoken {

    uint256 totalSupply_;
    string public constant name = "TEST token";
    string public constant symbol = "TST";
    uint8 public constant decimals = 18;
    uint256 public constant initialSupply =1000000000000000000000000 ;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
   
    function totalSupply() public view returns (uint256){
        return totalSupply_;
    }

    function balanceOf(address _owner) public view returns (uint256){
        return balances[_owner];
    }

    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
  }

    function transfer(address _to, uint256 _value) public returns (bool ) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value);
        balances[msg.sender] = balances[msg.sender] - _value;
        balances[_to] = balances[_to] + _value;
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);
        balances[_from] = balances[_from] - _value;
        balances[_to] = balances[_to] + _value;
        allowed[_from][msg.sender] = allowed[_from][msg.sender] - _value;
        emit Transfer(_from, _to, _value);
        return true;
        }

     function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
     allowed[msg.sender][_spender] = allowed[msg.sender][_spender] + _addedValue;
     emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
     return true;
     }
 
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {

        allowed[msg.sender][_spender] = 0;
    }
        else {
        allowed[msg.sender][_spender] = oldValue - _subtractedValue;
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
    }

    function TESTtoken() public {
        totalSupply_ = initialSupply;
        balances[msg.sender] = initialSupply;
        emit Transfer(0x0, msg.sender, initialSupply);
    }
}

member
Activity: 196
Merit: 52
Выложи здесь код своего контракта, если это конечно не военная тайна.
jr. member
Activity: 75
Merit: 2
Возможные ошибки развертывания контракта из mew.
- При вставке bytecode из remix копируются bytecode вместе с "opcodes", там нужно выбрать "object".
- Возможно неправильно выбрано имя контракта.

А вообще конечно нужно разворачивать контракт из remix с metamask без mew.
Если кошелек в mew, то перенести privatkey в metamask.
Это старая версия remix, она проще и понятнее:
https://remix.ethereum.org/#optimize=false&evmVersion=null&version=soljson-v0.4.13+commit.0fb4cb1a.js&appVersion=0.7.7


попробовал сделать compile в старой версии.
вижу в коде opcodes и тут.
но сделал тестовый deploy в ropsten через remix напрямую, токен создался.
повторил все те же самые действия в основной сети, и опять то же самое, не деплоит
в общем, на данный момент в тестовой все работает, в основной ничего не работает.
действия при этом одни и те же

UPD:

делаю апдейт напрямую через старую версию, там действительно bytecode без opcodes.
в тестовой сети пара минут и готово, в обычной ставлю гвей выше самого высокого на ethgasstation, оно надолго ставит транзакцию в ожидание,
но на этом и все в общем то. ничего не проходит
member
Activity: 196
Merit: 52
Возможные ошибки развертывания контракта из mew.
- При вставке bytecode из remix копируются bytecode вместе с "opcodes", там нужно выбрать "object".
- Возможно неправильно выбрано имя контракта.

А вообще конечно нужно разворачивать контракт из remix с metamask без mew.
Если кошелек в mew, то перенести privatkey в metamask.
Это старая версия remix, она проще и понятнее:
https://remix.ethereum.org/#optimize=false&evmVersion=null&version=soljson-v0.4.13+commit.0fb4cb1a.js&appVersion=0.7.7
jr. member
Activity: 75
Merit: 2
Возможно я понял, что у вас происходит.
Я все думал - зачем вам промежуточное звено в виде MEW?
Достаточно remix+metamask.

Какой вариант вы использовали:
1. У вас кошелек на MEW?
2. Вы разворачиваете контракт на MEW с использованием bytecode и abi, которуе получили в remix?

1. да
2. да, именно так. в метамаск стоит цена, я иду в advanced, там на выбор еще три варианта. я пробовал все.

через ремикс пробовал, не получилось

p.s.

через mew я сначала делал тестовые в ropsten, поэтому мне там все показалось удобным и знакомым
member
Activity: 196
Merit: 52
Возможно я понял, что у вас происходит.
Я все думал - зачем вам промежуточное звено в виде MEW?
Достаточно remix+metamask.

Какой вариант вы использовали:
1. У вас кошелек на MEW?
2. Вы разворачиваете контракт на MEW с использованием bytecode и abi, которуе получили в remix?
jr. member
Activity: 75
Merit: 2
Не совсем понятно что у вас происходит.
По идее все должно получаться.
Можно ли взглянуть на отмененную транзакцию на etherscan?


в тот то и дело, что ничего не происходит. делаю деплой контракта на токен в mew, в metamask делаю оплату,
он минут 10-20 процессит, потом выдает что первые 50 блоков не приняли, но возможно примут потом.
транзакций на etherscan нет никаких
member
Activity: 196
Merit: 52
Не совсем понятно что у вас происходит.
По идее все должно получаться.
Можно ли взглянуть на отмененную транзакцию на etherscan?
jr. member
Activity: 75
Merit: 2
Все верно, выбераешь TestToken/
По остальному -
Чтобы TestToken работал, ему нужно операться на своего рода схему-инструкцию. Вот он и опирается на базовый интерфейс ERC-20 и на библиотеку Safe Math. То же самое придется делать и при создании токенов ERC - 223 и 721, да и других. Если этого не делать, то получишь что-то вроде автомобиля без двигателя.
Да все это описано на кодерах в гайде про ERC-20, который ты вроде как читал, перечитай еще раз, там неплохо все описано.

я гуманитарий, какие то простые вещи в общих чертах я еще способен понять, а вот все что касается кода, тут уже сложности возникают.

вот другой вопрос, чтобы отдельную ветку не создавать. деплою я этот свой первый контракт в сеть через MEW и metamask. оно мне там показывает стоимость, ну например 16 долл эквивалент. на ethgasstation стоимость gwei в районе 40-50. отправляю контракт, он минут 10 процессит и выкидывает как невошедший в блоки. уже попыток 20 совершил, немного меняя стоимость оплаты, не помогает. почему?

p.s.

в ropsten тестовые токены залетают за пару минут в блокчейн, а тут вот никак
member
Activity: 196
Merit: 52
Все верно, выбераешь TestToken/
По остальному -
Чтобы TestToken работал, ему нужно операться на своего рода схему-инструкцию. Вот он и опирается на базовый интерфейс ERC-20 и на библиотеку Safe Math. То же самое придется делать и при создании токенов ERC - 223 и 721, да и других. Если этого не делать, то получишь что-то вроде автомобиля без двигателя.
Да все это описано на кодерах в гайде про ERC-20, который ты вроде как читал, перечитай еще раз, там неплохо все описано.
jr. member
Activity: 75
Merit: 2
Делаю тестовые токены на разных шаблонах, возник вопрос по компиляции в remix. В интернетах нашел два шаблона, один покороче, другой чуть подлиннее.
На одном шаблоне коде .sol файл получается один вида tokenTEST, а в другом три - один по названию токена, второй SafeMath.sol, третий ERC20Interface.
Во втором случае, какой из файлов деплоить, правильно ли я понимаю что только tokenTEST?
И что вот эти два - SafeMath и ERC20Interface в себе несут, почему они отдельно появляются в дополнение к первому?
Jump to: