Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@secux/app-btc

Package Overview
Dependencies
Maintainers
2
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@secux/app-btc

SecuX Hardware Wallet BTC API

  • 3.1.1
  • npm
  • Socket score

Version published
Weekly downloads
47
decreased by-44.05%
Maintainers
2
Weekly downloads
 
Created
Source

lerna view on npm npm module downloads

@secux/app-btc

SecuX Hardware Wallet BTC API

Usage

import { SecuxBTC, ScriptType } from "@secux/app-btc";

First, create instance of ITransport.


Examples

  1. Get address by purpose and script type.

    • tweaked key-spend only address (default script: P2TR)
      const path = "m/86'/0'/0'/0/0";
      const address = await device.getAddress(path);
      
      /*
      
      // transfer data to hardware wallet by custom transport layer.
      const data = SecuxBTC.prepareAddress(path);
      const response = await device.Exchange(data);
      const address = SecuxBTC.resolveAddress(response, path);
      
      */
      
    • native segwit address (default script: P2WPKH)
      const address = await device.getAddress("m/84'/0'/0'/0/0");
      
    • segwit address (default script: P2SH_P2WPKH)
      const address = await device.getAddress("m/49'/0'/0'/0/0");
      
    • legacy address (default script: P2PKH)
      const address = await device.getAddress("m/44'/0'/0'/0/0");
      
  2. For bitcoin ecosystem, you can use specific cointype by the coin.

    • native segwit address for dogecoin
      const address = await device.getAddress("m/84'/3'/0'/0/0");
      
    • segwit address for litecoin
      const address = await device.getAddress("m/49'/2'/0'/0/0");
      
    • legacy address for bitcoincash
      const address = await device.getAddress("m/44'/145'/0'/0/0");
      
    • you can refer to here for cointype.
  3. Sign transaction.

const inputs = [
    {
        hash: "0b062e71e165fba9634d9fb1b5ba703e774bf374815b1f5a617c8d1e7d43dc01",
        vout: 0,
        // optional, give raw transaction data for checking
        txHex: "0100000001b103a004f672080ceae8277e83c296b5ac090ae78157979211da3e2d41399d1b010000006b483045022100f19d88e6a17789dc399ff2a93b4516bb44af32928d4986138f1a4f7f37ab277b022046fc14c958bc8aa97fea1d2fbf80982534cf51634d46c4d5178e5ca6698bca07012102f8667cfb5b80c3695e3f0c9078589cb04e8d15e71bdae89ebf24b82f9d663d5cffffffff02bc020000000000001976a9145c592f40134c6179a1ce5b06b28d5c2ae443113188ac00040000000000001976a9146d65ced4ef49e23cdbb4be9d510b38e5be28e10688ac00000000",
        satoshis: 700,
        path: "m/44'/0'/0'/0/0",
        // for custom transport layer, each utxo need publickey.
        // publickey: "03aaeb52dd7494c361049de67cc680e83ebcbbbdbeb13637d92cd845f70308af5e"
    },
    {
        hash: "07ad0a13e501d292bc8b9e16a3a8b62f99f77ab9e37ea8d3b8453984a2899984",
        vout: 0,
        // optional, you can use specific script for each input
        // script: ScriptType.P2SH_P2PKH,
        satoshis: 6000,
        path: "m/49'/0'/0'/0/0",
        // for custom transport layer, each utxo need publickey.
        // publickey: "039b3b694b8fc5b5e07fb069c783cac754f5d38c3e08bed1960e31fdb1dda35c24"
    },
    {
        hash: "8686aee2b9dcf559798b9718ed26ca92e0c64bef11c433e576cae658678c497d",
        vout: 1,
        satoshis: 1083,
        path: "m/84'/0'/0'/1/0",
        // for custom transport layer, each utxo need publickey.
        // publickey: "03025324888e429ab8e3dbaf1f7802648b9cd01e9b418485c5fa4c1b9b5700e1a6"
    }
];

const to = {
    address: "bc1qs0k3ekx0z7a7yuq3lse7prw373s8cr8lhxvccd",
    satoshis: 1500
};

const utxo = {
    path: "m/44'/0'/0'/0/0",
    satoshis: 6100,
    // for custom transport layer, each utxo need publickey.
    // publickey: "03aaeb52dd7494c361049de67cc680e83ebcbbbdbeb13637d92cd845f70308af5e"
};

const { raw_tx } = await device.sign(
    inputs, 
    { to, utxo },
    // given feeRate to estimate fee, and fee will be changed if greater than estimated value or less than minimal fee.
    // { feeRate: 1 } 
);

/*

// transfer data to hardware wallet by custom transport layer.
const { commandData, rawTx } = SecuxBTC.prepareSign(inputs, { to, utxo });
const rsp = await device.Exchange(commandData);
const signed = SecuxBTC.resloveTransaction(rsp, rawTx, inputs.map(x => x.publickey));

*/
  1. Derive address from xpub, ypub, or zpub.

    • tweaked key-spend only address (default script: P2TR)
      // m/86'/0'/0'
      const xpub = "xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ";
      // m/86'/0'/0'/0/0
      const address = SecuxBTC.deriveAddress(xpub, 0, 0,
      {
          // you can use specific coin
          // coin: CoinType.BITCOIN,
          script: ScriptType.P2TR
      });
      
    • native segwit address (default script: P2WPKH)
      // m/84'/0'/0'
      const zpub = "zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs";
      // m/84'/0'/0'/0/0
      const address = SecuxBTC.deriveAddress(zpub, 0, 0,
      {
          // you can use specific coin and script
          // coin: CoinType.DOGECOIN,
          // script: ScriptType.P2WPKH
      });
      
    • segwit address (default script: P2SH_P2WPKH)
      // m/49'/0'/1'
      const ypub = "ypub6Ww3ibxVfGzLtJR4F9SRBicspAfvmvw54yern9Q6qZWFC9T6FYA34K57La5Sgs8pXuyvpDfEHX5KNZRiZRukUWaVPyL4NxA69sEAqdoV8ve";
      // m/49'/0'/1'/0/1
      const address = SecuxBTC.deriveAddress(ypub, 0, 1);
      
    • legacy address (default script: P2PKH)
      // m/44'/0'/0'
      const xpub = "xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj";
      // m/44'/0'/0'/1/0
      const address = SecuxBTC.deriveAddress(xpub, 1, 0);
      
  2. Estimate transaction size

const size = SecuxBTC.getVirtualSize(
    // your inputs
    [
        ScriptType.P2PKH,
        ScriptType.P2SH_P2WPKH,
        ScriptType.P2SH_P2WPKH,
        ScriptType.P2WPKH,
        ...
    ],
    // your outputs
    [
        ScriptType.P2PKH,
        ScriptType.P2PKH,
        ScriptType.P2WPKH,
        ...
    ]
);

API Reference

BTC package for SecuX device

Kind: global class


SecuxBTC.prepareAddress ⇒ communicationData

Prepare data for address generation.

Returns: communicationData - data for sending to device

ParamTypeDescription
pathstringBIP32 path, ex: m/44'/0'/0'/0/0
[option]AddressOptionfor path validation

SecuxBTC.addressConvert(publickey, path) ⇒ string

Convert publickey to BTC address.

Returns: string - address

ParamTypeDescription
publickeystring | Buffersecp256k1 publickey (hex string or buffer)
pathstring | PathObjectBIP32 path, ex: m/44'/0'/0'/0/0

SecuxBTC.resolveAddress(response, path) ⇒ string

Generate address from response data.

Returns: string - address

ParamTypeDescription
responsecommunicationDatadata from device
pathstring | PathObjectBIP32 path, ex: m/44'/0'/0'/0/0

SecuxBTC.preparePublickey(path, [option]) ⇒ communicationData

Prepare data for secp256k1 publickey.

Returns: communicationData - data for sending to device

ParamTypeDescription
pathstringBIP32 path, ex: m/44'/0'/0'/0/0
[option]AddressOptionfor path validation

SecuxBTC.resolvePublickey(response) ⇒ string

Resolve secp256k1 publickey from response data.

Returns: string - secp256k1 publickey (hex string)

ParamTypeDescription
responsecommunicationDatadata from device

SecuxBTC.prepareXPublickey(path) ⇒ communicationData

Prepare data for extended publickey generation.

Returns: communicationData - data for sending to device

ParamTypeDescription
pathstringBIP32 path, ex: m/44'/0'/0'/0/0

SecuxBTC.resolveXPublickey(response, path) ⇒ string

Generate extended publickey from response data.

Returns: string - extended publickey (xpub, ypub or zpub)

ParamTypeDescription
responsecommunicationDatadata from device
pathstringBIP32 path, ex: m/44'/0'/0'/0/0

SecuxBTC.prepareSign(inputs, outputs, [option]) ⇒ prepared

Prepare data for signing.

ParamTypeDescription
inputstxInputarray of utxo object
outputstxOutputoutput object
[option]SignOption

SecuxBTC.resolveSignatureList(response) ⇒ Array.<string>

Reslove signature from response data.

Returns: Array.<string> - signature array of hex string

ParamTypeDescription
responsecommunicationDatadata from device

SecuxBTC.resolveTransaction(response, unsigned, publickeys, [coin]) ⇒ string

Serialize transaction wtih signature for broadcasting.

Returns: string - signed raw transaction

ParamTypeDescription
responsecommunicationDatadata from device
unsignedstringunsigned raw transaction
publickeysArray.<communicationData>secp256k1 publickey correspond to each input
[coin]CoinTypedefault: CoinType.BITCOIN

SecuxBTC.deriveAddress(xpub, change, addressIndex, [option]) ⇒ string

Derive xpub and generate BTC address.

Returns: string - address

ParamTypeDescription
xpubstringextended publickey (base58 encoded), depth must be 3
changenumberBIP44 change field
addressIndexnumberBIP44 address_index field
[option]AddressOptionfor address generation

SecuxBTC.getVirtualSize(inputs, outputs) ⇒ number

Estimate virtual size of transaction.

Returns: number - virtual size

ParamType
inputsArray.<ScriptType>
outputsArray.<ScriptType>


txInput

Properties

NameTypeDescription
pathstringBIP32 path refer to utxo
publickeystring | Bufferscep256k1 publickey from path
hashstringreferenced transaction hash
voutnumberreferenced transaction output index
satoshisnumberreferenced transaction output amount
[script]ScriptTypescript type related to path
[txHex]stringreferenced raw transaction for validation

txOutput

Properties

NameTypeDescription
totxOutputAddress | txOutputScriptExtenedreceiving address information
[utxo]txOutputScriptExtenedchanges

SignOption

Properties

NameTypeDescription
[coin]CoinTypeenum
[feeRate]numberbase fee per vbyte

txOutputAddress

Properties

NameTypeDescription
addressstringreceiving address
satoshisnumberreceiving amount

txOutputScriptExtened

Properties

NameTypeDescription
pathstringBIP32 path
publickeystring | Bufferscep256k1 publickey from path
satoshisnumberamount
[script]ScriptTypescript type related to path

prepared

Properties

NameTypeDescription
commandDatacommunicationDatadata for sending to device
rawTxstringunsigned raw transaction

PathObject

Properties

NameTypeDescription
coinCoinTypeenum
scriptScriptTypeenum

AddressOption

Properties

NameTypeDescription
[coin]CoinTypeenum
[script]ScriptTypeenum


© 2018-21 SecuX Technology Inc.

authors:
andersonwu@secuxtech.com

Keywords

FAQs

Package last updated on 19 Jan 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc