Photo by Alexander Elliott
放棄 IPFS, 擁抱 AR 💮
教程主要是過一遍如何放棄 IPFS, 用 AR 來做 NFT
最後的結果展示: 戳我
ArDrive 準備#
-
可以白嫖 0.2AR 體驗,步驟參考 ArDrive 官網 . 發個推,小號不是很容易驗證通過 领取點水 0.2AR, 這一步完成之後是有一個 json 文件,裡面寫著錢包的私鑰類信息.
-
完了之後用ArConnect, AR 的插件錢包 導入我們剛剛下載下來的 Json 文件,注意看下面步驟演示
-
錢包導入成功之後,登錄 https://app.ardrive.io/ 就可以 來到這裡註冊登錄
提供一個用戶名和密碼 註冊一下 就可以.
ArDrive 使用#
-
Drive 和 Folder, Drive 裡面有好多 Folder, 可以單獨把 Drive share 給別人,注意 ⚠️ 創建 Drive 的時候 會讓你選擇 Public 或者 Private. Public 和 Private 詳情請看這裡 Here, 字面理解就好,不過多解釋.
- 注意每個 Drive 和 Folder 都會有自己的一串標識,
https://app.ardrive.io/#/drives/ee70c85b-f140-49c7-80b1-856625fcb103/folders/77c4b073-5ce5-4f5a-bd59-b3a14e29a68d
比如這個鏈接,- FolderID=
77c4b073-5ce5-4f5a-bd59-b3a14e29a68d
後面 upload 的時候會用,需要指定上傳的 FolderID - DriveID=
ee70c85b-f140-49c7-80b1-856625fcb103
- FolderID=
- 注意每個 Drive 和 Folder 都會有自己的一串標識,
-
正常上傳數據即可,上傳完圖片之後,我們會有這樣的一個展示,拿到 DataID 之後,用這個網關➕dataID 即可訪問,比如 https://arweave.net/l1n24_cORIcDAOkzFc0I1IWs2qvv-eelHp4Qgb1f9vk
NFT#
-
上傳圖片
-
到這一步的話,我們就可以把圖片上傳到 AR, 並且拿回相應的 DataID 了
const { readJWKFile, arDriveFactory, wrapFileOrFolder, EID } = require('ardrive-core-js'); //wallet是 你的json文件, 下載下來的那個 //filePath是 png的路徑 //FolderID就是上面我們指出的那個 async function upload(wallet, filePath, folderID){ const arDrive = arDriveFactory({ wallet: wallet }); const wrappedEntity = wrapFileOrFolder(filePath); const destFolderId = EID(folderID); const uploadFileResult = await arDrive.uploadAllEntities({ entitiesToUpload: [{ wrappedEntity, destFolderId }] }); let {created} = uploadFileResult; // 返回的就是DataID return created[0].dataTxId.transactionId; }
-
每 upload 一張圖片,返回 dataID, 那麼就可以有一個 JsonFile 的生成
{ "name":"name #0", "description":"balabala.", "traits":[ {"trait_type":"backgroud","value":"blue"}, {"trait_type":"body","value":"body"}, {"trait_type":"eye","value":"happy"}, {"trait_type":"hat","value":"hat"}, {"trait_type":"clothes","value":"hoodie_B"}, {"trait_type":"plant","value":"alsophilaspinulosa"} ], "image":"https://arweave.net/l1n24_cORIcDAOkzFc0I1IWs2qvv-eelHp4Qgb1f9vk"}
-
這裡說一下費用,每筆 tx 有兩個字段和費用有關,比如這筆tx 👈
- Fee: 我們為這個文件存儲所花的費用,也就是存儲文件的大頭 🤕 , 上面那筆 tx 是對應 655kb 的 png, Fee 是 0.000109AR
單從 Fee 的角度來說,總體要比 Pinata 便宜,當然 Infura 的價格會好一些,但是 Infura 訪問太慢
- Value: 這個字段類似於在 eth 上面的 value 字段,不過 gas 也會在這裡面
- Fee: 我們為這個文件存儲所花的費用,也就是存儲文件的大頭 🤕 , 上面那筆 tx 是對應 655kb 的 png, Fee 是 0.000109AR
-
-
以目錄形式上傳 json 文件
-
上傳完所有的 png 之後,我們會有很多 json 文件在一個目錄下
-
這時候我們要做的就是 以目錄可訪問的形式 上傳這些 jsonFile
-
兩種方法
- 注意 arupload是 json 的文件夾,wallet.json 裡面這是錢包私鑰等信息 [最開始下載下來的 json 文件🍎]
- 自己替換一下
-
簡單的:利用第三方來做,參考這個arkb github, 這個貌似要收 10% 額外的費用,
-
npm install -g arkb
全局安裝完之後 -
arkb deploy ./arupload/ --wallet ./wallet.json
用這個語句上傳即可 -
上傳完之後,會返回下圖
這個 url 再加上後綴,比如 https://arweave.net/8qWYL9oyX5oPU9dwMHWii8ZlonEYatK-P2k_RXpfbs4/1.json 就可以訪問了
-
-
複雜的:比較原生,是 AR 自己的這套東西。參考ardrive-cli github
-
npm install -g ardrive-cli
-
ardrive upload-file --local-path ./arupload/ --parent-folder-id "2639094e-cb4a-4546-b5fb-f582db582fae" -w ./wallet.json
注意這裡的 parent-folder-id 參數,這是我們上面說的 FolderID
-
ardrive create-manifest -f "2639094e-cb4a-4546-b5fb-f582db582fae" -w ./wallet.json
同樣 這裡 -f 也是 folderID
-
上傳完之後 返回下圖
-
這個 url 再加上後綴,比如 https://arweave.net/ruwoIvbk7oLa87xKUTd-_DY4MGJ6UR8iWEE3egRkfOI/arupload/1.json 就可以訪問了
-
-
-
基本上到這裡就結束了,在 etherscan 上面設置一下 tokenURI 即可,格式: ar//《Path》 比如根據上面這個複雜的紅框裡的值,則是設成: ar://ruwoIvbk7oLa87xKUTd-_DY4MGJ6UR8iWEE3egRkfOI/arupload/
參考文獻#
https://mirror.xyz/pfeffunit.eth/iLX1IKglGDxRTufg64RdYJCrNRAMIogmLhfdJ6ZAXUY
https://blog.developerdao.com/getting-started-with-arweave#heading-introduction-to-arweave