diff --git a/packages/cli/bin/protokit-cli.js b/packages/cli/bin/protokit-cli.js index 491248f9..431331fa 100755 --- a/packages/cli/bin/protokit-cli.js +++ b/packages/cli/bin/protokit-cli.js @@ -4,7 +4,6 @@ import path from "path"; import { fileURLToPath } from "url"; import { createRequire } from "module"; import fs from "fs"; -import process from "process"; const require = createRequire(import.meta.url); const __filename = fileURLToPath(import.meta.url); @@ -33,6 +32,9 @@ const args = process.argv.slice(2); if (!process.env.TS_NODE_LOADER_ACTIVE) { const env = { ...process.env }; env.TS_NODE_LOADER_ACTIVE = "1"; + env.TS_NODE_TRANSPILE_ONLY = "true"; + env.TS_NODE_SKIP_PROJECT = "false"; + env.TS_NODE_PREFER_TS_EXTS = "true"; // Configure ts-node for proper ESM/CJS interop env.TS_NODE_ESMODULEINTEROP = "true"; @@ -47,7 +49,8 @@ if (!process.env.TS_NODE_LOADER_ACTIVE) { target: "ES2020", experimentalDecorators: true, emitDecoratorMetadata: true, - strictNullChecks: true, + strictNullChecks: false, + noEmit: true, }); const tsNodeEsm = resolveTsNodeEsm(); diff --git a/packages/cli/src/scripts/bridge/deposit.ts b/packages/cli/src/scripts/bridge/deposit.ts index b85d2044..503edae9 100644 --- a/packages/cli/src/scripts/bridge/deposit.ts +++ b/packages/cli/src/scripts/bridge/deposit.ts @@ -1,27 +1,6 @@ /* eslint-disable no-console */ /* eslint-disable func-names */ - -import { - BridgingModule, - MinaTransactionSender, - Sequencer, - SettlementModule, - AppChain, -} from "@proto-kit/sequencer"; -import { Runtime } from "@proto-kit/module"; -import { DispatchSmartContract, Protocol } from "@proto-kit/protocol"; -import { DefaultConfigs, DefaultModules } from "@proto-kit/stack"; -import { - AccountUpdate, - fetchAccount, - Field, - Mina, - PrivateKey, - Provable, - PublicKey, - UInt64, -} from "o1js"; -import { FungibleToken } from "mina-fungible-token"; +import { DispatchSmartContract } from "@proto-kit/protocol"; import { loadEnvironmentVariables, @@ -46,8 +25,30 @@ export default async function ( "Bridge deposit arguments required: tokenId, fromKey, toKey, amount" ); } - loadEnvironmentVariables(options); + + const { + BridgingModule, + MinaTransactionSender, + Sequencer, + SettlementModule, + AppChain, + } = await import("@proto-kit/sequencer"); + const { Runtime } = await import("@proto-kit/module"); + const { Protocol } = await import("@proto-kit/protocol"); + const { DefaultConfigs, DefaultModules } = await import("@proto-kit/stack"); + const { + AccountUpdate, + fetchAccount, + Field, + Mina, + PrivateKey, + Provable, + PublicKey, + UInt64, + } = await import("o1js"); + const { FungibleToken } = await import("mina-fungible-token"); + const { runtime, protocol } = await loadUserModules(); const tokenId = Field(bridgeArgs.tokenId); const fromPrivateKey = PrivateKey.fromBase58( diff --git a/packages/cli/src/scripts/bridge/redeem.ts b/packages/cli/src/scripts/bridge/redeem.ts index 99a94f5a..898d98a3 100644 --- a/packages/cli/src/scripts/bridge/redeem.ts +++ b/packages/cli/src/scripts/bridge/redeem.ts @@ -1,26 +1,5 @@ /* eslint-disable no-console */ /* eslint-disable func-names */ -import { - BridgingModule, - MinaTransactionSender, - Sequencer, - SettlementModule, - AppChain, -} from "@proto-kit/sequencer"; -import { Runtime } from "@proto-kit/module"; -import { Protocol } from "@proto-kit/protocol"; -import { - AccountUpdate, - fetchAccount, - Field, - Mina, - PrivateKey, - Provable, - UInt64, -} from "o1js"; -import { FungibleToken } from "mina-fungible-token"; -import { DefaultConfigs, DefaultModules } from "@proto-kit/stack"; - import { loadEnvironmentVariables, getRequiredEnv, @@ -41,8 +20,28 @@ export default async function ( if (!bridgeArgs) { throw new Error("Bridge redeem arguments required: tokenId, toKey, amount"); } - loadEnvironmentVariables(options); + + const { + BridgingModule, + MinaTransactionSender, + Sequencer, + SettlementModule, + AppChain, + } = await import("@proto-kit/sequencer"); + const { Runtime } = await import("@proto-kit/module"); + const { Protocol } = await import("@proto-kit/protocol"); + const { + AccountUpdate, + fetchAccount, + Field, + Mina, + PrivateKey, + Provable, + UInt64, + } = await import("o1js"); + const { FungibleToken } = await import("mina-fungible-token"); + const { DefaultConfigs, DefaultModules } = await import("@proto-kit/stack"); const { runtime, protocol } = await loadUserModules(); const tokenId = Field(bridgeArgs.tokenId); const toPrivateKey = PrivateKey.fromBase58( diff --git a/packages/cli/src/scripts/bridge/withdraw.ts b/packages/cli/src/scripts/bridge/withdraw.ts index 9c78471e..4a3677bd 100644 --- a/packages/cli/src/scripts/bridge/withdraw.ts +++ b/packages/cli/src/scripts/bridge/withdraw.ts @@ -1,11 +1,5 @@ /* eslint-disable no-console */ /* eslint-disable func-names */ -import { ClientAppChain, InMemorySigner } from "@proto-kit/sdk"; -import { Field, PrivateKey, Provable } from "o1js"; -import { UInt64 } from "@proto-kit/library"; -import { Runtime } from "@proto-kit/module"; -import { Protocol } from "@proto-kit/protocol"; - import { loadEnvironmentVariables, LoadEnvOptions } from "../../utils/loadEnv"; import { loadUserModules } from "../../utils/loadUserModules"; @@ -24,8 +18,14 @@ export default async function ( "Bridge withdraw arguments required: tokenId, senderKey, amount" ); } - loadEnvironmentVariables(options); + + const { ClientAppChain, InMemorySigner } = await import("@proto-kit/sdk"); + const { Field, PrivateKey, Provable } = await import("o1js"); + const { UInt64 } = await import("@proto-kit/library"); + const { Runtime } = await import("@proto-kit/module"); + const { Protocol } = await import("@proto-kit/protocol"); + const { runtime, protocol } = await loadUserModules(); const tokenId = Field(bridgeArgs.tokenId); const amount = UInt64.from(bridgeArgs.amount * 1e9); diff --git a/packages/cli/src/scripts/graphqlDocs/generateGqlDocs.ts b/packages/cli/src/scripts/graphqlDocs/generateGqlDocs.ts index b24b5940..13d19f1a 100644 --- a/packages/cli/src/scripts/graphqlDocs/generateGqlDocs.ts +++ b/packages/cli/src/scripts/graphqlDocs/generateGqlDocs.ts @@ -1,27 +1,4 @@ /* eslint-disable no-console */ -import { - BlockStorageNetworkStateModule, - InMemoryTransactionSender, - StateServiceQueryModule, -} from "@proto-kit/sdk"; -import { Protocol } from "@proto-kit/protocol"; -import { - AppChain, - Sequencer, - VanillaTaskWorkerModules, -} from "@proto-kit/sequencer"; -import { - InMemorySequencerModules, - VanillaProtocolModules, - VanillaRuntimeModules, -} from "@proto-kit/library"; -import { - GraphqlSequencerModule, - GraphqlServer, - VanillaGraphqlModules, -} from "@proto-kit/api"; -import { Runtime } from "@proto-kit/module"; - import { generateGqlDocs } from "../../utils/graphqlDocs"; export default async function (args: { @@ -30,6 +7,23 @@ export default async function (args: { url: string; }) { if (args.empty) { + const { + BlockStorageNetworkStateModule, + InMemoryTransactionSender, + StateServiceQueryModule, + } = await import("@proto-kit/sdk"); + const { Protocol } = await import("@proto-kit/protocol"); + const { AppChain, Sequencer, VanillaTaskWorkerModules } = await import( + "@proto-kit/sequencer" + ); + const { + InMemorySequencerModules, + VanillaProtocolModules, + VanillaRuntimeModules, + } = await import("@proto-kit/library"); + const { GraphqlSequencerModule, GraphqlServer, VanillaGraphqlModules } = + await import("@proto-kit/api"); + const { Runtime } = await import("@proto-kit/module"); const { port } = args; console.log(`Starting AppChain on port ${port}...`); diff --git a/packages/cli/src/scripts/lightnet/faucet.ts b/packages/cli/src/scripts/lightnet/faucet.ts index b3af98c6..f53b0e62 100644 --- a/packages/cli/src/scripts/lightnet/faucet.ts +++ b/packages/cli/src/scripts/lightnet/faucet.ts @@ -1,17 +1,11 @@ /* eslint-disable func-names */ -import { - AccountUpdate, - fetchAccount, - Lightnet, - Mina, - Provable, - PublicKey, -} from "o1js"; import "reflect-metadata"; import { getRequiredEnv } from "../../utils/loadEnv"; export default async function (publicKey: string) { + const { AccountUpdate, fetchAccount, Lightnet, Mina, Provable, PublicKey } = + await import("o1js"); // configuration const fee = 0.1 * 1e9; const fundingAmount = 1000 * 1e9; diff --git a/packages/cli/src/scripts/lightnet/lightnetInitialize.ts b/packages/cli/src/scripts/lightnet/lightnetInitialize.ts index 87fb6e68..d3dd1937 100644 --- a/packages/cli/src/scripts/lightnet/lightnetInitialize.ts +++ b/packages/cli/src/scripts/lightnet/lightnetInitialize.ts @@ -5,14 +5,16 @@ import { getRequiredEnv, loadEnvironmentVariables, } from "../../utils/loadEnv"; -import settlementDeployScript from "../settlement/deploy"; - -import lightnetWaitForNetworkScript from "./wait-for-network"; -import lightnetFaucetScript from "./faucet"; export default async function (options: LoadEnvOptions) { loadEnvironmentVariables(options); - + const { default: lightnetWaitForNetworkScript } = await import( + "./wait-for-network" + ); + const { default: lightnetFaucetScript } = await import("./faucet"); + const { default: settlementDeployScript } = await import( + "../settlement/deploy" + ); console.log("Step 1: Waiting for network to be ready..."); await lightnetWaitForNetworkScript(options); diff --git a/packages/cli/src/scripts/lightnet/wait-for-network.ts b/packages/cli/src/scripts/lightnet/wait-for-network.ts index 2612ce33..63fdcdf8 100644 --- a/packages/cli/src/scripts/lightnet/wait-for-network.ts +++ b/packages/cli/src/scripts/lightnet/wait-for-network.ts @@ -1,18 +1,17 @@ /* eslint-disable no-console */ /* eslint-disable func-names */ -import { sleep } from "@proto-kit/common"; -import { fetchLastBlock, Provable } from "o1js"; -import { - loadEnvironmentVariables, - getRequiredEnv, - LoadEnvOptions, -} from "../../utils/loadEnv"; +import { LoadEnvOptions } from "../../utils/loadEnv"; const maxAttempts = 24; const delay = 5000; export default async function (options: LoadEnvOptions) { + const { loadEnvironmentVariables, getRequiredEnv } = await import( + "../../utils/loadEnv" + ); + const { sleep } = await import("@proto-kit/common"); + const { fetchLastBlock, Provable } = await import("o1js"); loadEnvironmentVariables(options); const graphqlEndpoint = `${getRequiredEnv("MINA_NODE_GRAPHQL_HOST")}:${getRequiredEnv("MINA_NODE_GRAPHQL_PORT")}/graphql`; let lastBlock; diff --git a/packages/cli/src/scripts/settlement/deploy-token.ts b/packages/cli/src/scripts/settlement/deploy-token.ts index a71fc1ff..aa087e4e 100644 --- a/packages/cli/src/scripts/settlement/deploy-token.ts +++ b/packages/cli/src/scripts/settlement/deploy-token.ts @@ -1,32 +1,8 @@ /* eslint-disable no-console */ /* eslint-disable func-names */ -import { Runtime } from "@proto-kit/module"; -import { DispatchSmartContract, Protocol } from "@proto-kit/protocol"; -import { - ArchiveNode, - MinaTransactionSender, - ProvenSettlementPermissions, - Sequencer, - SettlementModule, - SignedSettlementPermissions, - AppChain, - BridgingModule, -} from "@proto-kit/sequencer"; -import { - AccountUpdate, - Bool, - fetchAccount, - Mina, - PrivateKey, - Provable, - PublicKey, - UInt64, - UInt8, -} from "o1js"; +import { DispatchSmartContract } from "@proto-kit/protocol"; import "reflect-metadata"; import { container } from "tsyringe"; -import { FungibleToken, FungibleTokenAdmin } from "mina-fungible-token"; -import { DefaultConfigs, DefaultModules } from "@proto-kit/stack"; import { loadEnvironmentVariables, LoadEnvOptions } from "../../utils/loadEnv"; import { loadUserModules } from "../../utils/loadUserModules"; @@ -47,8 +23,36 @@ export default async function ( "Token deployment arguments required: tokenSymbol, feepayerKey, receiverPublicKey, [mintAmount]" ); } - loadEnvironmentVariables(options); + + const { Runtime } = await import("@proto-kit/module"); + const { Protocol } = await import("@proto-kit/protocol"); + const { + ArchiveNode, + MinaTransactionSender, + ProvenSettlementPermissions, + Sequencer, + SettlementModule, + SignedSettlementPermissions, + AppChain, + BridgingModule, + } = await import("@proto-kit/sequencer"); + const { + AccountUpdate, + Bool, + fetchAccount, + Mina, + PrivateKey, + Provable, + PublicKey, + UInt64, + UInt8, + } = await import("o1js"); + const { FungibleToken, FungibleTokenAdmin } = await import( + "mina-fungible-token" + ); + const { DefaultConfigs, DefaultModules } = await import("@proto-kit/stack"); + const { runtime, protocol } = await loadUserModules(); const appChain = AppChain.from({ Runtime: Runtime.from(runtime.modules), diff --git a/packages/cli/src/scripts/settlement/deploy.ts b/packages/cli/src/scripts/settlement/deploy.ts index e939a440..2855d029 100644 --- a/packages/cli/src/scripts/settlement/deploy.ts +++ b/packages/cli/src/scripts/settlement/deploy.ts @@ -1,18 +1,8 @@ /* eslint-disable no-console */ /* eslint-disable func-names */ -import { Runtime } from "@proto-kit/module"; -import { Protocol } from "@proto-kit/protocol"; -import { - InMemoryDatabase, - Sequencer, - SettlementModule, - AppChain, -} from "@proto-kit/sequencer"; -import { Provable, PublicKey } from "o1js"; import "reflect-metadata"; import { container } from "tsyringe"; -import { DefaultConfigs, DefaultModules } from "@proto-kit/stack"; import { loadEnvironmentVariables, @@ -22,6 +12,12 @@ import { import { loadUserModules } from "../../utils/loadUserModules"; export default async function (options: LoadEnvOptions) { + const { Provable, PublicKey } = await import("o1js"); + const { Runtime } = await import("@proto-kit/module"); + const { Protocol } = await import("@proto-kit/protocol"); + const { AppChain, Sequencer, SettlementModule, InMemoryDatabase } = + await import("@proto-kit/sequencer"); + const { DefaultModules, DefaultConfigs } = await import("@proto-kit/stack"); loadEnvironmentVariables(options); const { runtime, protocol } = await loadUserModules(); const appChain = AppChain.from({