Alaya JS SDK 快速入门教程(二):转账与交易

原创 PlatON

Alaya JS SDK 快速入门教程(二):转账与交易

本教程从Alaya JS SDK的安装开始,分别讲述了连接Alaya网络并执行基本查询、转账及签名操作及智能合约交互的相关内容。本教程力求翔实地展现了Alaya JS SDK的使用方法,让开发者能够快速入门Alaya JS SDK。

|转账交易

连接到Alaya网络并获取到Alaya网络的相关信息您已经成功了一半,但实际上如果要进行相关开发的话,账号相关的操作是非常必要的。毕竟如果没有账号,那么只能是Alaya旁观者,如果真要成为Alaya的参与者,账号是必不可少的。下面我们就从创建账号开始说明账号的使用及相关信息的获取。

账号

在开始之前,先大致介绍一下账号(Account)的概念:

Alaya JS SDK 快速入门教程(二):转账与交易

Alaya使用了与以太坊相类似的账号体系,具体可以参照Alaya总体方案:

https://alaya.network/alaya-devdocs/zh-CN/Architecture#账户模型

账户:就像你的一个保险箱。在Alaya中会存储每个账户的状态。

私钥:私钥可以完全控制账户,所以私钥要妥善保存。私钥有两种表现形式:助记词(Mnemonic)和主密钥(Master Key)。助记词是12个单词,主要作用是帮助你记住密钥。请注意,如果你的助记词泄露,那么你的密钥就已经泄露。主密钥是一个64位16进制数。这个密钥一般在程序中使用,人为使用或记忆比较难。

公钥:可以看成你的账号地址或者银行卡号之类的。公钥进行一次hash操作之后生成地址。别人可以用地址(或者公钥)给你转账,当然也可以查看你的操作流水。

转账操作

无论是转账,还是后面其他的操作,一次交易的一般流程如下:

Alaya JS SDK 快速入门教程(二):转账与交易

转账操作和下一节所述的签名操作是账户最常用的操作。但实际上在转账操作中也涉及了对数据的签名,但关于签名的更多细节不会在此节中展开。

注:!!!!将主网的私钥写到代码上并分享给别人是非常危险的操作!!!!

下面我们看一下转账的具体代码:

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

(0)
PlatONWorld-M6的头像PlatONWorld-M6管理员
上一篇 22 10 月, 2021 09:45
下一篇 23 10 月, 2021 09:23

相关推荐

发表回复

登录后才能评论