Accounts
錢包中的多種代幣類型
我正在尋找執行私人乙太坊區塊鏈。但我想先檢查一下,一個帳戶是否可以持有多個自定義令牌?
例如,一個賬戶是否可以持有表示非常簡單積分的代幣(例如 100 個代幣 = 100 個積分),以及另一個唯一的代幣(例如只能收集一次)。這是一個包含 2 種令牌的範例,但可能還有更多。
是的。您可以在私有乙太坊區塊鏈上執行多個自定義令牌。
有一個代幣標準ERC:代幣標準 #20,它標準化了乙太坊區塊鏈上代幣智能合約的方法和事件。您可以在https://etherscan.io/token-search找到乙太坊主網區塊鏈上符合 ERC20 的代幣聯繫人列表。
每個符合 ERC20 的代幣合約都應該有如下的資料結構來儲存使用者的賬戶和代幣餘額:
mapping (address => uint256) balances;
每個符合 ERC20 的代幣合約都將具有以下方法:
- 查詢屬於某個地址的代幣餘額
function balanceOf(address _owner) constant returns (uint256 balance)
- 將代幣餘額從一個地址轉移到另一個地址
function transfer(address _to, uint256 _value) returns (bool success)
這是一個基於The DAO的簡化代幣合約(有 5000 萬美元的錯誤)原始碼:
contract TokenA { mapping (address => uint256) balances; event Transfer(address indexed _from, address indexed _to, uint256 _amount); function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function transfer(address _to, uint256 _amount) noEther returns (bool success) { if (balances[msg.sender] >= _amount && _amount > 0) { balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; } else { return false; } } }
正如您將在合約程式碼中看到的,您的地址將只是智能合約映射表中的一個條目。您可以擁有多個代幣合約,每個合約都有自己的映射表。您可以在這些代幣合約中的一個或多個映射表中存在相同的地址。