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" 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 diff --git a/package.json b/package.json index e6ae773..17c4509 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,9 @@ "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", + "@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/cli/README.md b/packages/cli/README.md index 9c76f81..966bb61 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 @@ -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,15 +233,15 @@ yarn clean ## Output Example -``` +```bash ℹ [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 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 diff --git a/packages/simulator/package.json b/packages/simulator/package.json index 7b2684c..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", @@ -39,6 +39,6 @@ "vitest": "^4.0.15" }, "dependencies": { - "@midnight-ntwrk/compact-runtime": "^0.9.0" + "@midnight-ntwrk/compact-runtime": "0.14.0" } } 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..0928d1a 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,14 @@ export class CircuitContextManager

{ currentZswapLocalState, } = contract.initialState(initCtx, ...contractArgs); + // Extract ChargedState from the compiler-generated ContractState + 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..9321626 100644 --- a/packages/simulator/src/core/ContractSimulator.ts +++ b/packages/simulator/src/core/ContractSimulator.ts @@ -35,12 +35,16 @@ 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, + gasLimit: baseCtx.gasLimit, }; } 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..420ac75 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,19 @@ export function useCircuitContextSender< L, C extends IContractSimulator, >(contract: C, sender: CoinPublicKey): CircuitContext

{ + const currentCircuitContext = contract.circuitContext; const currentPrivateState = contract.getPrivateState(); - const originalState = contract.getContractState(); + const existingChargedState = currentCircuitContext.currentQueryContext.state; const contractAddress = contract.contractAddress; return { - originalState, currentPrivateState, - transactionContext: new QueryContext(originalState.data, contractAddress), + currentQueryContext: new QueryContext( + existingChargedState, + contractAddress, + ), currentZswapLocalState: emptyZswapLocalState(sender), + costModel: currentCircuitContext.costModel, + gasLimit: currentCircuitContext.gasLimit, }; } diff --git a/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact b/packages/simulator/test/fixtures/sample-contracts/SampleZOwnable.compact index 554774b..c88a6fc 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.20.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..063e3e4 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.20.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..ad7a56d 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.20.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..125be77 100644 --- a/packages/simulator/test/fixtures/utils/address.ts +++ b/packages/simulator/test/fixtures/utils/address.ts @@ -2,8 +2,8 @@ import { convertFieldToBytes, encodeCoinPublicKey, } from '@midnight-ntwrk/compact-runtime'; -import { encodeContractAddress } from '@midnight-ntwrk/ledger'; -import type * as Compact from '../artifacts/SampleZOwnable/contract/index.cjs'; +import { encodeContractAddress } from '@midnight-ntwrk/ledger-v7'; +import type * as Compact from '../artifacts/SampleZOwnable/contract/index.js'; const PREFIX_ADDRESS = '0200'; @@ -29,13 +29,19 @@ 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 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 => ({ - bytes: encodeContractAddress(PREFIX_ADDRESS + toHexPadded(str)), -}); +export const encodeToAddress = (str: string): Compact.ContractAddress => { + const hex = toHexPadded(str); + const truncated = hex.slice(0, -4); + return { + bytes: encodeContractAddress(PREFIX_ADDRESS + truncated), + }; +}; /** * @description Generates an Either object for ZswapCoinPublicKey for testing. 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..a765cd6 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: ctx.costModel, }; circuitCtxManager.setContext(newCtx); diff --git a/yarn.lock b/yarn.lock index 7be50e4..aa93469 100644 --- a/yarn.lock +++ b/yarn.lock @@ -334,28 +334,28 @@ __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": + version: 0.14.0 + resolution: "@midnight-ntwrk/compact-runtime@npm:0.14.0" dependencies: - "@midnight-ntwrk/onchain-runtime": "npm:^0.3.0" + "@midnight-ntwrk/onchain-runtime-v2": "npm:^2.0.0" "@types/object-inspect": "npm:^1.8.1" object-inspect: "npm:^1.12.3" - checksum: 10/51b6769cdfac42e9f640d8ad052a6ddc8be3438b43d4c49b5e4bbf660658f3a1ae1be2f026da672af26baaed89fbd54809d5476a4c3ba2a9c97a3fcbc9754777 + checksum: 10/bba44d09770b172b7a5ba193f59d2ec57ca0dff2e3fd538326942e102e8cbe0b0cc1cb736e1f469afc74258517e7d25fc4dfa7f89a299aed900efc89f1eed3a7 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 -"@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": + version: 2.0.0 + resolution: "@midnight-ntwrk/onchain-runtime-v2@npm:2.0.0" + checksum: 10/71b2b5e2270ce36fbdb63c0bd531f09f2de9151b286b6c7389966279750080b300893aef973621e438a934f9274277181cdf9bdc1350abc0e244fa892a145b19 languageName: node linkType: hard @@ -409,8 +409,8 @@ __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/ledger": "npm:^4.0.0" + "@midnight-ntwrk/compact-runtime": "npm:0.14.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,8 +425,7 @@ __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/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"