3.0.4 • Published 2 years ago

@secux/app-ada v3.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

lerna view on npm npm module downloads

@secux/app-ada

SecuX Hardware Wallet ADA API

Usage

import { SecuxADA, AddressType } from "@secux/app-ada";

First, create instance of ITransport

Examples

  1. Get shelley address

    • base address
    const path = "m/1852'/1815'/0'";
    const address = await device.getAddress(path, AddressType.BASE);
    
    /*
    
    // transfer data to hardware wallet by custom transport layer
    const data = SecuxADA.prepareAddress(path);
    const response = await device.Exchange(data);
    const address = SecuxADA.resolveAddress(response, AddressType.BASE);
    
    */
    • reward address
    const path = "m/1852'/1815'/0'";
    const address = await device.getAddress(path, AddressType.REWARD);
  2. Sign transaction

    • transfer asset
    const inputs = [
        {
            path: "m/1852'/1815'/0'",
            txId: "75c7d745c5212a11a0bfc2719c35bcc2f57fda88d7afb2eb3c5f2b02c3e99ccb",
            index: 1,
            amount: 12663894,
            // for custom transport layer, each utxo needs xpublickey.
            // xpublickey: "c232950d7c27b78542795ce4cad053e8dfaab7679ba5477563be5c60c1a4d0613fc81fd9bb8f30822c1252c29cc6af147831da44fb86acad6c04fcc95700b92b"
        },
        {
            path: "m/1852'/1815'/0'",
            txId: "6552b8f8b8b282542b07d6187fe80daa5b7a60461c97231f45c06fd97f8a3385",
            index: 1,
            amount: 2330624,
            // for custom transport layer, each utxo needs xpublickey.
            // xpublickey: "c232950d7c27b78542795ce4cad053e8dfaab7679ba5477563be5c60c1a4d0613fc81fd9bb8f30822c1252c29cc6af147831da44fb86acad6c04fcc95700b92b"
        },
    ];
    
    const output = {
        // daedalus or shelley address is accepted.
        address: "DdzFFzCqrhsjZHKn8Y9Txr4B9PaEtYcYp8TGa4gQTfJfjvuNLqvB8hPG35WRgK4FjcSYhgK7b2H24jLMeqmPoS3YhJq6bjStsx4BZVnn",
        amount: 13000000
    };
    
    const { raw_tx } = await device.sign(inputs, output, {
        changeAddress: "addr1qyk54vyyc856ngxermdzqhxnlk376ykkupru8rxcyryvg4kxs4un3x4r4rq422kwrtvc8p2a20dzhyr5v0n9lhwy2u6sfjujuz",
    });
    
    /*
    
    // transfer data to hardware wallet by custom transport layer.
    const { commandData, serialized } = SecuxADA.prepareSign(inputs, output, {
        changeAddress: "addr1qyk54vyyc856ngxermdzqhxnlk376ykkupru8rxcyryvg4kxs4un3x4r4rq422kwrtvc8p2a20dzhyr5v0n9lhwy2u6sfjujuz",
    });
    const response = await device.Exchange(commandData);
    const raw_tx = SecuxADA.resloveTransaction(response, serialized);
    
    */
    • stake
    const input = {
        path: "m/1852'/1815'/0'",
        utxo: [
            {
                txId: "75c7d745c5212a11a0bfc2719c35bcc2f57fda88d7afb2eb3c5f2b02c3e99ccb",
                index: 1,
                amount: 12663894,
            }
        ],
        changeAddress: "addr1qyk54vyyc856ngxermdzqhxnlk376ykkupru8rxcyryvg4kxs4un3x4r4rq422kwrtvc8p2a20dzhyr5v0n9lhwy2u6sfjujuz",
        // for custom transport layer, each utxo needs xpublickey.
        // xpublickey: "c232950d7c27b78542795ce4cad053e8dfaab7679ba5477563be5c60c1a4d0613fc81fd9bb8f30822c1252c29cc6af147831da44fb86acad6c04fcc95700b92b"
    };
    
    // pool id (support bech32 encoded)
    const pool = "ea595c6f726db925b6832af51795fd8a46e700874c735d204f7c5841";
    
    const { raw_tx } = await device.sign(
        input,
        pool,
        {
            // An account needs to have a stake pool registration certificate 
            // before it can participate in stake delegation between stake pools.
            needRegistration: true
        }
    );
    
    /*
    
    // transfer data to hardware wallet by custom transport layer.
    const { commandData, serialized } = SecuxADA.prepareStake(
        input,
        pool,
        {
            needRegistration: true
        }
    );
    const response = await device.Exchange(commandData);
    const raw_tx = SecuxADA.resolveTransaction(response, serialized);
    
    */
    • withdrawal
    const withdrawAmount = 150000;
    const { raw_tx } = await device.sign(input, withdrawAmount);
    
    /*
    
    // transfer data to hardware wallet by custom transport layer.
    const { commandData, serialized } = SecuxADA.prepareStake(input, withdrawAmount);
    const response = await device.Exchange(commandData);
    const raw_tx = SecuxADA.resolveTransaction(response, serialized);
    
    */
    • unstake (de-register staking key)
    const { raw_tx } = await device.sign(
        input, 
        {
            // With de-registration operation, the balance of reward address must be 0.
            withdrawAmount
        }
    );
    
    /*
    
    // transfer data to hardware wallet by custom transport layer.
    const { commandData, serialized } = SecuxADA.prepareUnstake(input, { withdrawAmount });
    const response = await device.Exchange(commandData);
    const raw_tx = SecuxADA.resolveTransaction(response, serialized);
    
    */

API Reference

ADA package for SecuX device

Kind: global class

SecuxADA.addressConvert(xpublickey, type, option) ⇒ string

Convert bip32-publickey to ADA address.

Returns: string - address

ParamTypeDescription
xpublickeystring | Bufferada bip32-publickey
typeAddressType
optionAddressOption

SecuxADA.prepareAddress(pathWith3Depth) ⇒ communicationData

Prepare data for address generation.

Returns: communicationData - data for sending to device

ParamTypeDescription
pathWith3Depthstringm/1852'/1815'/...

SecuxADA.resolveAddress(response, type, option) ⇒ string

Resolve address from response data.

Returns: string - address

ParamTypeDescription
responsecommunicationDatadata from device
typeAddressType
optionAddressOption

SecuxADA.prepareXPublickey(pathWith3Depth) ⇒ communicationData

Prepare data for bip32-publickey.

Returns: communicationData - data for sending to device

ParamTypeDescription
pathWith3Depthstringm/1852'/1815'/...

SecuxADA.resolveXPublickey(response) ⇒ string

Resolve bip32-publickey from response data.

Returns: string - bip32-publickey (hex string)

ParamTypeDescription
responsecommunicationDatadata from device

SecuxADA.prepareSign(inputs, output, option) ⇒ prepared

Prepare data for signing.

ParamType
inputsArray.<txInput>
outputtxOutput
optionsignOption

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

Reslove signatures from response data.

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

ParamTypeDescription
responsecommunicationDatadata from device

SecuxADA.resolveTransaction(response, serialized) ⇒ string

Resolve transaction for broadcasting.

Returns: string - signed transaction (base64 encoded)

ParamTypeDescription
responsecommunicationDatadata from device
serializedcommunicationData

SecuxADA.prepareStake(input, pool, option) ⇒ prepared

Prepare data for signing.

ParamTypeDescription
inputstakeInput
poolstringpool hash or id
optionstakeOption

SecuxADA.prepareUnstake(input, option) ⇒ prepared

Prepare data for signing.

ParamType
inputstakeInput
optionunstakeOption

SecuxADA.prepareWithdraw(input, amount, option) ⇒ prepared

Prepare data for signing.

ParamTypeDescription
inputstakeInput
amountnumber | stringrewards
optionwithdrawOption

AddressType : enum

Properties

NameTypeDescription
BASEnumber0
ENTERPRISEnumber1
POINTERnumber2
REWARDnumber3
BOOTSTRAPv1number4
BOOTSTRAPv2number5

PointerOption : object

Properties

NameType
slotnumber
txIndexnumber
certIndexnumber

AddressOption : object

Properties

NameTypeDescription
addressIndexnumberaccount index
stakeIndexnumberstake key index
pointerPointerOptionoption for Pointer address

txInput : object

Properties

NameTypeDescription
pathstring3-depth path of CIP-1852
xpublickeystring | BufferED25519 publickey from path
txIdstringreferenced transaction hash
indexnumberreferenced transaction output index
amountnumber | stringreferenced transaction output amount
addressIndexnumberdefault: 0
stakeIndexnumberdefault: 0

txOutput : object

Properties

NameTypeDescription
addressstringreceiver's address
amountnumber | stringamount of payment

signOption : object

Properties

NameTypeDescription
changeAddressstringdefault: sender's address
feenumber | string
TimeToLivenumber

stakeOption : object

Properties

NameTypeDescription
stakeIndexnumberdefault: 0
needRegistrationbooleaninclude registration or not
feenumber | string
TimeToLivenumber

withdrawOption : object

Properties

NameTypeDescription
stakeIndexnumberdefault: 0
feenumber | string
TimeToLivenumber

unstakeOption : object

Properties

NameTypeDescription
stakeIndexnumberdefault: 0
withdrawAmountbooleanwithdraw and de-registration
feenumber | string
TimeToLivenumber

utxo : object

Properties

NameTypeDescription
txIdstringreferenced transaction hash
indexnumberreferenced transaction output index
amountnumber | stringreferenced transaction output amount
addressIndexnumberdefault: 0

stakeInput : object

Properties

NameTypeDescription
pathstring3-depth path of CIP-1852
utxoArray.<utxo>
changeAddressstringowner's account
xpublickeystring | Buffercardano bip32-publickey
stakeIndexnumberdefault: 0

prepared : object

Properties

NameTypeDescription
commandDatacommunicationDatadata for sending to device
serializedcommunicationData

© 2018-21 SecuX Technology Inc.

authors: andersonwu@secuxtech.com