ARMakeNFT

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

正常上传数据即可，上传完图片之后，我们会有这样的一个展示，拿到 DataID 之后，用这个网关➕dataID 即可访问，比如 https://arweave.net/l1n24_cORIcDAOkzFc0I1IWs2qvv-eelHp4Qgb1f9vk

NFT

上传图片

到这一步的话，我们就可以把图片上传到 AR, 并且拿回相应的 DataID 了

Copy
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 的生成

Copy
{
"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 也会在这里面

以目录形式上传 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

https://docs.arweave.org/info/