ERC20 — Как разделить первоначальную поставку токенов на несколько учетных записей?

Может ли кто-нибудь объяснить мне, почему невозможно разделить первоначальный общий запас с помощью события Transfer на несколько адресов, которые не являются адресом _msgSender()?

Цель здесь состоит в том, чтобы чеканить токены с адресом 0x00 на нескольких кошельках (12% в кошельке разработчиков, 5% в маркетинговом кошельке и 3% в другом кошельке), но непосредственно в конструкторе, не используя внешнюю функцию, которую мне придется вызывать. в сценарии во время развертывания.

Но это не работает, и я не получаю никаких ошибок... Действительно не понимаю

Это мой код:

constructor () public payable{
    uint256 _tTotransfer = _tTotal;

    uint256 _tToDevs = (_tTotal.mul(12)).div(100);
    _tTotransfer = _tTotransfer.sub((_tTotal.mul(12)).div(100));

    uint256 _tToMarketing = (_tTotal.mul(5)).div(100);
    _tTotransfer = _tTotransfer.sub((_tTotal.mul(5)).div(100));

    uint256 _tToApes = (_tTotal.mul(3)).div(100);
    _tTotransfer = _tTotransfer.sub((_tTotal.mul(3)).div(100));

    _rOwned[_msgSender()] = _rTotal;

    emit Transfer(address(0), _msgSender(), _tTotransfer); 
    emit Transfer(address(0), _devsWallet, _tToDevs); 
    emit Transfer(address(0), _marketingWallet, _tToMarketing); 
    emit Transfer(address(0), _apesWallet, _tToApes);
    
}

Также я не понимаю, почему невозможно напрямую отчеканить общий запас на другом кошельке (не разделить, а целиком), чем _msgSender.

Спасибо, ребята, надеюсь, кто-нибудь мне поможет...


person LeClient    schedule 27.04.2021    source источник


Ответы (1)


Предполагая, что _rOwned содержит фактический баланс токенов каждого адреса:

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


Эта строка устанавливает баланс _msgSender() на _tTotal, что вам не нужно согласно вашему описанию.

_rOwned[_msgSender()] = _rTotal; // incorrect

Вы хотите, чтобы у них были оставшиеся _tTotransfer.


И то же самое касается других первоначальных владельцев

_rOwned[_msgSender()] = _tTotransfer; // replace the above line to this
emit Transfer(address(0), _msgSender(), _tTotransfer);

_rOwned[_devsWallet] = _tToDevs;
emit Transfer(address(0), _devsWallet, _tToDevs);

rOwned[_marketingWallet] = _tToMarketing;
emit Transfer(address(0), _marketingWallet, _tToMarketing);

rOwned[_apesWallet] = _tToApes;
emit Transfer(address(0), _apesWallet, _tToApes);
person Petr Hejda    schedule 28.04.2021
comment
Вы помогли мне понять, как это работает! Большое спасибо !! - person LeClient; 28.04.2021