前言
本篇介绍如何利用 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)来查看转账结果