Ethereum Request for Comment ์ ์ฝ์๋ก ์ด๋๋ฆฌ์์์ ํต์ฉ๋๋ ํ์ค์ด๋ค.
์ด๋๋ฆฌ์์์ ๊ฐ๋ฐํ ํ์ค์ด ์๋ ์ธ๋ถ์์ ์ ์ํ ์์ด๋์ด๊ฐ ๋ง์ ๋์๋ฅผ ์ป์ด ํ์ค์ด ๋ ๊ฒฝ์ฐ์ด๋ค.
ERC-20
- EIPs(Ethereum Improvement Proposals)์์ ๊ด๋ฆฌํ๋ ๊ณต์ ํ๋กํ ์ฝ
- ์ด๋๋ฆฌ์ ๋คํธ์ํฌ์์ ์ ํ ํ์ค ํ ํฐ ์คํ
- ์ด๋๋ฆฌ์๊ณผ ๊ตํ์ด ๊ฐ๋ฅํ๋ฉฐ ์ด๋๋ฆฌ์ ์ง๊ฐ์ผ๋ก ์ ์ก ๋ํ ๊ฐ๋ฅ
- ๋์ฒด๊ฐ๋ฅํ ํฐ์ผ๋ก ๋ฐํ๋ ํ ํฐ๋ค์ ๋์ผํ ๊ฐ์น๋ฅผ ๊ฐ์ง๋ฉฐ ์ํธ๊ตํ์ด ๊ฐ๋ฅ
ERC-721
- NFT(Non Fungible Token, ๋์ฒด๋ถ๊ฐํ ํฐ)์ ํ์ค
- ๋ฐํ๋ ํ ํฐ์ ๊ฐ์ ๊ณ ์ ํ ๊ฐ์น๋ฅผ ์ง๋
- ERC-165 ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ
ERC-1155
- ์ด๋๋ฆฌ์ ์ํธํํ ์์ดํ ํ์ค
- ERC-20๊ณผ ERC-721์ ๊ฒฐํฉํ ํํ
- ํ๋์ ์ปจํธ๋ํธ๋ก ์ฌ๋ฌ ์ ํ์ ํ ํฐ์ ๋ฐํ์ด ๊ฐ๋ฅ
ERC-1155 ๋ฐํ ๊ณผ์
URI ์ฐ๊ฒฐ
- ์ฌ๋ฌ ํ ํฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด์ repo์ URI๋ฅผ ์ปจํธ๋ํธ ์์ฑ์์ ์ ๋ฌ
https://ipfs.io/ipfs/DirCID/{id}.json
- ํด๋น repo ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ id(2์ง์, 64์)๋ก ์๋ณ
- ์ํ๋ id๋ฅผ ์ง์ ํด ํ ํฐ ๋ฐํ์ ์์ฒญํ๋ฉด ํ ํฐ ์ปจํธ๋ํธ์์ ์ด๋ฅผ ์ํ
_mint(account, id, amount, data)
๊ฐ๋ฐ ํ๊ฒฝ
- Client: Macbook M1 pro
- OS: macOS Monterey
- ์ธ์ด: Solidity, javascript
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ: OpenZepplin-ERC1155, js-ipfs
- ํ๋ ์์ํฌ: Truffle v5.5
- ์ด๋๋ฆฌ์ ๋คํธ์ํฌ: geth ๊ธฐ๋ฐ ๋ก์ปฌ ํ๋ผ์ด๋น ๋คํธ์ํฌ
์ฌ์ ์ค๋น
- OpenZepplin ์ค์น
$ npm install @openzeppelin/contracts
- json ํ์์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑ
{ "id":0, "name":"MMT", "amount":1000000000000000000, "image":"QmbxdSNTNvMF9YUF6m9PoZeDg6pM5jwjVL6uKU2PuhMkuC", "producer":"0xb7C119DB007c25DE1770b15A21d41331b2071F8A", "description":"This is metadata of Meat&Milk Token" }
- IPFS repo ์์ฑ
var dir = "/testDir"; var ipfs = await Ipfs.create(); await ipfs.files.mkdir(dir);
๋ฐฑ์๋
Token.sol (smart contract)
No. ํจ์๋ช ๊ธฐ๋ฅ 1 constructor(dirCID) contract ๋ฐฐํฌ ์ ๋๋ ํ ๋ฆฌ URI๋ฅผ ์ ๋ฌํด ์ฐ๊ฒฐ 2 createItem(amount, dirCID) ์๋ก์ด ํ ํฐ์ amount๋งํผ ๋ฐํ ํ ์๋ก์ด URI ํ ๋น
deploy_smart_contract.js (Truffle)
No. ํจ์๋ช ๊ธฐ๋ฅ 1 deployer.deploy(ItemContract, dir) ItemContract ๋ฐฐํฌ
ItemContract ์์ฑ์๊ฐ ์๊ตฌํ๋ ๋งค๊ฐ๋ณ์(dir์ CID) ์ ๋ฌ
ํ๋ก ํธ์๋
metadata.js
No. ํจ์๋ช ๊ธฐ๋ฅ 1 getDirCID(dir) MFS path(dir)์ CID๋ฅผ return 2 mkdir(dir, ipfs) IPFS์ MFS path(dir)์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ 3 buildMetaData(id, name, amount, imageCID, ipfs) ํ ํฐ ์ ๋ณด๋ฅผ json ํ์์ผ๋ก ์ฎ์ด ipfs์ ์ ๋ก๋ 4 readMetadata(id, dir, ipfs) IPFS์ ์ ๋ก๋ ๋ metadata ์ ๋ณด๋ฅผ ์ฝ์ด ๊ตฌ์กฐ์ฒด๋ก ๋ฆฌํด