Package Exports
- @secux/app-eth
- @secux/app-eth/lib/app-eth.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@secux/app-eth) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@secux/app-eth
SecuX Hardware Wallet ETH API
Usage
import { SecuxETH } from "@secux/app-eth";
First, create instance of ITransport.
Examples
- Get address derived by given BIP44 path.
const address = await device.getAddress("m/44'/60'/0'/0/0");
/*
// transfer data to hardware wallet by custom transport layer.
const buffer = SecuxETH.prepareAddress("m/44'/60'/0'/0/0");
const response = await device.Exchange(buffer);
const address = SecuxETH.resolveAddress(response);
*/
- Sign legacy transaction (EIP-155).
const { raw_tx, signature } = await device.sign(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0xD080156885651fADbD6df14145051b934660a748",
value: 1e10,
chainId: 1,
gasPrice: 1e6,
gasLimit: 25000
}
)
/*
// transfer data to hardware wallet by custom transport layer.
const { commandData, rawTx } = SecuxETH.prepareSignEIP155(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0xD080156885651fADbD6df14145051b934660a748",
value: 1e10,
chainId: 1,
gasPrice: 1e6,
gasLimit: 25000
}
);
const response = await device.Exchange(commandData);
const rawTx = SecuxETH.resolveTransaction(response, rawTx);
*/
- Sign EIP-1559 transaction.
const { raw_tx, signature } = await device.sign(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0xD080156885651fADbD6df14145051b934660a748",
value: 1e10,
chainId: 1,
maxPriorityFeePerGas: 1e4,
maxFeePerGas: 1e6,
gasLimit: 25000
}
);
- Sign transaction with Smart Contract (ERC-20).
const { raw_tx, signature } = await device.sign(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
value: 0,
data: "0xa9059cbb000000000000000000000000d080156885651fadbd6df14145051b934660a7410000000000000000000000000000000000000000000000000000000000989680",
chainId: 1,
gasPrice: 1e6,
gasLimit: 25000
}
);
/*
// alternative usage
const { commandData, rawTx } = SecuxETH.ERC20.prepareTransfer(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
value: 0,
chainId: 1,
gasPrice: 1e6,
gasLimit: 25000
},
{
toAddress: "0xD080156885651fADbD6df14145051b934660a748",
amount: `0x${1e18.toString(16)}`
}
);
const response = await device.Exchange(commandData);
const rawTx = SecuxETH.resolve(response, rawTx);
*/
- Sign Message transaction.
const { signature } = await device.sign("m/44'/60'/0'/0/0", msg);
// given chainId, return EIP-155 applied signature
// const { signature } = await device.sign("m/44'/60'/0'/0/0", msg, 1);
/*
// transfer data to hardware wallet by custom transport layer.
const buffer = SecuxETH.prepareSignMessage("m/44'/60'/0'/0/0", msg);
const response = await device.Exchange(buffer);
const signature = SecuxETH.resolveSignatureEIP155(response);
*/
- Sign TypeData transaction (EIP-712).
const { signature } = await device.sign("m/44'/60'/0'/0/0", JSON.stringify(typedData));
// given chainId, return EIP-155 applied signature
// const { signature } = await device.sign("m/44'/60'/0'/0/0", JSON.stringify(typedData), 1);
/*
// transfer data to hardware wallet by custom transport layer.
const buffer = SecuxETH.prepareSignTypedData("m/44'/60'/0'/0/0", msg);
const response = await device.Exchange(buffer);
// given chainId, return EIP-155 applied signature
const signature = SecuxETH.resolveSignatureEIP155(response, 1);
*/
- Sign transaction with WalletConnect.
const { raw_tx, signature } = await device.sign(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0xD080156885651fADbD6df14145051b934660a748",
value: 0,
data: "0x7ff36ab5000000000000000000000000000000000000000000000000302bf3f82d406d120000000000000000000000000000000000000000000000000000000000000080000000000000000000000000d080156885651fadbd6df14145051b934660a7480000000000000000000000000000000000000000000000000000000060b613630000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000007130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56",
chainId: 56,
gasPrice: 1e6,
gasLimit: 25000
},
true
);
/*
// transfer data to hardware wallet by custom transport layer.
const { commandData, rawTx } = SecuxETH.prepareSignWalletConnectTransaction(
"m/44'/60'/0'/0/0",
{
nonce: 0,
to: "0xD080156885651fADbD6df14145051b934660a748",
value: 0,
data: "0x7ff36ab5000000000000000000000000000000000000000000000000302bf3f82d406d120000000000000000000000000000000000000000000000000000000000000080000000000000000000000000d080156885651fadbd6df14145051b934660a7480000000000000000000000000000000000000000000000000000000060b613630000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000007130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56",
chainId: 56,
gasPrice: 1e6,
gasLimit: 25000
}
);
const response = await device.Exchange(commandData);
const rawTx = SecuxETH.resolveTransaction(response, rawTx);
*/
Note
- Value of chainId (same as EIP-155):
- Ethereum Mainnet: 1
- Binance Smart Chain Mainnet: 56
- Polygon Network: 137
- goto https://chainlist.org/ for your specific chain.
API Reference
ETH package for SecuX device
Kind: global class
- SecuxETH
- .prepareAddress ⇒
communicationData
- .addressConvert(publickey) ⇒
string
- .resolveAddress(response) ⇒
string
- .preparePublickey(path) ⇒
communicationData
- .resolvePublickey(response) ⇒
string
- .prepareXPublickey(path) ⇒
communicationData
- .resolveXPublickey(response, path) ⇒
string
- .prepareSignSerialized(path, serialized) ⇒
communicationData
- .resolveSignature(response) ⇒
string
- .resolveTransaction(response, serialized) ⇒
string
- .prepareSignEIP155(path, content) ⇒
prepared
- .resolveSignatureEIP155(response, [chainId]) ⇒
string
- .prepareSignEIP1559(path, content) ⇒
prepared
- .prepareSignMessage(path, message) ⇒
communicationData
- .prepareSignTypedData(path, data) ⇒
communicationData
- .prepareSignWalletConnectTransaction(path, content) ⇒
prepared
- .prepareAddress ⇒
SecuxETH.prepareAddress ⇒ communicationData
Prepare data for address generation.
Returns: communicationData
- data for sending to device
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
SecuxETH.addressConvert(publickey) ⇒ string
Convert publickey to ETH address.
Returns: string
- EIP55 address
Param | Type | Description |
---|---|---|
publickey | string | Buffer |
secp256k1 publickey |
SecuxETH.resolveAddress(response) ⇒ string
Resolve address from response data.
Returns: string
- EIP55 address
Param | Type | Description |
---|---|---|
response | communicationData |
data from device |
SecuxETH.preparePublickey(path) ⇒ communicationData
Prepare data for secp256k1 publickey.
Returns: communicationData
- data for sending to device
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
SecuxETH.resolvePublickey(response) ⇒ string
Resolve secp256k1 publickey from response data.
Returns: string
- secp256k1 publickey (hex string)
Param | Type | Description |
---|---|---|
response | communicationData |
data from device |
SecuxETH.prepareXPublickey(path) ⇒ communicationData
Prepare data for xpub generation.
Returns: communicationData
- data for sending to device
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
SecuxETH.resolveXPublickey(response, path) ⇒ string
Generate xpub with response data.
Returns: string
- xpub
Param | Type | Description |
---|---|---|
response | communicationData |
data from device |
path | string |
m/44'/60'/... |
SecuxETH.prepareSignSerialized(path, serialized) ⇒ communicationData
Convert unsigned transaction to command data.
Returns: communicationData
- data for sending to device
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
serialized | communicationData |
unsigned transaction |
SecuxETH.resolveSignature(response) ⇒ string
Reslove signature from response data.
Returns: string
- signature (hex string)
Param | Type | Description |
---|---|---|
response | communicationData |
data from device |
SecuxETH.resolveTransaction(response, serialized) ⇒ string
Serialize transaction wtih signature for broadcasting.
Returns: string
- signed raw transaction
Param | Type | Description |
---|---|---|
response | communicationData |
data from device |
serialized | communicationData |
unsigned transaction |
SecuxETH.prepareSignEIP155(path, content) ⇒ prepared
Prepare data for signing.
Returns: prepared
- prepared object
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
content | tx155 |
EIP-155 transaction object |
SecuxETH.resolveSignatureEIP155(response, [chainId]) ⇒ string
Reslove signature and follow ethereum signature standard.
Returns: string
- signature (hex string)
Param | Type | Description |
---|---|---|
response | communicationData |
data from device |
[chainId] | number |
if give a chainId, the signature will be EIP-155 applied |
SecuxETH.prepareSignEIP1559(path, content) ⇒ prepared
Prepare data for signing (London Hard Fork).
Returns: prepared
- prepared object
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
content | tx1559 |
EIP-1559 transaction object |
SecuxETH.prepareSignMessage(path, message) ⇒ communicationData
Prepare data for signing.
Returns: communicationData
- data for sending to device
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
message | string |
SecuxETH.prepareSignTypedData(path, data) ⇒ communicationData
Prepare data for signing.
Returns: communicationData
- data for sending to device
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
data | JsonString |
EIP712 |
SecuxETH.prepareSignWalletConnectTransaction(path, content) ⇒ prepared
Prepare data for signing using WalletConnect protocol.
Returns: prepared
- prepared object
Param | Type | Description |
---|---|---|
path | string |
m/44'/60'/... |
content | tx155 | tx1559 |
transaction object |
tx155
Properties
Name | Type | Description |
---|---|---|
chainId | number |
network for ethereum ecosystem |
to | string |
receiving address |
value | number | string |
sending amount |
nonce | number | string |
|
gasPrice | number | string |
|
gasLimit | number | string |
|
[data] | string |
prepared
Properties
Name | Type | Description |
---|---|---|
commandData | communicationData |
data for sending to device |
serialized | communicationData |
unsigned transaction |
tx1559
Properties
Name | Type | Description |
---|---|---|
chainId | number |
network for ethereum ecosystem |
to | string |
receiving address |
value | number | string |
sending amount |
nonce | number | string |
|
maxPriorityFeePerGas | number | string |
|
maxFeePerGas | number | string |
|
gasLimit | number | string |
|
[content.accessList] | Array.<any> |
|
[data] | string |
© 2018-21 SecuX Technology Inc.
authors:
andersonwu@secuxtech.com