我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Aptos SDK交互如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Aptos SDK交互如何实现

今天小编给大家分享一下Aptos SDK交互如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

官网示例

官网提供了交互的例子,我们需要先clone下仓库

git clone https://github.com/aptos-labs/aptos-core.git

然后进入例子的文件中

cd ~/aptos-core/ecosystem/typescript/sdk/examples/typescript

然后安装必要的依赖,这里使用的是pnpm,如果没有安装pnpm则需要先安装一下,然后用一下命令来安装依赖

pnpm install

然后通过以下命令来运行例子

pnpm run transfer_coin

接着就会看到以下输出:

=== Addresses ===
Alice: 0x98b90c8febd6a248374f11d409045e9e06a68e3ae8688b00c99cf6c2218cbc18
Bob: 0x5a22c7704392910541ee53960477722c3aec0667b2bcb3da954f8e06490b39d3

=== Initial Balances ===
Alice: 100000000
Bob: 0

=== Intermediate Balances ===
Alice: 99944800
Bob: 1000

=== Final Balances ===
Alice: 99889600
Bob: 2000

这期间经过具体的步骤如下

  • 初始化REST和facuet客户端

  • 创建两个账户Alice和Bob

  • Alice账户从facuet领取代币

  • Alice转账1000代币个Bob并支付gas费

  • Alice再次转帐1000代币给Bob并支付gas费

实现过程

之前我们已经大概了解了这个例子做的事情,那么这又是怎么实现的呢,接下来我们可以一步一步看代码:

初始化客户端

第一步我们就要初始化REST和facuet客户端。

  • REST客户端是用来和REST API交互的

  • facuet客户端是用来与开发网Faucet服务交互的,可以创建账户和获取测试代币

const client = new AptosClient(NODE_URL);const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL);

使用API client我们可以创建一个CoinClient,使用CoinClient可以进行常规的账户操作如转帐和检查余额。

const coinClient = new CoinClient(client);

在common.ts中初始化来URL如下

export const NODE_URL = process.env.APTOS_NODE_URL || "https://fullnode.devnet.aptoslabs.com";export const FAUCET_URL = process.env.APTOS_FAUCET_URL || "https://faucet.devnet.aptoslabs.com";

❝在默认情况下URL都是指向开发网的服务,但是我们也可以通过以下两个环境变量配置:❞

- APTOS_NODE_URL- APTOS_FAUCET_URL

创建本地账户

接下来需要创建两个本地账户,账户有链上状态和链下状态,链下状态由一个地址和一个公钥/私钥对组成,私钥是用来验证所有权的,下面代码创建了链下状态:

const alice = new AptosAccount();const bob = new AptosAccount();

创建区块链账户

在Aptos中,每一个账户都必须要有一个链上代表用于接收代币以及与其他dAPP交互,一个账户代表了存储资产的媒介,以下代码说明了如何使用Faucet创建账户,然后获取代币。

await faucetClient.fundAccount(alice.address(), 100_000_000);await faucetClient.fundAccount(bob.address(), 0);

读取余额

以下代码说明如何去获取账户余额,在这个背景下,SDK中的CoinClient函数checkBalance可以查询现在存储的值

console.log(`Alice: ${await coinClient.checkBalance(alice)}`);console.log(`Bob: ${await coinClient.checkBalance(bob)}`);
async checkBalance(  account: AptosAccount | MaybeHexString,  extraArgs?: {    // The coin type to use, defaults to 0x1::aptos_coin::AptosCoin    coinType?: string;  },): Promise<bigint> {  const coinType = extraArgs?.coinType ?? APTOS_COIN;  const typeTag = `0x1::coin::CoinStore<${coinType}>`;  const address = getAddressFromAccountOrAddress(account);  const accountResource = await this.aptosClient.getAccountResource(address, typeTag);  return BigInt((accountResource.data as any).coin.value);}

转帐

与上一步一样,这是另一个帮助步骤,它构建了一个将硬币从 Alice 转移到 Bob 的交易。对于正确生成的交易,API 将返回交易哈希,可在后续步骤中使用该哈希来检查交易状态。 Aptos 区块链确实对提交进行了一些验证检查;如果其中任何一个失败,用户将收到错误消息。这些验证使用交易签名和未使用的序列号,并将交易提交到适当的链。

let txnHash = await coinClient.transfer(alice, bob, 1_000, { gasUnitPrice: BigInt(100) });

在幕后,传输函数生成交易负载并让客户端签名、发送并等待它:

async transfer(  from: AptosAccount,  to: AptosAccount | MaybeHexString,  amount: number | bigint,  extraArgs?: OptionalTransactionArgs & {    // The coin type to use, defaults to 0x1::aptos_coin::AptosCoin    coinType?: string;    // If set, create the `receiver` account if it doesn't exist on-chain.    // This is done by calling `0x1::aptos_account::transfer` instead, which    // will create the account on-chain first if it doesn't exist before    // transferring the coins to it.    createReceiverIfMissing?: boolean;  },): Promise<string> {  // If none is explicitly given, use 0x1::aptos_coin::AptosCoin as the coin type.  const coinTypeToTransfer = extraArgs?.coinType ?? APTOS_COIN;  // If we should create the receiver account if it doesn't exist on-chain,  // use the `0x1::aptos_account::transfer` function.  const func = extraArgs?.createReceiverIfMissing ? "0x1::aptos_account::transfer" : "0x1::coin::transfer";  // If we're using the `0x1::aptos_account::transfer` function, we don't  // need type args.  const typeArgs = extraArgs?.createReceiverIfMissing ? [] : [coinTypeToTransfer];  // Get the receiver address from the AptosAccount or MaybeHexString.  const toAddress = getAddressFromAccountOrAddress(to);  const payload = this.transactionBuilder.buildTransactionPayload(func, typeArgs, [toAddress, amount]);  return this.aptosClient.generateSignSubmitTransaction(from, payload, extraArgs);}

generateSignSubmitTransaction的内容如下

const rawTransaction = await this.generateRawTransaction(sender.address(), payload, extraArgs);const bcsTxn = AptosClient.generateBCSTransaction(sender, rawTransaction);const pendingTransaction = await this.submitSignedBCSTransaction(bcsTxn);return pendingTransaction.hash;

等待交易处理

在 TypeScript 中,只需调用 coinClient.transfer 就足以等待交易完成。一旦处理(成功或不成功),该函数将返回 API 返回的事务,或者如果处理时间超过超时则抛出错误。如果您希望在事务未成功提交时抛出错误,则可以在调用 transfer 时将 checkSuccess 设置为 true:

await client.waitForTransaction(txnHash);

以上就是“Aptos SDK交互如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Aptos SDK交互如何实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Aptos SDK交互如何实现

今天小编给大家分享一下Aptos SDK交互如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。官网示例官网提供了交互的例
2023-07-05

Aptos SDK交互实现过程详解

这篇文章主要为大家介绍了Aptos SDK交互实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-03

SpringBoot如何实现数据交互

这篇文章主要介绍“SpringBoot如何实现数据交互”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何实现数据交互”文章能帮助大家解决问题。1. 数据格式在实际的项目场景中,前
2023-06-29

golang与pgsql交互如何实现

本文小编为大家详细介绍“golang与pgsql交互如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang与pgsql交互如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、目的通过读取配置文
2023-07-05

如何实现WinForm窗体间交互

这篇文章主要介绍如何实现WinForm窗体间交互,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来
2023-06-17

php跟硬件交互如何实现

要实现PHP与硬件的交互,可以通过以下方法:串口通信:使用PHP串口扩展(如`php_serial`)与硬件设备进行串口通信。通过打开串口连接、设置波特率和其他参数,然后发送和接收数据。示例代码:confBaudRate(9600);$
2023-10-25

QT与javascript交互数据如何实现

这篇文章给大家分享的是有关QT与javascript交互数据如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数据从QT流向JS1、QT调用JS的函数,JS通过形参获得QT的值2、JS调用QT的函数,QT
2023-06-15

如何实现Flex与浏览器交互

本篇文章为大家展示了如何实现Flex与浏览器交互,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。总结Flex与浏览器交互在用Flex做Web应用时为了扩展应用程序功能,势必会更多的同浏览器进行交互,这
2023-06-17

如何实现Linux下交互式与非交互式修改用户密码

这篇文章主要介绍“如何实现Linux下交互式与非交互式修改用户密码”,在日常操作中,相信很多人在如何实现Linux下交互式与非交互式修改用户密码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现Linux
2023-06-09

golang前后端分离如何实现交互

在 Golang 中实现前后端分离的交互可以通过以下几种方式:1. RESTful API:将后端独立的服务,提供 RESTful 风格的 API,前端通过 HTTP 请求来与后端进行交互。后端可以使用 Golang 的 net/http
2023-10-20

如何实现AmazeUI按钮交互的方法

这篇文章主要介绍了如何实现AmazeUI按钮交互的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。AmazeUI 按钮交互的实现示例,具体如下:
2023-06-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录