동도리 개발 로그

ERC1155 SmartContract 정리 본문

블록체인/이더리움

ERC1155 SmartContract 정리

동돌이 2022. 3. 21. 12:08
반응형

현재 회사에서 ERC1155를 기반으로한 서비스를 만들면서 들었던 생각을 정리 하여한다. 

 

처음 접했을때 기존의 ERC20 이나 ERC721는 명확하게 어떤식으로 사용되는지는 그림이 그려지는데 ERC1155는 그림이 그려지지 않았다. 

'20과 721가 혼합되어 개선된 스마트 컨트렉트가 1155 이다.'

말은 쉽지 뭘 어떻게 쓴다는 것인지...

 

https://docs.openzeppelin.com/contracts/4.x/erc1155

 

ERC1155 - OpenZeppelin Docs

We’ll use ERC1155 to track multiple items in our game, which will each have their own unique attributes. We mint all items to the deployer of the contract, which we can later transfer to players. Players are free to keep their tokens or trade them with o

docs.openzeppelin.com

역시 개발자는 말보다 코드로 보는게 빨리 이해가 되는것 같다. 

 

ERC721 처럼 NFT 스마트 컨트렉트 안에

여러개의 토큰을 생성 할 수 있으며, 해당 토큰의 갯수도 여러개로 만들 수 있다. 

한개만 만들수도, 여러개를 만들 수도 있는 것이다. 

 

// contracts/GameItems.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/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;

    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, "");
        _mint(msg.sender, SWORD, 10**9, "");
        _mint(msg.sender, SHIELD, 10**9, "");
    }
}

GOLD, SILVER, THORS_HAMMER, SWORD, SHIELD 와 같은 토큰을 만들고 

초기에 해당 토큰별로 갯수를 지정하여 mint 해주는 example이다.

 

0,1,2,3,4와 같은 id는 따로 지정이 가능하다. 

 

컨트렉트의 owner는 초기의 갯수 외 추가로 발급(mint)가능하다. 

 

 

반응형