如何使用 gear-js SDK

简介: gear-js 是 Gear 的 js SDK,通过这个工具我们可以连接节点,上传合约,发送交易,还有解析 Gear 合约等。

gear-js 是 Gear 的 js SDK,通过这个工具我们可以连接节点,上传合约,发送交易,还有解析 Gear 合约等。

我们经常使用的 https://idea.gear-tech.io/ 最核心的功能就是由 gear-js 提供支持的。

现在我们以 erc20 合约为例子,介绍 gear-js。

e1f03b7c0730efb538feeddb786ed5a0.png

如何安装 gear-js

npm install @gear-js/api
或者
yarn add @gear-js/api

开始

import { GearApi } from '@gear-js/api'

连接到 rpc 节点,并获取节点信息

在网站左侧可以看到切换 rpc 连接,并且可以看到最新的区块信息。通过 nodeNamesubscribeToNewBlocks 就可以轻松做到。

const rpc = "wss://rpc-node.gear-tech.io"
const gearApi = await GearApi.create({
  providerAddress: rpc
})
const chain = await gearApi.chain()
const nodeName = await gearApi.nodeName()
const nodeVersion = await gearApi.nodeVersion()
console.log(`You are connected to chain ${chain} using ${nodeName} v${nodeVersion}`)
// 获取最新块信息
await gearApi.gearEvents.subscribeToNewBlocks((header) => {
  console.log(`New block with number: ${header.number.toNumber()} and hash: ${header.hash.toHex()}`)
})

ce265b02d69c6b3d501560a0623da6a5.png

具体代码请参考:https://github.com/GearFans/example/blob/main/src/connect.ts

获取 wasm 合约的元数据

https://idea.gear-tech.io/ 很重要的功能是上传合约,我们先考虑如何解析合约。

import { getWasmMetadata } from '@gear-js/api'
const fileBuffer = fs.readFileSync('path/to/program.meta.wasm')
const meta = await getWasmMetadata(fileBuffer)
console.log({meta})

c410add8a0e8d408b715e3433354042c.png

具体代码请参考:https://github.com/GearFans/example/blob/main/src/metadata.ts

获取账户

我们上传合约、发送信息的前提,是我们要有 1 个账户。

// 创建一个新的 keyring
const { keyring, json } = await GearKeyring.create('keyringName')
// 从 JSON 文件得到 keyring
const jsonKeyring = fs.readFileSync('path/to/keyring.json').toString()
const keyring = GearKeyring.fromJson(jsonKeyring)

bea53e3cbd28abdeb4ef642939130252.png

具体代码请参考:https://github.com/GearFans/example/blob/main/src/key.ts

上传合约

有了账户,我们上传合约,initPayload 是非常重要的参数,发送成功后,我们会获得 programId。

const code = fs.readFileSync('path/to/program.wasm')
const somePayload = {
  name: "GearFans Token",
  symbol: "GFT"
}
const uploadProgram = {
  code,
  gasLimit: 1_000_000,
  value: 0,
  initPayload: somePayload
};
const programId = await gearApi.program.submit(uploadProgram, meta)
await gearApi.program.signAndSend(keyring, (data) => {
  console.log(data)
});

81e3afb3b70d2fab97e12120edb4a7bc.png

具体代码请参考:https://github.com/GearFans/example/blob/main/src/upload.ts

发送消息

mint

Gear 调用任何方法,都需要发送信息。我们用 erc20 的 mint 方法作为例子。

const payload = {
  "mint": {
    "account": "5CyREBErNFhogptd92dtC8ybuoUczVYh2ijvdhTpS2PJGeq7",
    "amount": "1000",
  }
}
const message = {
  destination: programId, // programId
  payload: payload,
  gasLimit: 1_000_000,
  value: 0
}
await gearApi.message.submit(message, meta)
await gearApi.message.signAndSend(keyring, (data) => {
  console.log(data)
})

balanceOf

如何调用 balanceOf,我们修改 payload 就可以。

const payload = {
  "BalanceOf": "5CyREBErNFhogptd92dtC8ybuoUczVYh2ijvdhTpS2PJGeq7"
}

具体代码请参考:

https://github.com/GearFans/example/blob/main/src/mint.ts

https://github.com/GearFans/example/blob/main/src/balanceof.ts

获取事件

发送完事件后,我们要接受事件,查看结果。

Gear 的事件非常多,我们重点关注 MessageDispatchedLog

const rpc = "wss://rpc-node.gear-tech.io"
const gearApi = await GearApi.create({
  providerAddress: rpc
})
gearApi.allEvents((events) => {
  events.forEach(async ({
    event: { data, method }
  }) => {
    if (method == "MessageDispatched") {}
    if (method == "Log") {}
  })
})

获得 log 后,我们要继续解析 log 内的数据。

let decoded = CreateType.decode(type, payload, meta)
console.log(JSON.stringify(decoded))

6153a136d7acb0c0f4cf78dcacd7e750.png

具体代码请参考:https://github.com/GearFans/example/blob/main/src/event.ts


关于 GearFans

Gear 是波卡生态的计算组件,GearFans 是 Gear 爱好者社区。

目录
相关文章
|
4天前
|
JavaScript 前端开发 开发工具
【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. Check to make sure you have the correct tenant ID and are signing into the correct cloud. Check with your subscription administrator, this may happen if there are no active subscriptions for the tenant.
|
缓存 监控 JavaScript
日志服务(SLS) 的桌面端 Node.js SDK 封装
日志服务(SLS) 的桌面端 Node.js SDK 封装
16182 7
|
缓存 Kubernetes 监控
Sentry(v20.12.1) K8S 云原生架构探索,Sentry JavaScript SDK 三种安装加载方式
Sentry(v20.12.1) K8S 云原生架构探索,Sentry JavaScript SDK 三种安装加载方式
907 0
Sentry(v20.12.1) K8S 云原生架构探索,Sentry JavaScript SDK 三种安装加载方式
|
前端开发 算法 Java
使用虹软SDK实现离线人脸注册,人脸登录(H5-JS前端,java后台)
一开始找人脸识别的第三方接口,选择了百度,就是发请求给百度的接口,解析人家返回的数据。
|
传感器 监控 JavaScript
NodeJS & Dapr Javascript SDK 官方使用指南
用于在 JavaScript 和 TypeScript 中构建 Dapr 应用程序的客户端库。该客户端抽象了公共 Dapr API,例如服务到服务调用、状态管理、发布/订阅、机密等,并为构建应用程序提供了一个简单、直观的 API。
383 0
NodeJS & Dapr Javascript SDK 官方使用指南
|
边缘计算 开发框架 JavaScript
使用 Dapr JS SDK 让 Nest.js 集成 Dapr
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。
313 0
使用 Dapr JS SDK 让 Nest.js 集成 Dapr
|
资源调度 监控 JavaScript
Sentry 官方 JavaScript SDK 简介与调试指南
Sentry 官方 JavaScript SDK 简介与调试指南
510 0
Sentry 官方 JavaScript SDK 简介与调试指南
|
JavaScript 前端开发 中间件
Vue 2.x折腾记 - (13) Nuxt.js写一个常规音频的播放组件,动态注入微信,新浪微博的js-sdk
只是一个常规的播放组件,需要考虑微信,微博这类环境的播放 微信和微博,若没有用其官方的js-sdk初始化,没法播放。 我的文章从来都不推崇copy,仅供参考学习..具体业务具体分析定制才是最合理的
260 0
|
JavaScript 前端开发 测试技术
Sentry 开发者贡献指南 - JavaScript SDK Minimal
Sentry 开发者贡献指南 - JavaScript SDK Minimal
140 0
|
Kubernetes JavaScript 前端开发
Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解(二)
Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解(二)
393 0