@secux/app-ada v3.0.4
@secux/app-ada
SecuX Hardware Wallet ADA API
Usage
import { SecuxADA, AddressType } from "@secux/app-ada";
First, create instance of ITransport
Examples
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);
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
- .prepareAddress(pathWith3Depth) ⇒ communicationData
- .resolveAddress(response, type, [option]) ⇒ string
- .prepareXPublickey(pathWith3Depth) ⇒ communicationData
- .resolveXPublickey(response) ⇒ string
- .prepareSign(inputs, output, [option]) ⇒ prepared
- .resolveSignatureList(response) ⇒ Array.<string>
- .resolveTransaction(response, serialized) ⇒ string
- .prepareStake(input, pool, [option]) ⇒ prepared
- .prepareUnstake(input, [option]) ⇒ prepared
- .prepareWithdraw(input, amount, [option]) ⇒ prepared
SecuxADA.addressConvert(xpublickey, type, option) ⇒ string
Convert bip32-publickey to ADA address.
Returns: string - address
Param | Type | Description |
---|---|---|
xpublickey | string | Buffer | ada bip32-publickey |
type | AddressType | |
option | AddressOption |
SecuxADA.prepareAddress(pathWith3Depth) ⇒ communicationData
Prepare data for address generation.
Returns: communicationData - data for sending to device
Param | Type | Description |
---|---|---|
pathWith3Depth | string | m/1852'/1815'/... |
SecuxADA.resolveAddress(response, type, option) ⇒ string
Resolve address from response data.
Returns: string - address
Param | Type | Description |
---|---|---|
response | communicationData | data from device |
type | AddressType | |
option | AddressOption |
SecuxADA.prepareXPublickey(pathWith3Depth) ⇒ communicationData
Prepare data for bip32-publickey.
Returns: communicationData - data for sending to device
Param | Type | Description |
---|---|---|
pathWith3Depth | string | m/1852'/1815'/... |
SecuxADA.resolveXPublickey(response) ⇒ string
Resolve bip32-publickey from response data.
Returns: string - bip32-publickey (hex string)
Param | Type | Description |
---|---|---|
response | communicationData | data from device |
SecuxADA.prepareSign(inputs, output, option) ⇒ prepared
Prepare data for signing.
Param | Type |
---|---|
inputs | Array.<txInput> |
output | txOutput |
option | signOption |
SecuxADA.resolveSignatureList(response) ⇒ Array.<string>
Reslove signatures from response data.
Returns: Array.<string> - signature array of hex string
Param | Type | Description |
---|---|---|
response | communicationData | data from device |
SecuxADA.resolveTransaction(response, serialized) ⇒ string
Resolve transaction for broadcasting.
Returns: string - signed transaction (base64 encoded)
Param | Type | Description |
---|---|---|
response | communicationData | data from device |
serialized | communicationData |
SecuxADA.prepareStake(input, pool, option) ⇒ prepared
Prepare data for signing.
Param | Type | Description |
---|---|---|
input | stakeInput | |
pool | string | pool hash or id |
option | stakeOption |
SecuxADA.prepareUnstake(input, option) ⇒ prepared
Prepare data for signing.
Param | Type |
---|---|
input | stakeInput |
option | unstakeOption |
SecuxADA.prepareWithdraw(input, amount, option) ⇒ prepared
Prepare data for signing.
Param | Type | Description |
---|---|---|
input | stakeInput | |
amount | number | string | rewards |
option | withdrawOption |
AddressType : enum
Properties
Name | Type | Description |
---|---|---|
BASE | number | 0 |
ENTERPRISE | number | 1 |
POINTER | number | 2 |
REWARD | number | 3 |
BOOTSTRAPv1 | number | 4 |
BOOTSTRAPv2 | number | 5 |
PointerOption : object
Properties
Name | Type |
---|---|
slot | number |
txIndex | number |
certIndex | number |
AddressOption : object
Properties
Name | Type | Description |
---|---|---|
addressIndex | number | account index |
stakeIndex | number | stake key index |
pointer | PointerOption | option for Pointer address |
txInput : object
Properties
Name | Type | Description |
---|---|---|
path | string | 3-depth path of CIP-1852 |
xpublickey | string | Buffer | ED25519 publickey from path |
txId | string | referenced transaction hash |
index | number | referenced transaction output index |
amount | number | string | referenced transaction output amount |
addressIndex | number | default: 0 |
stakeIndex | number | default: 0 |
txOutput : object
Properties
Name | Type | Description |
---|---|---|
address | string | receiver's address |
amount | number | string | amount of payment |
signOption : object
Properties
Name | Type | Description |
---|---|---|
changeAddress | string | default: sender's address |
fee | number | string | |
TimeToLive | number |
stakeOption : object
Properties
Name | Type | Description |
---|---|---|
stakeIndex | number | default: 0 |
needRegistration | boolean | include registration or not |
fee | number | string | |
TimeToLive | number |
withdrawOption : object
Properties
Name | Type | Description |
---|---|---|
stakeIndex | number | default: 0 |
fee | number | string | |
TimeToLive | number |
unstakeOption : object
Properties
Name | Type | Description |
---|---|---|
stakeIndex | number | default: 0 |
withdrawAmount | boolean | withdraw and de-registration |
fee | number | string | |
TimeToLive | number |
utxo : object
Properties
Name | Type | Description |
---|---|---|
txId | string | referenced transaction hash |
index | number | referenced transaction output index |
amount | number | string | referenced transaction output amount |
addressIndex | number | default: 0 |
stakeInput : object
Properties
Name | Type | Description |
---|---|---|
path | string | 3-depth path of CIP-1852 |
utxo | Array.<utxo> | |
changeAddress | string | owner's account |
xpublickey | string | Buffer | cardano bip32-publickey |
stakeIndex | number | default: 0 |
prepared : object
Properties
Name | Type | Description |
---|---|---|
commandData | communicationData | data for sending to device |
serialized | communicationData |
© 2018-21 SecuX Technology Inc.
authors: andersonwu@secuxtech.com