在 Arweave 中轻松管理文件:借助 4EVERLAND 完成 Web3 前端Path Manifests的终极指南

为什么使用Path Manifests?

当在 IPFS 上发布 NFT 时,图片和元数据会被上传到 IPFS 网络以获得一个根 CID,其形式如下:

ipfs://bafybeic36ik6cngu37xbzmpytuvyo7z3lyeen44clkkxq5d263zj4nkzr4

通过使用这个根 CID,每个 NFT 的图片路径可以按照 root cid/'file name的格式来定义。例如,一个 NFT 的元数据中的图片路径可能如下所示:

ipfs://bafybeie7byrnb3vo2lc2lwaqm5lox6jiow5ntzod3aoquki36gtirdhodm/0.png

同样的,如果我们想在Arweave 上发布NFT,可以使用 Path Manifets 来集合NFT,这样也可以通过路径方式来访问NFT.

例如

https://arweave.net/Bgw5-GwpymUoe5VMeb-No9WWXpjWsq_8g4oeiGP5RnA/0.png

而不是通过每一张图片在 arweave 上的 ID 来访问它:

​​​​​​https://arweave.net/ISvPQyG8qWzJ1Pv5em5xK8Ht38HZ3ub1fPHbFEqDPK0

如何创建NFT

下面讲解如何使用 4EVERLAND Bucket + Path Manifests 将NFT文件存储到Arweave网络中。

创建Bucket并上传NFT 文件

首先,需要在4everland dashboard 创建一个bucket 并开启Sync to AR 按钮

然后,在Bucket中将您的nft文件夹上传,获取所有nft的TxID,除了在dashboard中手动操作外,您也可以使用 S3 Compatible API 上传获取。

Init S3 client

// initS3Client.js
import { S3 } from '@aws-sdk/client-s3'
export const client = new S3({endpoint: 'https://endpoint.4everland.co',credentials:{accessKeyId: '',secretAccessKey: '',sessionToken: '',},forcePathStyle: false,region: 'eu-west-2'
})

 批量上传NFT:
 

import { Upload } from '@aws-sdk/lib-storage'
import { clinet } from './initS3Client.js'
let files = [] //  File Arrary
let Bucket = 'NFT_Bucket'
files.forEach(aysnc(file) => {try{const task = new Upload({client,Bucket,Key: 'YOUR_folder' + '/' + file.name,Body: file,ContentType: file.type})await task.done()}catch(error){console.log(error)}
})// 同步到AR需要时间,可以等待几分钟后,获取 AR Hash(Tx ID) list:let arHashPath = {}
files.forEach(aysnc(file) => {try{const data = await client.headObject({Bucket,Key: 'YOUR_folder' + '/' + file.name,})const meta = data.Metadata;arHashPath[file.name] = {id: meta["arweave-hash"] ?? ''}}catch(error){console.log(error)}
})

生成图片的Manifests ID

获取到每张NFT的TxID后,按照Path Manifests 标准集合成如下json文件,标准详情可以参考官方说明

//manifest-files.json 
{"manifest": "arweave/paths","version": "0.1.0","paths": {"01.jpeg": {"id": "ItVxP8RILEsBjTObeO_piBUME31mj9fa8XJ00v_A94o"},"02.jpeg": {"id": "eiCwWO60Qd8J6wz1ndB82jNgSDotAC8peN38ZAVonl4"},"03.jpeg": {"id": "YUHwbOdf2sSKdGps03qH9LJHX4caYKM5_BOdBpMXOxc"},"04.jpeg": {"id": "kD8Eft7JP82_u9whX710vzsSntn_WP07TgrSB2bGEso"},"05.jpeg": {"id": "KSeYJwZORk3BzelAazsmd6laGAAugHPMqHoXTZ0V4BE"}}
}

然后将此manifest-files.json文件也上传到bucket,需要规定 Content-Type tag 为 application/x.arweave-manifest+json,获取此文件的ArHash 作为图片的 Manifest ID


let manifestFile = {manifest: 'arweave/paths',version: '0.1.0',paths: arHashPath
}let blob = new Blob([JSON.stringify(manifestFile)], {type: "application/json",
});
async function upload(){try{const task = new Upload({client,Bucket,Key: 'YOUR_folder' + '/' + 'manifest-files.json',Body: blob,ContentType: 'application/x.arweave-manifest+json'})await task.done()}catch(error){console.log(error)}
}
// 上传
await upload()async function getMainfestArHash(){try{const data = await client.headObject({Bucket,Key: 'YOUR_folder' + '/' + 'manifest-files.json',})const meta = data.Metadata;if (meta) {return meta["arweave-hash"];}return "";}catch(error){console.log(error)}
}
// 同步到AR需要时间,可以等待几分钟后执行
const arHash =  await getMainfestArHash()
console.log(arHash)

获取到TxID 为 udKzWCDO2PFvxHjiTRhNXuDslsE4jiKlu9A2gY1b1WE

小窍门:如果你的图片很多,可以巧用4EVERLAND Hosting 模块来生成manifest ID。

  1. 在bucket中选中您的NFT 文件夹,点击‘Snapshot'并切换到snapshot列表对文件夹进行publish。

  2. 复制snapshot中的ipfs cid,进入hosting页面,在‘IPFS Deploy'中输入CID部署

  3. 部署平台选择'Arweave',部署成功后的AR Hash 便是这些图片的ManifestID

使用Manifests ID 为每张NFT 创建metadata

为每张nft生成metadata.json,以01.jpeg为例,如下

//文件名:0
{"name": "nft-ocean","attributes": [{"trait_type": "tokenID","value": "0"}],"description": "nft-ocean image",//填入图片的ManifestID + '/'+文件名 "image": "ar://QmZ3Y31SwLU77CDfBoL5MphuSmrv414d2ZyunVcbNAJQRQ/01.jpeg"
}

参考上面上传图片的步骤,将每张nft的metadata.json文件以TokenID 命名后,上传到bucket,并将获取到的TxIDs再次集合生成一个Manifest格式的json 文件。

{"manifest":"arweave/paths","version":"0.1.0","paths":{"0":{"id":"JcFZfJEJrDKudQsRfN2JnsBPUQTynk0i5XfUqCBcERw"},"1":{"id":"vEUOeIky5hv2GlD2SP2d9TYAua2pkxYxehOczqTGqfU"},"2":{"id":"hd6bI2-c0gr-9ZZsoO8jn_CTRFqWIRwRj5WckgfbmEY"},"3":{"id":"PVAOd8D2JGCW5oOf4bulbQn2npcaaDAexY8sJKzZiEU"},"4":{"id":"lT4RbJEIGsqwwEZB0gxeT1x0nov40crEtBWDHgKQx80"}}
}

将此 manifest-metadata.json 文件上传bucket,并注明content type 为application/x.arweave-manifest+json,获取此文件的ArHash (TxID),此 ID 便是最终需要设置在合约里面的BaseURI。

本案例获取到的TxID为:2svkHmAC3So_M-LUtDlcDeqPZEwSZsY64AB9L8cA-Uk

将NFT部署到合约

具体步骤请参考 NFT 合约部署教程 ,前面步骤完全一致,到‘准备资源'步骤时跳过,直接到设置BaseURI步骤。

我们需要将上面NFT metadata 生成的Manifest ID 写入到BaseURI 中。

setBaseURI.js

require("dotenv").config()
const hre = require("hardhat");
const PRIVATE_KEY = process.env.PRIVATE_KEY
const NETWORK = process.env.NETWORK
const API_KEY = process.env.API_KEYconst provider = new hre.ethers.providers.InfuraProvider(NETWORK, API_KEY);
//编译完成合约会自动生成
const abi = require("../artifacts/contracts/NFT_WEB3_EXPLORER.sol/NFT_WEB3_EXPLORER.json").abi
const contractAddress = "合约地址"
const contract = new hre.ethers.Contract(contractAddress, abi, provider)
const wallet = new hre.ethers.Wallet(PRIVATE_KEY, provider)
const baseURI = "ar://2svkHmAC3So_M-LUtDlcDeqPZEwSZsY64AB9L8cA-Uk/" //metadata 的Manifest IDasync function main() {const contractWithSigner = contract.connect(wallet);//调用setBaseURI方法const tx = await contractWithSigner.setBaseURI(baseURI)console.log(tx.hash);await tx.wait();console.log("setBaseURL success");
}main().then(() => process.exit(0)).catch((error) => {console.error(error);process.exit(1);});

 后续步骤与教程一致,完成mint后到opensea 查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/107470.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java程序处理三张表要进行怎么样的操作

首先第一步梳理思路,id没有存在说明是新添加的,如果id存在那就是对现有文章的修改。 /*** 发布文章或保存草稿** param dto* return*/Overridepublic ResponseResult submitNews(WmNewsDto dto) {//0.条件判断if(dto null||dto.getContent() null){ret…

Multi Query Attention Group Query Attention

Multi Query Attention(MQA)在2019年就被提出来了,用于推理加速,但在当时并没有受到很多关注,毕竟一张2080就能跑Bert-base了。随着LLM的大火,MQA所带来的收益得以放大。 思路 Multi Query Attention(MQA)跟Multi Head Attention…

2.zigbee开发,zigbee点亮灯,如何正确使用别人提供的模板文件

一。成为点灯大师的其中一步(普通点灯,操作系统点灯,网络点灯,wifi点灯,蓝牙点灯,zigbee点灯,LoRa点灯,NB点灯)*(寄存器点灯,HAL库点灯&#xff0…

2023年数维杯数学建模B题节能列车运行控制优化策略求解全过程文档及程序

2023年数维杯数学建模 B题 节能列车运行控制优化策略 原题再现: 在城市交通电气化进程快速推进的同时,与之相应的能耗增长和负面效应也在迅速增加。城市轨道交通中的快速增长的能耗给城轨交通的可持续性发展带来负担。2018 年,北京、上海、…

西工大 ASLP 实验室在 WeNet 中开源基于 CPPN 的神经网络热词增强语音识别方案

语境偏置(Contextual biasing)旨在将语境知识集成到语音识别(ASR)系统中,以提高在相关领域词汇(俗称“热词”)上的识别准确率。在许多ASR场景中,待识别语音中可能会包含训练数据中数…

windows10系统下Python3.11中安装Numpy库教程

Python3.11中安装Numpy库目录 项目场景:问题描述解决方案:①下载Numpy文件②把NumPy文件放到Python安装的Scripts文件夹里。③安装numpy④安装验证 项目场景: numpy是开源的数值计算扩展,用于数据分析、机器学习、科学计算的重要…

pgzrun 拼图游戏制作过程详解(3)

3. 绘制完整的拼图 建立Gird列表存储小拼图的基本信息 Gird[] for i in range(6):for j in range(4):SquareActor("girl_06")Square.leftSquare_size*jSquare.topSquare_size*iGird.append(Square) 修改draw()绘制函数 建立循环绘制Gird列表中的所有小拼图 def d…

开源大模型ChatGLM2-6B 1. 租一台GPU服务器测试下

0. 环境 租用了1台GPU服务器,系统 ubuntu20,GeForce RTX 3090 24G。过程略。本人测试了ai-galaxy的,今天发现网友也有推荐autodl的。 (GPU服务器已经关闭,因此这些信息已经失效) SSH地址:* 端…

虚拟机作为master远程控制台式机中的机器人在仿真环境中进行slam地图构建与自主导航

文章目录 前言一、思路流程二、具体步骤1.虚拟机网络配置2.台式机网络配置3.网络测试 三、远程操控SLAM建立地图三、远程操控SLAM导航 前言 虚拟机作为master远程控制台式机中的机器人在仿真环境中进行slam地图构建与自主导航 最近有时间一直在搞Ubuntu虚拟机与台式机的通讯&…

Java复习-多线程编程

多线程编程 解决并发访问的问题。 一. 继承 Thread 类实现多线程 1. 继承实现 继承thread类 class MyThread extends Thread{}覆写run主方法 多线程要执行的功能都应该在 run() 方法中定义。 class MyThread extends Thread { // 线程的主体类private String title;public…

澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

2022年全国研究生数学建模竞赛华为杯D题PISA架构芯片资源排布问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 D题 PISA架构芯片资源排布问题 原题再现: 一、背景介绍 芯片是电子行业的基础,在当前日益复杂的国际形势下,芯片成了各个大国必争的高科技技术。本课题关注网络通信领域的交换芯片,传统的交…