4

如何使用 gear-js SDK

 2 years ago
source link: https://learnblockchain.cn/article/3557
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

如何使用 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 连接,并且可以看到最新的区块信息。通过 nodeName subscribeToNewBlocks 就可以轻松做到。

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

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 爱好者社区。

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

  • 发表于 1天前
  • 阅读 ( 67 )
  • 学分 ( 1 )

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK