本教程从Alaya JSSDK的安装开始,分别讲述了连接Alaya网络并执行基本查询、转账及签名操作及智能合约交互的相关内容。本教程力求翔实地展现了Alaya JSSDK的使用方法,让开发者能够快速入门Alaya JS SDK。
转账交易
连接到Alaya网络并获取到Alaya网络的相关信息您已经成功了一半,但实际上如果要进行相关开发的话,账号相关的操作是非常必要的。毕竟如果没有账号,那么只能是Alaya旁观者,如果真要成为Alaya的参与者,账号是必不可少的。下面我们就从创建账号开始说明账号的使用及相关信息的获取。
账号
在开始之前,先大致介绍一下账号(Account)的概念:
Alaya使用了与以太坊相类似的账号体系,具体可以参照Alaya总体方案:
https://alaya.network/alaya-devdocs/zh-CN/Architecture#账户模型
账户:就像你的一个保险箱。在Alaya中会存储每个账户的状态。
私钥:私钥可以完全控制账户,所以私钥要妥善保存。私钥有两种表现形式:助记词(Mnemonic)和主密钥(Master Key)。助记词是12个单词,主要作用是帮助你记住密钥。请注意,如果你的助记词泄露,那么你的密钥就已经泄露。主密钥是一个64位16进制数。这个密钥一般在程序中使用,人为使用或记忆比较难。
公钥:可以看成你的账号地址或者银行卡号之类的。公钥进行一次hash操作之后生成地址。别人可以用地址(或者公钥)给你转账,当然也可以查看你的操作流水。
转账操作
无论是转账,还是后面其他的操作,一次交易的一般流程如下:
转账操作和下一节所述的签名操作是账户最常用的操作。但实际上在转账操作中也涉及了对数据的签名,但关于签名的更多细节不会在此节中展开。
注:!!!!将主网的私钥写到代码上并分享给别人是非常危险的操作!!!!
下面我们看一下转账的具体代码:
varWeb3a=require("web3");varAlayaAccounts=require("web3/packages/web3-eth-accounts");asyncfunctionmain(){letweb3a=newWeb3a('http://47.241.91.2:6789');//!!!!将主网的私钥写到代码上并分享给别人是非常危险的操作!!!!//addressfortheprivatekeybelow:atp1sznvsju6gjy3kmgnfgm526jf6e8x83twuctefhvarprivateKey="0x5ae02064df442340f861136acbfc4bd62b3d48393903bd6aac77ce0e7aaa9e5e";varchainId=201030;//201018formainnet////privatekeyfortheaddressbelow:0x0727b77a246f2c01c1b7b068c26bd71b81700f7ea003dd1ba68a38885a69a1a5vartoAddress="atp1jqtmpjme9gvg6wnuyphzqzgphslfmjtxcy8mt2";varact=newAlayaAccounts(web3a.currentProvider,"atp");act=act.privateKeyToAccount(privateKey);letfrom=act.address;letnonce=web3a.utils.numberToHex(awaitweb3a.platon.getTransactionCount(from));letgasPrice=awaitweb3a.platon.getGasPrice();lettx={from:from,to:toAddress,value:"1000000000000000000",chainId:chainId,gasPrice:gasPrice,gas:"21000",nonce:nonce,};//签名交易letsignTx=awaitact.signTransaction(tx);//发送交易letreceipt=awaitweb3a.platon.sendSignedTransaction(signTx.rawTransaction);console.log("Thereceiptofthetransactionis:"+JSON.stringify(receipt));console.log("signtxdata:/n",signTx.rawTransaction)}main();
请注意账号act的生成过程,由于Alaya网络的hrp为atp,所以设置过程需要两步:
指定hrp;
设置PrivateKey。
分别对应上述代码中的第14、15行。
这里有必要对如何创建并填充交易信息来进行一点说明。在JavaScript中,交易可以直接用字典类型,其中有很多字段需要从Alaya网络中查询,如nonce,gasPrice可以从网络中查找到推荐值,也可以自行设置。
后面的签名也是一个异步操作,但其所有签名操作都是在本地执行的,是离线签名。
签名后就是发送交易,交易发送成功会返回交易的收据。收据中包含了大量交易信息,具体可以参照JS SDK · Alaya:
https://alaya.network/alaya-devdocs/zh-CN/JS_SDK/#web3platongettransactionreceipt
(未完待续)