Go-Ethereum

如何使用 RPC 檢索令牌的小數位數?

  • July 4, 2018

ERC20 標準中似乎沒有任何義務在任何地方提供小數位數,但 etherscan 和所有其他服務可以自動確定令牌的小數位數。這是怎麼做的?

是否有一種自動方式(通過 RPC 到 geth)來獲取某個合約定義的令牌的小數位數?

對於 ERC20 代幣,小數位數在部署在該代幣地址上的合約中定義。

例子:

pragma solidity ^0.4.11;
import 'zeppelin/contracts/math/SafeMath.sol';
import 'zeppelin/contracts/token/ERC20.sol';
contract ExampleCoin is ERC20 {
 using SafeMath for uint256;
 string public symbol = "EXAMPLE";
 string public name = "ExampleCoin";
 uint8 public decimals = 18;
 mapping (address => uint256) balances;
 mapping (address => mapping (address => uint256)) allowed;
 function ExampleCoin() public {
   balances[msg.sender] = 1000 * (10 ** uint256(decimals));
   totalSupply = 1000 * (10 ** uint256(decimals));
 }
}

每個 ERC20 合約都遵循相同的標準。它們都有一個公開的十進制值(謝謝你打開 Zeppelin)

您只需要從合約地址中讀取該十進制值即可。

更令人興奮的是,您可以使用通用 ABI 連接到任何 ERC20 合約地址並獲取其十進制值。看這裡

我希望這有幫助!

引用自:https://ethereum.stackexchange.com/questions/52683