利用JS-SDK发起签名转账交易示例介绍

前言

本篇介绍如何利用 PlatON 的 JS-SDK 来做简单的签名转账交易,参考文档

关于 JS-SDK

通过 web3.js 提供的 web3 对象与底层链进行交互。底层实现上,它通过 RPC 调用与本地节点通信。web3.js 可以与任何暴露了 RPC 接口的 PlatON 节点连接。

准备工作

以下示例环境:

  • macOS
  • Alaya 网络
  • node v14.15.1,安装地址
  • lerna,命令:npm i lerna -g
  • ES6

首先确保本地开发环境安装 NodeJS 环境,并且官方该 SDK 使用了lerna工具来优化托管在 git\npm 上的多 package 代码库的工作流,所以需要全局安装 lerna 包。

执行步骤

创建项目目录,这里目录名为 tx,并初始化环境

mkdir -pv tx
cd tx
npm init(按“回车”键接受大部分默认设置)

安装依赖包

npm i PlatONnetwork/client-sdk-js#alaya-dev

转账示例代码,在 tx 目录下创建 index.js 文件

/*!
 * tx.js
 */

import Web3 from "web3";       // 导入web3

const provider = "http://xx";  // 定义provider,即PlatON节点的RPC端口
const w3 = new Web3(provider); // 创建web3的实例,这里命名为w3
const chainID = 201018;        // 定义alaya先行网ChainID

// 定义toHex函数,将10进制转成16进制
const toHex = (number) => {
    return w3.utils.numberToHex(parseInt(number));
};

// 定义转账函数:txDemo
export async function txDemo(fnParams) {
    let { from, to, fromPk, value } = fnParams;

    // nonceHex: 转出地址的nonce值
    // 关于nonce: A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account
    let nonceHex = toHex(await w3.platon.getTransactionCount(from));

    let tx = {
        from: from,
        to: to,
        value: value,
        chainId: chainID,
        gasPrice: toHex(await w3.platon.getGasPrice()),  // 获取当前链上的gasprice
        gas: toHex(21000),          // 转账固定gas消耗:21000
        nonce: nonceHex,
    };

    // 地址签名
    let signTx = await w3.platon.accounts.signTransaction(tx, fromPk);

    // 发出签名交易
    let reply = await w3.platon.sendSignedTransaction(signTx.rawTransaction);
    return reply;
}

// fnParams 函数示例
const fnParams = {
    "from": "atpxxxx"                      // 转出地址
    "to": "atpxxxx",                       // 转入地址
    "fromPk": "xxx",                       // 转出地址私钥
    "value": w3.utils.toVon('1', 'atp'),   // 对应货币转为以von为单位,这里转账了1ATP
}

txDemo(fnParams).then(console.log)

运行

由于使用了 import 语法,所以需要在目录下 package.json 下面加’type’: 'module’

package.json

{
  ...
  "dependencies": {
    "web3": "github:PlatONnetwork/client-sdk-js#alaya-dev"
  },
  "type": "module" // 加入这行
}
node index.js

返回结果…

{
  blockHash: '0x3bcd2367955f48f2b77os39bae8a21d76e13xs0feccaa7dd4f86cfec3a6770dbc',
  blockNumber: 11901122,
  contractAddress: null,
  cumulativeGasUsed: 21000,
  from: 'atpxxx',
  gasUsed: 21000,
  logs: [],
  logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
  status: true,
  to: 'atpxxx',
  transactionHash: '0x7886f9afb7ceqxe6ebd2f25d12dae8a6596de264cb7bc5d0d8cd56d526e4a361',
  transactionIndex: 0
}

可根据交易 hash(transactionHash)来查看转账结果

4 个赞

优秀!感谢如此真材实料的分享!