UNPKG

@ledgerhq/coin-canton

Version:
207 lines 10.2 kB
import { AmountRequired, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalance, RecipientRequired, } from "@ledgerhq/ledger-wallet-framework/errors"; import { encodeAccountId } from "@ledgerhq/ledger-wallet-framework/account/accountId"; import BigNumber from "bignumber.js"; import { fromTransactionRaw } from "../bridge/transaction"; // Mock Canton addresses using SECP256R1-compatible format export const mockCantonAddresses = { sender: "canton_1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z", recipient1: "canton_2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a", recipient2: "canton_3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b", invalid: "invalid_canton_address", }; // Mock public keys (SECP256R1 uncompressed format) export const mockPublicKeys = { sender: "0x04" + "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890", recipient1: "0x04" + "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890" + "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd", }; const mainAccId = encodeAccountId({ type: "js", version: "2", currencyId: "canton_network", xpubOrAddress: mockCantonAddresses.sender, derivationMode: "", }); const fees = new BigNumber("1000"); const zero = new BigNumber(0); const canton = { implementations: ["mock"], currencies: { canton_network: { scanAccounts: [ { name: "canton seed 1", unstableAccounts: true, apdus: ` => e00200400d038000002c8000009080000000 <= 2103c73f64083463fa923e1530af6f558204853873c6a45cbfb1f2f1e2ac2a5d989c2272734a4675764165634c333153513750594864504b6b3335625a456f78446d5231789000 => e002004015058000002c80000090800000000000000000000000 <= 2103d1adcff3e0cf1232b1416a75cd6f23b49dd6a25c69bc291a1f6783ec6825ec062272616765584842365134566276765764547a4b414e776a65435434485846434b58379000 => e002004015058000002c80000090800000010000000000000000 <= 21036da109ee84825eab0f55fb57bcf9ef0b05621e71fb0400266fb42d6f68f9487c2272425065393169766d67384347573450414e6f657555555173756d337470786a55469000 => e002004015058000002c80000090800000020000000000000000 <= 2102df9a55b79fb3668dac70fee7372806195841cd713ab8da9fba82240f9db8a23921725a76426335653259523141396f745333723944794768334e445038584c4c70349000 `, }, ], accounts: [ { raw: { id: mainAccId, seedIdentifier: mockCantonAddresses.sender, name: "Canton 1", derivationMode: "", index: 0, freshAddress: mockCantonAddresses.sender, freshAddressPath: "44'/6767'/0'/0'/0'", blockHeight: 12345, operations: [], pendingOperations: [], currencyId: "canton_network", lastSyncDate: "2024-01-01T00:00:00.000Z", balance: "1000000000", // 1000 CANTON spendableBalance: "999999000", // 999.999 CANTON (reserving 1000 for fees) subAccounts: [], }, transactions: [ // Basic transaction tests { name: "recipient and sender must not be the same", transaction: fromTransactionRaw({ family: "canton", recipient: mockCantonAddresses.sender, amount: "10000000", tokenId: "Amulet", fee: "1000", }), expectedStatus: { amount: new BigNumber("10000000"), estimatedFees: fees, errors: { recipient: new InvalidAddressBecauseDestinationIsAlsoSource(), }, warnings: {}, totalSpent: new BigNumber("10001000"), }, }, { name: "valid transaction with sufficient balance", transaction: fromTransactionRaw({ family: "canton", recipient: mockCantonAddresses.recipient1, amount: "10000000", // 10 CANTON fee: "1000", tokenId: "Amulet", }), expectedStatus: { amount: new BigNumber("10000000"), estimatedFees: fees, errors: {}, warnings: {}, totalSpent: new BigNumber("10001000"), }, }, { name: "transaction with insufficient balance", transaction: fromTransactionRaw({ family: "canton", recipient: mockCantonAddresses.recipient1, amount: "2000000000", // 2000 CANTON (more than balance) fee: "1000", tokenId: "Amulet", }), expectedStatus: { amount: new BigNumber("2000000000"), estimatedFees: fees, errors: { amount: new NotEnoughBalance(), }, warnings: {}, totalSpent: new BigNumber("20001000"), }, }, { name: "transaction with invalid recipient address", transaction: fromTransactionRaw({ family: "canton", recipient: mockCantonAddresses.invalid, amount: "10000000", tokenId: "Amulet", fee: "1000", }), expectedStatus: { amount: new BigNumber("10000000"), estimatedFees: fees, errors: { recipient: new InvalidAddress(), }, warnings: {}, totalSpent: new BigNumber("10001000"), }, }, { name: "transaction with zero amount", transaction: fromTransactionRaw({ family: "canton", recipient: mockCantonAddresses.recipient1, amount: "0", tokenId: "Amulet", fee: "1000", }), expectedStatus: { amount: zero, estimatedFees: fees, errors: { amount: new AmountRequired(), }, warnings: {}, totalSpent: fees, }, }, { name: "transaction with empty recipient", transaction: fromTransactionRaw({ family: "canton", recipient: "", amount: "10000000", tokenId: "Amulet", fee: "1000", }), expectedStatus: { amount: new BigNumber("10000000"), estimatedFees: fees, errors: { recipient: new RecipientRequired(), }, warnings: {}, totalSpent: new BigNumber("10001000"), }, }, { name: "transaction with high fee", transaction: fromTransactionRaw({ family: "canton", recipient: mockCantonAddresses.recipient1, amount: "10000000", tokenId: "Amulet", fee: "50000", // 50 CANTON fee }), expectedStatus: { amount: new BigNumber("10000000"), estimatedFees: new BigNumber("50000"), errors: {}, warnings: {}, totalSpent: new BigNumber("10050000"), }, }, ], }, ], }, }, }; export { canton as dataset }; //# sourceMappingURL=bridgeDatasetTest.js.map