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();
}
网友评论