Notice
Recent Posts
Recent Comments
Link
devops
ERC1155, Multi-token standard 본문
반응형
ERC1155
ERC1155는 가스 효율적인 Token Contract를 만들기 위해서 이전 표준을 최대한 활용하기 위해 만들어진 토큰 표준이다. 좀 더 이해하기 쉽게 얘길하자면, 하나의 컨트랙트에서 여러 토큰을 발행해서 관리한다고 볼 수 있다. 심지어 ERC20, ERC721 모두 지원한다. 그래서 Multi-token standard라고 불린다.
- ERC1155의 특징은 단일 스마트 컨트랙트를 이용해서 여러 토큰을 한번에 표현
- 각 토큰 마다 고유한 id 를 기준으로 구분된 balanceOf 메소드를 호출 가능
- 모든 state를 하나의 컨트랙트에 존재하기 때문에 단일 트랜잭션에서 다양한 토큰 관리 가능
Features
- Batch Transfer: 여러 에셋을 하나의 Tx로 전송가능
- Batch Balance: 여러 에셋을 하나의 콜로 balance 확인 가능
- Batch Approval: 모든 토큰을 하나의 주소에 approve 가능
- Hooks: token hook 받기
- NFT Support: 발행량이 1이라면, NFT로 사용가능
- Safe Transfer Rules: 안전한 Transfer rule
위 기능들 중 Batch Transfer와 Hooks만 한 번 보자.
Batch Transfer
// ERC-20
function transferFrom(address from, address to, uint256 value) external returns (bool);
// ERC-1155
function safeBatchTransferFrom(
address _from,
address _to,
uint256[] calldata _ids,
uint256[] calldata _values,
bytes calldata _data
) external;
ERC20는 transferFrom 메소드로 하나의 Tx 콜로 하나의 토큰 전송만 가능하지만 ERC1155는 에셋의 고유번호인 ids가 array로 입력할 수 있어 여러 토큰을 한번에 trasfer 하는 것이 가능하다.
ids = [1, 3], values = [100, 5] 로 transfer 하게되면 id가 1인 에셋 100개가 _to로 전송되고, 3인 에셋은 4개만 전송된다고 보면 된다.
Receive Hook
function onERC1155BatchReceived(
address _operator,
address _from,
uint256[] calldata _ids,
uint256[] calldata _values,
bytes calldata _data
) external returns(bytes4);
receive hook은 토큰이 특정 주소로 전송될 때 호출되는 함수다. ERC1155는 EIP165를 지원하기 때문에 이를 이용해서 전송된 토큰을 안전하게 처리하기 위해 수신하는 컨트랙트가 인터페이스를 구현하는지 체크한다.
bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
onERC1155BatchReceived 를 호출하여 bytes4로 변환되어 받는 magic value가 있으면 존재하는 것으로 판단하고 다음 액션을 취한다.
반응형
'개발 > Solidity' 카테고리의 다른 글
ERC-721, Non-Fungible Token (0) | 2023.11.05 |
---|---|
ERC-6551, NFT Bound Account (0) | 2023.11.05 |
OpenZeppelin ERC-20 Solidity 코드 리뷰 (1) | 2023.10.09 |
Comments