原创 PlatON
本教程从Alaya JS SDK的安装开始,分别讲述了连接Alaya网络并执行基本查询、转账及签名操作及智能合约交互的相关内容。本教程力求翔实地展现了Alaya JS SDK的使用方法,让开发者能够快速入门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操作之后生成地址。别人可以用地址(或者公钥)给你转账,当然也可以查看你的操作流水。
转账操作
无论是转账,还是后面其他的操作,一次交易的一般流程如下:
转账操作和下一节所述的签名操作是账户最常用的操作。但实际上在转账操作中也涉及了对数据的签名,但关于签名的更多细节不会在此节中展开。
注:!!!!将主网的私钥写到代码上并分享给别人是非常危险的操作!!!!
下面我们看一下转账的具体代码:
var Web3a = require("web3");
var AlayaAccounts = require("web3/packages/web3-eth-accounts");
async function main() {
let web3a = new Web3a('http://47.241.91.2:6789');
// !!!!将主网的私钥写到代码上并分享给别人是非常危险的操作!!!!
// address for the privatekey below: atp1sznvsju6gjy3kmgnfgm526jf6e8x83twuctefh
var privateKey="0x5ae02064df442340f861136acbfc4bd62b3d48393903bd6aac77ce0e7aaa9e5e";
var chainId = 201030; //201018 for mainnet
// // privatekey for the address below: 0x0727b77a246f2c01c1b7b068c26bd71b81700f7ea003dd1ba68a38885a69a1a5
var toAddress = "atp1jqtmpjme9gvg6wnuyphzqzgphslfmjtxcy8mt2";
var act = new AlayaAccounts(web3a.currentProvider, "atp");
act = act.privateKeyToAccount(privateKey);
let from = act.address;
let nonce = web3a.utils.numberToHex(await web3a.platon.getTransactionCount(from));
let gasPrice = await web3a.platon.getGasPrice();
let tx = {
from: from,
to: toAddress,
value: "1000000000000000000",
chainId: chainId,
gasPrice: gasPrice,
gas: "21000",
nonce: nonce,
};
// 签名交易
let signTx = await act.signTransaction(tx);
// 发送交易
let receipt = await web3a.platon.sendSignedTransaction(signTx.rawTransaction);
console.log("The receipt of the transaction is:" + JSON.stringify(receipt));
console.log("sign tx data:\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
(未完待续)
本文转载自https://mp.weixin.qq.com/s/r8-POf_V6AfVEVCIaeKHjQ