From 0c6caa8584e55924fd608f875917b3a550442909 Mon Sep 17 00:00:00 2001 From: Raphael Panic Date: Wed, 25 Feb 2026 13:12:19 -0300 Subject: [PATCH] Switched from mina-fungible-token to fungible-token-contract --- package-lock.json | 29 ++++++----- packages/cli/package.json | 2 +- packages/cli/src/scripts/bridge/deposit.ts | 4 +- packages/cli/src/scripts/bridge/redeem.ts | 4 +- .../src/scripts/settlement/deploy-token.ts | 27 +++++----- packages/cli/src/utils/pathResolver.ts | 1 + packages/sequencer/package.json | 2 +- packages/sequencer/src/index.ts | 1 - .../src/settlement/BridgingModule.ts | 8 +-- .../utils/FungibleTokenAdminContractModule.ts | 25 --------- .../utils/FungibleTokenContractModule.ts | 2 +- .../Settlement-devnet.test.ts | 2 +- .../Settlement-lightnet.test.ts | 2 +- .../Settlement-lightnet-worker.test.ts | 2 +- .../test-proven/Settlement-proven.test.ts | 2 +- .../test/settlement/Settlement.test.ts | 2 +- .../sequencer/test/settlement/Settlement.ts | 51 +++++++------------ packages/stack/package.json | 2 +- packages/stack/src/presets/modules/utils.ts | 2 +- 19 files changed, 67 insertions(+), 103 deletions(-) delete mode 100644 packages/sequencer/src/settlement/utils/FungibleTokenAdminContractModule.ts diff --git a/package-lock.json b/package-lock.json index 293d11c10..f98ff63eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13817,6 +13817,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fungible-token-contract": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/fungible-token-contract/-/fungible-token-contract-0.0.1.tgz", + "integrity": "sha512-5d8IDCGaOlmBpu7rnt1677dkvYnHnfzzyn5sKIrM9qGf+LfAgQbnTtSSMzhBj1WVZshIVzQ81c655aKdYFV7eQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.14.0" + }, + "peerDependencies": { + "o1js": "^2.4.*" + } + }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -21577,17 +21589,6 @@ "node": ">=4" } }, - "node_modules/mina-fungible-token": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mina-fungible-token/-/mina-fungible-token-1.1.0.tgz", - "integrity": "sha512-nfpKQuo49KBUkTFQjE+H47sXs2SzzAs484S6IXwSX38JX+VJKSEihuMv08Mi+x8cVjJ2hVsPlsvRcApIUI1lug==", - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "o1js": "^2.1.0" - } - }, "node_modules/minimatch": { "version": "9.0.5", "license": "ISC", @@ -30087,9 +30088,9 @@ "dependencies": { "@inquirer/figures": "^2.0.3", "dotenv": "^17.2.3", + "fungible-token-contract": "^0.0.1", "inquirer": "^9.3.0", "kleur": "^4.1.5", - "mina-fungible-token": "^1.1.0", "reflect-metadata": "^0.1.13", "spectaql": "3.0.5", "ts-node": "^10.9.1", @@ -30563,8 +30564,8 @@ "dependencies": { "ascii-table3": "^0.9.0", "compute-gcd": "^1.2.1", + "fungible-token-contract": "^0.0.1", "lodash-es": "^4.17.21", - "mina-fungible-token": "^1.1.0", "reflect-metadata": "^0.1.13", "ts-pattern": "^4.3.0" }, @@ -30610,7 +30611,7 @@ "license": "MIT", "dependencies": { "@prisma/client": "^5.19.1", - "mina-fungible-token": "^1.1.0", + "fungible-token-contract": "^0.0.1", "reflect-metadata": "^0.1.13", "type-graphql": "2.0.0-rc.2" }, diff --git a/packages/cli/package.json b/packages/cli/package.json index 53883f444..3826e9a96 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -25,7 +25,7 @@ "dotenv": "^17.2.3", "inquirer": "^9.3.0", "kleur": "^4.1.5", - "mina-fungible-token": "^1.1.0", + "fungible-token-contract": "^0.0.1", "reflect-metadata": "^0.1.13", "spectaql": "3.0.5", "ts-node": "^10.9.1", diff --git a/packages/cli/src/scripts/bridge/deposit.ts b/packages/cli/src/scripts/bridge/deposit.ts index cd81cf41a..4f6fb8492 100644 --- a/packages/cli/src/scripts/bridge/deposit.ts +++ b/packages/cli/src/scripts/bridge/deposit.ts @@ -45,7 +45,7 @@ export default async function ( PublicKey, UInt64, } = await import("o1js"); - const { FungibleToken } = await import("mina-fungible-token"); + const { FungibleToken } = await import("fungible-token-contract"); const { runtime, protocol } = await loadUserModules(); const tokenId = Field(bridgeArgs.tokenId); @@ -157,7 +157,7 @@ export default async function ( if (isCustomToken) { await new FungibleToken( tokenOwnerPrivateKey.toPublicKey() - )!.approveAccountUpdates([au, dispatch.self]); + )!.approveAccountUpdatesCustom([au, dispatch.self]); } } ); diff --git a/packages/cli/src/scripts/bridge/redeem.ts b/packages/cli/src/scripts/bridge/redeem.ts index 3c8821579..d57bf9e8f 100644 --- a/packages/cli/src/scripts/bridge/redeem.ts +++ b/packages/cli/src/scripts/bridge/redeem.ts @@ -38,7 +38,7 @@ export default async function ( Provable, UInt64, } = await import("o1js"); - const { FungibleToken } = await import("mina-fungible-token"); + const { FungibleToken } = await import("fungible-token-contract"); const { DefaultConfigs, DefaultModules } = await import("@proto-kit/stack"); const { runtime, protocol } = await loadUserModules(); const tokenId = Field(bridgeArgs.tokenId); @@ -121,7 +121,7 @@ export default async function ( if (isCustomToken) { await new FungibleToken( tokenOwnerPrivateKey.toPublicKey() - )!.approveAccountUpdate(bridgeContract.self); + )!.approveAccountUpdateCustom(bridgeContract.self); } } ); diff --git a/packages/cli/src/scripts/settlement/deploy-token.ts b/packages/cli/src/scripts/settlement/deploy-token.ts index a19d681fa..088d878a1 100644 --- a/packages/cli/src/scripts/settlement/deploy-token.ts +++ b/packages/cli/src/scripts/settlement/deploy-token.ts @@ -37,7 +37,6 @@ export default async function ( } = await import("@proto-kit/sequencer"); const { AccountUpdate, - Bool, fetchAccount, Mina, PrivateKey, @@ -46,10 +45,14 @@ export default async function ( UInt64, UInt8, } = await import("o1js"); - const { FungibleToken, FungibleTokenAdmin } = await import( - "mina-fungible-token" - ); + const { FungibleToken } = await import("fungible-token-contract"); const { DefaultConfigs, DefaultModules } = await import("@proto-kit/stack"); + const { + BurnDynamicProofConfig, + MintDynamicProofConfig, + TransferDynamicProofConfig, + UpdatesDynamicProofConfig, + } = await import("fungible-token-contract"); const { runtime, protocol } = await loadUserModules(); const appChain = AppChain.from({ @@ -137,12 +140,6 @@ export default async function ( async () => { AccountUpdate.fundNewAccount(feepayerPrivateKey.toPublicKey(), 3); - const admin = new FungibleTokenAdmin(tokenAdminKey.toPublicKey()); - await admin.deploy({ - adminPublicKey: feepayerPrivateKey.toPublicKey(), - }); - admin.self.account.permissions.set(permissions.bridgeContractToken()); - const fungibleToken = new FungibleToken(tokenOwnerKey.toPublicKey()); await fungibleToken.deploy({ src: "", @@ -153,10 +150,14 @@ export default async function ( permissions.bridgeContractToken() ); - await fungibleToken.initialize( - tokenAdminKey.toPublicKey(), + await fungibleToken!.initialize( + // TODO Add specific, different key for this + feepayerPrivateKey.toPublicKey(), UInt8.from(9), - Bool(false) + MintDynamicProofConfig.default, + BurnDynamicProofConfig.default, + TransferDynamicProofConfig.default, + UpdatesDynamicProofConfig.default ); } ); diff --git a/packages/cli/src/utils/pathResolver.ts b/packages/cli/src/utils/pathResolver.ts index d5ffea04a..d76d950a4 100644 --- a/packages/cli/src/utils/pathResolver.ts +++ b/packages/cli/src/utils/pathResolver.ts @@ -3,6 +3,7 @@ import fs from "fs"; export function resolveChainPath(isFolderRequired?: boolean): string { let currentDir = process.cwd(); + // eslint-disable-next-line no-constant-condition while (true) { const candidate = path.join(currentDir, "packages", "chain"); diff --git a/packages/sequencer/package.json b/packages/sequencer/package.json index 421370c2d..619bdda47 100644 --- a/packages/sequencer/package.json +++ b/packages/sequencer/package.json @@ -36,7 +36,7 @@ "ascii-table3": "^0.9.0", "compute-gcd": "^1.2.1", "lodash-es": "^4.17.21", - "mina-fungible-token": "^1.1.0", + "fungible-token-contract": "^0.0.1", "reflect-metadata": "^0.1.13", "ts-pattern": "^4.3.0" }, diff --git a/packages/sequencer/src/index.ts b/packages/sequencer/src/index.ts index 7da10194e..2114bd85f 100644 --- a/packages/sequencer/src/index.ts +++ b/packages/sequencer/src/index.ts @@ -118,7 +118,6 @@ export * from "./settlement/transactions/MinaSimulationService"; export * from "./settlement/utils/ArchiveNode"; export * from "./settlement/utils/SettlementUtils"; export * from "./settlement/utils/FungibleTokenContractModule"; -export * from "./settlement/utils/FungibleTokenAdminContractModule"; export * from "./logging/Tracer"; export * from "./logging/trace"; export * from "./logging/ConsoleTracingFactory"; diff --git a/packages/sequencer/src/settlement/BridgingModule.ts b/packages/sequencer/src/settlement/BridgingModule.ts index 79133bc73..e25e79771 100644 --- a/packages/sequencer/src/settlement/BridgingModule.ts +++ b/packages/sequencer/src/settlement/BridgingModule.ts @@ -44,7 +44,7 @@ import { reduceSequential, } from "@proto-kit/common"; import { match, Pattern } from "ts-pattern"; -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; // eslint-disable-next-line import/no-extraneous-dependencies import groupBy from "lodash/groupBy"; // eslint-disable-next-line import/no-extraneous-dependencies @@ -230,7 +230,7 @@ export class BridgingModule extends SequencerModule { * @param options */ public async deployTokenBridge( - owner: TokenContract | undefined, + owner: FungibleToken | undefined, contractKey: PublicKey, options: { nonce?: number; @@ -258,7 +258,7 @@ export class BridgingModule extends SequencerModule { await settlementContract.addTokenBridge(tokenId, contractKey); if (owner !== undefined) { - await owner.approveAccountUpdate(settlementContract.self); + await owner.approveAccountUpdateCustom(settlementContract.self); } } ); @@ -399,7 +399,7 @@ export class BridgingModule extends SequencerModule { }) => { return this.sendRollupTransactionsBase( async (au: AccountUpdate) => { - await tokenOwner.approveAccountUpdate(au); + await tokenOwner.approveAccountUpdateCustom(au); }, tokenOwner.deriveTokenId(), events, diff --git a/packages/sequencer/src/settlement/utils/FungibleTokenAdminContractModule.ts b/packages/sequencer/src/settlement/utils/FungibleTokenAdminContractModule.ts deleted file mode 100644 index 5a2c0332f..000000000 --- a/packages/sequencer/src/settlement/utils/FungibleTokenAdminContractModule.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { injectable } from "tsyringe"; -import { - ContractModule, - SmartContractClassFromInterface, -} from "@proto-kit/protocol"; -import { FungibleTokenAdmin } from "mina-fungible-token"; -import { CompileArtifact, CompileRegistry } from "@proto-kit/common"; - -@injectable() -export class FungibleTokenAdminContractModule extends ContractModule { - public contractFactory(): SmartContractClassFromInterface { - return FungibleTokenAdmin; - } - - public async compile( - registry: CompileRegistry - ): Promise> { - const vk = await registry.proverNeeded( - async (reg) => await reg.compile(FungibleTokenAdmin) - ); - return { - FungibleTokenAdmin: vk, - }; - } -} diff --git a/packages/sequencer/src/settlement/utils/FungibleTokenContractModule.ts b/packages/sequencer/src/settlement/utils/FungibleTokenContractModule.ts index 0dfd8b23f..a6b0b3973 100644 --- a/packages/sequencer/src/settlement/utils/FungibleTokenContractModule.ts +++ b/packages/sequencer/src/settlement/utils/FungibleTokenContractModule.ts @@ -3,8 +3,8 @@ import { ContractModule, SmartContractClassFromInterface, } from "@proto-kit/protocol"; -import { FungibleToken } from "mina-fungible-token"; import { CompileArtifact, CompileRegistry } from "@proto-kit/common"; +import { FungibleToken } from "fungible-token-contract"; @injectable() export class FungibleTokenContractModule extends ContractModule { diff --git a/packages/sequencer/test-integration/Settlement-devnet.test.ts b/packages/sequencer/test-integration/Settlement-devnet.test.ts index b9aa19891..8639f846f 100644 --- a/packages/sequencer/test-integration/Settlement-devnet.test.ts +++ b/packages/sequencer/test-integration/Settlement-devnet.test.ts @@ -1,5 +1,5 @@ import { describe } from "@jest/globals"; -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; import { PrivateKey } from "o1js"; import { settlementTestFn } from "../test/settlement/Settlement"; diff --git a/packages/sequencer/test-integration/Settlement-lightnet.test.ts b/packages/sequencer/test-integration/Settlement-lightnet.test.ts index f63d2c533..e005e8922 100644 --- a/packages/sequencer/test-integration/Settlement-lightnet.test.ts +++ b/packages/sequencer/test-integration/Settlement-lightnet.test.ts @@ -1,6 +1,6 @@ import { PrivateKey } from "o1js"; import { log } from "@proto-kit/common"; -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; import { settlementTestFn } from "../test/settlement/Settlement"; diff --git a/packages/sequencer/test-proven/Settlement-lightnet-worker.test.ts b/packages/sequencer/test-proven/Settlement-lightnet-worker.test.ts index 124ba9061..6fe2c2076 100644 --- a/packages/sequencer/test-proven/Settlement-lightnet-worker.test.ts +++ b/packages/sequencer/test-proven/Settlement-lightnet-worker.test.ts @@ -1,5 +1,5 @@ import { log } from "@proto-kit/common"; -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; import { BullQueueConfig } from "@proto-kit/deployment"; import { afterAll, beforeAll } from "@jest/globals"; diff --git a/packages/sequencer/test-proven/Settlement-proven.test.ts b/packages/sequencer/test-proven/Settlement-proven.test.ts index 44eba5a51..1ce50ea24 100644 --- a/packages/sequencer/test-proven/Settlement-proven.test.ts +++ b/packages/sequencer/test-proven/Settlement-proven.test.ts @@ -1,4 +1,4 @@ -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; import { MinaBaseLayerConfig } from "../src"; import { settlementTestFn } from "../test/settlement/Settlement"; diff --git a/packages/sequencer/test/settlement/Settlement.test.ts b/packages/sequencer/test/settlement/Settlement.test.ts index b1aa7044a..358381c49 100644 --- a/packages/sequencer/test/settlement/Settlement.test.ts +++ b/packages/sequencer/test/settlement/Settlement.test.ts @@ -1,4 +1,4 @@ -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; import { MinaBaseLayerConfig } from "../../src"; diff --git a/packages/sequencer/test/settlement/Settlement.ts b/packages/sequencer/test/settlement/Settlement.ts index 40adaf414..4240df6a6 100644 --- a/packages/sequencer/test/settlement/Settlement.ts +++ b/packages/sequencer/test/settlement/Settlement.ts @@ -35,12 +35,17 @@ import { TokenId, SmartContract, UInt8, - Bool, PublicKey, } from "o1js"; import "reflect-metadata"; import { container } from "tsyringe"; -import { FungibleToken, FungibleTokenAdmin } from "mina-fungible-token"; +import { + BurnDynamicProofConfig, + FungibleToken, + MintDynamicProofConfig, + TransferDynamicProofConfig, + UpdatesDynamicProofConfig, +} from "fungible-token-contract"; import { BullQueue, BullQueueConfig } from "@proto-kit/deployment"; import { @@ -71,7 +76,6 @@ import { createTransaction } from "../integration/utils"; import { FeeStrategy } from "../../src/protocol/baselayer/fees/FeeStrategy"; import { BridgingModule } from "../../src/settlement/BridgingModule"; import { FungibleTokenContractModule } from "../../src/settlement/utils/FungibleTokenContractModule"; -import { FungibleTokenAdminContractModule } from "../../src/settlement/utils/FungibleTokenAdminContractModule"; import { MinaNetworkUtils } from "../../src/protocol/baselayer/network-utils/MinaNetworkUtils"; import { Balances, BalancesKey } from "./mocks/Balances"; @@ -94,7 +98,6 @@ export const protocolModules = { SettlementContractModule: SettlementContractModule.from({ ...SettlementContractModule.settlementAndBridging(), FungibleToken: FungibleTokenContractModule, - FungibleTokenAdmin: FungibleTokenAdminContractModule, }), WithdrawalMessageProcessor, }; @@ -110,7 +113,6 @@ export const protocolModulesConfig = { }, }, FungibleToken: {}, - FungibleTokenAdmin: {}, }, WithdrawalMessageProcessor: {}, } satisfies ModulesConfig; @@ -136,12 +138,10 @@ export const settlementTestFn = ( tokenConfig === undefined ? minaBridgeKey : PrivateKey.random(); const tokenOwnerKey = { tokenOwner: PrivateKey.random(), - admin: PrivateKey.random(), }; const tokenOwnerPubKeys = { tokenOwner: tokenOwnerKey.tokenOwner.toPublicKey(), - admin: tokenOwnerKey.admin.toPublicKey(), }; const tokenOwner = @@ -222,11 +222,7 @@ export const settlementTestFn = ( SettlementSigner: { feepayer: sequencerKey, contractKeys: [settlementKey, dispatchKey, minaBridgeKey], - tokenBridgeKeys: [ - tokenBridgeKey, - tokenOwnerKey.tokenOwner, - tokenOwnerKey.admin, - ], + tokenBridgeKeys: [tokenBridgeKey, tokenOwnerKey.tokenOwner], }, BlockProducerModule: {}, FeeStrategy: {}, @@ -433,17 +429,6 @@ export const settlementTestFn = ( async () => { AccountUpdate.fundNewAccount(sequencerKey.toPublicKey(), 3); - const admin = new FungibleTokenAdmin( - tokenOwnerKey.admin.toPublicKey() - ); - await admin.deploy({ - verificationKey: undefined, - adminPublicKey: sequencerKey.toPublicKey(), - }); - admin.self.account.permissions.set( - permissions.bridgeContractToken() - ); - await tokenOwner!.deploy({ src: "", symbol: "TEST", @@ -454,9 +439,12 @@ export const settlementTestFn = ( ); await tokenOwner!.initialize( - tokenOwnerKey.admin.toPublicKey(), + sequencerKey.toPublicKey(), UInt8.from(9), - Bool(false) + MintDynamicProofConfig.default, + BurnDynamicProofConfig.default, + TransferDynamicProofConfig.default, + UpdatesDynamicProofConfig.default ); } ); @@ -465,7 +453,6 @@ export const settlementTestFn = ( settlementModule.utils.signTransaction(tx, { signingWithSignatureCheck: [ tokenOwnerPubKeys.tokenOwner, - tokenOwnerPubKeys.admin, settlementModule.getSettlementContractAddress(), bridgingModule.getDispatchContractAddress(), ], @@ -510,10 +497,7 @@ export const settlementTestFn = ( } ); settlementModule.utils.signTransaction(tx, { - signingWithSignatureCheck: [ - tokenOwnerPubKeys.tokenOwner, - tokenOwnerPubKeys.admin, - ], + signingWithSignatureCheck: [tokenOwnerPubKeys.tokenOwner], }); await appChain.sequencer @@ -638,7 +622,10 @@ export const settlementTestFn = ( ); if (tokenConfig !== undefined) { - await tokenOwner!.approveAccountUpdates([au, dispatch.self]); + await tokenOwner!.approveAccountUpdatesCustom([ + au, + dispatch.self, + ]); } } ); @@ -832,7 +819,7 @@ export const settlementTestFn = ( // Approve AUs if necessary if (tokenConfig !== undefined) { - await tokenOwner!.approveAccountUpdate(bridgingContract.self); + await tokenOwner!.approveAccountUpdateCustom(bridgingContract.self); } } ); diff --git a/packages/stack/package.json b/packages/stack/package.json index 822633680..f2202f42b 100644 --- a/packages/stack/package.json +++ b/packages/stack/package.json @@ -41,7 +41,7 @@ }, "dependencies": { "@prisma/client": "^5.19.1", - "mina-fungible-token": "^1.1.0", + "fungible-token-contract": "^0.0.1", "reflect-metadata": "^0.1.13", "type-graphql": "2.0.0-rc.2" }, diff --git a/packages/stack/src/presets/modules/utils.ts b/packages/stack/src/presets/modules/utils.ts index 4edf31e9c..c95ee359c 100644 --- a/packages/stack/src/presets/modules/utils.ts +++ b/packages/stack/src/presets/modules/utils.ts @@ -1,5 +1,5 @@ import { PrivateKey, TokenId } from "o1js"; -import { FungibleToken } from "mina-fungible-token"; +import { FungibleToken } from "fungible-token-contract"; import { SettlementTokenConfig } from "@proto-kit/sequencer"; import { developmentConfig, inmemoryConfig, sovereignConfig } from "../config";