快速入门
为了方便开发者入门,我们部署了 web3infra.dev 方便开发者永存数据。快速入门将介绍如何使用 arseeding-js 将数据存通过 web3infra.dev 存储到 Arweave 网络。
准备
为了快速完成数据上传,你需要提前准备:
- node.js 开发环境
- 拥有一个 MetaMask/ArConnect 钱包。
- 该钱包拥有在 everPay 上任意一种资产。
如果还没做好准备,请查看:everPay 充值指南
创建项目
打开终端,创建一个空文件夹来存放项目, 通过 npm init 创建 package.json 进行包管理。
mkdir arseeding-demo
cd arseeding-demo
npm init
安装
通过编译器 打开 arseeding-demo 文件, 打开终端通过以下代码安装 arseeding-js。
npm i arseeding-js
上传数据
安装完成后,在目录下创建 index.js,将以下代码复制到 index.js:
- MetaMask
- ArConnect
const { genNodeAPI } = require('arseeding-js')
const run = async () => {
  const instance = genNodeAPI('YOUR PRIVATE KEY')
  const arseedUrl = 'https://arseed.web3infra.dev'
  const data = Buffer.from('........')
  const payCurrencyTag = 'ethereum-usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' // everPay 支持的 token tag (chainType-symbol-id)
  const options = {
    tags: [{ name: 'Content-Type', value: 'image/png' }]
  }
  const res = await instance.sendAndPay(arseedUrl, data, payCurrencyTag, options)
  console.log('res', res)
}
run()
import { ArweaveSigner } from 'arseeding-js'
import { payOrder, newEverpayByRSA } from 'arseeding-js/cjs/payOrder'
import { createAndSubmitItem } from 'arseeding-js/cjs/submitOrder'
import { readFileSync } from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const run = async () => {
  const __dirname = path.dirname(fileURLToPath(import.meta.url))
  const arJWK = JSON.parse(
    readFileSync(path.join(__dirname, '<your arweave keyfile>.json')).toString()
  )
  const arAddress = 'AR Wallet Address'
  const signer = new ArweaveSigner(arJWK)
  const data = Buffer.from('<need upload data, such as a picture>')
  const options = {
    tags: [{ name: 'Content-Type', value: 'image/png' }]
  }
  const arseedingUrl = 'https://arseed.web3infra.dev'
  const payCurrencyTag = 'ethereum-usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' // everPay 支持的 token tag (chainType-symbol-id)
  const config = {
    signer: signer,
    path: '',
    arseedUrl: arseedingUrl,
    tag: payCurrencyTag
  }
  const order = await createAndSubmitItem(data, options, config)
  const everpay = newEverpayByRSA(arJWK, arAddress)
  const everHash = await payOrder(everpay, order)
  console.log({everHash,order})
}
run()
提示
若您喜欢以下导入 arseeding-js, 则需要在 package.json 文件中添加 type:"module"。
import { genNodeAPI, getTokenTagByEver } from 'arseeding-js'
配置说明:
- 将你的 MetaMask 密钥填充到 YOUR PRIVATE KEY。也可使用 Arconnect 将你的 keyfile json 文件 路径导入其中,确保 PRV KEY 对应的钱包在 everPay 拥有资产。
- arseedUrl 是需要配置的 Arseeding 后端服务地址,这里我们使用 permadao 提供的 Arseed 服务,URL 为:https://arseed.web3infra.dev 。
- data 里需要填充你想要上传的二进制数据,开发者可以采用 file io 从硬盘上读取对应的文件。
- payCurrencyTag 是需要选择的支付 Token tag,如果你的 MetaMask 地址在 everPay 持有的是 usdc,可通过getTokenTagByEver('usdc'),获取 usdc 的tag,如果持有的是其他代币,请填写其他代币的名称。具体查看getTokenTagByEver。
- options 里可以配置你的 Arweave Tags,什么是 Arweave Tags 参考:这里。
- tags 中的 Content-Type 需要基于你上传的内容进行配置,例如 上传的 png 格式的图片,则配置为 image/png,详细说明参考 Content-Type。
在准备好配置后,调用 await instance.sendAndPay(arseedUrl, data, payCurrencyTag, ops) 或 使用 Arconnect (createAndSubmitItem、newEverpayByRSA、payOrder)等方法 就可以将你的数据上传到 web3infra 的 Arseeding 节点。
在终端执行以下命令进行文件上传:
node index.js
正确执行后终端将返回:
res {
  everHash: '0xf88033873d3bfc525d9333ec51b60f3f3dc03f822a9a73f66a10ebbd944b29c6',
  order: {
    itemId: '2bpKpp0dtfFZE82-P0lOmeI5x4m2ynatFzdjBmCWd4k',
    size: 192,
    bundler: 'uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68',
    currency: 'USDC',
    decimals: 6,
    fee: '1141',
    paymentExpiredTime: 1690702235,
    expectedBlock: 1210331,
    tag: 'ethereum-usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
  }
}
最终这些数据将打包到 Arweave 网络,永存并不可篡改。
下载数据
在返回的结果中可以找到 res.order.itemId ,上文中 itemId 为 2bpKpp0dtfFZE82-P0lOmeI5x4m2ynatFzdjBmCWd4k 。
可以使用 curl 下载数据:
curl --location --request GET 'https://arseed.web3infra.dev/2bpKpp0dtfFZE82-P0lOmeI5x4m2ynatFzdjBmCWd4k'
更深入的学习 Arseeding 和 web3infra 请查看: