Go-Ethereum
如何使用 RPC 檢索令牌的小數位數?
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 合約地址並獲取其十進制值。看這裡
我希望這有幫助!