NonceGeek / Web3-Learning-Camp

Web3.0 Learning Camp
MIT License
134 stars 38 forks source link

Moveflow SDK的功能解析及使用说明(投稿) #318

Closed albinlau closed 1 year ago

albinlau commented 1 year ago

Moveflow SDK的功能解析及使用说明

1 什么是Moveflow

MoveFlow 是建立在 Move 生态系统之上的加密资产流支付协议,它可以实现即时、无缝和不间断的支付流。

1.1 赋能加密支付

MoveFlow 有广泛的应用领域,包括实时工资支付、代币空投和解锁、订阅和按使用量付费模式等。

1.2 DeFi 基础设施

流支付还可以作为 DeFi 开发的基础设施,为 DeFi 带来更多有趣的产品和应用。基于Move生态系统,接收权和发送权的resource可以NFT化,作为有价值资产应用于更多的DeFi领域。

2 Moveflow SDK的介绍和安装

2.1 Moveflow SDK介绍

Moveflow SDK主要服务于第三方Dapp应用开发,独立开发者,前端等多个对象。用户对象可以方便快捷地跟合约进行交互操作,而无需考虑底层合约的实现方式。

Moveflow SDK提供有流支付的交互接口和查询接口,两种类型接口相互配合完成所有流支付的相关操作。

交互接口列表如下:

查询接口列表如下:

2.2 Moveflow SDK的安装

使用yarn安装Moveflow SDK。

yarn add @moveflow/sdk.js

在代码中导入文件后,可以创建sdk实例。

import { SDK,TESTNET_CONFIG } from '@moveflow/sdk.js';

const sdk = new SDK(TESTNET_CONFIG);

3. 流支付的交互接口解析和使用**

3.1 创建流

该接口可以创建一条支付流,并且返回交易结果。

const payload = sdk.stream.create({
  name : 'test',
  remark : 'test',
  recipientAddr: '0x20f0cbe21cb340fe56500e0889cad03f8a9e54a33e3c4acfc24ce2bdfabc4180',
  depositAmount: 1,
  startTime: start_time,
  stopTime: stop_time,
  coinType: CoinsMapping.APTOS,
  interval: 1,
  canPause: true,
  closeable: true,
  recipientModifiable: true,

})

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

3.2 从支付流中提取Coin

支付流的接收者从一条支付流中提取Coin。可提取的Coin数量从上次提取时间起算到当前时间,每满一个提取周期获得相应数量的coin提取权限。


const payload = sdk.stream.withdraw({
  id: 30,
  coinType: AptosCoin,
})

const response = await SignAndSubmitTransaction(payload)

需要输入的参数有:

获取支付流的Id

接收者从支付流中提取Coin时需要指定支付流的id,支付流id是一条支付流的唯一标识。Moveflow SDK有单独的接口帮助获取所需要支付流id。

查询接收者的所有输入支付流:通过地址参数,查询该地址作为接收者的所有支付流Id。(详见4.3)

查询发送者的所有输出支付流:通过地址参数,查询该地址作为发送者的所有支付流Id。(详见4.4)

3.3 关闭支付流

该接口会审核接口调用权限,只有支付流的发送者才能关闭这条支付流。关闭支付流后,接收者将受到其可提取的Coin,剩余Coin会退回给发送者。

const payload = sdk.stream.close({ id: 29 })

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

3.4 暂停支付流

该接口可以暂停一条支付流,暂停期间接收者不会累积可提取Coin。

const payload = sdk.stream.pause({
    id: 29,
    coinType: AptosCoin,
})

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

3.5 恢复支付流

该接口对应于暂停支付流,可以将一条暂停状态的支付流恢复。恢复后接收者可以正常累积可提取Coin。

 const payload = sdk.stream.resume({
    id: 29,
    coinType: AptosCoin,
})

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

3.6 扩展支付流

如果支付流的发送者需要以原有支付参数增加新的代币数量,可以通过此接口延长原有支付流的结束时间,无需创建一个新的支付流。

const payload = sdk.stream.extend({
    id: 30,
    extraAmount: 300,
    stopTime: '1635724800',
    coinType: AptosCoin,
})

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

4 流支付的查询接口的解析和使用

4.1 查询支付流信息

通过指定的支付流id获取支付流的信息。

const id = 30

const streams = await sdk.stream.getStreamById(id)

console.log("streams:", streams)

支付流的信息包括:

支付流信息结构体定义如下:

interface StreamInfo {
    status: StreamStatus,
    createTime: string,
    depositAmount: string, 
    streamId: string, 
    interval: string,
    lastWithdrawTime: string, 
    ratePerInterval: string,
    recipientId: string,
    remainingAmount: string, 
    senderId: string, 
    startTime: string, 
    stopTime: string,  
    withdrawnAmount: string, 
    pauseInfo: {
        accPausedTime: string,
        pauseAt: string,
        paused: boolean,
    },
    name: string, // stream's name
    streamedAmount: string,
    withdrawableAmount: string,
    escrowAddress: string,
}

4.2 查询支付流的可提取Coin数量

查询支付流的可提取Coin数量,也就是到当前时间点支付流已发送的Coin数量减去接收者已提取的Coin数量。

const id = 30

const res = await sdk.stream.withdrawable(_id)

console.log("withdrawable res:", res)

4.3 查询某地址的输入流

以某地址为入参,查询该地址作为接收者的所有支付流的信息。

const address = `0x20f0cbe21cb340fe56500e0889cad03f8a9e54a33e3c4acfc24ce2bdfabc4180`

const res = await sdk.stream.getIncomingStreams(address)

console.log("getIncomingStreams res:", res)

4.4 查询某地址的输出流

以某地址为入参,查询该地址作为发送者的所有支付流的信息。

const address = `0x20f0cbe21cb340fe56500e0889cad03f8a9e54a33e3c4acfc24ce2bdfabc4180`

const res = await sdk.stream.getOutgoingStreams(address)

console.log("getOutgoingStreams res:", res)

5 Demo展示

点击这里可以体验demo展示,demo代码也已经开源。

6 总结

目前Moveflow SDK为1.0版本,仅支持基于APTOS的合约基本交互。下一步的工作将提供更便捷易用的接口。目前还有若干不足,欢迎大家提出宝贵意见。

leeduckgo commented 1 year ago

paid 100 USDT, 315 RMB and others by APT:

https://dorahacks.io/zh/daobounty/329