ERC-1155
ERC-1155 是一份能同時管理許多種不同代幣的智慧合約。想像一款電玩遊戲:單一間商店合約可能同時持有一百萬枚一模一樣的金幣、一萬瓶相同的治療藥水,以及寥寥幾把獨一無二的傳說之劍。若用 ERC-20,每種道具都得各開一份合約;那些劍還得用 ERC-721 另開合約;ERC-1155 則把它們全部收進同一個屋簷下,僅以一個數字代幣 id 來區分。
在機制上,餘額存放在一個「代幣 id → 持有者 → 數量」的巢狀映射中。某個總供給量為一的代幣 id 就像非同質化代幣;供給量很大的代幣 id 則像同質化代幣,因此同一套標準同時涵蓋兩者。其招牌函式包括 balanceOf(account, id)、一次查多筆的 balanceOfBatch、safeTransferFrom(from, to, id, amount, data),以及 safeBatchTransferFrom——後者能在單一筆原子交易裡一次搬動好幾種不同的 id。這種批次處理正是它最大的效率優勢:鑄造或轉移一百種道具,所耗的 gas 遠低於分別呼叫一百次 ERC-20 或 ERC-721。
元資料採用一種 URI 慣例:合約回傳一段含有子字串 {id} 的範本字串,用戶端再把它替換成以小寫十六進位、補零至 64 個字元表示的代幣 id。ERC-1155 同樣強制安全轉移的接收方掛鉤:若收款方是合約,它必須實作 onERC1155Received(或批次版本)並回傳正確的魔術值,否則轉移會回滾,避免代幣卡死在無法處理它們的合約裡。此標準源自 Enjin,廣泛用於遊戲與市集。
function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external;
ERC-1155 既非「只能做 NFT」也非「只能做同質化代幣」——同質化與否是每個 id 各自的性質,由你為該 id 鑄造多少枚來決定,這正是它適合遊戲與多版本商品的原因。