1
概述
Arweave 作为一条为数据存储而生的区块链,可以让任何个人或团队以极低的成本进行数据的永久存储。但是直接和 Arweave 进行交互必须持有 AR Token ,这在某种程度提高了 Arweave 的使用门槛。
为了方便开发者快速入门,我们部署了 web3infura.io (http://web3infura.io/) 方便开发者永存数据。web3infura.io 支持多种 Token 进行存储费用的支付。(包括但不限于 ETH,USDT,CFX)
本教程将介绍如何使用 nodejs 以及 golang 将数据通过 web3infura.io 永久存储到 Arweave 网络。
2
准备工作
在进行数据上传之前,需要做一些必要的准备工作。
以下的步骤将介绍如何获取Token,为后面的文件存储费用支付做准备。
MetaMask 钱包
你需要拥有一个 MetaMask 钱包,里面需要有一点资产(只需少量就行,因为存储所需的费用非常少,后面会有说明)在 everPay 进行充值
你需要将 MetaMask 中的资产(ETH,USDT,USDC 等)跨链至 everPay。
-
进入 everPay (https://app.everpay.io/) 主页,连接你的 MetaMask 钱包
点击跨链,将 MetaMask 钱包中的资产充值到 everPay
点击兑换,将充值的资产兑换为你想要的Token
3
数据上传
3.1 nodejs 版
准备好 node.js 开发环境
3.1.1 安装
请打开你的终端,使用以下指令安装 arseeding-js
npm i arseeding-js
3.1.2 上传文件
安装完成后,在目录下创建 demo.js,将以下代码复制到 demo.js:
import { genNodeAPI } from 'arseeding-js'
const instance = await genNodeAPI('YOUR PRIVATE KEY')
const arseedUrl = 'https://arseed.web3infura.io'
const data = Buffer.from('./cat.png')
const payCurrency = 'CFX'
const ops = {
tags: [{name: "Content-Type",value:'img/png'}]
}
const res = await instance.sendAndPay(arseedUrl, data, payCurrency, ops)
console.log('res',res)
配置说明:
将前文提到的 MetaMask 钱包对应的密钥填充到 YOUR PRIVATE KEY。
arseedUrl 是需要配置的 Arseeding 后端服务地址,这里我们使用的是 web3infura 服务,URL 为:https://arseed.web3infura.io
data 里需要填充你想要上传的二进制数据,开发者可以采用 file io 从硬盘上读取对应的文件。
payCurrency 是需要选择的支付代币,这里是 CFX,当然你也可以兑换其他代币,比如兑换成 ETH,那么就填写 ETH。
ops 里可以配置你的 Arweave Tags,什么是 Arweave Tags 参考:https://docs.web3infura.io/zh-cn/docs/other/tags
在准备好配置后,调用
await instance.sendAndPay(arseedUrl, data, payCurrency, ops)
就可以将你的数据上传到 web3infura 的 Arseeding 节点。
在终端执行以下命令进行文件上传:
node demo.js
正确执行后终端将返回:
res {
status: 'ok',
everpayTx: {
tokenSymbol: 'CFX',
action: 'transfer',
from: '0xDc19464589c1cfdD10AEdcC1d09336622b282652',
to: 'uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68',
amount: '685213132323',
fee: '0',
feeRecipient: '0x6451eB7f668de69Fb4C943Db72bCF2A73DeeC6B1',
nonce: '1658805735973',
tokenID: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
chainType: 'Conflux',
chainID: '1030',
data: '{"itemId":"iyosxBPXwPYXKYac31nEq3c5uDm4Wxsv0o-Yy8yaHvU","bundler":"uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68","currency":"CFX","decimals":18,"fee":"685213132323","paymentExpiredTime":1658809335,"expectedBlock":982245}',
version: 'v1',
sig: '0x12e9342863734b0c3d0bf09cf191a38e0266692a3a0114723904f5e3d5205310706d1d6eaff86bda2f19d8ee46becc4c9512b419ecae36be844bd43da52a6fa41b'
},
everHash: '0x2cd991fb67206ccc93976a20a892833fecce9ae5261d4570d6b6bb3eac3783e7',
order: {
itemId: 'iyosxBPXwPYXKYac31nEq3c5uDm4Wxsv0o-Yy8yaHvU',
bundler: 'uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68',
currency: 'CFX',
decimals: 18,
fee: '685213132323',
paymentExpiredTime: 1658809335,
expectedBlock: 982245
}
}
最终这些数据将打包到 Arweave 网络,永存并不可篡改。
3.1.3 下载数据
在返回的结果中可以找到 res.order.itemId ,上文中 itemId 为
iyosxBPXwPYXKYac31nEq3c5uDm4Wxsv0o-Yy8yaHvU 。
可以使用 curl 下载数据:
curl --location --request GET 'https://arseed.web3infura.io/iyosxBPXwPYXKYac31nEq3c5uDm4Wxsv0o-Yy8yaHvU'
3.2 Golang 版
准备好 golang 开发环境,新建一个 demo project。
3.2.1 安装
在 demo project 下打开你的终端,使用以下指令安装 arseeding sdk, goether
go mod tidy
go get github.com/everFinance/arseeding
go get github.com/everFinance/goether
3.2.2 上传文件
在 demo 项目下创建 一个 main.go 文件, 将以下代码复制进去:
package main
import (
"fmt"
"github.com/everFinance/arseeding/sdk"
"github.com/everFinance/arseeding/sdk/schema"
"github.com/everFinance/goar/types"
"github.com/everFinance/goether"
"io/ioutil"
)
func main() {
privKey := "YOUR PRIVATE KEY"
signer, err := goether.NewSigner(privKey)
if err != nil {
panic(err)
}
arseedUrl := "https://arseed.web3infura.io"
payUrl := "https://api.everpay.io"
uploader, err := sdk.NewSDK(arseedUrl, payUrl, signer)
if err != nil {
panic(err)
}
data, err := ioutil.ReadFile("sup.jpg")
if err != nil {
panic(err)
}
fmt.Println(len(data))
tags := []types.Tag{
{Name: "Content-Type", Value: "img/jpg"},
}
ord, itemId, err := uploader.SendDataAndPay(data, "USDC", &schema.OptionItem{Tags: tags})
fmt.Println(ord)
fmt.Println(itemId)
}
配置说明:
将前文提到的 MetaMask 钱包对应的密钥填充到 YOUR PRIVATE KEY。
arseedUrl 是需要配置的 Arseeding 后端服务地址,这里我们使用的是 web3infura 服务,URL 为:https://arseed.web3infura.io
data 里需要填充你想要上传的二进制数据,本例上传了一张图片。
payCurrency 是需要选择的支付代币,这里我们采用 USDC。
ops 里可以配置你的 Arweave Tags,什么是 Arweave Tags 参考:https://docs.web3infura.io/zh-cn/docs/other/tags
在终端执行以下命令进行文件上传:
go run main.go
正确执行后将返回:
{
tokenSymbol:"USDC"
action:"transfer"
from:"0xc4f4FA5D20B23e651ce11fB824270b317F11d3ba"
to:"uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68"
amount:"807"
fee:"0"
feeRecipient:"0x6451eB7f668de69Fb4C943Db72bCF2A73DeeC6B1"
nonce:"1660037820075"
tokenID:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
chainType:"ethereum"
chainID:"1"
data:{
"itemId":"1MG5tOIbSCijvaj9vr9qBudOGQ2-GLUYCL_xLjkRBc8",
"bundler":"uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68",
"currency":"USDC",
"decimals":6,
"fee":"807",
"paymentExpiredTime":1660041420,
"expectedBlock":991931
}
最终这些数据将打包到 Arweave 网络,永存并不可篡改。
3.2.3 下载数据
在返回的结果中可以找到 data.itemId ,上文中 itemId 为 1MG5tOIbSCijvaj9vr9qBudOGQ2-GLUYCL_xLjkRBc8 。
可以使用 curl 下载数据:
curl --location --request GET 'https://arseed.web3infura.io/1MG5tOIbSCijvaj9vr9qBudOGQ2-GLUYCL_xLjkRBc8'
也可以在浏览器直接输入
https://arseed.web3infura.io/1MG5tOIbSCijvaj9vr9qBudOGQ2-GLUYCL_xLjkRBc8
或者
https://arweave.net/1MG5tOIbSCijvaj9vr9qBudOGQ2-GLUYCL_xLjkRBc8
就可以获取并下载这张图片了。
4
储存成本
通过以上的教程,相信大家对于如何通过 web3infura 上传文件至 Arweave 进行永存已经有了一定的了解,那么如此方便的存储,费用情况是如何的呢?
获取储存费用
在前面的上传数据的例子中,返回的结果中的 data.fee 就是该笔上传数据所支付的费用,在 golang 用例中,我们使用 USDC 进行支付,fee 为 807,而 USDC 的 decimal 为 6,因此我们支付的费用仅为 0.000807 USDC!你没有看错,如此低的花费就可以将一张图片永存!
使用 API 接口获取存储费用
当然,你可能需要提前知道上传 xxx size 的数据需要的花费,web3infura 当然也提供了 API 接口来查询相应的存储费用。
Get Bundle Fee
查看上传数据的交易手续费。
Request:
Method: GET
URL: /bundle/fee/:size/:currency
params:
size: 需要上传的数据大小,以字节为单位.
currency: 用于支付 fee 的 token symbol, 支持 everpay 跨链的所有 token.
Response:
{
"currency": "USDC",
"decimals": 6,
"finalFee": "4413"
}
例如,你需要查询上传一个 1M 的文件并且用 USDC支付需要的费用:
可以在终端输入:
curl --location --request GET 'https://arseed.web3infura.io/bundle/fee/1048576/USDC'
或者直接在浏览器上输入:
https://arseed.web3infura.io/bundle/fee/1048576/USDC
就可以方便的查询了。
风险提示:该文章仅作为教程使用,不构成任何投资观点。