算是為遊戲而生的一個合約,最大的好處是可以融合不同的代幣進行打包處理

直接來看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, "");
    }
}

截圖 2022-04-23 下午3.05.29.png

我們發現其實該有的函數都有

BatchTransferFrom

TransferFrom

ApprovalFrom

而裡面我們分了很多的代幣

有金幣、銀幣、劍...

這樣的使用確實對遊戲是非常好用的

劍可能都是劍只是功能不同可以取代

除非是神器之類的,我們可以在另外定義

我們能看到滿個事件裡面都有出現,ids、amounts 這兩個部分其實就是控制多個代幣,所以我們呼叫是[0],[1000] 這樣的方式

截圖 2022-04-23 下午3.10.29.png

我們可以看到ERC-1155多個代幣的項目節省大量氣體(想像一下部署好幾個ERC20....)。 🤮

無需為每種代幣類型部署新合約,單個 ERC-1155 代幣合約可以保存整個系統狀態,從而降低部署成本和復雜性。超棒 🎉🎉🎉🎉

9. Utils-Cryptography

有任何問題可反饋: [email protected]