๐ช ERC๋?
Ethereum Request for Comment ์ ์ฝ์๋ก ์ด๋๋ฆฌ์์์ ํต์ฉ๋๋ ํ์ค์ด๋ค.
์ด๋๋ฆฌ์์์ ๊ฐ๋ฐํ ํ์ค์ด ์๋ ์ธ๋ถ์์ ์ ์ํ ์์ด๋์ด๊ฐ ๋ง์ ๋์๋ฅผ ์ป์ด ํ์ค์ด ๋ ๊ฒฝ์ฐ์ด๋ค.
๐ ๋ํ์ ์ธ ERC ํ ํฐ ์ฌ๋ก
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) ์ ๋ฌ |
ํ๋ก ํธ์๋
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 ์ ๋ณด๋ฅผ ์ฝ์ด ๊ตฌ์กฐ์ฒด๋ก ๋ฆฌํด |
์ฐธ๊ณ ์๋ฃ