算是為遊戲而生的一個合約,最大的好處是可以融合不同的代幣進行打包處理
直接來看Code的部分
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.5.0/contracts/token/ERC1155/ERC1155.sol>";
contract GameItems is ERC1155 {
uint256 public constant GOLD = 0; // 金幣
uint256 public constant SILVER = 1; // 銀幣
uint256 public constant THORS_HAMMER = 2; // 雷神之鎚
uint256 public constant SWORD = 3; // 劍
uint256 public constant SHIELD = 4; // 頓
uint256[] listIds =[GOLD, SILVER, THORS_HAMMER, SWORD, SHIELD];
constructor() ERC1155("<https://game.example/api/item/{id}.json>") {
_mint(msg.sender, GOLD, 10**18, "");
_mint(msg.sender, SILVER, 10**27, "");
_mint(msg.sender, THORS_HAMMER, 1, ""); // ERC721 的表示
_mint(msg.sender, SWORD, 10**9, "");
_mint(msg.sender, SHIELD, 10**9, "");
}
}
我們發現其實該有的函數都有
BatchTransferFrom
TransferFrom
ApprovalFrom
而裡面我們分了很多的代幣
有金幣、銀幣、劍...
這樣的使用確實對遊戲是非常好用的
劍可能都是劍只是功能不同可以取代
除非是神器之類的,我們可以在另外定義
我們能看到滿個事件裡面都有出現,ids、amounts 這兩個部分其實就是控制多個代幣,所以我們呼叫是[0],[1000] 這樣的方式
我們可以看到ERC-1155多個代幣的項目節省大量氣體(想像一下部署好幾個ERC20....)。 🤮
無需為每種代幣類型部署新合約,單個 ERC-1155 代幣合約可以保存整個系統狀態,從而降低部署成本和復雜性。超棒 🎉🎉🎉🎉
有任何問題可反饋: [email protected]