@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
286 lines (250 loc) • 6.88 kB
text/typescript
import { Account } from "@ledgerhq/types-live";
import { EthereumTransaction as WalletAPITransaction } from "@ledgerhq/wallet-api-core";
import BigNumber from "bignumber.js";
import evm from "./walletApiAdapter";
describe("getWalletAPITransactionSignFlowInfos", () => {
describe("should properly get infos for ETH platform tx", () => {
test("without fees provided", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: {} as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(false);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 0,
"family": "evm",
"feesStrategy": "medium",
"gasLimit": "21000",
"gasPrice": undefined,
"maxFeePerGas": undefined,
"maxPriorityFeePerGas": undefined,
"mode": "send",
"nonce": -1,
"recipient": "0xABCDEF",
"type": 2,
"useAllAmount": false,
}
`);
});
test("with fees provided for legacy tx", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
gasPrice: new BigNumber(300),
gasLimit: new BigNumber(21000),
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: {} as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(true);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 0,
"customGasLimit": "21000",
"family": "evm",
"feesStrategy": "custom",
"gasLimit": "21000",
"gasPrice": "300",
"maxFeePerGas": undefined,
"maxPriorityFeePerGas": undefined,
"mode": "send",
"nonce": -1,
"recipient": "0xABCDEF",
"type": 0,
"useAllAmount": false,
}
`);
});
test("with fees provided for eip1559 tx", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
gasLimit: new BigNumber(21000),
maxFeePerGas: new BigNumber(300),
maxPriorityFeePerGas: new BigNumber(200),
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: {} as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(true);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 0,
"customGasLimit": "21000",
"family": "evm",
"feesStrategy": "custom",
"gasLimit": "21000",
"gasPrice": undefined,
"maxFeePerGas": "300",
"maxPriorityFeePerGas": "200",
"mode": "send",
"nonce": -1,
"recipient": "0xABCDEF",
"type": 2,
"useAllAmount": false,
}
`);
});
test("with only gasLimit provided", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
gasLimit: new BigNumber(21000),
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: {} as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(false);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 0,
"customGasLimit": "21000",
"family": "evm",
"feesStrategy": "medium",
"gasLimit": "21000",
"gasPrice": undefined,
"maxFeePerGas": undefined,
"maxPriorityFeePerGas": undefined,
"mode": "send",
"nonce": -1,
"recipient": "0xABCDEF",
"type": 2,
"useAllAmount": false,
}
`);
});
test("with nonce provided", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
nonce: 1,
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: {} as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(false);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 0,
"family": "evm",
"feesStrategy": "medium",
"gasLimit": "21000",
"gasPrice": undefined,
"maxFeePerGas": undefined,
"maxPriorityFeePerGas": undefined,
"mode": "send",
"nonce": 1,
"recipient": "0xABCDEF",
"type": 2,
"useAllAmount": false,
}
`);
});
test("with data provided", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
data: Buffer.from("testBufferString"),
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: {} as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(false);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 0,
"data": {
"data": [
116,
101,
115,
116,
66,
117,
102,
102,
101,
114,
83,
116,
114,
105,
110,
103,
],
"type": "Buffer",
},
"family": "evm",
"feesStrategy": "medium",
"gasLimit": "21000",
"gasPrice": undefined,
"maxFeePerGas": undefined,
"maxPriorityFeePerGas": undefined,
"mode": "send",
"nonce": -1,
"recipient": "0xABCDEF",
"type": 2,
"useAllAmount": false,
}
`);
});
test("with account (chainId) provided", () => {
const ethPlatformTx: WalletAPITransaction = {
family: "ethereum",
amount: new BigNumber(100000),
recipient: "0xABCDEF",
};
const { canEditFees, hasFeesProvided, liveTx } = evm.getWalletAPITransactionSignFlowInfos({
walletApiTransaction: ethPlatformTx,
account: { type: "Account", currency: { ethereumLikeInfo: { chainId: 1 } } } as Account,
});
expect(canEditFees).toBe(true);
expect(hasFeesProvided).toBe(false);
expect(liveTx).toMatchInlineSnapshot(`
{
"amount": "100000",
"chainId": 1,
"family": "evm",
"feesStrategy": "medium",
"gasLimit": "21000",
"gasPrice": undefined,
"maxFeePerGas": undefined,
"maxPriorityFeePerGas": undefined,
"mode": "send",
"nonce": -1,
"recipient": "0xABCDEF",
"type": 2,
"useAllAmount": false,
}
`);
});
});
});