@secux/app-trx
Version:
SecuX Hardware Wallet TRX API
353 lines (261 loc) • 11.3 kB
Markdown
[](https://lerna.js.org/)
[](https://www.npmjs.com/package/@secux/app-trx)
[](https://www.npmjs.org/package/@secux/app-trx)
# `@secux/app-trx`
> SecuX Hardware Wallet TRX API
## Usage
```ts
import { SecuxTRX } from "@secux/app-trx";
```
First, create instance of ITransport
- [Web Usb](https://www.npmjs.com/package/@secux/transport-webusb)
- [Web Bluetooth](https://www.npmjs.com/package/@secux/transport-webble)
- [React Native Bluetooth](https://www.npmjs.com/package/@secux/transport-reactnative)
<br/>
## Examples
1. Get address of bip44 path
```ts
const path = "m/44'/195'/0'/0/0";
const address = await device.getAddress(path);
/*
// transfer data to hardware wallet by custom transport layer.
const data = SecuxTRX.prepareAddress(path);
const response = await device.Exchange(data);
const address = SecuxTRX.resolveAddress(response);
*/
```
2. Sign transaction (TransferContract)
```ts
const TronWeb = require("tronweb");
// fetch block data
const tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io' });
const block = await tronWeb.trx.getConfirmedCurrentBlock();
const content = {
to: "TJKiYicrKqB7PR2wywfWKkNMppNRqd6tXt",
amount: 1e5,
blockID: block.blockID,
blockNumber: block.block_header.raw_data.number,
timestamp: block.block_header.raw_data.timestamp
};
// sign
const { raw_tx, signature } = await device.sign("m/44'/195'/0'/0/0", content);
/*
// transfer data to hardware wallet by custom transport layer.
const { commandData, rawTx } = SecuxTRX.prepareSign("m/44'/195'/0'/0/0", content);
const response = await device.Exchange(commandData);
const raw_tx = SecuxTRX.resolveTransaction(response, rawTx);
*/
// broadcast
const response = await tronWeb.trx.sendHexTransaction(raw_tx);
```
3. Sign TRC10 transaction (TransferAssetContract)
```ts
const content = {
to: "TJKiYicrKqB7PR2wywfWKkNMppNRqd6tXt",
token: 1002000,
amount: 1e5,
blockID: block.blockID,
blockNumber: block.block_header.raw_data.number,
timestamp: block.block_header.raw_data.timestamp
};
const { raw_tx, signature } = await device.sign("m/44'/195'/0'/0/0", content);
/*
// transfer data to hardware wallet by custom transport layer.
const { commandData, rawTx } = SecuxTRX.prepareSign("m/44'/195'/0'/0/0", content);
const response = await device.Exchange(commandData);
const raw_tx = SecuxTRX.resolveTransaction(response, rawTx);
*/
```
4. Sign TRC20 transaction (TriggerSmartContract)
* \[tokenId\]: the TRC10 asset ID that transfered to the contract while calling the contract.
* \[tokenValue\]: the amount of TRC10 asset that transfered to the contract while calling the contract.
* \[callValue\]: the amount of TRX that transfered to the contract while calling the contract, the unit is sun.
```ts
const content = {
contract: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
// data field can use abi encoded string optionally
data: [
{ type: "address", value: "TJKiYicrKqB7PR2wywfWKkNMppNRqd6tXt" },
{ type: "uint256", value: 1e5 }
],
blockID: block.blockID,
blockNumber: block.block_header.raw_data.number,
timestamp: block.block_header.raw_data.timestamp
};
const { raw_tx, signature } = await device.sign("m/44'/195'/0'/0/0", content);
/*
// transfer data to hardware wallet by custom transport layer.
const { commandData, rawTx } = SecuxTRX.prepareSign("m/44'/195'/0'/0/0", content);
const response = await device.Exchange(commandData);
const raw_tx = SecuxTRX.resolveTransaction(response, rawTx);
*/
```
# API Reference
TRX package for SecuX device
**Kind**: global class
* [SecuxTRX](#SecuxTRX)
* [.addressConvert(publickey)](#SecuxTRX.addressConvert) ⇒ <code>string</code>
* [.toHexAddress(address)](#SecuxTRX.toHexAddress) ⇒ <code>string</code>
* [.prepareAddress(path)](#SecuxTRX.prepareAddress) ⇒ [<code>communicationData</code>](#communicationData)
* [.resolveAddress(response)](#SecuxTRX.resolveAddress) ⇒ <code>string</code>
* [.preparePublickey(path)](#SecuxTRX.preparePublickey) ⇒ [<code>communicationData</code>](#communicationData)
* [.resolvePublickey(response)](#SecuxTRX.resolvePublickey) ⇒ <code>string</code>
* [.prepareXPublickey(path)](#SecuxTRX.prepareXPublickey) ⇒ [<code>communicationData</code>](#communicationData)
* [.resolveXPublickey(response, path)](#SecuxTRX.resolveXPublickey) ⇒
* [.prepareSign(path, content)](#SecuxTRX.prepareSign) ⇒ [<code>prepared</code>](#prepared)
* [.resolveSignature(response)](#SecuxTRX.resolveSignature) ⇒ <code>string</code>
* [.resolveTransaction(response, serialized)](#SecuxTRX.resolveTransaction) ⇒ <code>string</code>
<br/>
<a name="SecuxTRX.addressConvert"></a>
### **SecuxTRX.addressConvert(publickey) ⇒ <code>string</code>**
*Convert secp256k1 publickey to TRX address.*
**Returns**: <code>string</code> - TRX address
| Param | Type |
| --- | --- |
| publickey | <code>string</code> \| <code>Buffer</code> |
<br/>
<a name="SecuxTRX.toHexAddress"></a>
### **SecuxTRX.toHexAddress(address) ⇒ <code>string</code>**
*Convert TRX address to hex representation*
**Returns**: <code>string</code> - TRX address (hex)
| Param | Type | Description |
| --- | --- | --- |
| address | <code>string</code> | TRX address |
<br/>
<a name="SecuxTRX.prepareAddress"></a>
### **SecuxTRX.prepareAddress(path) ⇒ [<code>communicationData</code>](#communicationData)**
*Prepare data for address generation.*
**Returns**: [<code>communicationData</code>](#communicationData) - data for sending to device
| Param | Type | Description |
| --- | --- | --- |
| path | <code>string</code> | m/44'/195'/... |
<br/>
<a name="SecuxTRX.resolveAddress"></a>
### **SecuxTRX.resolveAddress(response) ⇒ <code>string</code>**
*Generate address from response data.*
**Returns**: <code>string</code> - TRX address
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
<br/>
<a name="SecuxTRX.preparePublickey"></a>
### **SecuxTRX.preparePublickey(path) ⇒ [<code>communicationData</code>](#communicationData)**
*Prepare data for secp256k1 publickey.*
**Returns**: [<code>communicationData</code>](#communicationData) - data for sending to device
| Param | Type | Description |
| --- | --- | --- |
| path | <code>string</code> | m/44'/195'/... |
<br/>
<a name="SecuxTRX.resolvePublickey"></a>
### **SecuxTRX.resolvePublickey(response) ⇒ <code>string</code>**
*Resolve secp256k1 publickey from response data.*
**Returns**: <code>string</code> - secp256k1 publickey
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
<br/>
<a name="SecuxTRX.prepareXPublickey"></a>
### **SecuxTRX.prepareXPublickey(path) ⇒ [<code>communicationData</code>](#communicationData)**
*Prepare data for xpub.*
**Returns**: [<code>communicationData</code>](#communicationData) - data for sending to device
| Param | Type | Description |
| --- | --- | --- |
| path | <code>string</code> | m/44'/195'/... |
<br/>
<a name="SecuxTRX.resolveXPublickey"></a>
### **SecuxTRX.resolveXPublickey(response, path) ⇒**
*Resolve xpub from response data.*
**Returns**: xpub
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
| path | <code>string</code> | m/44'/195'/... |
<br/>
<a name="SecuxTRX.prepareSign"></a>
### **SecuxTRX.prepareSign(path, content) ⇒ [<code>prepared</code>](#prepared)**
*Prepare data for signing.*
**Returns**: [<code>prepared</code>](#prepared) - prepared object
| Param | Type | Description |
| --- | --- | --- |
| path | <code>string</code> | m/44'/195'/... |
| content | [<code>transferData</code>](#transferData) \| [<code>trc10\_Data</code>](#trc10_Data) \| [<code>trc20\_Data</code>](#trc20_Data) | transaction object |
<br/>
<a name="SecuxTRX.resolveSignature"></a>
### **SecuxTRX.resolveSignature(response) ⇒ <code>string</code>**
*Resolve signature from response data.*
**Returns**: <code>string</code> - signature (hex string)
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
<br/>
<a name="SecuxTRX.resolveTransaction"></a>
### **SecuxTRX.resolveTransaction(response, serialized) ⇒ <code>string</code>**
*Resolve transaction for broadcasting.*
**Returns**: <code>string</code> - signed raw transaction
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
| serialized | [<code>communicationData</code>](#communicationData) | raw transaction |
<br/>
<br/>
<br/>
<a name="transferData"></a>
## transferData : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| from | <code>string</code> | sending address |
| to | <code>string</code> | receiving address |
| amount | <code>number</code> | transfer amount |
| blockID | <code>string</code> | |
| blockNumber | <code>number</code> | |
| timestamp | <code>number</code> | |
| [feeLimit] | <code>number</code> | |
| [expiration] | <code>number</code> | |
<br/>
<a name="trc10_Data"></a>
## trc10\_Data : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| from | <code>string</code> | sending address |
| to | <code>string</code> | receiving address |
| token | <code>string</code> \| <code>number</code> | token id number |
| amount | <code>number</code> | transfer amount |
| blockID | <code>string</code> | |
| blockNumber | <code>number</code> | |
| timestamp | <code>number</code> | |
| [feeLimit] | <code>number</code> | |
| [expiration] | <code>number</code> | |
<br/>
<a name="trc20_Data"></a>
## trc20\_Data : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| from | <code>string</code> | sending address |
| to | <code>string</code> | receiving address |
| amount | <code>number</code> \| <code>string</code> | transfer amount |
| contract | <code>string</code> | contract address |
| [data] | <code>string</code> | abi encoded string |
| blockID | <code>string</code> | |
| blockNumber | <code>number</code> | |
| timestamp | <code>number</code> | |
| [callValue] | <code>number</code> | amount of TRX to send to the contract when triggers. |
| [tokenId] | <code>number</code> | id of TRC-10 token to be sent to the contract. |
| [tokenValue] | <code>number</code> | amount of TRC-10 token to send to the contract when triggers. |
| [feeLimit] | <code>number</code> | |
| [expiration] | <code>number</code> | |
<br/>
<a name="prepared"></a>
## prepared : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| commandData | [<code>communicationData</code>](#communicationData) | data for sending to device |
| rawTx | [<code>communicationData</code>](#communicationData) | unsigned raw transaction |
<br/>
* * *
© 2018-21 SecuX Technology Inc.
authors:<br/>
andersonwu@secuxtech.com