本教程从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
为了降低本教程的使用门槛,所以本教程使用开发网络为例进行说明。
连接开发网络
varWeb3a=require('web3');varweb3a=newWeb3('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的全部内容,里面的注释说明了每一段代码的用处。
asyncfunctionmain(){varWeb3a=require('web3');varweb3a=newWeb3a('http://47.241.91.2:6789');//节点的协议版本,返回结果为16进制字符串varversion=awaitweb3a.platon.getProtocolVersion();console.log("Alaya节点的协议版本:"+web3a.utils.hexToNumber(version));//Alaya节点是否正在同步,返回true/falsevarsyncing=awaitweb3a.platon.isSyncing();console.log("Alaya节点是否正在同步:"+syncing);//当前gas价格,该价格由最近的若干块的gas价格中值决定。单位为VON vargasPrice=awaitweb3a.platon.getGasPrice();console.log("GasPrice:"+gasPrice);//返回当前块编号varblockNumber=awaitweb3a.platon.getBlockNumber();console.log("BlockNumber:"+blockNumber);//获取指定块中特定账户地址的余额,单位VONvaraddress="atp1td535z2n3c7rjmsxuxdafd9gu8waz5lfx2a3c9";varbalance=awaitweb3a.platon.getBalance(address);console.log("AddressBalance:"+balance);//返回指定块编号或块哈希对应的块varblockHash="0x577e9777f0ee1cf1b4d2d45a959ee57a59ebd0927740df4cd483c99eb5c58e83";blockNumber=10418171;varblockByHash=awaitweb3a.platon.getBlock(blockHash);console.log("GetBlockbyHash:"+JSON.stringify(blockByHash));varblockByNumber=awaitweb3a.platon.getBlock(blockNumber);console.log("GetBlockbyNumber:"+JSON.stringify(blockByNumber));//返回指定块中的交易数量,和上一个函数一样,参数都可以为blockHash或blockNumbervartransCount=awaitweb3a.platon.getBlockTransactionCount(blockHash);console.log("TransactionNumberinBlock:"+transCount);//返回具有指定哈希值的交易对象vartransHash="0xa4414b82479af4dbdf4bab822f46f2414c200152553758678e506195b0fa9cfb";vartrans=awaitweb3a.platon.getTransaction(transHash);console.log("Transaction:"+JSON.stringify(trans));//指定地址发出的交易数量。此函数非常有用,可以用于确定交易的nonce varaccountTransCount=awaitweb3a.platon.getTransactionCount(address);console.log("AccountTransactionCount:"+accountTransCount);}main();
上面的代码只举例了部分比较常用的查询函数,大家可以发现查询函数的使用方法非常单一,以上例子足够说明。
下一期的内容我们将讲述入门教程中的转账交易模块,欢迎大家关注。
特别鸣谢本教程贡献者@RileyGe
(未完待续)