原创 PlatON PlatON今天
本教程从alaya js sdk的安装开始,分别讲述了连接Alaya网络并执行基本查询、转账及签名操作及智能合约交互的相关内容。本教程力求翔实地展现了Alaya JS SDK的使用方法,让开发者能够快速入门Alaya JS SDK。
在nodejs中安装Alaya js sdk
- 安装nodejs,建议使用nodejs的LTS版本。
- 安装
lerna
。安装前可以使用lerna --version
来验证之前是否已经安装过,如果没有安装请使用npm i lerna -g
进行全局安装。
- 初始化
nodejs
项目。新建一个项目文件夹,并进入此文件夹,如mkdir alaya-js-sdk-examples & cd alaya-js-sdk-examples
,然后使用命令npm init -y
进行项目初始化。此操作会在alaya-js-sdk-examples
下面新建一个文件package.json
。
- 安装Alaya的js sdk。仍旧是在之前的文件夹下,使用命令
npm i AlayaNetwork/client-sdk-js#0.15.1-develop
进行js sdk的安装。
- 创建
basic.js
文件。后续可以在此文件中进行开发,在本教程中会在此文件中编写进行基本的RPC查询的代码。
在此部分,我们在basic.js中添加两行代码:
varWeb3a = require('web3');
console.log(Web3a.version);
注:本教程为了便于区分,将原文档中的Web3重命名为Web3a,web3重命名为web3a。这样便于与多数教程中ethereum的Web3与web3进行区分。
- 运行
basic.js
代码。在命令行中使用命令node basic.js
运行此代码,如果返回类似于以下版本号,说明你已经完成了Alaya js sdk的安装。
0.15.1
注:后面代码在没有特殊说明的前提下,都是在nodejs及网页上可以运行的
连接Alaya区块链并执行基本查询
Alaya的网络分为主网、开发网络和私有网络。为了降低开发成本建议使用开发网络或私有网络进行开发、测试,测试完成后可在主网进行部署。
更多的关于网络的说明请参照:
https://alaya.network/alaya-devdocs/zh-CN/Run_a_fullnode
开发网的相关信息请参照:
https://alaya.network/alaya-devdocs/zh-CN/Join_the_dev_network
为了降低本教程的使用门槛,所以本教程使用开发网络为例进行说明。
连接开发网络
var Web3a = require('web3');
var web3a = new Web3('http://47.241.91.2:6789');
console.log(web3a.currentProvider)
当然,我们也可以使用web3.setProvider
及web3.platon.setProvider
来设置当前网络。
查询网络基础信息
后续的开发中会有很多异步的调用的例子,在js语法中最常见的有三种:
callback,请参照:
http://nodejs.cn/learn/javascript-asynchronous-programming-and-callbacks
Promises,请参照:
http://nodejs.cn/learn/understanding-javascript-promises
async/await,请参照:
http://nodejs.cn/learn/modern-asynchronous-javascript-with-async-and-await
本文为了简化代码,都是使用的async/await的写法。下面的代码为basic.js
的全部内容,里面的注释说明了每一段代码的用处。
async function main() {
var Web3a = require('web3');
var web3a = new Web3a('http://47.241.91.2:6789');
// 节点的协议版本,返回结果为16进制字符串
var version = await web3a.platon.getProtocolVersion();
console.log("Alaya节点的协议版本:" + web3a.utils.hexToNumber(version));
// Alaya节点是否正在同步,返回true/false
var syncing = await web3a.platon.isSyncing();
console.log("Alaya节点是否正在同步:" + syncing);
// 当前gas价格,该价格由最近的若干块 的gas价格中值决定。单位为VON
var gasPrice = await web3a.platon.getGasPrice();
console.log("Gas Price: " + gasPrice);
// 返回当前块编号
var blockNumber = await web3a.platon.getBlockNumber();
console.log("Block Number: " + blockNumber);
// 获取指定块中特定账户地址的余额,单位VON
var address = "atp1td535z2n3c7rjmsxuxdafd9gu8waz5lfx2a3c9";
var balance = await web3a.platon.getBalance(address);
console.log("Address Balance: " + balance);
// 返回指定块编号或块哈希对应的块
var blockHash = "0x577e9777f0ee1cf1b4d2d45a959ee57a59ebd0927740df4cd483c99eb5c58e83";
blockNumber = 10418171;
var blockByHash = await web3a.platon.getBlock(blockHash);
console.log("Get Block by Hash: " + JSON.stringify(blockByHash));
var blockByNumber = await web3a.platon.getBlock(blockNumber);
console.log("Get Block by Number: " + JSON.stringify(blockByNumber));
// 返回指定块中的交易数量,和上一个函数一样,参数都可以为blockHash或blockNumber
var transCount = await web3a.platon.getBlockTransactionCount(blockHash);
console.log("Transaction Number in Block: " + transCount);
// 返回具有指定哈希值的交易对象
var transHash = "0xa4414b82479af4dbdf4bab822f46f2414c200152553758678e506195b0fa9cfb";
var trans = await web3a.platon.getTransaction(transHash);
console.log("Transaction: " + JSON.stringify(trans));
// 指定地址发出的交易数量。此函数非常有用,可以用于确定交易的nonce
var accountTransCount = await web3a.platon.getTransactionCount(address);
console.log("Account Transaction Count: " + accountTransCount);
}
main();
上面的代码只举例了部分比较常用的查询函数,大家可以发现查询函数的使用方法非常单一,以上例子足够说明。
下一期的内容我们将讲述入门教程中的转账交易模块,欢迎大家关注。
特别鸣谢本教程贡献者@RileyGe
(未完待续)
本文转载自https://mp.weixin.qq.com/s/uhoysBbWvxR2pwPXJtxbng