@secux/app-sol
Version:
SecuX Hardware Wallet SOL API
359 lines (279 loc) • 11 kB
Markdown
[](https://lerna.js.org/)
[](https://www.npmjs.com/package/@secux/app-sol)
[](https://www.npmjs.org/package/@secux/app-sol)
# `@secux/app-sol`
> SecuX Hardware Wallet SOL API
## Usage
```ts
import { SecuxSOL } from "@secux/app-sol";
```
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 bip-32 path.
- main account
```ts
const path = "m/44'/501'/0'";
const address = await device.getAddress(path);
/*
// transfer data to hardware wallet by custom transport layer.
const data = SecuxBTC.prepareAddress(path);
const response = await device.Exchange(data);
const address = SecuxBTC.resolveAddress(response, path);
*/
```
- associated account
```ts
const address = await device.getAddress(
"m/44'/501'/0'",
// USDC
{ mintAccount: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }
);
```
- account with seed
```ts
const address = await device.getAddress(
"m/44'/501'/0'",
{
seed: "seed",
programId: "Stake11111111111111111111111111111111111111"
}
);
```
2. Sign transaction.
- transfer asset
```ts
const { raw_tx } = await device.sign(
"<recentBlockhash>",
instructions: [
{
type: "transfer",
params: {
to: "<reciever account>",
lamports: 1e9,
path: "m/44'/501'/0'"
}
}
]
);
/*
// transfer data to hardware wallet by custom transport layer.
const { commandData, serialized } = SecuxSOL.prepareSign(
"<recentBlockhash>",
instructions: [
{
type: "transfer",
params: {
from: "<sender's account>",
to: "<reciever's account>",
lamports: 1e9,
path: "m/44'/501'/0'"
}
}
]
);
const response = await device.Exchange(commandData);
const raw_tx = SecuxSOL.resloveTransaction(response, serialized);
*/
```
- transfer SPL token
```ts
const { raw_tx } = await device.sign(
"<recentBlockhash>",
instructions:
SecuxSOL.Action.transferToken(
{
to: "<reciever's account>",
owner: "<sender's account>",
amount: 1e6,
mint: "<token mint account>",
decimal: 6,
path: "m/44'/501'/0'",
// create ATA for reciever
createAccount: true
}
)
);
```
- native staking
```ts
const { raw_tx } = await device.sign(
"<recentBlockhash>",
instructions:
SecuxSOL.Action.stake(
{
owner: "<main account>",
stake: "<stake account>",
vote: "<vote account>",
lamports: 1e9,
path: "m/44'/501'/0'",
// if give a seed, the createWithSeed instruction will be included.
// stake: "<arbitrary string>"
}
)
);
```
- unstake
```ts
const { raw_tx } = await device.sign(
"<recentBlockhash>",
instructions:
SecuxSOL.Action.unstake(
{
owner: "<main account>",
stake: "<stake account or seed>",
lamports: <withdraw amount>,
path: "m/44'/501'/0'"
}
)
);
```
# API Reference
SOL package for SecuX device
**Kind**: global class
* [SecuxSOL](#SecuxSOL)
* [.addressConvert(publickey, [option])](#SecuxSOL.addressConvert) ⇒ <code>string</code>
* [.prepareAddress(path)](#SecuxSOL.prepareAddress) ⇒ [<code>communicationData</code>](#communicationData)
* [.resolveAddress(response, [option])](#SecuxSOL.resolveAddress) ⇒ <code>string</code>
* [.preparePublickey(path)](#SecuxSOL.preparePublickey) ⇒ [<code>communicationData</code>](#communicationData)
* [.resolvePublickey(response)](#SecuxSOL.resolvePublickey) ⇒ <code>string</code>
* [.prepareSign(feePayer, content)](#SecuxSOL.prepareSign) ⇒ [<code>prepared</code>](#prepared)
* [.resolveSignatureList(response)](#SecuxSOL.resolveSignatureList) ⇒ <code>Array.<string></code>
* [.resolveTransaction(response, serialized)](#SecuxSOL.resolveTransaction) ⇒ <code>string</code>
<br/>
<a name="SecuxSOL.addressConvert"></a>
### **SecuxSOL.addressConvert(publickey, [option]) ⇒ <code>string</code>**
*Convert ed25519 publickey to SOL address.*
**Returns**: <code>string</code> - address
| Param | Type | Description |
| --- | --- | --- |
| publickey | <code>string</code> \| <code>Buffer</code> | ed25519 publickey |
| [option] | [<code>ATAOption</code>](#ATAOption) \| [<code>SeedOption</code>](#SeedOption) | |
<br/>
<a name="SecuxSOL.prepareAddress"></a>
### **SecuxSOL.prepareAddress(path) ⇒ [<code>communicationData</code>](#communicationData)**
*Prepare data for SOL address.*
**Returns**: [<code>communicationData</code>](#communicationData) - data for sending to device
| Param | Type | Description |
| --- | --- | --- |
| path | <code>string</code> | BIP32 path (hardened child key), ex: m/44'/501'/0'/0' |
<br/>
<a name="SecuxSOL.resolveAddress"></a>
### **SecuxSOL.resolveAddress(response, [option]) ⇒ <code>string</code>**
*Generate SOL address from response data.*
**Returns**: <code>string</code> - SOL address
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
| [option] | [<code>ATAOption</code>](#ATAOption) \| [<code>SeedOption</code>](#SeedOption) | |
<br/>
<a name="SecuxSOL.preparePublickey"></a>
### **SecuxSOL.preparePublickey(path) ⇒ [<code>communicationData</code>](#communicationData)**
*Prepare data for ed25519 publickey.*
**Returns**: [<code>communicationData</code>](#communicationData) - data for sending to device
| Param | Type | Description |
| --- | --- | --- |
| path | <code>string</code> | BIP32 path (hardened child key), ex: m/44'/501'/0'/0' |
<br/>
<a name="SecuxSOL.resolvePublickey"></a>
### **SecuxSOL.resolvePublickey(response) ⇒ <code>string</code>**
*Resove ed25519 publickey from response data.*
**Returns**: <code>string</code> - ed25519 publickey (hex string)
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
<br/>
<a name="SecuxSOL.prepareSign"></a>
### **SecuxSOL.prepareSign(feePayer, content) ⇒ [<code>prepared</code>](#prepared)**
*Prepare data for signing.*
**Returns**: [<code>prepared</code>](#prepared) - prepared object
| Param | Type | Description |
| --- | --- | --- |
| feePayer | <code>string</code> | solana account |
| content | [<code>txDetail</code>](#txDetail) | transaction object |
<br/>
<a name="SecuxSOL.resolveSignatureList"></a>
### **SecuxSOL.resolveSignatureList(response) ⇒ <code>Array.<string></code>**
*Reslove signatures from response data.*
**Returns**: <code>Array.<string></code> - signature array (base58 encoded)
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
<br/>
<a name="SecuxSOL.resolveTransaction"></a>
### **SecuxSOL.resolveTransaction(response, serialized) ⇒ <code>string</code>**
*Resolve transaction for broadcasting.*
**Returns**: <code>string</code> - signed transaction (hex)
| Param | Type | Description |
| --- | --- | --- |
| response | [<code>communicationData</code>](#communicationData) | data from device |
| serialized | [<code>communicationData</code>](#communicationData) | |
<br/>
<br/>
<br/>
<a name="ATAOption"></a>
## ATAOption : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| mintAccount | <code>string</code> | token mint address |
<br/>
<a name="SeedOption"></a>
## SeedOption : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| seed | <code>string</code> | arbitary string (UTF-8) |
| programId | <code>string</code> | program address |
<br/>
<a name="accounts"></a>
## accounts : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| publickey | <code>string</code> \| <code>Buffer</code> | Ed25519 publickey |
| isSigner | <code>boolean</code> | |
| isWritable | <code>boolean</code> | |
| [path] | <code>string</code> | the path for signing |
<br/>
<a name="Instruction"></a>
## Instruction : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| programId | <code>string</code> | program address |
| accounts | [<code>accounts</code>](#accounts) | |
| data | <code>string</code> \| <code>Buffer</code> | hex string or buffer |
<br/>
<a name="BuiltinInstruction"></a>
## BuiltinInstruction : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| type | <code>string</code> | instruction type |
| params | <code>any</code> | parameters |
<br/>
<a name="txDetail"></a>
## txDetail : <code>object</code>
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| recentBlockhash | <code>string</code> | a recent blockhash |
| instructions | <code>Array.<(Instruction\|BuiltinInstruction)></code> | a least one instruction in a transaction |
| [feepayerPath] | <code>string</code> | option for signing via SecuX wallet |
<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>string</code> | unsigned raw transaction |
<br/>
* * *
© 2018-22 SecuX Technology Inc.
authors:<br/>
andersonwu@secuxtech.com