@secux/app-luna v3.0.0
(https://badgen.net/npm/v/@secux/app-luna
@secux/app-luna
SecuX Hardware Wallet LUNA API
Usage
import { SecuxLUNA } from "@secux/app-luna";First, create instance of ITransport
Examples
- Get account address
const path = "m/44'/330'/0'/0/0";
const address = await device.getAddress(path);
/*
// transfer data to hardware wallet by custom transport layer
const data = SecuxLUNA.prepareAddress(path);
const response = await device.Exchange(data);
const address = SecuxLUNA.resolveAddress(response);
*/Sign transaction
- transfer asset (MsgSend)
const signer = { path: "m/44'/330'/0'/0/0", accountNumber: 12345, sequence: 1, }; const params = { fee: { uluna: 3000 }, gasLimit: 12345, }; const send = new SecuxLUNA.MsgSend(from, to, { uluna: 1e6 }); const { multi_command, serialized } = await device.sign( [signer], [send], params ); const responseList = []; for (const data of multi_command) { const rsp = await device.Exchange(data); responseList.push(rsp); } const raw_tx = SecuxLUNA.resolveTransaction(responseList, serialized); /* // transfer data to hardware wallet by custom transport layer. const { commands, serialized } = SecuxLUNA.prepareSign( [ { ...signer, publickey: "02acb4bc267db7774614bf6011c59929b006c2554386a3090baff0b3fc418ec044" } ], [send], params }); const responseList = []; for (const data of commands) { const rsp = await device.Exchange(data); responseList.push(rsp); } const raw_tx = SecuxLUNA.resolveTransaction(responseList, serialized); */- execute contract
const swap = new SecuxLUNA.MsgExecuteContract( "terra1amdttz2937a3dytmxmkany53pp6ma6dy4vsllv", "terra156v8s539wtz0sjpn8y8a8lfg8fhmwa7fy22aff", { swap: { offer_asset: { amount: 1e6, info: { native_token: { denom: "uluna" }, }, }, }, }, { uluna: 1e6 } ); const { multi_command, serialized } = await device.sign( [signer], [swap], params ); // ... (same as above)- delegate
const delegate = new SecuxLUNA.MsgDelegate( "terra1amdttz2937a3dytmxmkany53pp6ma6dy4vsllv", "terravaloper1vf2209f5y7s4a66n5ng7wmup5gcc2kghhzy89w", "1000000" ); const { multi_command, serialized } = await device.sign( [signer], [delegate], params ); // ... (same as above)- withdraw
const withdraw = new SecuxLUNA.MsgWithdrawDelegatorReward( "terra1amdttz2937a3dytmxmkany53pp6ma6dy4vsllv", "terravaloper1vf2209f5y7s4a66n5ng7wmup5gcc2kghhzy89w" ); const { multi_command, serialized } = await device.sign( [signer], [withdraw], params ); // ... (same as above)- undelegate
const undelegate = new SecuxLUNA.MsgUndelegate( "terra1amdttz2937a3dytmxmkany53pp6ma6dy4vsllv", "terravaloper1vf2209f5y7s4a66n5ng7wmup5gcc2kghhzy89w", "1000000" ); const { multi_command, serialized } = await device.sign( [signer], [undelegate], params ); // ... (same as above)- redelegate
const redelegate = new SecuxLUNA.MsgBeginRedelegate( "terra1amdttz2937a3dytmxmkany53pp6ma6dy4vsllv", "terravaloper1vf2209f5y7s4a66n5ng7wmup5gcc2kghhzy89w", "terravaloper1vk20anceu6h9s00d27pjlvslz3avetkvnwmr35", "1000000" ); const { multi_command, serialized } = await device.sign( [signer], [redelegate], params ); // ... (same as above)
API Reference
LUNA package for SecuX device
Kind: global class
- SecuxLUNA
- .addressConvert(publickey, type) ⇒ string
- .prepareAddress(path) ⇒ communicationData
- .resolveAddress(response, type) ⇒ string
- .preparePublickey(path) ⇒ communicationData
- .resolvePublickey(response) ⇒ string
- .prepareXPublickey(path) ⇒ communicationData
- .resolveXPublickey(response, path) ⇒ string
- .prepareSign(signers, messages, params) ⇒ prepared
- .resolveSignatureList(response) ⇒ Array.<string>
- .resolveTransaction(response, serialized) ⇒ string
- .simulate(signers, messages, [params]) ⇒ string
SecuxLUNA.addressConvert(publickey, type) ⇒ string
Convert secp256k1 publickey to LUNA address.
Returns: string - LUNA address
| Param | Type | Description |
|---|---|---|
| publickey | string | Buffer | secp256k1 publickey |
| type | AddressType | account/validator/pubkey address |
SecuxLUNA.prepareAddress(path) ⇒ communicationData
Prepare data for address generation.
Returns: communicationData - data for sending to device
| Param | Type | Description |
|---|---|---|
| path | string | BIP32 path, ex: m/44'/330'/0'/0/0 |
SecuxLUNA.resolveAddress(response, type) ⇒ string
Generate address from response data.
Returns: string - LUNA address
| Param | Type | Description |
|---|---|---|
| response | communicationData | data from device |
| type | AddressType | account/validator/pubkey address |
SecuxLUNA.preparePublickey(path) ⇒ communicationData
Prepare data for secp256k1 publickey.
Returns: communicationData - data for sending to device
| Param | Type | Description |
|---|---|---|
| path | string | BIP32 path, ex: m/44'/330'/0'/0/0 |
SecuxLUNA.resolvePublickey(response) ⇒ string
Resolve secp256k1 publickey from response data.
Returns: string - secp256k1 publickey (base64-encoded string)
| Param | Type | Description |
|---|---|---|
| response | communicationData | data from device |
SecuxLUNA.prepareXPublickey(path) ⇒ communicationData
Prepare data for xpub.
Returns: communicationData - data for sending to device
| Param | Type | Description |
|---|---|---|
| path | string | BIP32 path, ex: m/44'/330'/0'/0/0 |
SecuxLUNA.resolveXPublickey(response, path) ⇒ string
Resolve xpub from response data.
Returns: string - xpub
| Param | Type | Description |
|---|---|---|
| response | communicationData | data from device |
| path | string | BIP32 path, ex: m/44'/330'/0'/0/0 |
SecuxLUNA.prepareSign(signers, messages, params) ⇒ prepared
Prepare data for signing.
| Param | Type | Description |
|---|---|---|
| signers | Signer | array of signer |
| messages | Array.<IMessage> | each message represents a instruction |
| params | TxOption |
SecuxLUNA.resolveSignatureList(response) ⇒ Array.<string>
Reslove signature from response data.
Returns: Array.<string> - signature array of base64-encoded string
| Param | Type | Description |
|---|---|---|
| response | communicationData | data from device |
SecuxLUNA.resolveTransaction(response, serialized) ⇒ string
Serialize transaction wtih signature for broadcasting.
Returns: string - signed raw transaction
| Param | Type | Description |
|---|---|---|
| response | communicationData | Array.<communicationData> | data from device |
| serialized | communicationData |
SecuxLUNA.simulate(signers, messages, params) ⇒ string
Simulate a transaction for estimating gas.
Returns: string - simulated transaction
| Param | Type | Description |
|---|---|---|
| signers | Array.<Signer> | array of signer |
| messages | Array.<IMessage> | each message represents a instruction |
| params | TxOption |
AddressType : enum
Properties
| Name | Type | Description |
|---|---|---|
| account | string | account |
| validator | string | validator |
| pubkey | string | pubkey |
Signer : object
Properties
| Name | Type | Description |
|---|---|---|
| path | string | BIP32 path, ex: m/44'/330'/0'/0/0 |
| publickey | string | Buffer | secp256k1 publickey from path |
| sequence | number | the number of transactions sent from this address |
| accountNumber | number | the account number from blockchain |
IMessage : interface
Properties
| Name | Type |
|---|---|
| toAmino | function |
| toData | function |
| toProto | function |
| packAny | function |
TxOption : object
Properties
| Name | Type | Description |
|---|---|---|
| fee | string | Coins | the amount of coins to be paid as a fee |
| gasLimit | number | the maximum gas that can be used in transaction processing |
| chainId | string | blockchain network identifier |
| memo | string | |
| timeoutHeight | string | timeout height relative to the current block height |
| payer | string | payer’s account address |
| granter | string | granter’s account address |
prepared : object
Properties
| Name | Type | Description |
|---|---|---|
| commands | Array.<communicationData> | data for sending to device |
| serialized | communicationData | unsigned raw transaction |
© 2018-22 SecuX Technology Inc.
authors: andersonwu@secuxtech.com
3 years ago