From f5e16004fc394dc2f2106f682cf9390d7a080eaf Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 28 Jan 2026 23:47:14 -0300 Subject: [PATCH 01/23] bump compact version in ci --- .github/actions/setup/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index e7d2229..7b7dd87 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -43,4 +43,4 @@ runs: if: ${{ inputs.skip-compact != 'true' }} uses: midnightntwrk/setup-compact-action@4130145456ad3f45934788dd4a65647eb283e658 # loose commit/not released with: - compact-version: "0.26.0" + compact-version: "0.28.0" From b915666084730ddb51829028230acc89ff0df52b Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:27:52 -0300 Subject: [PATCH 02/23] bump version in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 020b5f5..9304408 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ Confirm your Compact toolchain: ```bash $ compact compile --version -Compactc version: 0.26.0 -0.26.0 +Compactc version: 0.28.0 +0.28.0 ``` ## Getting started From a56b2c65785b66fe81ee41823c96cec0a0014556 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:28:34 -0300 Subject: [PATCH 03/23] remove unused dep --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index e6ae773..e378852 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,6 @@ "types": "turbo run types", "clean": "turbo run clean" }, - "dependencies": { - "@midnight-ntwrk/compact-runtime": "^0.9.0" - }, "devDependencies": { "@biomejs/biome": "2.3.8", "@midnight-ntwrk/ledger": "^4.0.0", From 388168bd9d6de008e67e8b319904368de52131a5 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:29:13 -0300 Subject: [PATCH 04/23] bump version in readme --- packages/cli/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index 9c76f81..a8219c3 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -23,7 +23,7 @@ Verify your Compact installation: ```bash $ compact compile --version -Compactc version: 0.26.0 +Compactc version: 0.28.0 ``` ## Binaries @@ -235,13 +235,13 @@ yarn clean ``` ℹ [COMPILE] Compact compiler started -ℹ [COMPILE] Compact developer tools: compact 0.1.0 -ℹ [COMPILE] Compact toolchain: Compactc version: 0.26.0 +ℹ [COMPILE] Compact developer tools: compact 0.2.0 +ℹ [COMPILE] Compact toolchain: Compactc version: 0.28.0 ℹ [COMPILE] Found 2 .compact file(s) to compile ✔ [COMPILE] [1/2] Compiled AccessControl.compact - Compactc version: 0.26.0 + Compactc version: 0.28.0 ✔ [COMPILE] [2/2] Compiled Token.compact - Compactc version: 0.26.0 + Compactc version: 0.28.0 ``` ## License From 57f7a1035f6c5247807a83604c9312a9ab793dba Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:29:53 -0300 Subject: [PATCH 05/23] update imports in snippets --- packages/simulator/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/simulator/README.md b/packages/simulator/README.md index 43336b6..fcfd3ec 100644 --- a/packages/simulator/README.md +++ b/packages/simulator/README.md @@ -15,7 +15,7 @@ allowing you to simulate contract behavior locally without blockchain deployment ```typescript import { createSimulator } from '@openzeppelin-compact/contracts-simulator'; -import { Contract, ledger } from './artifacts/MyContract/contract/index.cjs'; +import { Contract, ledger } from './artifacts/MyContract/contract/index.js'; // 1. Define your contract arguments type type MyContractArgs = readonly [owner: Uint8Array, value: bigint]; @@ -46,7 +46,7 @@ The base simulator acts as a configuration class that the actual simulator will ```typescript import { createSimulator } from '@openzeppelin-compact/contracts-simulator'; -import { Contract as MyContract, ledger } from './artifacts/MyContract/contract/index.cjs'; +import { Contract as MyContract, ledger } from './artifacts/MyContract/contract/index.js'; import { MyContractWitnesses, MyContractPrivateState } from './MyContractWitnesses.js'; // Define contract constructor arguments as a tuple type From 664f4b1cd89694212f8b70772bc05dcccf014b45 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:30:15 -0300 Subject: [PATCH 06/23] bump compact runtime --- packages/simulator/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/simulator/package.json b/packages/simulator/package.json index 7b2684c..4593355 100644 --- a/packages/simulator/package.json +++ b/packages/simulator/package.json @@ -39,6 +39,6 @@ "vitest": "^4.0.15" }, "dependencies": { - "@midnight-ntwrk/compact-runtime": "^0.9.0" + "@midnight-ntwrk/compact-runtime": "0.14.0-rc.0" } } From 25ea596508424cc12af3f5f4f5878ccba5280f29 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:31:06 -0300 Subject: [PATCH 07/23] update sim src code --- .../simulator/src/core/AbstractSimulator.ts | 10 ++++----- .../src/core/CircuitContextManager.ts | 16 +++++++------- .../simulator/src/core/ContractSimulator.ts | 7 +++++-- .../simulator/src/factory/createSimulator.ts | 10 ++++----- packages/simulator/src/types/Simulator.ts | 6 +++--- .../src/utils/CircuitContextUtils.ts | 21 ++++++++++++------- 6 files changed, 40 insertions(+), 30 deletions(-) diff --git a/packages/simulator/src/core/AbstractSimulator.ts b/packages/simulator/src/core/AbstractSimulator.ts index 7925829..52be1b5 100644 --- a/packages/simulator/src/core/AbstractSimulator.ts +++ b/packages/simulator/src/core/AbstractSimulator.ts @@ -1,7 +1,7 @@ import type { CircuitContext, CoinPublicKey, - ContractState, + StateValue, } from '@midnight-ntwrk/compact-runtime'; import type { ContextlessCircuits, @@ -79,12 +79,12 @@ export abstract class AbstractSimulator } /** - * Retrieves the original contract state from the circuit context. + * Retrieves the current contract state data. * - * @returns The current contract state from the blockchain + * @returns The current state value containing the ledger data */ - public getContractState(): ContractState { - return this.circuitContext.originalState; + public getContractState(): StateValue { + return this.circuitContext.currentQueryContext.state.state; } /** diff --git a/packages/simulator/src/core/CircuitContextManager.ts b/packages/simulator/src/core/CircuitContextManager.ts index 88f832a..9ddb340 100644 --- a/packages/simulator/src/core/CircuitContextManager.ts +++ b/packages/simulator/src/core/CircuitContextManager.ts @@ -4,7 +4,8 @@ import { type ConstructorContext, type ContractAddress, type ContractState, - constructorContext, + CostModel, + createConstructorContext, type EncodedZswapLocalState, QueryContext, } from '@midnight-ntwrk/compact-runtime'; @@ -44,7 +45,7 @@ export class CircuitContextManager

{ contractAddress: ContractAddress, ...contractArgs: any[] ) { - const initCtx = constructorContext(privateState, coinPK); + const initCtx = createConstructorContext(privateState, coinPK); const { currentPrivateState, @@ -52,14 +53,15 @@ export class CircuitContextManager

{ currentZswapLocalState, } = contract.initialState(initCtx, ...contractArgs); + // Extract ChargedState from the compiler-generated ContractState + // The 0.27.0-rc.1 compiler returns`ContractState.data` aka ChargedState + const chargedState = currentContractState.data; + this.context = { currentPrivateState, currentZswapLocalState, - originalState: currentContractState, - transactionContext: new QueryContext( - currentContractState.data, - contractAddress, - ), + currentQueryContext: new QueryContext(chargedState, contractAddress), + costModel: CostModel.initialCostModel(), }; } diff --git a/packages/simulator/src/core/ContractSimulator.ts b/packages/simulator/src/core/ContractSimulator.ts index 0c360b4..c50a516 100644 --- a/packages/simulator/src/core/ContractSimulator.ts +++ b/packages/simulator/src/core/ContractSimulator.ts @@ -35,12 +35,15 @@ export abstract class ContractSimulator extends AbstractSimulator { */ public getCallerContext(): CircuitContext

{ const activeCaller = this.callerOverride || this.persistentCallerOverride; + const baseCtx = this.circuitContext; return { - ...this.circuitContext, + currentPrivateState: baseCtx.currentPrivateState, + currentQueryContext: baseCtx.currentQueryContext, currentZswapLocalState: activeCaller ? emptyZswapLocalState(activeCaller) - : this.circuitContext.currentZswapLocalState, + : baseCtx.currentZswapLocalState, + costModel: baseCtx.costModel, }; } diff --git a/packages/simulator/src/factory/createSimulator.ts b/packages/simulator/src/factory/createSimulator.ts index 662750d..98c83f0 100644 --- a/packages/simulator/src/factory/createSimulator.ts +++ b/packages/simulator/src/factory/createSimulator.ts @@ -1,5 +1,5 @@ import type { WitnessContext } from '@midnight-ntwrk/compact-runtime'; -import { sampleContractAddress } from '@midnight-ntwrk/zswap'; +import { dummyContractAddress } from '@midnight-ntwrk/compact-runtime'; import { CircuitContextManager } from '../core/CircuitContextManager.js'; import { ContractSimulator } from '../core/ContractSimulator.js'; import type { IMinimalContract } from '../types/Contract.js'; @@ -49,7 +49,7 @@ export function createSimulator< privateState = config.defaultPrivateState(), witnesses = config.witnessesFactory(), coinPK = '0'.repeat(64), - contractAddress = sampleContractAddress(), + contractAddress = dummyContractAddress(), } = options; this._witnesses = witnesses; @@ -65,7 +65,7 @@ export function createSimulator< ...processedArgs, ); - this.contractAddress = this.circuitContext.transactionContext.address; + this.contractAddress = this.circuitContext.currentQueryContext.address; } public _pureCircuitProxy?: ContextlessCircuits< @@ -143,7 +143,7 @@ export function createSimulator< */ getPublicState(): L { return config.ledgerExtractor( - this.circuitContext.transactionContext.state, + this.circuitContext.currentQueryContext.state.state, ); } @@ -191,7 +191,7 @@ export function createSimulator< return { ledger: this.getPublicState(), privateState: circuitCtx.currentPrivateState, - contractAddress: circuitCtx.transactionContext.address, + contractAddress: circuitCtx.currentQueryContext.address, }; } }; diff --git a/packages/simulator/src/types/Simulator.ts b/packages/simulator/src/types/Simulator.ts index 5058dd5..9ed0ee6 100644 --- a/packages/simulator/src/types/Simulator.ts +++ b/packages/simulator/src/types/Simulator.ts @@ -1,6 +1,6 @@ import type { CircuitContext, - ContractState, + StateValue, } from '@midnight-ntwrk/compact-runtime'; /** @@ -31,7 +31,7 @@ export interface IContractSimulator { getPrivateState(): P; /** - * Returns the original contract state. + * Returns the current contract state. */ - getContractState(): ContractState; + getContractState(): StateValue; } diff --git a/packages/simulator/src/utils/CircuitContextUtils.ts b/packages/simulator/src/utils/CircuitContextUtils.ts index a121d82..18f0cde 100644 --- a/packages/simulator/src/utils/CircuitContextUtils.ts +++ b/packages/simulator/src/utils/CircuitContextUtils.ts @@ -1,8 +1,9 @@ import { + type ChargedState, type CircuitContext, type CoinPublicKey, type ContractAddress, - type ContractState, + CostModel, emptyZswapLocalState, QueryContext, } from '@midnight-ntwrk/compact-runtime'; @@ -15,22 +16,22 @@ import type { IContractSimulator } from '../types/index.js'; * for executing circuits, including contract state, private state, * sender identity, and transaction data. * @param privateState - The private state data specific to the contract - * @param contractState - The current contract state from the blockchain + * @param chargedState - The charged state (wraps StateValue with cost tracking) * @param sender - The public key of the transaction sender * @param contractAddress - The address of the contract being executed * @returns A complete CircuitContext ready for circuit execution */ export function useCircuitContext

( privateState: P, - contractState: ContractState, + chargedState: ChargedState, sender: CoinPublicKey, contractAddress: ContractAddress, ): CircuitContext

{ return { - originalState: contractState, currentPrivateState: privateState, - transactionContext: new QueryContext(contractState.data, contractAddress), + currentQueryContext: new QueryContext(chargedState, contractAddress), currentZswapLocalState: emptyZswapLocalState(sender), + costModel: CostModel.initialCostModel(), }; } @@ -47,14 +48,18 @@ export function useCircuitContextSender< L, C extends IContractSimulator, >(contract: C, sender: CoinPublicKey): CircuitContext

{ + const currentContext = contract.circuitContext; const currentPrivateState = contract.getPrivateState(); - const originalState = contract.getContractState(); + const existingChargedState = currentContext.currentQueryContext.state; const contractAddress = contract.contractAddress; return { - originalState, currentPrivateState, - transactionContext: new QueryContext(originalState.data, contractAddress), + currentQueryContext: new QueryContext( + existingChargedState, + contractAddress, + ), currentZswapLocalState: emptyZswapLocalState(sender), + costModel: currentContext.costModel, }; } From 3a9cbc8eb5224bf06537c5d2760ea90602c9008e Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:31:33 -0300 Subject: [PATCH 08/23] update tests and imports --- .../sample-contracts/SampleZOwnable.compact | 11 ++++- .../fixtures/sample-contracts/Simple.compact | 7 ++- .../fixtures/sample-contracts/Witness.compact | 7 ++- .../witnesses/SampleZOwnableWitnesses.ts | 2 +- .../witnesses/WitnessWitnesses.ts | 2 +- .../simulator/test/fixtures/utils/address.ts | 2 +- .../test/integration/SampleZOwnable.test.ts | 2 +- .../integration/SampleZOwnableSimulator.ts | 2 +- .../test/integration/SimpleSimulator.ts | 2 +- .../test/integration/WitnessSimulator.ts | 2 +- packages/simulator/test/setup.ts | 2 +- .../test/unit/core/StateManager.test.ts | 44 +++++++++---------- 12 files changed, 47 insertions(+), 38 deletions(-) diff --git a/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact b/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact index 554774b..983f772 100644 --- a/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact +++ b/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact @@ -1,9 +1,16 @@ // Sample contract for testing // DO NOT USE IN PRODUCTION!!! -pragma language_version >= 0.18.0; +pragma language_version >= 0.19.0; -import CompactStandardLibrary; +import { + Either, + Counter, + ZswapCoinPublicKey, + ContractAddress, + persistentHash, + ownPublicKey, +} from CompactStandardLibrary; export { ZswapCoinPublicKey, ContractAddress, Either }; export ledger _ownerCommitment: Bytes<32>; diff --git a/packages/simulator/test/fixtures/sample-contracts/Simple.compact b/packages/simulator/test/fixtures/sample-contracts/Simple.compact index 3ce08c7..c387712 100644 --- a/packages/simulator/test/fixtures/sample-contracts/Simple.compact +++ b/packages/simulator/test/fixtures/sample-contracts/Simple.compact @@ -1,6 +1,9 @@ -pragma language_version >= 0.18.0; +// Sample contract for testing +// DO NOT USE IN PRODUCTION!!! -import CompactStandardLibrary; +pragma language_version >= 0.19.0; + +import { ZswapCoinPublicKey, ContractAddress, Either, Maybe } from CompactStandardLibrary; export { ZswapCoinPublicKey, ContractAddress, Either, Maybe }; export ledger _val: Field; diff --git a/packages/simulator/test/fixtures/sample-contracts/Witness.compact b/packages/simulator/test/fixtures/sample-contracts/Witness.compact index 211edcb..f51b93f 100644 --- a/packages/simulator/test/fixtures/sample-contracts/Witness.compact +++ b/packages/simulator/test/fixtures/sample-contracts/Witness.compact @@ -1,6 +1,9 @@ -pragma language_version >= 0.18.0; +// Sample contract for testing +// DO NOT USE IN PRODUCTION!!! -import CompactStandardLibrary; +pragma language_version >= 0.19.0; + +import { ZswapCoinPublicKey, ContractAddress, Either, Maybe } from CompactStandardLibrary; export { ZswapCoinPublicKey, ContractAddress, Either, Maybe }; export ledger _valBytes: Bytes<32>; diff --git a/packages/simulator/test/fixtures/sample-contracts/witnesses/SampleZOwnableWitnesses.ts b/packages/simulator/test/fixtures/sample-contracts/witnesses/SampleZOwnableWitnesses.ts index a4140ee..464007f 100644 --- a/packages/simulator/test/fixtures/sample-contracts/witnesses/SampleZOwnableWitnesses.ts +++ b/packages/simulator/test/fixtures/sample-contracts/witnesses/SampleZOwnableWitnesses.ts @@ -1,6 +1,6 @@ import { getRandomValues } from 'node:crypto'; import type { WitnessContext } from '@midnight-ntwrk/compact-runtime'; -import type { Ledger } from '../../artifacts/SampleZOwnable/contract/index.cjs'; +import type { Ledger } from '../../artifacts/SampleZOwnable/contract/index.js'; /** * @description Interface defining the witness methods for SampleZOwnable operations. diff --git a/packages/simulator/test/fixtures/sample-contracts/witnesses/WitnessWitnesses.ts b/packages/simulator/test/fixtures/sample-contracts/witnesses/WitnessWitnesses.ts index fa2fc4c..7795cdf 100644 --- a/packages/simulator/test/fixtures/sample-contracts/witnesses/WitnessWitnesses.ts +++ b/packages/simulator/test/fixtures/sample-contracts/witnesses/WitnessWitnesses.ts @@ -1,6 +1,6 @@ import { getRandomValues } from 'node:crypto'; import type { WitnessContext } from '@midnight-ntwrk/compact-runtime'; -import type { Ledger } from '../../artifacts/Witness/contract/index.cjs'; +import type { Ledger } from '../../artifacts/Witness/contract/index.js'; const randomBigInt = (bits: number): bigint => { const bytes = Math.ceil(bits / 8); diff --git a/packages/simulator/test/fixtures/utils/address.ts b/packages/simulator/test/fixtures/utils/address.ts index 2541f17..34bb100 100644 --- a/packages/simulator/test/fixtures/utils/address.ts +++ b/packages/simulator/test/fixtures/utils/address.ts @@ -3,7 +3,7 @@ import { encodeCoinPublicKey, } from '@midnight-ntwrk/compact-runtime'; import { encodeContractAddress } from '@midnight-ntwrk/ledger'; -import type * as Compact from '../artifacts/SampleZOwnable/contract/index.cjs'; +import type * as Compact from '../artifacts/SampleZOwnable/contract/index.js'; const PREFIX_ADDRESS = '0200'; diff --git a/packages/simulator/test/integration/SampleZOwnable.test.ts b/packages/simulator/test/integration/SampleZOwnable.test.ts index 33c0a23..1a21bb9 100644 --- a/packages/simulator/test/integration/SampleZOwnable.test.ts +++ b/packages/simulator/test/integration/SampleZOwnable.test.ts @@ -5,7 +5,7 @@ import { persistentHash, } from '@midnight-ntwrk/compact-runtime'; import { beforeEach, describe, expect, it } from 'vitest'; -import type { ZswapCoinPublicKey } from '../fixtures/artifacts/SampleZOwnable/contract/index.cjs'; +import type { ZswapCoinPublicKey } from '../fixtures/artifacts/SampleZOwnable/contract/index.js'; import { SampleZOwnablePrivateState } from '../fixtures/sample-contracts/witnesses/SampleZOwnableWitnesses.js'; import * as utils from '../fixtures/utils/address.js'; import { SampleZOwnableSimulator } from './SampleZOwnableSimulator.js'; diff --git a/packages/simulator/test/integration/SampleZOwnableSimulator.ts b/packages/simulator/test/integration/SampleZOwnableSimulator.ts index 9e0caed..c288e25 100644 --- a/packages/simulator/test/integration/SampleZOwnableSimulator.ts +++ b/packages/simulator/test/integration/SampleZOwnableSimulator.ts @@ -5,7 +5,7 @@ import { ledger, Contract as SampleZOwnable, type ZswapCoinPublicKey, -} from '../fixtures/artifacts/SampleZOwnable/contract/index.cjs'; +} from '../fixtures/artifacts/SampleZOwnable/contract/index.js'; import { SampleZOwnablePrivateState, SampleZOwnableWitnesses, diff --git a/packages/simulator/test/integration/SimpleSimulator.ts b/packages/simulator/test/integration/SimpleSimulator.ts index 907c6a6..411c5e9 100644 --- a/packages/simulator/test/integration/SimpleSimulator.ts +++ b/packages/simulator/test/integration/SimpleSimulator.ts @@ -2,7 +2,7 @@ import { type BaseSimulatorOptions, createSimulator } from '../../src/index'; import { ledger, Contract as SimpleContract, -} from '../fixtures/artifacts/Simple/contract/index.cjs'; +} from '../fixtures/artifacts/Simple/contract/index.js'; import { SimplePrivateState, SimpleWitnesses, diff --git a/packages/simulator/test/integration/WitnessSimulator.ts b/packages/simulator/test/integration/WitnessSimulator.ts index d4a15a2..c5b0704 100644 --- a/packages/simulator/test/integration/WitnessSimulator.ts +++ b/packages/simulator/test/integration/WitnessSimulator.ts @@ -2,7 +2,7 @@ import { type BaseSimulatorOptions, createSimulator } from '../../src/index'; import { ledger, Contract as WitnessContract, -} from '../fixtures/artifacts/Witness/contract/index.cjs'; +} from '../fixtures/artifacts/Witness/contract/index.js'; import { WitnessPrivateState, WitnessWitnesses, diff --git a/packages/simulator/test/setup.ts b/packages/simulator/test/setup.ts index 2b5f23e..a59b0cf 100644 --- a/packages/simulator/test/setup.ts +++ b/packages/simulator/test/setup.ts @@ -48,7 +48,7 @@ async function compileContract(contractFile: string): Promise { const inputPath = join(SAMPLE_CONTRACTS_DIR, contractFile); const contractName = contractFile.replace('.compact', ''); const outputDir = join(ARTIFACTS_DIR, contractName); - const contractArtifact = join(outputDir, 'contract', 'index.cjs'); + const contractArtifact = join(outputDir, 'contract', 'index.js'); // Skip if artifact already exists and is newer than source if (existsSync(contractArtifact) && existsSync(inputPath)) { diff --git a/packages/simulator/test/unit/core/StateManager.test.ts b/packages/simulator/test/unit/core/StateManager.test.ts index 99634da..82d0936 100644 --- a/packages/simulator/test/unit/core/StateManager.test.ts +++ b/packages/simulator/test/unit/core/StateManager.test.ts @@ -1,18 +1,17 @@ import { + ChargedState, type CircuitContext, - ContractState, dummyContractAddress, - type EncodedQualifiedCoinInfo, + type EncodedQualifiedShieldedCoinInfo, type EncodedZswapLocalState, - encodeQualifiedCoinInfo, - type QualifiedCoinInfo, + encodeQualifiedShieldedCoinInfo, + type QualifiedShieldedCoinInfo, QueryContext, - StateValue, - sampleTokenType, + sampleRawTokenType, } from '@midnight-ntwrk/compact-runtime'; import { beforeEach, describe, expect, it } from 'vitest'; import { CircuitContextManager } from '../../../src/core/CircuitContextManager'; -import { Contract as MockSimple } from '../../fixtures/artifacts/Simple/contract/index.cjs'; +import { Contract as MockSimple } from '../../fixtures/artifacts/Simple/contract/index.js'; import { type SimplePrivateState, SimpleWitnesses, @@ -65,17 +64,17 @@ describe('CircuitContextManager', () => { }); it('should set original state', () => { - expect(ctx.originalState).toBeInstanceOf(ContractState); - expect(ctx.originalState).toHaveProperty('__wbg_ptr'); - expect((ctx.originalState as any).__wbg_ptr).toBeTypeOf('number'); + expect(ctx.currentQueryContext).toBeInstanceOf(QueryContext); + expect(ctx.currentQueryContext).toHaveProperty('__wbg_ptr'); + expect((ctx.currentQueryContext as any).__wbg_ptr).toBeTypeOf('number'); }); it('should set tx ctx', () => { // Need to go deeper - expect(ctx.transactionContext).toBeInstanceOf(QueryContext); - expect(ctx.transactionContext.address).toEqual(dummyContractAddress()); - expect(ctx.transactionContext.state).toBeInstanceOf(StateValue); - expect(ctx.transactionContext.state).toHaveProperty('__wbg_ptr'); + expect(ctx.currentQueryContext).toBeInstanceOf(QueryContext); + expect(ctx.currentQueryContext.address).toEqual(dummyContractAddress()); + expect(ctx.currentQueryContext.state).toBeInstanceOf(ChargedState); + expect(ctx.currentQueryContext.state).toHaveProperty('__wbg_ptr'); }); }); @@ -100,14 +99,14 @@ describe('CircuitContextManager', () => { it('should set new ctx', () => { const oldCtx = circuitCtxManager.getContext(); - const qualCoin: QualifiedCoinInfo = { - type: sampleTokenType(), + const qualCoin: QualifiedShieldedCoinInfo = { + type: sampleRawTokenType(), nonce: toHexPadded('nonce'), value: 123n, mt_index: 987n, }; - const encQualCoin: EncodedQualifiedCoinInfo = - encodeQualifiedCoinInfo(qualCoin); + const encQualCoin: EncodedQualifiedShieldedCoinInfo = + encodeQualifiedShieldedCoinInfo(qualCoin); // zswap local state const zswapLocalState_1: EncodedZswapLocalState = { @@ -119,21 +118,18 @@ describe('CircuitContextManager', () => { outputs: [], }; - // OG state - const NEW_OG_STATE: ContractState = new ContractState(); - // Query ctx const modifiedTxCtx: QueryContext = { - ...ctx.transactionContext, + ...ctx.currentQueryContext, address: encodeToAddress('otherAddress'), } as unknown as QueryContext; // Build new ctx const newCtx: CircuitContext = { - originalState: NEW_OG_STATE, + currentQueryContext: modifiedTxCtx, currentPrivateState: initialPrivateState, currentZswapLocalState: zswapLocalState_1, - transactionContext: modifiedTxCtx, + costModel: modifiedTxCtx, }; circuitCtxManager.setContext(newCtx); From 8e8df31d6b23dea2049fa3c54b5031c19920aec5 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:31:43 -0300 Subject: [PATCH 09/23] update yarn.lock --- yarn.lock | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7be50e4..db04c61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -334,14 +334,14 @@ __metadata: languageName: node linkType: hard -"@midnight-ntwrk/compact-runtime@npm:^0.9.0": - version: 0.9.0 - resolution: "@midnight-ntwrk/compact-runtime@npm:0.9.0" +"@midnight-ntwrk/compact-runtime@npm:0.14.0-rc.0": + version: 0.14.0-rc.0 + resolution: "@midnight-ntwrk/compact-runtime@npm:0.14.0-rc.0" dependencies: - "@midnight-ntwrk/onchain-runtime": "npm:^0.3.0" + "@midnight-ntwrk/onchain-runtime-v2": "npm:^2.0.0-alpha.1" "@types/object-inspect": "npm:^1.8.1" object-inspect: "npm:^1.12.3" - checksum: 10/51b6769cdfac42e9f640d8ad052a6ddc8be3438b43d4c49b5e4bbf660658f3a1ae1be2f026da672af26baaed89fbd54809d5476a4c3ba2a9c97a3fcbc9754777 + checksum: 10/516166f1cbbe559495eca88da3c5db033fc05f8c2c119728efd3bdec259f538d339f51691ae9ac15fd06c4d845926e38c24256454a5604ed66d22bbb93fcbaad languageName: node linkType: hard @@ -352,10 +352,10 @@ __metadata: languageName: node linkType: hard -"@midnight-ntwrk/onchain-runtime@npm:^0.3.0": - version: 0.3.0 - resolution: "@midnight-ntwrk/onchain-runtime@npm:0.3.0" - checksum: 10/e0d6a9a96314dbce99345b9794395682a3471568fde13d90122227f52082dba7b83dc05d419e4745e5bf997e93274c2a01f3938ccd20351de8249923c0c9ab45 +"@midnight-ntwrk/onchain-runtime-v2@npm:^2.0.0-alpha.1": + version: 2.0.0 + resolution: "@midnight-ntwrk/onchain-runtime-v2@npm:2.0.0" + checksum: 10/71b2b5e2270ce36fbdb63c0bd531f09f2de9151b286b6c7389966279750080b300893aef973621e438a934f9274277181cdf9bdc1350abc0e244fa892a145b19 languageName: node linkType: hard @@ -409,7 +409,7 @@ __metadata: version: 0.0.0-use.local resolution: "@openzeppelin/compact-tools-simulator@workspace:packages/simulator" dependencies: - "@midnight-ntwrk/compact-runtime": "npm:^0.9.0" + "@midnight-ntwrk/compact-runtime": "npm:0.14.0-rc.0" "@midnight-ntwrk/ledger": "npm:^4.0.0" "@midnight-ntwrk/zswap": "npm:^4.0.0" "@tsconfig/node24": "npm:^24.0.3" @@ -425,7 +425,6 @@ __metadata: resolution: "@openzeppelin/compact-tools@workspace:." dependencies: "@biomejs/biome": "npm:2.3.8" - "@midnight-ntwrk/compact-runtime": "npm:^0.9.0" "@midnight-ntwrk/ledger": "npm:^4.0.0" "@midnight-ntwrk/zswap": "npm:^4.0.0" "@types/node": "npm:24.10.1" From 1b8f44cbfeb4ae5550f1fc7fd841ea888dbca080 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:34:30 -0300 Subject: [PATCH 10/23] fix comment --- packages/simulator/src/core/CircuitContextManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/simulator/src/core/CircuitContextManager.ts b/packages/simulator/src/core/CircuitContextManager.ts index 9ddb340..6eb581c 100644 --- a/packages/simulator/src/core/CircuitContextManager.ts +++ b/packages/simulator/src/core/CircuitContextManager.ts @@ -54,7 +54,7 @@ export class CircuitContextManager

{ } = contract.initialState(initCtx, ...contractArgs); // Extract ChargedState from the compiler-generated ContractState - // The 0.27.0-rc.1 compiler returns`ContractState.data` aka ChargedState + // The compiler returns`ContractState.data` aka ChargedState const chargedState = currentContractState.data; this.context = { From 0df43693196dc2de1ff93fdb38efda574b983c42 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 00:35:11 -0300 Subject: [PATCH 11/23] improve comment --- packages/simulator/src/core/CircuitContextManager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/simulator/src/core/CircuitContextManager.ts b/packages/simulator/src/core/CircuitContextManager.ts index 6eb581c..0928d1a 100644 --- a/packages/simulator/src/core/CircuitContextManager.ts +++ b/packages/simulator/src/core/CircuitContextManager.ts @@ -54,7 +54,6 @@ export class CircuitContextManager

{ } = contract.initialState(initCtx, ...contractArgs); // Extract ChargedState from the compiler-generated ContractState - // The compiler returns`ContractState.data` aka ChargedState const chargedState = currentContractState.data; this.context = { From f198ae6ba268e1860cc6a37868394f4e57a62acf Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 01:29:08 -0300 Subject: [PATCH 12/23] fix version in cli readme --- packages/cli/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index a8219c3..966bb61 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -52,7 +52,7 @@ compact-compiler [options] | `--out ` | Output directory for compiled artifacts | `artifacts` | | `--hierarchical` | Preserve source directory structure in output | `false` | | `--skip-zk` | Skip zero-knowledge proof generation | `false` | -| `+` | Use specific toolchain version (e.g., `+0.26.0`) | (default) | +| `+` | Use specific toolchain version (e.g., `+0.28.0`) | (default) | ### Environment Variables @@ -102,7 +102,7 @@ compact-compiler --dir security compact-compiler --skip-zk # Use specific toolchain version -compact-compiler +0.26.0 +compact-compiler +0.28.0 # Custom source and output directories compact-compiler --src contracts --out build @@ -155,7 +155,7 @@ import { CompactCompiler } from '@openzeppelin/compact-tools-cli'; const compiler = new CompactCompiler({ flags: '--skip-zk', targetDir: 'security', - version: '0.26.0', + version: '0.28.0', hierarchical: true, srcDir: 'src', outDir: 'artifacts', @@ -167,7 +167,7 @@ await compiler.compile(); const compiler = CompactCompiler.fromArgs([ '--dir', 'security', '--skip-zk', - '+0.26.0' + '+0.28.0' ]); await compiler.compile(); @@ -196,7 +196,7 @@ class CompactBuilder { interface CompilerOptions { flags?: string; // Compiler flags (e.g., '--skip-zk --verbose') targetDir?: string; // Subdirectory within srcDir to compile - version?: string; // Toolchain version (e.g., '0.26.0') + version?: string; // Toolchain version (e.g., '0.28.0') hierarchical?: boolean; // Preserve directory structure in output srcDir?: string; // Source directory (default: 'src') outDir?: string; // Output directory (default: 'artifacts') @@ -233,7 +233,7 @@ yarn clean ## Output Example -``` +```bash ℹ [COMPILE] Compact compiler started ℹ [COMPILE] Compact developer tools: compact 0.2.0 ℹ [COMPILE] Compact toolchain: Compactc version: 0.28.0 From 0690919143422c12b57bb388446f4f0d6375e096 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 01:34:22 -0300 Subject: [PATCH 13/23] fix costModel in test --- packages/simulator/test/unit/core/StateManager.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/simulator/test/unit/core/StateManager.test.ts b/packages/simulator/test/unit/core/StateManager.test.ts index 82d0936..a765cd6 100644 --- a/packages/simulator/test/unit/core/StateManager.test.ts +++ b/packages/simulator/test/unit/core/StateManager.test.ts @@ -129,7 +129,7 @@ describe('CircuitContextManager', () => { currentQueryContext: modifiedTxCtx, currentPrivateState: initialPrivateState, currentZswapLocalState: zswapLocalState_1, - costModel: modifiedTxCtx, + costModel: ctx.costModel, }; circuitCtxManager.setContext(newCtx); From 84ce0a26cb1ca6ca755add301a9399efa7259aa5 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 20:21:35 -0300 Subject: [PATCH 14/23] change compact runtime dep to v14 --- packages/simulator/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/simulator/package.json b/packages/simulator/package.json index 4593355..5950668 100644 --- a/packages/simulator/package.json +++ b/packages/simulator/package.json @@ -39,6 +39,6 @@ "vitest": "^4.0.15" }, "dependencies": { - "@midnight-ntwrk/compact-runtime": "0.14.0-rc.0" + "@midnight-ntwrk/compact-runtime": "0.14.0" } } From 71c49dad25348aafd90505a2a063f8bad7728c00 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 20:24:38 -0300 Subject: [PATCH 15/23] update yarn lock to use onchain runtime v2 --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index db04c61..1ee1981 100644 --- a/yarn.lock +++ b/yarn.lock @@ -334,14 +334,14 @@ __metadata: languageName: node linkType: hard -"@midnight-ntwrk/compact-runtime@npm:0.14.0-rc.0": - version: 0.14.0-rc.0 - resolution: "@midnight-ntwrk/compact-runtime@npm:0.14.0-rc.0" +"@midnight-ntwrk/compact-runtime@npm:0.14.0": + version: 0.14.0 + resolution: "@midnight-ntwrk/compact-runtime@npm:0.14.0" dependencies: - "@midnight-ntwrk/onchain-runtime-v2": "npm:^2.0.0-alpha.1" + "@midnight-ntwrk/onchain-runtime-v2": "npm:^2.0.0" "@types/object-inspect": "npm:^1.8.1" object-inspect: "npm:^1.12.3" - checksum: 10/516166f1cbbe559495eca88da3c5db033fc05f8c2c119728efd3bdec259f538d339f51691ae9ac15fd06c4d845926e38c24256454a5604ed66d22bbb93fcbaad + checksum: 10/bba44d09770b172b7a5ba193f59d2ec57ca0dff2e3fd538326942e102e8cbe0b0cc1cb736e1f469afc74258517e7d25fc4dfa7f89a299aed900efc89f1eed3a7 languageName: node linkType: hard @@ -352,7 +352,7 @@ __metadata: languageName: node linkType: hard -"@midnight-ntwrk/onchain-runtime-v2@npm:^2.0.0-alpha.1": +"@midnight-ntwrk/onchain-runtime-v2@npm:^2.0.0": version: 2.0.0 resolution: "@midnight-ntwrk/onchain-runtime-v2@npm:2.0.0" checksum: 10/71b2b5e2270ce36fbdb63c0bd531f09f2de9151b286b6c7389966279750080b300893aef973621e438a934f9274277181cdf9bdc1350abc0e244fa892a145b19 @@ -409,7 +409,7 @@ __metadata: version: 0.0.0-use.local resolution: "@openzeppelin/compact-tools-simulator@workspace:packages/simulator" dependencies: - "@midnight-ntwrk/compact-runtime": "npm:0.14.0-rc.0" + "@midnight-ntwrk/compact-runtime": "npm:0.14.0" "@midnight-ntwrk/ledger": "npm:^4.0.0" "@midnight-ntwrk/zswap": "npm:^4.0.0" "@tsconfig/node24": "npm:^24.0.3" From 3be37a4b0f781a6d9453664cbbea8b0d2a190a06 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 20:27:12 -0300 Subject: [PATCH 16/23] bump lang version to v0.20.0 in contracts --- .../test/fixtures/sample-contracts/SampleZOwnable.compact | 2 +- .../simulator/test/fixtures/sample-contracts/Simple.compact | 2 +- .../simulator/test/fixtures/sample-contracts/Witness.compact | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact b/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact index 983f772..c88a6fc 100644 --- a/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact +++ b/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact @@ -1,7 +1,7 @@ // Sample contract for testing // DO NOT USE IN PRODUCTION!!! -pragma language_version >= 0.19.0; +pragma language_version >= 0.20.0; import { Either, diff --git a/packages/simulator/test/fixtures/sample-contracts/Simple.compact b/packages/simulator/test/fixtures/sample-contracts/Simple.compact index c387712..063e3e4 100644 --- a/packages/simulator/test/fixtures/sample-contracts/Simple.compact +++ b/packages/simulator/test/fixtures/sample-contracts/Simple.compact @@ -1,7 +1,7 @@ // Sample contract for testing // DO NOT USE IN PRODUCTION!!! -pragma language_version >= 0.19.0; +pragma language_version >= 0.20.0; import { ZswapCoinPublicKey, ContractAddress, Either, Maybe } from CompactStandardLibrary; diff --git a/packages/simulator/test/fixtures/sample-contracts/Witness.compact b/packages/simulator/test/fixtures/sample-contracts/Witness.compact index f51b93f..ad7a56d 100644 --- a/packages/simulator/test/fixtures/sample-contracts/Witness.compact +++ b/packages/simulator/test/fixtures/sample-contracts/Witness.compact @@ -1,7 +1,7 @@ // Sample contract for testing // DO NOT USE IN PRODUCTION!!! -pragma language_version >= 0.19.0; +pragma language_version >= 0.20.0; import { ZswapCoinPublicKey, ContractAddress, Either, Maybe } from CompactStandardLibrary; From dd1d8dea3d037328fcff6909c3d6f29e8109773a Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 20:50:55 -0300 Subject: [PATCH 17/23] bump to ledger-v7 --- package.json | 2 +- packages/simulator/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e378852..17c4509 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@biomejs/biome": "2.3.8", - "@midnight-ntwrk/ledger": "^4.0.0", + "@midnight-ntwrk/ledger-v7": "^7.0.0", "@midnight-ntwrk/zswap": "^4.0.0", "@types/node": "24.10.1", "ts-node": "^10.9.2", diff --git a/packages/simulator/package.json b/packages/simulator/package.json index 5950668..6a86e59 100644 --- a/packages/simulator/package.json +++ b/packages/simulator/package.json @@ -30,7 +30,7 @@ "clean": "git clean -fXd" }, "devDependencies": { - "@midnight-ntwrk/ledger": "^4.0.0", + "@midnight-ntwrk/ledger-v7": "^7.0.0", "@midnight-ntwrk/zswap": "^4.0.0", "@tsconfig/node24": "^24.0.3", "@types/node": "24.10.1", From 51ba3d0d53b9e878e123cab0192618e3a5e4adfa Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 20:51:31 -0300 Subject: [PATCH 18/23] fix fmt --- .../simulator/test/fixtures/utils/address.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/simulator/test/fixtures/utils/address.ts b/packages/simulator/test/fixtures/utils/address.ts index 34bb100..9f4eea4 100644 --- a/packages/simulator/test/fixtures/utils/address.ts +++ b/packages/simulator/test/fixtures/utils/address.ts @@ -2,7 +2,7 @@ import { convertFieldToBytes, encodeCoinPublicKey, } from '@midnight-ntwrk/compact-runtime'; -import { encodeContractAddress } from '@midnight-ntwrk/ledger'; +import { encodeContractAddress } from '@midnight-ntwrk/ledger-v7'; import type * as Compact from '../artifacts/SampleZOwnable/contract/index.js'; const PREFIX_ADDRESS = '0200'; @@ -29,13 +29,20 @@ export const encodeToPK = (str: string): Compact.ZswapCoinPublicKey => ({ /** * @description Generates ContractAddress from `str` for testing purposes. - * Prepends 32-byte hex with PREFIX_ADDRESS before encoding. + * Truncates to 31 bytes before prepending PREFIX_ADDRESS to comply + * with field value constraints (max unsigned integer is 2^248-1). + * The truncation compensates for the bytes added by the prefix. * @param str String to hexify and encode. * @returns Encoded `ZswapCoinPublicKey`. */ -export const encodeToAddress = (str: string): Compact.ContractAddress => ({ - bytes: encodeContractAddress(PREFIX_ADDRESS + toHexPadded(str)), -}); +export const encodeToAddress = (str: string): Compact.ContractAddress => { + const hex = toHexPadded(str); + // Remove last 2 bytes (4 hex chars) to comply with 31-byte field limit + const truncated = hex.slice(0, -4); + return { + bytes: encodeContractAddress(PREFIX_ADDRESS + truncated), + }; +}; /** * @description Generates an Either object for ZswapCoinPublicKey for testing. From 4412cb25086b255217ffe34cdd0adca44634a382 Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 29 Jan 2026 20:51:44 -0300 Subject: [PATCH 19/23] update yarn lock --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1ee1981..aa93469 100644 --- a/yarn.lock +++ b/yarn.lock @@ -345,10 +345,10 @@ __metadata: languageName: node linkType: hard -"@midnight-ntwrk/ledger@npm:^4.0.0": - version: 4.0.0 - resolution: "@midnight-ntwrk/ledger@npm:4.0.0" - checksum: 10/826f6d2743af2a3f199f1ad61cb946a529eb5755dfc68ea7f8fc436bb366716bd5118a4561ed541938caa9db6f366b7c9ee8047511f41e5bcaaf21c335d29b1d +"@midnight-ntwrk/ledger-v7@npm:^7.0.0": + version: 7.0.0 + resolution: "@midnight-ntwrk/ledger-v7@npm:7.0.0" + checksum: 10/cd04c6cdfb2e15192c10c3beb4a3b65f5c6419eedb0f52f65d67cb50ae6ecb492a1fa96e76479f2db2796d89512d4290cf26de4424e47378c90c743529ddb82a languageName: node linkType: hard @@ -410,7 +410,7 @@ __metadata: resolution: "@openzeppelin/compact-tools-simulator@workspace:packages/simulator" dependencies: "@midnight-ntwrk/compact-runtime": "npm:0.14.0" - "@midnight-ntwrk/ledger": "npm:^4.0.0" + "@midnight-ntwrk/ledger-v7": "npm:^7.0.0" "@midnight-ntwrk/zswap": "npm:^4.0.0" "@tsconfig/node24": "npm:^24.0.3" "@types/node": "npm:24.10.1" @@ -425,7 +425,7 @@ __metadata: resolution: "@openzeppelin/compact-tools@workspace:." dependencies: "@biomejs/biome": "npm:2.3.8" - "@midnight-ntwrk/ledger": "npm:^4.0.0" + "@midnight-ntwrk/ledger-v7": "npm:^7.0.0" "@midnight-ntwrk/zswap": "npm:^4.0.0" "@types/node": "npm:24.10.1" ts-node: "npm:^10.9.2" From e1b91c10c98404d6d07d5b0333942fb6e1838cf2 Mon Sep 17 00:00:00 2001 From: Andrew Fleming Date: Fri, 30 Jan 2026 16:17:45 -0600 Subject: [PATCH 20/23] Apply suggestions from code review Co-authored-by: 0xisk <0xisk@proton.me> Signed-off-by: Andrew Fleming --- packages/simulator/src/utils/CircuitContextUtils.ts | 2 +- packages/simulator/test/fixtures/utils/address.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/simulator/src/utils/CircuitContextUtils.ts b/packages/simulator/src/utils/CircuitContextUtils.ts index 18f0cde..be20ebe 100644 --- a/packages/simulator/src/utils/CircuitContextUtils.ts +++ b/packages/simulator/src/utils/CircuitContextUtils.ts @@ -48,7 +48,7 @@ export function useCircuitContextSender< L, C extends IContractSimulator, >(contract: C, sender: CoinPublicKey): CircuitContext

{ - const currentContext = contract.circuitContext; + const currentCircuitContext = contract.circuitContext; const currentPrivateState = contract.getPrivateState(); const existingChargedState = currentContext.currentQueryContext.state; const contractAddress = contract.contractAddress; diff --git a/packages/simulator/test/fixtures/utils/address.ts b/packages/simulator/test/fixtures/utils/address.ts index 9f4eea4..a0aa7f6 100644 --- a/packages/simulator/test/fixtures/utils/address.ts +++ b/packages/simulator/test/fixtures/utils/address.ts @@ -29,11 +29,11 @@ export const encodeToPK = (str: string): Compact.ZswapCoinPublicKey => ({ /** * @description Generates ContractAddress from `str` for testing purposes. - * Truncates to 31 bytes before prepending PREFIX_ADDRESS to comply + * Truncates to 30 bytes before prepending PREFIX_ADDRESS to comply * with field value constraints (max unsigned integer is 2^248-1). * The truncation compensates for the bytes added by the prefix. * @param str String to hexify and encode. - * @returns Encoded `ZswapCoinPublicKey`. + * @returns Encoded `Compact.ContractAddress`. */ export const encodeToAddress = (str: string): Compact.ContractAddress => { const hex = toHexPadded(str); From f3b31e2fdcb9f0389b77e99965ef067c0691c30d Mon Sep 17 00:00:00 2001 From: andrew Date: Fri, 30 Jan 2026 19:19:23 -0300 Subject: [PATCH 21/23] remove comment --- packages/simulator/test/fixtures/utils/address.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/simulator/test/fixtures/utils/address.ts b/packages/simulator/test/fixtures/utils/address.ts index a0aa7f6..125be77 100644 --- a/packages/simulator/test/fixtures/utils/address.ts +++ b/packages/simulator/test/fixtures/utils/address.ts @@ -37,7 +37,6 @@ export const encodeToPK = (str: string): Compact.ZswapCoinPublicKey => ({ */ export const encodeToAddress = (str: string): Compact.ContractAddress => { const hex = toHexPadded(str); - // Remove last 2 bytes (4 hex chars) to comply with 31-byte field limit const truncated = hex.slice(0, -4); return { bytes: encodeContractAddress(PREFIX_ADDRESS + truncated), From 4ef0958c9bc00fa481aaabe853ff02d7db248329 Mon Sep 17 00:00:00 2001 From: andrew Date: Fri, 30 Jan 2026 19:23:57 -0300 Subject: [PATCH 22/23] return gasLimit in circuit ctx --- packages/simulator/src/core/ContractSimulator.ts | 1 + packages/simulator/src/utils/CircuitContextUtils.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/simulator/src/core/ContractSimulator.ts b/packages/simulator/src/core/ContractSimulator.ts index c50a516..04b2756 100644 --- a/packages/simulator/src/core/ContractSimulator.ts +++ b/packages/simulator/src/core/ContractSimulator.ts @@ -44,6 +44,7 @@ export abstract class ContractSimulator extends AbstractSimulator { ? emptyZswapLocalState(activeCaller) : baseCtx.currentZswapLocalState, costModel: baseCtx.costModel, + gasLimit: baseCtx.gasLimit }; } diff --git a/packages/simulator/src/utils/CircuitContextUtils.ts b/packages/simulator/src/utils/CircuitContextUtils.ts index be20ebe..b77777a 100644 --- a/packages/simulator/src/utils/CircuitContextUtils.ts +++ b/packages/simulator/src/utils/CircuitContextUtils.ts @@ -50,7 +50,7 @@ export function useCircuitContextSender< >(contract: C, sender: CoinPublicKey): CircuitContext

{ const currentCircuitContext = contract.circuitContext; const currentPrivateState = contract.getPrivateState(); - const existingChargedState = currentContext.currentQueryContext.state; + const existingChargedState = currentCircuitContext.currentQueryContext.state; const contractAddress = contract.contractAddress; return { @@ -60,6 +60,7 @@ export function useCircuitContextSender< contractAddress, ), currentZswapLocalState: emptyZswapLocalState(sender), - costModel: currentContext.costModel, + costModel: currentCircuitContext.costModel, + gasLimit: currentCircuitContext.gasLimit }; } From c5aa55b60d2153c1d16d58a01f4f7fccef92a704 Mon Sep 17 00:00:00 2001 From: andrew Date: Fri, 30 Jan 2026 19:24:27 -0300 Subject: [PATCH 23/23] fix fmt --- packages/simulator/src/core/ContractSimulator.ts | 2 +- packages/simulator/src/utils/CircuitContextUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/simulator/src/core/ContractSimulator.ts b/packages/simulator/src/core/ContractSimulator.ts index 04b2756..9321626 100644 --- a/packages/simulator/src/core/ContractSimulator.ts +++ b/packages/simulator/src/core/ContractSimulator.ts @@ -44,7 +44,7 @@ export abstract class ContractSimulator extends AbstractSimulator { ? emptyZswapLocalState(activeCaller) : baseCtx.currentZswapLocalState, costModel: baseCtx.costModel, - gasLimit: baseCtx.gasLimit + gasLimit: baseCtx.gasLimit, }; } diff --git a/packages/simulator/src/utils/CircuitContextUtils.ts b/packages/simulator/src/utils/CircuitContextUtils.ts index b77777a..420ac75 100644 --- a/packages/simulator/src/utils/CircuitContextUtils.ts +++ b/packages/simulator/src/utils/CircuitContextUtils.ts @@ -61,6 +61,6 @@ export function useCircuitContextSender< ), currentZswapLocalState: emptyZswapLocalState(sender), costModel: currentCircuitContext.costModel, - gasLimit: currentCircuitContext.gasLimit + gasLimit: currentCircuitContext.gasLimit, }; }