您现在的位置:kastop>> Kas信息 Kaspa网络>>正文内容

Kaspa钱包框架(go版)

Kaspa钱包框架

Kaspa 钱包为Kaspa 网络实现钱包功能

请注意:该项目正在大力开发中

成分

Kaspa钱包使用以下模块:

基于 Kaspa 钱包框架构建的应用程序:

请注意:所有 Kaspa 应用程序和库都正在大力开发中

Kaspa钱包框架

在使用 Kaspa 钱包之前,您需要初始化框架。框架初始化加载各种依赖项,例如底层事务加密中使用的模块secp256k1-wasmblake2b-wasm

const { Wallet, initKaspaFramework } = require('@kaspa/wallet');const { RPC } = require('@kaspa/grpc-node');(async () => { 
  await initKaspaFramework();
  ...})();

创建钱包

网络类型由地址前缀标识:

  • kaspa(主网)

  • kaspatest(测试网)

  • kaspadev(开发网)

  • kaspasim(模拟网)

可以使用两个静态函数创建钱包类:

static fromMnemonic(
  seedPhrase: string, 
  networkOptions: NetworkOptions, 
  options: WalletOptions = {}): Wallet { }static async import(
  password: string, 
  encryptedMnemonic: string, 
  networkOptions: NetworkOptions, 
  options: WalletOptions = {}): Promise <Wallet> { }

钱包创建函数接受以下配置对象:

export interface WalletOptions{
  skipSyncBalance?:boolean;           // do not perform balance sync
  addressDiscoveryExtent?:number;     // address derivation scan (default 64)
  syncOnce?:boolean;                  // 'sync-and-exit' (true) or 'monitoring' mode
  logLevel?:string;                   // wallet log level
  disableAddressDerivation?:boolean;  // disable address derivation and discovery}export interface NetworkOptions{
  network:Network;                    // network: kaspa, kaspatest, kaspadev, kaspasim
  rpc?:IRPC;                          // gRPC interface (must be bound to transport before use)}

以下选项很重要:

  • addressDiscoveryExtent- 从上次已知使用的地址向前扫描的 HD 地址派生数

  • syncOnce- 允许暂时启动钱包,而不启动监控服务

  • disableAddressDerivation- 以单地址模式启动钱包,接收地址和找零地址始终是私钥生成的第一个接收地址。

从助记符创建:

const network = "kaspatest";const { port } = Wallet.networkTypes[kaspatest].port; // default port for testnetconst rpc = new RPC({ clientConfig:{ host : '127.0.0.1:'+port } });Wallet.fromMnemonic(
    "user mnemonic string",
    { network, rpc },
    {disableAddressDerivation:true});

使用动态生成的助记词创建新的钱包实例:

const wallet = new Wallet(null, null, {network, rpc});const encryptedMnemonic = await wallet.export(cmd.password);console.log('mnemonic:',wallet.mnemonic);console.log('encrypted mnemonic:',encryptedMnemonic);

从加密助记词恢复:

const password = "user password";const encryptedMnemonic = "previously encrypted mnemonic";let wallet = await Wallet.import(password, encryptedMnemonic, { network, rpc })

日志记录和调试

Wallet 类包含一个集成记录器,可以设置为以下级别之一:errorwarninfoverbosedebug。默认日志级别为info.您可以将日志级别设置为verbose查看内部钱包数据处理活动。

WalletOptions钱包日志级别可以作为(如上所述)的一部分提供或在运行时设置,如下所示:

wallet.setLogLevel('verbose');

同步钱包

该功能Wallet::sync(once?:boolean)可用于进行钱包同步。钱包同步将连接到kaspad并扫描可用的 UTXO 条目以查找钱包地址,更新钱包余额,如果once为 true,则退出,如果once为 false,则启动钱包监控服务。

当启用监控功能时,钱包将保持与钱包 UTXO 条目和余额的连接kaspad,并动态更新钱包 UTXO 条目和余额。

  • wallet.sync()- 以监控模式启动钱包

  • wallet.sync(true)- 执行单次同步

发送交易

submitTransaction()函数可用于在 Kaspa 网络上创建交易:

async submitTransaction(txParamsArg: TxSend): Promise < TxResp | null > {
  // ...}

该函数接受TxSend输入对象并返回一个Promise<TxResp>对象:

export interface TxSend {
  toAddr: string;
  amount: number;
  fee: number;
  changeAddrOverride? : string;
  networkFeeMax?:number;}
  • toAddr- 目的地地址

  • amount- 以基本单位 (sompis) 表示的 KAS 数量

  • fee- 交易优先费

  • changeAddrOverride-(可选)允许您为找零交易提供自己的地址

  • networkFeeMax-(可选)允许您设置自动网络(数据存储)费用计算的上限。 Kaspa Wallet会根据交易规模自动计算适当的费用并添加到交易中。如果该属性被省略或设置为零,则此功能将被禁用。

export interface TxResp {
  txid: string;
  rpctx?: string; // reserved}
  • txid- 生成的交易ID

try {
  let response = await this.wallet.submitTransaction({
      address, // destination address
      amount,  // amount in base units
      fee,     // user fees
  });
  if(!response)
    console.log('general error');  // if kaspad returns null (should never occur)
  else
    console.log('success:', txid);} catch(ex) {
  console.log('error:',ex.toString());}

失败时,submitTransaction()拒绝并显示错误,指出失败的原因。

钱包余额

钱包保留两种类型的余额:

  • 可用- 余额包含可供使用的 KAS,由区块成熟度蓝色分数超过 10 的 UTXO 记录组成。

  • 待处理- 余额包含新收到的 UTXO 区块到期时间小于 10 的交易。每个 UTXO 到期时,余额都会从待处理状态重新定位为可用状态。

Wallet::balance是一个包含以下属性的对象,这些属性在钱包操作期间更新:

wallet.balance = {
  available: 5150000000000,
  pending: 247500000000,
  total: 5397500000000}

钱包活动

Wallet::on(subject, (data) => { ... })允许事件处理程序注册。与 NodeJ 类似,EventEmitter您可以通过提供原始回调来取消注册事件,Wallet::removeEventListener(subject, handler)如下所示:

const balanceHandler = (balance)=>{ console.log(balance); }wallet.on('balance-update', balanceHandler);wallet.removeEventListener('balance-update', balanceHandler);

Wallet 类发出以下事件:

  • api-online- gPRC API上线

  • api-offline- gRPC API 离线

  • sync-start- 钱包同步开始(每次 gRPC API 连接或重新连接时发生)

  • sync-finish- 钱包同步完成

  • ready- 钱包已准备好使用(同步完成后发送,事件数据包含余额对象)

  • blue-score-changed- 表示Kaspa蓝色分数变化(新区块生成)

  • utxo-change- 当UTXO添加到钱包UTXO集中或从钱包UTXO集中删除时发出信号

  • balance-update- 表示钱包余额变化(事件数据包含余额对象)



感动 同情 无聊 愤怒 搞笑 难过 高兴 路过
【字体: 】【收藏】【打印文章】 【 打赏 】 【查看评论

相关文章

    没有相关内容