UNPKG

@ledgerhq/coin-ton

Version:
169 lines 8.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@ton/core"); const constants_1 = require("../../constants"); const utils_1 = require("../../utils"); const common_fixtures_1 = require("../fixtures/common.fixtures"); describe("TON addresses", () => { const addr = { raw: "0:074c7194d64e8218f2cfaab8e79b34201adbed0f8fa7f2773e604dd39969b5ff", rawWrong: "0:074c7194d64e8218f2cfaab8e79b34201adbed0f8fa7f2773e604dd39969b5f", bounceUrl: "EQAHTHGU1k6CGPLPqrjnmzQgGtvtD4-n8nc-YE3TmWm1_1JZ", bounceNoUrl: "EQAHTHGU1k6CGPLPqrjnmzQgGtvtD4+n8nc+YE3TmWm1/1JZ", bounceWrong: "EQAHTHGU1k6CGPLPqrjnmzQgGtvtD4+n8nc+YE3TmWm1/1J", noBounceUrl: "UQAHTHGU1k6CGPLPqrjnmzQgGtvtD4-n8nc-YE3TmWm1_w-c", noBounceNoUrl: "UQAHTHGU1k6CGPLPqrjnmzQgGtvtD4+n8nc+YE3TmWm1/w+c", noBounceWrong: "UQAHTHGU1k6CGPLPqrjnmzQgGtvtD4+n8nc+YE3TmWm1/w+", diff: "UQBjrXgZbYDCpxLKpgMnBe985kYDfUeriuYUafbuKgdBpWuJ", }; test("Check if addresses are valid", () => { expect((0, utils_1.isAddressValid)(addr.raw)).toBe(true); expect((0, utils_1.isAddressValid)(addr.bounceUrl)).toBe(true); expect((0, utils_1.isAddressValid)(addr.bounceNoUrl)).toBe(true); expect((0, utils_1.isAddressValid)(addr.noBounceUrl)).toBe(true); expect((0, utils_1.isAddressValid)(addr.noBounceNoUrl)).toBe(true); expect((0, utils_1.isAddressValid)(addr.rawWrong)).toBe(false); expect((0, utils_1.isAddressValid)(addr.bounceWrong)).toBe(false); expect((0, utils_1.isAddressValid)(addr.noBounceWrong)).toBe(false); expect((0, utils_1.isAddressValid)(addr.diff)).toBe(true); }); test("Compare addresses", () => { expect((0, utils_1.addressesAreEqual)(addr.raw, addr.bounceUrl)).toBe(true); expect((0, utils_1.addressesAreEqual)(addr.raw, addr.noBounceUrl)).toBe(true); expect((0, utils_1.addressesAreEqual)(addr.bounceUrl, addr.noBounceUrl)).toBe(true); expect((0, utils_1.addressesAreEqual)(addr.rawWrong, addr.noBounceUrl)).toBe(false); expect((0, utils_1.addressesAreEqual)(addr.noBounceNoUrl, addr.diff)).toBe(false); }); }); test("TON Comments are valid", () => { const msg = (e, m) => ({ isEncrypted: e, text: m }); expect((0, utils_1.commentIsValid)(msg(false, ""))).toBe(true); expect((0, utils_1.commentIsValid)(msg(false, "Hello world!"))).toBe(true); expect((0, utils_1.commentIsValid)(msg(false, " 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"))).toBe(true); expect((0, utils_1.commentIsValid)(msg(false, " 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 "))).toBe(false); expect((0, utils_1.commentIsValid)(msg(false, "😀"))).toBe(false); expect((0, utils_1.commentIsValid)(msg(true, ""))).toBe(false); }); describe("TON transfers", () => { const commentPayload = { type: "comment", text: "", }; const transferPayload = { type: "jetton-transfer", queryId: null, amount: BigInt(0), destination: new core_1.Address(0, Buffer.alloc(32)), responseDestination: new core_1.Address(0, Buffer.alloc(32)), customPayload: null, forwardAmount: BigInt(0), forwardPayload: null, }; const nftPayload = { type: "nft-transfer", queryId: null, newOwner: new core_1.Address(0, Buffer.alloc(32)), responseDestination: new core_1.Address(0, Buffer.alloc(32)), customPayload: null, forwardAmount: BigInt(0), forwardPayload: null, }; test("Check if the transaction is jetton transfer", () => { /** * Checks if the given payload is a jetton transfer. */ const isJettonTransfer = (payload) => payload.type === "jetton-transfer"; expect(isJettonTransfer(commentPayload)).toBe(false); expect(isJettonTransfer(transferPayload)).toBe(true); expect(isJettonTransfer(nftPayload)).toBe(false); }); }); describe("Get TON paths", () => { const correctPath = ["44'/607'/0'/0'/0'/0'", "m/44'/607'/0'/0'/0'/0'"]; const wrongPaths = [ "44'/607'/0'/0'/0'", "44'/607'/0'/0/'/0'", "44'/607'/0'/0'/x'/0'", "44'/607'/0'/-3'/0'/0'", "44'/607'/0'/2147483650'/0'/0'", ]; test("Correct paths return a correct response", () => { correctPath.map((path) => { expect((0, utils_1.getLedgerTonPath)(path)).toStrictEqual([44, 607, 0, 0, 0, 0]); }); }); test("Wrong paths fail", () => { wrongPaths.map((path) => { expect(() => (0, utils_1.getLedgerTonPath)(path)).toThrow(/^(\[ton\] Path)/); }); }); }); describe("Build TON transaction", () => { const seqno = 22; test("Build TON transaction with an specific amount", () => { const tonTransaction = (0, utils_1.buildTonTransaction)(common_fixtures_1.transaction, seqno, common_fixtures_1.account); // Convert the Address to string to compare expect({ ...tonTransaction, to: tonTransaction.to.toString() }).toEqual({ to: core_1.Address.parse(common_fixtures_1.transaction.recipient).toString(), seqno, amount: BigInt(common_fixtures_1.transaction.amount.toString()), bounce: false, timeout: (0, utils_1.getTransferExpirationTime)(), sendMode: 3, }); }); test("Build TON transaction when useAllAmount is true and there is a comment", () => { const transaction = { ...common_fixtures_1.transaction, comment: { text: "valid comment", isEncrypted: false }, useAllAmount: true, }; const tonTransaction = (0, utils_1.buildTonTransaction)(transaction, seqno, common_fixtures_1.account); // Convert the Address to string to compare expect({ ...tonTransaction, to: tonTransaction.to.toString() }).toEqual({ to: core_1.Address.parse(transaction.recipient).toString(), seqno, amount: BigInt(0), bounce: false, timeout: (0, utils_1.getTransferExpirationTime)(), sendMode: 128, payload: { type: "comment", text: transaction.comment.text }, }); }); test("Build jetton transaction with an specific amount", () => { const jettonTransfer = (0, utils_1.buildTonTransaction)(common_fixtures_1.jettonTransaction, seqno, common_fixtures_1.account); // Convert the Addresses to string to compare expect({ ...jettonTransfer, to: jettonTransfer.to.toString(), payload: undefined, }).toStrictEqual({ to: core_1.Address.parse(common_fixtures_1.account.subAccounts?.[0].token.contractAddress ?? "").toString(), seqno, amount: (0, core_1.toNano)(constants_1.TOKEN_TRANSFER_MAX_FEE), bounce: true, timeout: (0, utils_1.getTransferExpirationTime)(), sendMode: 3, payload: undefined, }); expect(jettonTransfer.payload?.type).toStrictEqual("jetton-transfer"); expect({ ...jettonTransfer.payload, destination: jettonTransfer.payload.destination.toString(), responseDestination: jettonTransfer.payload.responseDestination.toString(), queryId: jettonTransfer.payload.queryId?.toString(), amount: jettonTransfer.payload.amount.toString(), forwardAmount: jettonTransfer.payload.forwardAmount.toString(), }).toStrictEqual({ type: "jetton-transfer", queryId: constants_1.TOKEN_TRANSFER_QUERY_ID.toString(), amount: common_fixtures_1.jettonTransaction.amount.toFixed(), destination: core_1.Address.parse(common_fixtures_1.jettonTransaction.recipient).toString(), responseDestination: core_1.Address.parse(common_fixtures_1.account.freshAddress).toString(), customPayload: null, forwardAmount: constants_1.TOKEN_TRANSFER_FORWARD_AMOUNT.toString(), forwardPayload: null, }); }); }); //# sourceMappingURL=utils.unit.test.js.map