Этикетки и десятичные знаки Ethereum

Каков наилучший способ обработки десятичных знаков при создании валюты?

Давайте рассмотрим пример. У меня есть KARLCOIN (KARL), и у меня их 1 000 000, а токен имеет 6 десятичных мест. Этот токен также будет иметь crowdfund, где 100 KARL = 1 ETH (0,01 ETH /KARL).

Когда я создаю этот контракт, я должен сделать что-то вроде:

// Constructor
 function token() {
    owner = msg.sender;
   totalSupply = 1000000;
  balances[owner] = totalSupply;
  decimals = 6;
  symbol = "KARL";
  }    

И тогда этот токен также имеет функцию для передачи.

Теперь, как я рассчитываю, переношу и показываю эти суммы? Например, 1 000 000 КАРЛ составляет 1 000 000 000 000 единиц наименьшей единицы моей монеты. Назовем его microKarl, или mk.

Означает ли это, что totalSupply в моем конструкторе на самом деле составляет 1,000,000,000,000? Когда я передаю суммы людям, передаю ли их в mK? В основном, сумма 1 000 000 фунтов стерлингов, чтобы получить ее в форме микрокарла? Как MyEtherWallet и MetMask будут знать, как отобразить правильную сумму?

Если бы я использовал web3 для его отображения, я мог бы просто выполнить математику и отобразить ее сам. Получите сумму в mK, умножьте ее на 0,000001, а затем будьте в пути. Правильно? Или я здесь?

Я сделал токен и сделал что-то вроде этого (это была долгая ночь) и отправил себе жетоны, а в MetaMask он сказал правильную сумму. На Etherscan это не так, оно показывает гораздо меньшую сумму, а также говорит, что десятичные знаки «18», когда MetaMask схватил их как 6, просто вставив адрес контракта в.

Я немного запутался в децимализации токенов и чувствую, что у меня нет основы того, что я делаю, чтобы отлаживать это. Любая ясность будет оценена.

5 голосов | спросил diabetesjones 7 J000000Friday17 2017, 08:57:51

2 ответа


2

Если ваш токен соответствует стандарту ERC20 (и он должен, если вы хотите, чтобы он обрабатывался кошельками или клиентскими приложениями), вы можете включить (это не обязательно, но обрабатывается большинством клиентов) десятичные значения .

Итак, ваш контракт должен содержать что-то вроде:

uint8 public constant decimals = 6;

И ваш код должен принимать суммы в наименьших возможных единицах.

ответил Michał Kłeczek 7 J000000Friday17 2017, 09:12:25
1

uint256 public constant decimals = 6; uint256 public constant totalSupply = 1000000 * 10 ** 6;

ответил riadh zar 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 27 Sep 2017 11:49:17 +0300 2017, 11:49:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132