如何使用 LAT 进行文件永存
原文链接:https://www.notion.so/permadao/LAT-89c08ae915c14e0c9dd41e7923118b10
本文介绍了如何使用 LAT 通过 arseeding 将数据上传到 Arweave 进行永存,主要分为四个部分。
概述:为什么使用 arseeding
准备工作:上传数据的一些必要的准备工作
数据上传:node.js 和 Golong 版本
存储成本:Arweave 存储费用的介绍
1
概述
Arweave 作为一条为数据存储而生的区块链,可以让任何个人或团队以极低的成本进行数据的永久存储。但是直接和 Arweave 进行交互必须持有 AR Token ,这在某种程度提高了 Arweave 的使用门槛。
为了方便开发者快速入门,我们部署了 web3infra 方便开发者永存数据。web3infra 支持多种 Token 进行存储费用的支付。(包括但不限于 ETH,USDT,BNB,LAT)
本教程将主要介绍如何使用 nodejs 以及 golang 将数据通过 web3infra 永久存储到 Arweave 网络并通过 LAT 支付存储费用。
2
准备工作
在进行数据上传之前,需要做一些必要的准备工作,以下的步骤将介绍如何充值 LAT,为后面的文件存储费用支付做准备。
MetaMask 钱包
你需要拥有一个 MetaMask 钱包,里面需要有一点 LAT 资产(只需少量就行,因为存储所需的费用非常少,后面会有说明)
在 everPay 进行充值
你需要将 MetaMask 中的 LAT 资产跨链至 everPay。
进入 everPay 主页,连接你的 MetaMask 钱包(选择 PlatON 网络)
点击跨链,将 MetaMask 钱包中的 LAT 充值到 everPay
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 = 'LAT'
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 后端服务地址,这里我们使用的是 web3infra 服务,URL 为:https://arseed.web3infura.io 。
data 里需要填充你想要上传的二进制数据,开发者可以采用 file io 从硬盘上读取对应的文件。
payCurrency 是需要选择的支付代币,这里是 LAT,在本教程中我们通过 everPay 的跨链功能将MetaMask 钱包中的 LAT 跨链至 everPay 来进行支付。
ops 里可以配置你的 Arweave Tags,什么是 Arweave Tags 参考链接。
链接 👉 :https://docs.web3infura.io/zh-cn/docs/other/tags/
在准备好配置后,调用 await instance.sendAndPay(arseedUrl, data, payCurrency, ops) 就可以将你的数据上传到 web3infra 的 Arseeding 节点。
在准备好配置后,调用
await instance.sendAndPay(arseedUrl, data, payCurrency, ops)
就可以将你的数据上传到 web3infra 的 Arseeding 节点。
在终端执行以下命令进行文件上传:
node demo.js
正确执行后终端将返回:
res {
status: 'ok',
everpayTx: {
tokenSymbol: 'LAT',
action: 'transfer',
from: '0xDc19464589c1cfdD10AEdcC1d09336622b282652',
to: 'uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68',
amount: '265671008119772',
fee: '0',
feeRecipient: '0x6451eB7f668de69Fb4C943Db72bCF2A73DeeC6B1',
nonce: '1658805735973',
tokenID: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
chainType: 'PlatON',
chainID: '210425',
data: '{"itemId":"iyosxBPXwPYXKYac31nEq3c5uDm4Wxsv0o-Yy8yaHvU","bundler":"uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68","currency":"LAT","decimals":18,"fee":"265671008119772","paymentExpiredTime":1658809335,"expectedBlock":982245}',
version: 'v1',
sig: '0x12e9342863734b0c3d0bf09cf191a38e0266692a3a0114723904f5e3d5205310706d1d6eaff86bda2f19d8ee46becc4c9512b419ecae36be844bd43da52a6fa41b'
},
everHash: '0x2cd991fb67206ccc93976a20a892833fecce9ae5261d4570d6b6bb3eac3783e7',
order: {
itemId: 'iyosxBPXwPYXKYac31nEq3c5uDm4Wxsv0o-Yy8yaHvU',
bundler: 'uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68',
currency: 'LAT',
decimals: 18,
fee: '265671008119772',
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, "LAT", &schema.OptionItem{Tags: tags})
fmt.Println(ord)
fmt.Println(itemId)
}
配置说明:
将前文提到的 MetaMask 钱包对应的密钥填充到 YOUR PRIVATE KEY。
arseedUrl 是需要配置的 Arseeding 后端服务地址,这里我们使用的是 web3infra 服务,URL 为:https://arseed.web3infura.io 。
data 里需要填充你想要上传的二进制数据,本例上传了一张图片。
payCurrency 是需要选择的支付代币,这里我们使用的是 LAT。
ops 里可以配置你的 Arweave Tags,什么是 Arweave Tags 参考下面链接。
链接:https://docs.web3infura.io/zh-cn/docs/other/tags/
在终端执行以下命令进行文件上传:
go run main.go
正确执行后将返回:
{
tokenSymbol:"LAT"
action:"transfer"
from:"0xc4f4FA5D20B23e651ce11fB824270b317F11d3ba"
to:"uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68"
amount:"265671008119772"
fee:"0"
feeRecipient:"0x6451eB7f668de69Fb4C943Db72bCF2A73DeeC6B1"
nonce:"1660037820075"
tokenID:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
chainType:"PlatON"
chainID:"210425"
data:{
"itemId":"1MG5tOIbSCijvaj9vr9qBudOGQ2-GLUYCL_xLjkRBc8",
"bundler":"uDA8ZblC-lyEFfsYXKewpwaX-kkNDDw8az3IW9bDL68",
"currency":"LAT",
"decimals":18,
"fee":"265671008119772",
"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
储存成本
通过以上的教程,相信大家对于如何通过 web3infra 上传文件至 Arweave 进行永存已经有了一定的了解,那么如此方便的存储,费用情况是如何的呢?
获取储存费用
在前面的上传数据的例子中,返回的结果中的 data.fee 就是该笔上传数据所支付的费用,在 golang 用例中,我们使用 LAT 进行支付,fee 为 265671008119772,而 LAT 的 decimal 为 18,因此我们支付的费用仅为 0.0026 LAT!你没有看错,如此低的花费就可以将一张图片永存!
使用 API 接口获取存储费用
当然,你可能需要提前知道上传 xxx size 的数据需要的花费,web3infra 当然也提供了 API 接口来查询相应的存储费用。
Get Bundle Fee
查看上传数据的交易手续费。
Request:
Method: GET
URL: /bundle/fee/:size/:currency
params:
size: 需要上传的数据大小,以字节为单位.
currency: 用于支付 fee 的 token symbol, 支持 everpay 跨链的所有 token.
例如,你需要查询上传一个 1M 的文件并且用 LAT 支付需要的费用:
可以在终端输入:
curl --location --request GET 'https://arseed.web3infura.io/bundle/fee/1048576/LAT'
或者直接在浏览器上输入:
<https://arseed.web3infura.io/bundle/fee/1048576/LAT>
就可以方便的查询了。
Response:
{
"currency":"LAT",
"decimals":18,
"finalFee":"265671008119772137"
}
如上面的返回结果所示,上传 1M 数据大约需要 2.6 个 LAT。
欢迎对 Arweave 感兴趣的朋友,加入 PermaDAO,Keep on Building!!!
风险提示:该文章仅作为教程使用,不构成任何投资观点。