<style> .textleft { text-align:left; } .reveal, .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 { font-family:Arial, Microsoft JhengHei;} .small-font { font-size: 20px !important; } .reveal .progress { height: 14px !important; } .progress span { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAMCAIAAAAs6UAAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCQzIyREQ0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCQzIyREU0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQ0JDMjJEQjRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQ0JDMjJEQzRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PovDFgYAAAAmSURBVHjaYvjPwMAAxjMZmBhA9H8INv4P4TPM/A+m04zBNECAAQBCWQv9SUQpVgAAAABJRU5ErkJggg==) repeat-x !important; } .progress span:after, .progress span.nyancat { content: ""; background: url(data:image/gif;base64,R0lGODlhIgAVAKIHAL3/9/+Zmf8zmf/MmZmZmf+Z/wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkJBNjY5RTU1NEJFMzExOUM4QUM2MDAwNDQzRERBQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCREIzOEIzMzRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCREIzOEIzMjRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM1QkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyQkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8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) ; width: 36px !important; height: 21px !important; border: none !important; float: right; margin-top: -7px; margin-right: -10px; transform: scale(1.5,1.5); } .reveal section img { height: 550px !important; } #explore .reveal section img { max-height: 95%; } #rarible { height: 150px !important; height: 150px !important; } </style> <!-- .slide: data-transition="slide" --> # NFT 介紹(EVM) @Kais(VagrantPi) ###### tags: `slide`, `簡報` --- <!-- .slide: data-transition="slide" --> ## Agenda - NFT 介紹 - 什麼是 ERC721 / ERC1177? - 如何上架到 OpenSea 或其他 NFT 市場 - NFT 的鏈上互動(通過 explore) - NFT metadata 存放地方:IPFS、普通 URL - IPFS 運作原理 - 普通 URL - Q&A --- <!-- .slide: data-transition="convex" --> ## NFT 介紹 ---- <!-- .slide: data-transition="convex" --> NFT(Non-Fungible Token) 「非同質化」是指物品擁有 - 不可替代性 - 不可切割 - 唯一性 ---- <!-- .slide: data-transition="convex" --> Fungible 的意思為「可替代的」 所以同質化 (例如貨幣) 每一個代幣彼此之間皆為可替代的 > 所以你的 100u 跟我的 100u 即使交換後,你還是擁有相同不變的東西/物品 ---- <!-- .slide: data-transition="convex" --> ![image](https://hackmd.io/_uploads/rkm7oRWUR.png) > source: https://lootex.gitbook.io/docs/2.-pai-mai-chang-marketplace-jiao-xue-v2-outdated/newbie-manual/shen-me-shi-nft ---- <!-- .slide: data-transition="convex" --> ![image](https://hackmd.io/_uploads/H13SsAZLR.png) > source: https://lootex.gitbook.io/docs/2.-pai-mai-chang-marketplace-jiao-xue-v2-outdated/newbie-manual/shen-me-shi-nft ---- <!-- .slide: data-transition="convex" --> ### ERC721 ![截圖 2024-06-21 凌晨3.32.55](https://hackmd.io/_uploads/ByRHEbG80.png) ---- <!-- .slide: data-transition="convex" --> ```solidity // contracts/GameItem.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract MyToken is ERC721, Ownable { uint256 private _nextTokenId; constructor(address initialOwner) ERC721("MyToken", "MTK") Ownable(initialOwner) {} function _baseURI() internal pure override returns (string memory) { return "https://arweave.net/q2KVZzSHxrVPNueS_xJRy5tnss-CWUOIc5-xMKpWNKE/"; } function safeMint(address to) public onlyOwner { uint256 tokenId = _nextTokenId++; _safeMint(to, tokenId); } } ``` ---- <!-- .slide: data-transition="convex" --> #### Mint ![截圖 2024-06-26 晚上11.09.13](https://hackmd.io/_uploads/BkI9ynKLC.png) ---- <!-- .slide: data-transition="convex" --> #### OwnerOf & tokenURI ![截圖 2024-06-26 晚上11.10.11](https://hackmd.io/_uploads/rJIsynY8C.png) ---- <!-- .slide: data-transition="convex" --> ### ERC1155 ![截圖 2024-06-21 凌晨3.35.24](https://hackmd.io/_uploads/H1mj4ZMLC.png) ---- <!-- .slide: data-transition="convex" --> ```solidity // SPDX-License-Identifier: MIT // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract Marvel1155 is ERC1155, Ownable { uint256 public constant CAPTAIN_AMERICA = 0; uint256 public constant THOR = 1; uint256 public constant IRON_MAN = 2; uint256 public constant SPIDER_MAN = 3; constructor(address initialOwner) ERC1155("https://api.frank.hk/api/nft/demo/1155/marvel/{id}.json") Ownable(initialOwner) { _mint(msg.sender, CAPTAIN_AMERICA, 10**18, ""); _mint(msg.sender, THOR, 1, ""); _mint(msg.sender, IRON_MAN, 5, ""); _mint(msg.sender, SPIDER_MAN, 10, ""); } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(account, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } } ``` source: https://www.frank.hk/blog/nft-erc1155 ---- deploy <!-- .slide: data-transition="convex" --> https://testnets.opensea.io/collection/unidentified-contract-2c20b02b-7251-40ec-a091-f605 ---- <!-- .slide: data-transition="convex" --> #### Mint ![截圖 2024-06-26 晚上11.37.35](https://hackmd.io/_uploads/rkgMh2FI0.png) ---- <!-- .slide: data-transition="convex" --> #### mintBatch ![截圖 2024-06-26 晚上11.37.48](https://hackmd.io/_uploads/S1Of2ht8A.png) ---- <!-- .slide: data-transition="convex" --> #### balanceOf ![截圖 2024-06-26 晚上11.38.00](https://hackmd.io/_uploads/rJgE2hYLR.png) ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-26 晚上11.38.06](https://hackmd.io/_uploads/rkmEnnYLA.png) ---- <!-- .slide: data-transition="convex" --> #### uri ![截圖 2024-06-27 凌晨12.01.42](https://hackmd.io/_uploads/r155hnYU0.png) ---- <!-- .slide: data-transition="convex" --> #### uri - {id} ![截圖 2024-06-27 凌晨12.06.05](https://hackmd.io/_uploads/rJisnnK8A.png) ---- <!-- .slide: data-transition="convex" --> https://www.quicknode.com/guides/ethereum-development/nfts/how-to-create-and-deploy-an-erc-1155-nft ```solidity function uri(uint256 _tokenid) override public pure returns (string memory) { return string( abi.encodePacked( "https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/", Strings.toString(_tokenid),".json" ) ); } ``` ---- <!-- .slide: data-transition="convex" --> ### 讓我們回到 ERC20 ![截圖 2024-06-21 凌晨3.33.18](https://hackmd.io/_uploads/HknBBbMLR.png) ---- <!-- .slide: data-transition="convex" --> ![image](https://hackmd.io/_uploads/rkBzwiNIC.png) --- <!-- .slide: data-transition="slide" --> ## 如何上架到 OpenSea 或其他 NFT 市場 ---- <!-- .slide: data-transition="convex" --> ![image](https://hackmd.io/_uploads/ry641MfUA.png) ---- ### metadata 需要符合定義才能正確被解析 <!-- .slide: data-transition="convex" --> ```json { "description": "Friendly OpenSea Creature that enjoys long swims in the ocean.", "external_url": "https://openseacreatures.io/3", "image": "https://storage.googleapis.com/opensea-prod.appspot.com/puffs/3.png", "name": "Dave Starbelly", "attributes": [ ... ] } ``` ---- <!-- .slide: data-transition="convex" --> ![image](https://hackmd.io/_uploads/SJWkefM8C.png) ---- <!-- .slide: data-transition="convex" --> ```json { "attributes": [ { "trait_type": "Base", "value": "Starfish" }, { "trait_type": "Eyes", "value": "Big" }, { "trait_type": "Mouth", "value": "Surprised" }, { "trait_type": "Level", "value": 5 }, { "trait_type": "Stamina", "value": 1.4 }, { "trait_type": "Personality", "value": "Sad" }, { "display_type": "boost_number", "trait_type": "Aqua Power", "value": 40 }, { "display_type": "boost_percentage", "trait_type": "Stamina Increase", "value": 10 }, { "display_type": "number", "trait_type": "Generation", "value": 2 } ] } ``` ---- <!-- .slide: data-transition="convex" --> 影片類型的話 opensea 也有定義解析 ![截圖 2024-06-23 下午2.45.27](https://hackmd.io/_uploads/B1l3ESHI0.png) ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-23 下午2.36.06](https://hackmd.io/_uploads/Syv5BrH8C.png) > https://opensea.io/assets/ethereum/0xa37b6a494c215a44c61cc60f6e67b9fca8fa8e87/108 ---- <!-- .slide: data-transition="convex" --> ```json // 20240623144430 // https://vnrjkzzuq7dlktzw46jp6esrzonwpmwpqjmuhcdtt6ytbkswgsqq.arweave.net/q2KVZzSHxrVPNueS_xJRy5tnss-CWUOIc5-xMKpWNKE/1 { "created_by": "Ilan Derech", "name": "Whispers in the Snow | 雪のささやき #1/133", "description": "Whispers in the snow, a gentle sound, \nAs silent snowflakes fall to the ground. \nKyoto's beauty, now soft and still, \nA tranquil scene, a winter's chill.\n\nIn peaceful moments, whispers heard, \nAs snowflakes dance without a word. \nThe hush of night, a winter's glow, \nIn Kyoto's land, a tranquil show.\n\nWhispers in the snow, a serene sight, \nA moment of calm, a winter's delight. \nIn Kyoto's land, a peaceful sound, \nAs snowflakes gently fall to the ground.\n\nBy: Ilan Derech \nTotal Editions: 133 \nCollaboration with: Premint \nLocation: Kyoto, Japan \nShot on: Leica Q2 \nYear: 2023", "attributes": [ { "trait_type": "Artist", "value": "Ilan Derech" } ], "animation_details": { "bytes": 53648281, "format": "MP4", "duration": 17, "sha256": "cef502987fb7e7fa55e29d2e3f849bbea11165b1cdb0d8c37205a70d3025f01d", "width": 2160, "height": 3840, "codecs": [ "H.264", "AAC" ] }, "animation": "https://arweave.net/IzyUdMZHdM90HEQmy3oIp13riQ8bmBaO-XNmbj5ve4w", "animation_url": "https://arweave.net/IzyUdMZHdM90HEQmy3oIp13riQ8bmBaO-XNmbj5ve4w", "image_details": { "bytes": 21934044, "format": "GIF", "sha256": "ac8b855ceaaef1072c3db8d5d035ebd4ad877bfc99cb6f412e58316f1908f9ba", "width": 420, "height": 747 }, "image": "https://arweave.net/g5tdcGeNFyU7DksWqyOOJQqS6YuQOYNJjNmD67g9CZ0", "image_url": "https://arweave.net/g5tdcGeNFyU7DksWqyOOJQqS6YuQOYNJjNmD67g9CZ0" } ``` > https://arweave.net/q2KVZzSHxrVPNueS_xJRy5tnss-CWUOIc5-xMKpWNKE/108 ---- <!-- .slide: data-transition="convex" --> 讓我們來看看另外一家 NFT Marketplace Rarible <img src="https://hackmd.io/_uploads/BkZU-zM8R.png" id="rarible" alt="image" class="offline-handled error-handled" data-position="79" data-size="50" loading="lazy"> ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-21 上午10.09.59](https://hackmd.io/_uploads/Hkqz-PfLR.png) > https://rarible.com/token/0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949:6789 ---- <!-- .slide: data-transition="convex" --> ``` // 20240621100832 // https://bafybeihb6g4ojj34w5erhpulaxliq6fszyh33e6wtefsqnunlqw4hgnkr4.ipfs.dweb.link/beanz_metadata/6789 { "name": "Bean #6789", "attributes": [ { "trait_type": "Background", "value": "Dark Blue" }, { "trait_type": "Type", "value": "Edamame" }, { "trait_type": "Eyes", "value": "Half-open" }, { "trait_type": "Mouth", "value": "Closed" }, { "trait_type": "Clothing", "value": "Kami" }, { "trait_type": "Headgear", "value": "Beanie" }, { "trait_type": "Special", "value": "Raijin Drums with Lightning" } ], "image": "ipfs://QmTRuWHr7bpqscUWFmhXndzf5AdQqkekhqwgbyJCqKMHrL/6789.png" } ``` > https://bafybeihb6g4ojj34w5erhpulaxliq6fszyh33e6wtefsqnunlqw4hgnkr4.ipfs.dweb.link/beanz_metadata/6789 > --- <!-- .slide: data-transition="slide" --> ## NFT 的鏈上互動(通過 explore) ---- <!-- .slide: data-transition="convex" --> 使用 metamask 的話,需要做 import 的動作 ![截圖 2024-06-24 下午5.46.13](https://hackmd.io/_uploads/Hkohg6UL0.png) ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-24 下午5.46.19](https://hackmd.io/_uploads/BJjhl6LUA.png) ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-24 下午5.48.06](https://hackmd.io/_uploads/HkKJZp880.png) ---- <!-- .slide: data-transition="convex" --> 此外也可以通過 etherscan 這類 explore 來與合約互動 ---- <!-- .slide: data-transition="convex" --> <img src="https://hackmd.io/_uploads/Hyh4ZT8U0.png" id="rarible" alt="image" class="offline-handled error-handled" data-position="79" data-size="50" loading="lazy"> ---- <!-- .slide: data-transition="convex" --> 查看 owner ![截圖 2024-06-24 下午5.58.43](https://hackmd.io/_uploads/Hkcc7TLU0.png) ---- <!-- .slide: data-transition="convex" --> 查看 metadata ![截圖 2024-06-24 下午5.48.06](https://hackmd.io/_uploads/SyJOzp8L0.png) ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-25 凌晨1.04.44](https://hackmd.io/_uploads/B1pID7v80.png) ---- <!-- .slide: data-transition="convex" --> ![截圖 2024-06-24 下午6.01.02](https://hackmd.io/_uploads/H1SWEpU8R.png) --- <!-- .slide: data-transition="slide" --> ## NFT metadata 存放地方:IPFS、普通 URL ---- <!-- .slide: data-transition="convex" --> ### IPFS - InterPlanetary File System 星際檔案系統 ![image](https://hackmd.io/_uploads/rJp1kJDU0.png) ---- <!-- .slide: data-transition="convex" --> 特點: - 去中心化 - p2p 網路儲存 - 可驗證性 - `aaaa.com/doge.jpg` - `bbbb.com/doge.jpg` ---- <!-- .slide: data-transition="convex" --> #### CID 上傳的東西檔案會給你一個唯一值 ``` ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco ``` ---- <!-- .slide: data-transition="convex" --> 也有資料夾的概念 example/example_text.txt ``` ipfs://QmdbaSQbGU6Wo9i5LyWWVLuU8g6WrYpWh2K4Li4QuuE8Fr/example_text.txt ``` ---- <!-- .slide: data-transition="convex" --> 通過 Gateway 可以快速找到資源 https://cloudflare-ipfs.com/ipfs/QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy ---- <!-- .slide: data-transition="convex" --> ### 普通 URL 只要能回傳 meta json 檔,任何可訪問資源都可以 ![截圖 2024-06-25 晚上11.49.21](https://hackmd.io/_uploads/SykQPvdUA.png) https://api.pudgypenguins.io/lil/1 --- <!-- .slide: data-transition="convex" --> ## Q&A
{"title":"NFT 介紹(EVM)","description":"@Kais(VagrantPi)","contributors":"[{\"id\":\"69ade472-3ed3-499d-8a69-767243a31621\",\"add\":26451,\"del\":7011}]"}
    98 views