Bitcoin Forum
March 28, 2024, 10:12:06 AM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Создание нового токена на Ethereum - вопрос по remix  (Read 243 times)
shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 06, 2020, 05:01:48 PM
 #1

Делаю тестовые токены на разных шаблонах, возник вопрос по компиляции в remix. В интернетах нашел два шаблона, один покороче, другой чуть подлиннее.
На одном шаблоне коде .sol файл получается один вида tokenTEST, а в другом три - один по названию токена, второй SafeMath.sol, третий ERC20Interface.
Во втором случае, какой из файлов деплоить, правильно ли я понимаю что только tokenTEST?
И что вот эти два - SafeMath и ERC20Interface в себе несут, почему они отдельно появляются в дополнение к первому?
1711620726
Hero Member
*
Offline Offline

Posts: 1711620726

View Profile Personal Message (Offline)

Ignore
1711620726
Reply with quote  #2

1711620726
Report to moderator
1711620726
Hero Member
*
Offline Offline

Posts: 1711620726

View Profile Personal Message (Offline)

Ignore
1711620726
Reply with quote  #2

1711620726
Report to moderator
1711620726
Hero Member
*
Offline Offline

Posts: 1711620726

View Profile Personal Message (Offline)

Ignore
1711620726
Reply with quote  #2

1711620726
Report to moderator
Bitcoin mining is now a specialized and very risky industry, just like gold mining. Amateur miners are unlikely to make much money, and may even lose money. Bitcoin is much more than just mining, though!
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1711620726
Hero Member
*
Offline Offline

Posts: 1711620726

View Profile Personal Message (Offline)

Ignore
1711620726
Reply with quote  #2

1711620726
Report to moderator
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
October 06, 2020, 10:57:50 PM
 #2

Все верно, выбераешь TestToken/
По остальному -
Чтобы TestToken работал, ему нужно операться на своего рода схему-инструкцию. Вот он и опирается на базовый интерфейс ERC-20 и на библиотеку Safe Math. То же самое придется делать и при создании токенов ERC - 223 и 721, да и других. Если этого не делать, то получишь что-то вроде автомобиля без двигателя.
Да все это описано на кодерах в гайде про ERC-20, который ты вроде как читал, перечитай еще раз, там неплохо все описано.
shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 07, 2020, 08:53:06 AM
 #3

Все верно, выбераешь TestToken/
По остальному -
Чтобы TestToken работал, ему нужно операться на своего рода схему-инструкцию. Вот он и опирается на базовый интерфейс ERC-20 и на библиотеку Safe Math. То же самое придется делать и при создании токенов ERC - 223 и 721, да и других. Если этого не делать, то получишь что-то вроде автомобиля без двигателя.
Да все это описано на кодерах в гайде про ERC-20, который ты вроде как читал, перечитай еще раз, там неплохо все описано.

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

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

p.s.

в ropsten тестовые токены залетают за пару минут в блокчейн, а тут вот никак
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
October 07, 2020, 10:31:46 PM
 #4

Не совсем понятно что у вас происходит.
По идее все должно получаться.
Можно ли взглянуть на отмененную транзакцию на etherscan?
shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 08, 2020, 04:45:22 PM
 #5

Не совсем понятно что у вас происходит.
По идее все должно получаться.
Можно ли взглянуть на отмененную транзакцию на etherscan?


в тот то и дело, что ничего не происходит. делаю деплой контракта на токен в mew, в metamask делаю оплату,
он минут 10-20 процессит, потом выдает что первые 50 блоков не приняли, но возможно примут потом.
транзакций на etherscan нет никаких
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
October 08, 2020, 09:50:24 PM
 #6

Возможно я понял, что у вас происходит.
Я все думал - зачем вам промежуточное звено в виде MEW?
Достаточно remix+metamask.

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

Activity: 75
Merit: 2


View Profile
October 08, 2020, 10:10:05 PM
Last edit: October 08, 2020, 10:23:10 PM by shlomogold
 #7

Возможно я понял, что у вас происходит.
Я все думал - зачем вам промежуточное звено в виде MEW?
Достаточно remix+metamask.

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

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

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

p.s.

через mew я сначала делал тестовые в ropsten, поэтому мне там все показалось удобным и знакомым
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
October 09, 2020, 10:48:56 PM
Merited by Symmetrick (1)
 #8

Возможные ошибки развертывания контракта из 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
shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 10, 2020, 08:16:57 PM
Last edit: October 11, 2020, 11:01:11 AM by shlomogold
 #9

Возможные ошибки развертывания контракта из 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, оно надолго ставит транзакцию в ожидание,
но на этом и все в общем то. ничего не проходит
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
October 11, 2020, 09:05:19 PM
 #10

Выложи здесь код своего контракта, если это конечно не военная тайна.
shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 11, 2020, 09:36:42 PM
 #11

Выложи здесь код своего контракта, если это конечно не военная тайна.

не тайна, код в открытых брал. это копия какого-то мануала-примера, нашел на 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);
    }
}

shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 17, 2020, 03:26:36 PM
Last edit: October 17, 2020, 04:25:39 PM by shlomogold
Merited by stmar (1)
 #12


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


проблема решена. вырубил mew, зашел через метамаск в remix, сделал компиляцию
кода и задеплоил за 30 секунд
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
October 18, 2020, 10:40:48 PM
 #13

проблема решена. вырубил mew, зашел через метамаск в remix, сделал компиляцию
кода и задеплоил за 30 секунд
Какую же версию remix использовал - старую или новую?
shlomogold (OP)
Jr. Member
*
Offline Offline

Activity: 75
Merit: 2


View Profile
October 18, 2020, 11:33:49 PM
 #14

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

старую, ту что ты мне дал.
но там скорее с mew был глюк, тк я даже сам себе эфиры с одного адреса на другой не мог послать, пока в него был залогинен
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!