跳到主要内容

bundle

如果还不知道怎么生成 Arseeding java sdk 请看上一节:java SDK 概览

使用 arseedingsdk4j-sdk 可以帮助开发者快速将文件发送到 Arseeding 节点。

发送数据

String data = "hello world";
String currency = "usdc";
Tag tag1 = new Tag("abc", "abc");
Tag tag2 = new Tag("Content-Type", "application/text");
List<Tag> tags = Lists.newArrayList(tag1, tag2);
boolean needSeq = false;

DataSendResponse result =
arSDK.sendData(data.getBytes(), currency, tags, "", "", needSeq);

System.out.println(result);

其中

data 是需要上传的数据。你可以通过 io 读取文件并完成上传。

tags 是 Arweave 支持的一种 key-value 索引,你可以在 tags 中设置文件类型,设置文件名称甚至是版本号。关于 Arweave Tag

tags 中的 Content-Type 需要基于你上传的内容进行配置,例如 上传的 png 格式的图片,则配置为 image/png,详细说明参考 Content-Type

currency 选择你需要为文件存储支付的币种,如果使用个人部署的 No_Fee 模式节点,该值可以为空字符串。

needSeq Arseeding 支持顺序上链用户的订单,需要顺序上链则设置为 true 即可

注意: 这一步操作是将数据发送至 Arseeding 进行暂存并返回给用户一个待支付的订单,订单支付完成后 Arseeding 会将数据上链,(之后你可以通过 Arseeding 或 Arweave 网关进行数据查询)。若订单1小时内未支付则订单过期,数据删除。

返回值

  private String itemId; //  用来查询数据的 id

private long size; // 数据大小

private String bundler; // 收款人,Arseeding 数据上传者

private String currency; // 需支付的 Token

private int decimals; // Token 的 decimal

private String fee; // 需支付的费用

private long paymentExpiredTime; // 订单过期时间

private long expectedBlock; // 预期该数据存储在 Arweave 上的区块号

支付订单

通过 sdk 支付上传数据所需的费用后, Arseeding 可以 100% 保证将数据上传至 Arweave 进行永存。

PayOrder payOrder = getPayOrder() // get the pay order

PayOrdersResponse response = arSDK.payOrders(Lists.newArrayList(payOrder))

System.out.println(response);

返回值

  private String status;

private String tokenSymbol;

private String action;

private String from;

private String to;

private String amount;

private String fee;

private String feeRecipient;

private String nonce;

private String tokenID;

private String chainType;

private String chainID;

private String data;

private String version;

private String sig;

注意:若用户在 everpay 上面还没有资产,可以参考这里进行资产跨链。支付必须在60分钟内完成,否则数据将不会被上传至 Arweave 并且 Arseeding 会将该笔数据清除。

发送数据+支付

arseedingsdk4j-sdk 同样提供将发送数据+支付整合到一起的便捷方法,以此来满足在 everpay 中已经拥有资产的用户。

String data = "hello world";
String currency = "usdc";
Tag tag1 = new Tag("abc", "abc");
Tag tag2 = new Tag("Content-Type", "application/text");
List<Tag> tags = Lists.newArrayList(tag1, tag2);
boolean needSeq = false;

DataSendOrderResponse result =
arSDK.sendDataAndPay(data.getBytes(), currency, tags, "", "", needSeq);

System.out.println(result);

用 API Key 发送原始数据

Map<String,String> tags = new HashMap<>();
tags.put("abc", "abc");
String itemId = arSDK.submitNativeData("your apiKey", "usdc", "hello world".getBytes(), "text/html", tags);
System.out.println(itemId);

获取 bundle 费用

根据你需要上传的数据量,返回费用值。

BundleFee fee = arSDK.bundleFee(size, "usdc");
System.out.println(fee);

返回值

private String currency; // Token 类型
private int decimals; // Token decimal
private String finalFee; // 需要支付的费用

获取用户订单

通过用户的地址查询该地址的所有 Bundle 数据上传订单。其中从第0页开始查询

List<BundleOrder> orders = arSDK.getOrders("your address", 0);

System.out.println(orders);

返回值

    private int id;
private Date createdAt;
private Date updatedAt;
private String itemId; // bundleItem id
private String signer; // item signer
private int signType;
private long size;
private String currency; // payment token symbol
private int decimals;
private String fee;
private long paymentExpiredTime;
private long expectedBlock;
private String paymentStatus; // "unpaid", "paid", "expired"
private String paymentId; // everHash
private String onChainStatus; // "waiting","pending","success","failed"
private String apiKey;
private boolean sort;