查看原文
其他

如何使用 LAT 进行文件永存

Kevin, PermaDAO everVision 2022-12-25

原文链接: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。

      1. 进入 everPay 主页,连接你的 MetaMask 钱包(选择 PlatON 网络)

      2. 点击跨链,将 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 tidygo get github.com/everFinance/arseedinggo 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 ,上文中 itemId1MG5tOIbSCijvaj9vr9qBudOGQ2-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: GETURL: /bundle/fee/:size/:currencyparams: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!!!



    风险提示:该文章仅作为教程使用,不构成任何投资观点。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存