3.0.0 • Published 2 years ago

@secux/app-luna v3.0.0

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

lerna view on npm(https://badgen.net/npm/v/@secux/app-luna npm module downloads

@secux/app-luna

SecuX Hardware Wallet LUNA API

Usage

import { SecuxLUNA } from "@secux/app-luna";

First, create instance of ITransport

Examples

  1. 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);

*/
  1. 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

Convert secp256k1 publickey to LUNA address.

Returns: string - LUNA address

ParamTypeDescription
publickeystring | Buffersecp256k1 publickey
typeAddressTypeaccount/validator/pubkey address

SecuxLUNA.prepareAddress(path) ⇒ communicationData

Prepare data for address generation.

Returns: communicationData - data for sending to device

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

SecuxLUNA.resolveAddress(response, type) ⇒ string

Generate address from response data.

Returns: string - LUNA address

ParamTypeDescription
responsecommunicationDatadata from device
typeAddressTypeaccount/validator/pubkey address

SecuxLUNA.preparePublickey(path) ⇒ communicationData

Prepare data for secp256k1 publickey.

Returns: communicationData - data for sending to device

ParamTypeDescription
pathstringBIP32 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)

ParamTypeDescription
responsecommunicationDatadata from device

SecuxLUNA.prepareXPublickey(path) ⇒ communicationData

Prepare data for xpub.

Returns: communicationData - data for sending to device

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

SecuxLUNA.resolveXPublickey(response, path) ⇒ string

Resolve xpub from response data.

Returns: string - xpub

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

SecuxLUNA.prepareSign(signers, messages, params) ⇒ prepared

Prepare data for signing.

ParamTypeDescription
signersSignerarray of signer
messagesArray.<IMessage>each message represents a instruction
paramsTxOption

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

Reslove signature from response data.

Returns: Array.<string> - signature array of base64-encoded string

ParamTypeDescription
responsecommunicationDatadata from device

SecuxLUNA.resolveTransaction(response, serialized) ⇒ string

Serialize transaction wtih signature for broadcasting.

Returns: string - signed raw transaction

ParamTypeDescription
responsecommunicationData | Array.<communicationData>data from device
serializedcommunicationData

SecuxLUNA.simulate(signers, messages, params) ⇒ string

Simulate a transaction for estimating gas.

Returns: string - simulated transaction

ParamTypeDescription
signersArray.<Signer>array of signer
messagesArray.<IMessage>each message represents a instruction
paramsTxOption

AddressType : enum

Properties

NameTypeDescription
accountstringaccount
validatorstringvalidator
pubkeystringpubkey

Signer : object

Properties

NameTypeDescription
pathstringBIP32 path, ex: m/44'/330'/0'/0/0
publickeystring | Buffersecp256k1 publickey from path
sequencenumberthe number of transactions sent from this address
accountNumbernumberthe account number from blockchain

IMessage : interface

Properties

NameType
toAminofunction
toDatafunction
toProtofunction
packAnyfunction

TxOption : object

Properties

NameTypeDescription
feestring | Coinsthe amount of coins to be paid as a fee
gasLimitnumberthe maximum gas that can be used in transaction processing
chainIdstringblockchain network identifier
memostring
timeoutHeightstringtimeout height relative to the current block height
payerstringpayer’s account address
granterstringgranter’s account address

prepared : object

Properties

NameTypeDescription
commandsArray.<communicationData>data for sending to device
serializedcommunicationDataunsigned raw transaction

© 2018-22 SecuX Technology Inc.

authors: andersonwu@secuxtech.com