狗哥区块链与AI精品内容集@NonceGeek

2025年03月28日更新 75 人订阅
原价: ¥ 20 限时优惠
专栏简介 「造」最关键的是什么?| Hackathon 漫游指南(贰) Why Hackathon?| Hackathon 漫游指南(壹) 设计「众人维护」的 BuidlerBoard | BeWater.xyz Movement 白皮书中文版 Rebuidl RSS 生产因素与反生产因素 | 独立黑客创业手册(陆) 组织 | 独立黑客创业手册(伍) 生产 | 独立黑客创业手册(肆) 销售 | 独立黑客创业手册(叄) 最优先的能力 | 独立黑客创业手册(贰) 为什么从独立黑客开始 | 独立黑客创业手册(壹) Aptos Token Object V2 | Move dApp 极速入门(贰拾肆) 可編程交易塊 | Move dApp 極速入門(貳拾叁) Aptos 密鑰輪換 | Move dApp 極速入門(貳拾貳) Aptos 对象模型 | Move dApp 极速入门(贰拾壹) Aptos Moveflow SDK使用指南 | Move dApp 极速入门(贰拾) Sui 上简单 Swap 的实现 | Move dApp 极速入门(拾玖) 用 Elixir 交互 Aptos | Move dApp 极速入门(拾捌) Sui 链上数据查询 | Move dApp 极速入门(拾柒) SUI 合约测试攻略 | Move dApp 极速入门(拾陆) Sui 数据类型详解 | Move dApp 极速入门(拾伍) Airdropper Contract in Aptos | Move dApp 极速入门(拾肆) Sandwich合约源码解析 | Move dApp 极速入门(拾叁) Sui 极速上手 | Move dApp 极速入门(拾贰) scaffold-aptos 脚手架 | Move dApp 极速入门(拾壹) 对 DID Document 的思考 | Move dApp 极速入门(九) DID中地址聚合器的实现 | Move dApp 极速入门(八) 值的存取应用3.0 | Web3.0 dApp 开发(五) 合约数据类型综述 | Move dApp 极速入门(四) 操作资源 | Move dApp 极速入门(三) 第一个 Move dApp | Move dApp 极速入门(二) Hello Move | Move dApp极速入门(一) Staker | Web3.0 dApp 开发(九) Token 自动售卖机 | Web3.0 dApp 开发(七) SVG NFT 全面实践 | Web3.0 dApp 开发(六) 值的存取应用2.0 | Web3.0 dApp 开发(四) 值的存取应用1.0 | Web3.0 dApp开发(三) Scaffold-eth 快速上手 | Web3.0 dApp 开发(二) eth.build 快速上手 | Web3.0 dApp 开发(一) 1 小时理解比特币系统 【NonceGeek Workshop 0x01总结】基于链上数据生成游戏地图 Remix 完全本地化部署 NFT:实体与虚拟载体的主与辅 | 狗哥的元宇宙思辨(一) Web3Camp 内容大全@NonceGeek 用 Python 创建一条 Pow 区块链(上) 区块链与共识机制演变史 基于 Etherscan 实现 Blockchain Syncer 【论文分享】去中心化社会:寻找 Web3 的灵魂(上) 【论文分享】去中心化社会:寻找 Web3 的灵魂(下) Ted Yin | 2021 年的区块链基础设施将是什么? 0. 公链、联盟链与分布式未来(全文) 基于 Infura 与 Web3py 部署调用 Hello 合约全过程 | 以太坊开发极速入门 太上中的基因设计与Binary | 函数式与区块链(一) 理解以太坊合约数据读取过程 | 函数式与区块链(二) Hello, Ink! | 用 Rust 写智能合约(一) Mapping 数据结构 | 用 Rust 写智能合约(二) 用 Rust 程序和 Webase 交互 | Rust 学习笔记(四) 用 Sqlite 存储 WeId | Rust 学习笔记(五) 链上注册WeId与错误处理 | Rust 学习笔记(六) WeId 链上创建与本地存储的完整闭环 | Rust 学习笔记(七) 以太坊上的核心开发者 Austin | 以太坊上的最佳开发实践 1. FISCO BCOS 开发环境节点搭建全攻略 伪代码简述 ECDSA 签名过程 | 联盟链开发 WeIdentity 源码分析 | 狗哥解码 WeIdentity 源码分析 | 狗哥解码 FISCO BCOS 介绍 | 联盟链开发 给Remix升个级 | 联盟链开发 2. 控制台的安装与使用 3. 【实验】补全一个区块链应用 4. 控制台的Web化 5. Web化控制台2.0:打造团队共用区块链学习平台 6. 使用脚手架快速搭建 Java DApp 【视频+文字】分布式思维 Rebuidl RSS (EN)

Aptos Moveflow SDK使用指南 | Move dApp 极速入门(贰拾)

  • 李大狗
  • 发布于 2023-08-22 11:51
  • 阅读 3058

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

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提供有流支付的交互接口和查询接口,两种类型接口相互配合完成所有流支付的相关操作。

交互接口列表如下:

  • create
  • withdraw
  • pause
  • resume
  • close
  • extend

查询接口列表如下:

  • getStreamById
  • withdrawable
  • incoming
  • outgoing

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)

需要输入的参数有:

  • name: 支付流名称。
  • remark: 支付流描述。
  • recipientAddr: 支付流接收者地址。
  • depositAmount: 总共存入的Coin数量。
  • startTime: 支付流开始时间,单位为秒。
  • stopTime: 支付流结束时间,单位为秒。
  • coinType: 支付流的币种,默认为APT。
  • interval: 支付周期间隔,默认为1秒。
  • canPause: 支付流是否支持暂停,默认为true。
  • closeable: 支付流是否支持关闭,默认为true。
  • recipientModifiable: 支付流是否支持修改接收者地址, 默认为false。

3.2 从支付流中提取Coin

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

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

const response = await SignAndSubmitTransaction(payload)

需要输入的参数有:

  • id: 支付流的Id。
  • coinType: 支付流的币种,默认为APT。

获取支付流的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)

需要输入的参数有:

  • id: 支付流的Id。

3.4 暂停支付流

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

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

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

  • id: 支付流的Id。
  • coinType: 支付流的币种,默认为APT。

3.5 恢复支付流

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

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

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

  • id: 支付流的Id。
  • coinType: 支付流的币种,默认为APT。

3.6 扩展支付流

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

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

const txid = await SignAndSubmitTransaction(payload)

需要输入的参数有:

  • id: 支付流的Id。
  • extraAmount: 需要额外支持的代币数量。
  • stopTime: 支付流新的结束时间,需要存入一定代币数量来延续支付流的支付时间。
  • coinType: 支付流的币种,默认为APT。

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

4.1 查询支付流信息

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

const id = 30

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

console.log("streams:", streams)

支付流的信息包括:

  • status: 状态用于支付流的过滤,分为以下七种:Scheduled/Canceled/Streaming/Completed/Paused/Unknown/All
  • createTime: 支付流的创建时间
  • depositAmount: 支付流中存入的Coin数量
  • streamId: 支付流的id
  • interval: 支付周期,单位为s
  • lastWithdrawTime: 上次提取Coin时间
  • ratePerInterval: 每周期支付的Coin数量
  • recipientId: 接收者地址
  • remainingAmount: 支付流中还剩下的Coin数量,其与depositAmount的差额就是已被提取的Coin数量
  • senderId: 发送者地址
  • startTime: 开始时间
  • stopTime: 结束时间
  • withdrawnAmount: 以及接收的金额
  • pauseInfo: 支付流的暂停信息,包括暂停状态,暂停开始时间,已暂停时间。
  • name: 支付流的名称
  • streamedAmount: 已经streamed的金额,从支付流开始到现在可以提取的代币数量
  • withdrawableAmount: 接收者当前时间点可以提取的金额,等于streamedAmount减去withdrawnAmount
  • escrowAddress: 代理金库地址

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

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展示:

https\://moveflow-aptos-sdk-demo.vercel.app/

Demo 源码:

https\://github.com/Move-Flow/sdk.js/tree/lyb/aptos-sdk/examples/demo

6 总结

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

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论