AVAX nodejs 接入

作者: 博尔克斯 | 来源:发表于2021-08-30 11:05 被阅读0次

    AVAX 接入

    对AVAX币做交易扫描,生成unsignedTx,本地签名,发布到AVAX节点上

    AVAX文档及介绍

    AVAX有三条链,交易链(X-Chain),平台链(P-Chain),合约链(C-chain);
    AVAX币交易主要在X-Chain上面

    文档连接:
    https://docs.avax.network/

    fuji文档:
    https://docs.avax.network/build/tutorials/platform/fuji-workflow

    avalanche sdk:
    https://github.com/ava-labs/avalanchejs

    测试环境:

    交易记录: https://explorer.avax-test.network/
    扫描区块API: https://docs.avax.network/build/tools/ortelius#list-transactions
    申请测试币:https://faucet.avax-test.network/
    
    // 构建交易
    const avalanche = require("avalanche");
    const { BinTools, Buffer, BN } = require("avalanche");
    
    
    /**
     * 生成unsignedTx,发布signedTx
     */ 
    const transfer = async() => {
    
        const avax = new avalanche.Avalanche("api.avax-test.network", "443", "https", 5);
        const xchain = avax.XChain();
    
        const fromAddress = "X-fuji1545wjzj259cznytgxcu0tvyfcte4j6h80pn8vs";
        const toAddress = "X-fuji1sfxeh8zqnylj3gsvsq2xajz2xg6kzr03p7a3gk";
    
        const sendAmount = new BN(500);
        const memo = Buffer.from(
            "AVM method buildBaseTx, echo Response"
        )
        const asOf =  new BN(Math.round(new Date().getTime() / 1000));
        const locktime = new BN(0);
        const threshold = 1;
        const assetid = "U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK";
        const u = await xchain.getUTXOs(fromAddress);
        const utxos = u.utxos;
    
        const unsignedTx = await xchain.buildBaseTx(
            utxos,
            sendAmount,
            assetid,
            [toAddress],
            [fromAddress],
            [fromAddress],
            // 下面这些可以不传
            memo,
            asOf,
            locktime,
            threshold,
        );
    
        let data = await sign(unsignedTx.serialize());
        data = JSON.parse(JSON.stringify(data));
    
        let signedTx = new avalanche.avm.Tx();
        signedTx.deserialize(data);
    
        const txid = await xchain.issueTx(signedTx)
        console.log(`txid:${txid}`);
    }
    
    /**
     * 签名认证
     */
    const sign = async(unsignedTx) => {
        const avax = new avalanche.Avalanche();
        const xchain = avax.XChain();
        const xKeyChain = xchain.keyChain();
    
        // fromAddress privateKey
        priKeyHexStr = "859a9f0393582307642b1d81b1be3426975de8258679a021af97e155bc159e99387dbb78b41e86aa6ca345983a2e80ad89f37782ef6552becaf92ca874863d98"
        let buf = Buffer.from(priKeyHexStr, 'hex');
        xKeyChain.importKey(new Uint8Array(buf));
    
        // 模拟网络传输,序列化和反序列化
        unsignedTx = JSON.parse(JSON.stringify(unsignedTx))
        let un = new avalanche.avm.UnsignedTx();
        un.deserialize(unsignedTx)
    
        const signedTx = xchain.signTx(un);
        return signedTx.serialize();
    }
    
    

    相关文章

      网友评论

        本文标题:AVAX nodejs 接入

        本文链接:https://www.haomeiwen.com/subject/xnwniltx.html