UNPKG

@ledgerhq/coin-ton

Version:
211 lines 9.96 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@ton/core"); const config_1 = require("../../config"); const constants_1 = require("../../constants"); const utils_1 = require("../../utils"); const api_fixtures_1 = __importStar(require("../fixtures/api.fixtures")); 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, knownJetton: 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", () => { beforeAll(() => { (0, config_1.setCoinConfig)(() => ({ status: { type: "active", }, infra: { API_TON_ENDPOINT: api_fixtures_1.API_TON_ENDPOINT, KNOWN_JETTONS: [], }, })); api_fixtures_1.default.listen(); }); afterAll(() => { api_fixtures_1.default.close(); }); 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].jettonWallet ?? "").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, knownJetton: null, }); }); }); //# sourceMappingURL=utils.unit.test.js.map