@effectstream/sync 0.104.0 → 0.200.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effectstream/sync",
3
- "version": "0.104.0",
3
+ "version": "0.200.1",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "homepage": "https://effectstream.github.io/docs/",
6
6
  "repository": {
@@ -13,13 +13,13 @@
13
13
  },
14
14
  "exports": "./src/mod.ts",
15
15
  "dependencies": {
16
- "@effectstream/config": "0.104.0",
17
- "@effectstream/db": "0.104.0",
18
- "@effectstream/log": "0.104.0",
19
- "@effectstream/utils": "0.104.0",
20
- "@midnight-ntwrk/ledger-v8": "8.1.0",
21
- "@midnight-ntwrk/midnight-js-indexer-public-data-provider": "4.1.1",
22
- "@midnight-ntwrk/onchain-runtime": "npm:@midnight-ntwrk/onchain-runtime-v3@3.0.0",
16
+ "@effectstream/config": "0.200.1",
17
+ "@effectstream/db": "0.200.1",
18
+ "@effectstream/log": "0.200.1",
19
+ "@effectstream/utils": "0.200.1",
20
+ "@midnightntwrk/ledger-v9": "1.0.0-rc.3",
21
+ "@midnight-ntwrk/midnight-js-indexer-public-data-provider": "5.0.0-beta.6",
22
+ "@midnight-ntwrk/onchain-runtime": "npm:@midnightntwrk/onchain-runtime-v4@4.0.0-rc.3",
23
23
  "effection": "3.5.0",
24
24
  "graphql-ws": "^6.0.6",
25
25
  "ntp-time-sync": "^0.5.0",
@@ -1,3 +1,6 @@
1
+ // MUST stay first: avail-js-sdk requires the CJS @polkadot build, and
2
+ // @polkadot/util reads the flag this sets while loading.
3
+ import "@effectstream/utils/polkadot-esm-cjs-warning";
1
4
  import { SDK } from "avail-js-sdk";
2
5
  import { DEFAULT_REQUEST_TIMEOUT_MS, fetchWithTimeout } from "../common/http.ts";
3
6
  import type {
@@ -17,14 +17,16 @@ export interface MidnightGqlBlockState {
17
17
  };
18
18
  transactions: {
19
19
  hash: string;
20
+ protocolVersion: number;
20
21
  contractActions: {
21
22
  address: string;
22
23
  state: string;
23
24
  }[];
24
25
  zswapLedgerEvents?: {
25
- id: number;
26
- raw: string;
27
- maxId: number;
26
+ id: number;
27
+ raw: string;
28
+ maxId: number;
29
+ protocolVersion: number;
28
30
  }[];
29
31
  unshieldedSpentOutputs?: {
30
32
  intentHash: string;
@@ -155,7 +157,7 @@ export class MidnightClient {
155
157
  ? `contractActions { address state }`
156
158
  : "";
157
159
  const zswapField = zswapLedgerEvents
158
- ? `zswapLedgerEvents { id raw maxId }`
160
+ ? `zswapLedgerEvents { id raw maxId protocolVersion }`
159
161
  : "";
160
162
  const unshieldedSpentField = unshieldedSpentOutputs
161
163
  ? `unshieldedSpentOutputs { intentHash outputIndex owner value tokenType }`
@@ -187,6 +189,7 @@ export class MidnightClient {
187
189
  }
188
190
  transactions {
189
191
  hash
192
+ protocolVersion
190
193
  ${contractActionsField}
191
194
  ${zswapField}
192
195
  ${unshieldedSpentField}
@@ -0,0 +1,29 @@
1
+ import { ContractState } from "@midnight-ntwrk/onchain-runtime";
2
+ import { strictHexToBytes } from "./strict-hex.ts";
3
+
4
+ export class ContractStateDecodeError extends Error {
5
+ override readonly name = "ContractStateDecodeError";
6
+
7
+ constructor(
8
+ message: string,
9
+ readonly rawHex: string,
10
+ readonly decodeCause?: unknown,
11
+ ) {
12
+ super(message);
13
+ }
14
+ }
15
+
16
+ /** Decode generic indexer contract state through the strict raw-hex gate. */
17
+ export function decodeContractState(rawHex: string): ContractState {
18
+ try {
19
+ return ContractState.deserialize(strictHexToBytes(rawHex));
20
+ } catch (decodeCause) {
21
+ throw new ContractStateDecodeError(
22
+ `onchain-runtime-v4 could not deserialize Midnight contract state: ${
23
+ (decodeCause as Error)?.message ?? String(decodeCause)
24
+ }`,
25
+ rawHex,
26
+ decodeCause,
27
+ );
28
+ }
29
+ }
@@ -18,9 +18,10 @@ import type {
18
18
  import type { RootOutput, RootPage } from "../types.ts";
19
19
  import { bound } from "@effectstream/utils";
20
20
  import { MidnightClient, type BlockFetchOptions, type MidnightGqlBlockState } from "./MidnightClient.ts";
21
- import { ContractState, StateValue } from "@midnight-ntwrk/onchain-runtime";
21
+ import { StateValue } from "@midnight-ntwrk/onchain-runtime";
22
22
  import { decodeZswapEvent } from "./zswap-decoder.ts";
23
23
  import { decodeTokenMints } from "./mint-decoder.ts";
24
+ import { decodeContractState } from "./contract-state-decoder.ts";
24
25
 
25
26
  export class MidnightFetcher extends BaseDataFetcher<
26
27
  Input,
@@ -215,7 +216,6 @@ export class MidnightFetcher extends BaseDataFetcher<
215
216
  for (const tx of block.block.transactions) {
216
217
  for (const event of tx.zswapLedgerEvents ?? []) {
217
218
  const decoded = decodeZswapEvent(event.raw);
218
- if (!decoded) continue;
219
219
  if (decoded.kind === "nullifier" && capture === "commitments") continue;
220
220
  if (decoded.kind === "commitment" && capture === "nullifiers") continue;
221
221
  results.push({
@@ -346,7 +346,7 @@ export class MidnightFetcher extends BaseDataFetcher<
346
346
  }
347
347
 
348
348
  // Decode custom token mints out of each regular transaction's raw bytes
349
- // (ledger-v8 deserialize → contract call transcript effects). One input per
349
+ // (ledger-v9 deserialize → contract call transcript effects). One input per
350
350
  // (tx, call, domainSep, kind) that actually applied on chain — see
351
351
  // mint-decoder.ts for the segment semantics. System transactions carry no
352
352
  // transactionResult and are skipped.
@@ -424,10 +424,7 @@ export class MidnightFetcher extends BaseDataFetcher<
424
424
  if (typeof ledgerFromTxStateHex === "function") {
425
425
  state = ledgerFromTxStateHex(rawState);
426
426
  } else {
427
- const hexBytes = rawState.match(/.{1,2}/g);
428
- if (!hexBytes) throw new Error("contract state is empty");
429
- const byteState = new Uint8Array(hexBytes.map(byte => parseInt(byte, 16)));
430
- const contractState = ContractState.deserialize(byteState);
427
+ const contractState = decodeContractState(rawState);
431
428
  const stateValue = contractState.data.state;
432
429
  const generatedFields = f?.ledger(stateValue) ?? {};
433
430
  const schemaFields = primitive.parseAdditionalLedgerFields?.(stateValue) ?? {};
@@ -1,16 +1,26 @@
1
1
  import { Buffer } from "node:buffer";
2
- import * as ledger from "@midnight-ntwrk/ledger-v8";
2
+ import * as ledger from "@midnightntwrk/ledger-v9";
3
+ import { strictHexToBytes } from "./strict-hex.ts";
3
4
 
4
5
  // Decodes custom token mints out of a raw Midnight transaction. A contract
5
6
  // call's transcript effects record mints as `domain_sep → amount` maps
6
7
  // (`shieldedMints` / `unshieldedMints`); the resulting token type ("color")
7
8
  // is `rawTokenType(domain_sep, contract_address)`. Neither the indexer's
8
9
  // GraphQL nor the wallet expose this mapping, so the only route is
9
- // deserializing the transaction bytes with ledger-v8 — same approach as
10
+ // deserializing the transaction bytes with ledger-v9 — same approach as
10
11
  // zswap-decoder.ts for nullifier events.
11
- //
12
- // Mirrors zswap-decoder.ts tolerance: never throws — an undecodable
13
- // transaction logs a warning and contributes nothing.
12
+
13
+ export class MintTransactionDecodeError extends Error {
14
+ override readonly name = "MintTransactionDecodeError";
15
+
16
+ constructor(
17
+ message: string,
18
+ readonly rawHex: string,
19
+ readonly decodeCause?: unknown,
20
+ ) {
21
+ super(message);
22
+ }
23
+ }
14
24
 
15
25
  export interface TokenMintRecord {
16
26
  /** Address of the minting contract, hex */
@@ -31,11 +41,6 @@ export interface TxResultLike {
31
41
  segments?: { id: number; success: boolean }[] | null;
32
42
  }
33
43
 
34
- function hexToBytes(hex: string): Uint8Array {
35
- const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
36
- return Uint8Array.from(Buffer.from(clean, "hex"));
37
- }
38
-
39
44
  function bytesToHex(bytes: Uint8Array): string {
40
45
  return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
41
46
  }
@@ -65,15 +70,16 @@ export function decodeTokenMints(
65
70
  "signature",
66
71
  "proof",
67
72
  "binding",
68
- hexToBytes(rawHex),
73
+ strictHexToBytes(rawHex),
69
74
  );
70
- } catch (e) {
71
- console.warn(
72
- `[mint-decoder] undecodable transaction, skipping: ${
73
- (e as Error)?.message ?? e
75
+ } catch (decodeCause) {
76
+ throw new MintTransactionDecodeError(
77
+ `ledger-v9 could not deserialize protocolVersion 2000000 transaction: ${
78
+ (decodeCause as Error)?.message ?? String(decodeCause)
74
79
  }`,
80
+ rawHex,
81
+ decodeCause,
75
82
  );
76
- return [];
77
83
  }
78
84
 
79
85
  const records: TokenMintRecord[] = [];
@@ -87,11 +93,13 @@ export function decodeTokenMints(
87
93
  if (!(action instanceof ledger.ContractCall)) continue;
88
94
  try {
89
95
  records.push(...mintsOfCall(action, fallibleApplied));
90
- } catch (e) {
91
- console.warn(
92
- `[mint-decoder] failed to read mints of call to ${
96
+ } catch (decodeCause) {
97
+ throw new MintTransactionDecodeError(
98
+ `ledger-v9 failed to read mint transcripts for contract ${
93
99
  (action as any)?.address ?? "?"
94
- }: ${(e as Error)?.message ?? e}`,
100
+ }: ${(decodeCause as Error)?.message ?? String(decodeCause)}`,
101
+ rawHex,
102
+ decodeCause,
95
103
  );
96
104
  }
97
105
  }
@@ -138,7 +146,7 @@ function mintsOfCall(
138
146
  contractAddress: normalizeHex(String(call.address)),
139
147
  domainSep,
140
148
  rawTokenType: normalizeHex(
141
- String(ledger.rawTokenType(hexToBytes(domainSep), call.address)),
149
+ String(ledger.rawTokenType(strictHexToBytes(domainSep), call.address)),
142
150
  ),
143
151
  kind,
144
152
  amount: amount.toString(),
@@ -0,0 +1,16 @@
1
+ /** Convert raw indexer hex without JavaScript's truncation/NaN coercions. */
2
+ export function strictHexToBytes(rawHex: string): Uint8Array {
3
+ const clean = rawHex.startsWith("0x") ? rawHex.slice(2) : rawHex;
4
+ if (clean.length % 2 !== 0) {
5
+ throw new Error(`raw hex must have an even length (received ${clean.length})`);
6
+ }
7
+ if (!/^[0-9a-fA-F]*$/.test(clean)) {
8
+ throw new Error("raw hex contains a non-hexadecimal byte");
9
+ }
10
+
11
+ const bytes = new Uint8Array(clean.length / 2);
12
+ for (let i = 0; i < bytes.length; i++) {
13
+ bytes[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);
14
+ }
15
+ return bytes;
16
+ }
@@ -64,9 +64,10 @@ interface Transaction {
64
64
  }
65
65
 
66
66
  export interface ZswapLedgerEvent {
67
- id: number;
68
- raw: string;
69
- maxId: number;
67
+ id: number;
68
+ raw: string;
69
+ maxId: number;
70
+ protocolVersion: number;
70
71
  }
71
72
 
72
73
  export interface Block {
@@ -79,6 +80,7 @@ export interface Block {
79
80
  };
80
81
  transactions: {
81
82
  hash: MidnightTxHash;
83
+ protocolVersion: number;
82
84
  contractActions: {
83
85
  address: MidnightAddress;
84
86
  state: string;
@@ -1,9 +1,10 @@
1
- import * as ledger from '@midnight-ntwrk/ledger-v8';
1
+ import * as ledger from '@midnightntwrk/ledger-v9';
2
+ import { strictHexToBytes } from "./strict-hex.ts";
2
3
 
3
- // Wire format of a raw zswap ledger event, for reference (midnight-ledger 8.x,
4
+ // Wire format of a raw zswap ledger event, for reference (midnight-ledger 9.x,
4
5
  // `midnight-ledger/ledger/src/events.rs` + `storage-core/src/arena.rs`):
5
6
  //
6
- // 19 bytes outer tag "midnight:event[v9]:"
7
+ // 20 bytes outer tag "midnight:event[v14]:"
7
8
  // then a TopoSortedNodes envelope (NOT the struct directly):
8
9
  // compact_u32 node count, and per node: compact_u32 child count,
9
10
  // compact_u64 child indices, compact_u32 data length, data bytes.
@@ -23,16 +24,7 @@ function normalizeHex(hex: string): string {
23
24
  return (hex.startsWith("0x") ? hex.slice(2) : hex).toLowerCase();
24
25
  }
25
26
 
26
- function hexToBytes(hex: string): Uint8Array {
27
- const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
28
- const arr = new Uint8Array(clean.length / 2);
29
- for (let i = 0; i < arr.length; i++) {
30
- arr[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
31
- }
32
- return arr;
33
- }
34
-
35
- /** A zswap ledger event decoded via the native ledger-v8 bindings. */
27
+ /** A zswap ledger event decoded via the native ledger-v9 bindings. */
36
28
  export type DecodedZswapEvent =
37
29
  | {
38
30
  kind: "nullifier";
@@ -59,23 +51,37 @@ export type DecodedZswapEvent =
59
51
  contract?: string;
60
52
  };
61
53
 
54
+ export class ZswapEventDecodeError extends Error {
55
+ override readonly name = "ZswapEventDecodeError";
56
+
57
+ constructor(
58
+ message: string,
59
+ readonly rawHex: string,
60
+ readonly decodeCause?: unknown,
61
+ ) {
62
+ super(message);
63
+ }
64
+ }
65
+
62
66
  /**
63
67
  * Decode a raw zswap ledger event (ZswapInput or ZswapOutput) using the
64
- * native ledger-v8 WASM deserializer. The indexer's `zswapLedgerEvents`
65
- * field only ever carries these two variants, so a `null` return means the
66
- * event could not be decoded (e.g. a ledger event-format version bump) and
67
- * is logged.
68
+ * native ledger-v9 WASM deserializer. The indexer's `zswapLedgerEvents`
69
+ * field only ever carries these two variants. A deserialization or variant
70
+ * mismatch is a hard error: silently skipping it would permanently omit a
71
+ * nullifier or commitment from the synchronized state.
68
72
  */
69
- export function decodeZswapEvent(rawHex: string): DecodedZswapEvent | null {
73
+ export function decodeZswapEvent(rawHex: string): DecodedZswapEvent {
70
74
  let event: ledger.Event;
71
75
  try {
72
- event = ledger.Event.deserialize(hexToBytes(rawHex));
73
- } catch (err) {
74
- console.warn(
75
- "[midnight] failed to deserialize zswap ledger event — ledger event format may have changed",
76
- { raw: rawHex, error: String(err) },
76
+ event = ledger.Event.deserialize(strictHexToBytes(rawHex));
77
+ } catch (decodeCause) {
78
+ throw new ZswapEventDecodeError(
79
+ `ledger-v9 could not deserialize protocolVersion 2000000 zswap event: ${
80
+ (decodeCause as Error)?.message ?? String(decodeCause)
81
+ }`,
82
+ rawHex,
83
+ decodeCause,
77
84
  );
78
- return null;
79
85
  }
80
86
  // EventDetails is an open union ({ tag: string } catch-all), so narrow manually.
81
87
  const content = event.content as {
@@ -113,9 +119,8 @@ export function decodeZswapEvent(rawHex: string): DecodedZswapEvent | null {
113
119
  ...source,
114
120
  };
115
121
  }
116
- console.warn(
117
- "[midnight] unexpected zswap ledger event variant",
118
- { raw: rawHex, tag: content.tag },
122
+ throw new ZswapEventDecodeError(
123
+ `ledger-v9 returned unexpected zswap event variant "${content.tag}" for protocolVersion 2000000`,
124
+ rawHex,
119
125
  );
120
- return null;
121
126
  }
@@ -0,0 +1,39 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { Buffer } from "node:buffer";
3
+ import { ContractState } from "@midnight-ntwrk/onchain-runtime";
4
+
5
+ import {
6
+ ContractStateDecodeError,
7
+ decodeContractState,
8
+ } from "../src/sync-protocols/midnight/contract-state-decoder.ts";
9
+
10
+ function expectDecodeFailure(raw: string): void {
11
+ try {
12
+ decodeContractState(raw);
13
+ throw new Error("expected decodeContractState to throw");
14
+ } catch (error) {
15
+ expect(error).toBeInstanceOf(ContractStateDecodeError);
16
+ expect((error as ContractStateDecodeError).rawHex).toBe(raw);
17
+ expect(String(error)).toContain("onchain-runtime-v4");
18
+ }
19
+ }
20
+
21
+ describe("decodeContractState", () => {
22
+ test("round-trips a valid generic contract state", () => {
23
+ const raw = Buffer.from(new ContractState().serialize()).toString("hex");
24
+ expect(decodeContractState(raw)).toBeInstanceOf(ContractState);
25
+ });
26
+
27
+ test("rejects non-hex semantic bytes, invalid suffixes, and odd length", () => {
28
+ const raw = Buffer.from(new ContractState().serialize()).toString("hex");
29
+ const semanticOffset = 48 * 2;
30
+ expect(raw.length).toBeGreaterThan(semanticOffset + 2);
31
+ const semanticByte = `${raw.slice(0, semanticOffset)}zz${
32
+ raw.slice(semanticOffset + 2)
33
+ }`;
34
+
35
+ for (const malformed of [semanticByte, `${raw}zz`, `${raw}0`]) {
36
+ expectDecodeFailure(malformed);
37
+ }
38
+ });
39
+ });
@@ -0,0 +1,81 @@
1
+ # Midnight rc.4 decoder corpus
2
+
3
+ These fixtures are immutable GraphQL snapshots from a disposable Midnight 2.x
4
+ stack. They are real finalized transactions and ledger events, not synthetic
5
+ wire payloads. Every transaction and event reports protocol version `2000000`.
6
+
7
+ ## Source stack
8
+
9
+ - Capture time: 2026-08-23, after the indexer had finalized block 254.
10
+ - Compose project: `effectstream-00016-m4-13580`.
11
+ - Network ID: `undeployed`.
12
+ - Node: `midnightntwrk/midnight-node:2.0.0-rc.4`, local image ID
13
+ `sha256:caf93d6f9fb3630c906ef3e714c151655377f3d28f907d17545de1870514da2e`.
14
+ - Indexer: `midnightntwrk/indexer-standalone:4.4.0-rc.1`, local image ID
15
+ `sha256:5d79f3a20da9ed86236c7f7dc9d93b1beeb0b0c47c9c43a791041322eb80b74e`.
16
+ - Proof server: `midnightntwrk/proof-server:9.0.0-rc.5`, local image ID
17
+ `sha256:d96a4d0f3f0f10f82698288443f2873a32fed180eb8f93c0bae83572c0a187a9`.
18
+ - Indexer source: `/api/v4/graphql`. The capture selected block hash,
19
+ height, protocol version, timestamp, parent, and each transaction's hash,
20
+ protocol version, raw bytes, contract action address, unshielded spent/created
21
+ outputs, raw zswap ledger events, zswap root, and transaction result.
22
+
23
+ The stack was started and checked with:
24
+
25
+ ```sh
26
+ ENV_FILE=/tmp/effectstream-00016-m4-13580.env ./up.sh
27
+ ENV_FILE=/tmp/effectstream-00016-m4-13580.env ./verify.sh
28
+ ```
29
+
30
+ Funding was generated with the demo-infra toolkit:
31
+
32
+ ```sh
33
+ ENV_FILE=/tmp/effectstream-00016-m4-13580.env ./scripts/fund-wallet.sh \
34
+ de1100000000000000000000000000000000000000000000000000000000a11ce \
35
+ --shielded-amount 100000000
36
+
37
+ ENV_FILE=/tmp/effectstream-00016-m4-13580.env ./scripts/fund-wallet.sh \
38
+ de1100000000000000000000000000000000000000000000000000000000b0b00 \
39
+ --from-seed de1100000000000000000000000000000000000000000000000000000000a11ce \
40
+ --amount 1000000 --shielded-amount 50000000 --no-dust
41
+ ```
42
+
43
+ The deploy/call cases use the repository counter source at
44
+ `e2e/shared/contracts/midnight/contract-counter/src/counter.compact`, mounted
45
+ read-only and compiled in disposable Docker with
46
+ `compact-toolchain:0.33.0-rc.2`. Its generated
47
+ `compiler/contract-manifest.json` SHA-256 was
48
+ `217bbe58580880341fe04ea9e9195ce130f89ac78e8b68438a0ff46a425a3029`.
49
+ The v9-only capture process used the genesis-2 seed to deploy contract
50
+ `3f9b35fec2b6f7a069ee41999217ef90fda0ecbcb05d054549242650cbce1a63`,
51
+ then called `increment`, `mint_shielded(d4…d4, 1000000, nonce)`, and
52
+ `mint_unshielded(e5…e5, 1000000, genesis-2-address)`.
53
+
54
+ ## Cases
55
+
56
+ | Fixture | Height | Block | Transaction | Coverage |
57
+ |---|---:|---|---|---|
58
+ | `fund-genesis-to-alice.json` | 45 | `8987d1fa…aae70` | `490def5c…e6fbc` | NIGHT spends/creates, nullifier, commitments, root |
59
+ | `fund-alice-to-bob-with-shielded-input.json` | 72 | `19f0c4f5…16c52` | `2f29a591…cb311` | shielded-input nullifier, NIGHT spends/creates, commitments, root |
60
+ | `counter-deploy.json` | 234 | `d8aba571…c8fcd` | `1dac099b…a8f9e` | deploy raw transaction and root |
61
+ | `counter-increment.json` | 239 | `663f17a0…09080` | `3c5cf600…6c3af` | contract call raw transaction and root |
62
+ | `counter-mint-shielded.json` | 247 | `4e9157d8…2b2c9` | `16005a23…40818` | shielded mint and commitment |
63
+ | `counter-mint-unshielded.json` | 254 | `62eb5ec0…6cffb` | `c570f640…12d70` | unshielded mint/create |
64
+
65
+ Each zswap event retains the exact indexer `raw` input and an `expected`
66
+ object decoded during capture directly with
67
+ `@midnightntwrk/ledger-v9@1.0.0-rc.3`. Each transaction likewise retains its
68
+ exact serialized `raw` input; mint expectations were produced from its applied
69
+ contract-call transcripts. Tests compare the production decoders to these
70
+ pinned values and separately assert the indexer's unshielded rows and roots.
71
+
72
+ ## Integrity
73
+
74
+ ```text
75
+ a9482a98e7745439464a87ed4d172992dd7b8615f15eb42479a3574f0259d07e counter-deploy.json
76
+ 007db6ce86eebe0aba7ef9654e33893a6e4644f30d028fbef43d7c88b5175a62 counter-increment.json
77
+ bc02ca34a5a8951f92ba1403181e4f64e9bf3153aa1e15727972da71334e1872 counter-mint-shielded.json
78
+ b3f04e2a8a04526fe28a656d48e5ca1a3c5497c886562a6e893a555a9dd27f00 counter-mint-unshielded.json
79
+ 9be8e50e209e1d8328b4efa92a2f85f18044b95966a9a537e896bf1d75f51eba fund-alice-to-bob-with-shielded-input.json
80
+ cb89697ffa07fe2a520eef0c8d286e3b82ab8a4ce4c26c05e7b5d6a56977986b fund-genesis-to-alice.json
81
+ ```
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "counter-deploy",
3
+ "purpose": "deploy",
4
+ "block": {
5
+ "hash": "d8aba57120dc61c9606cd5f6e9c1b8f4f2c100a47db85fe44a78a31432cc8fcd",
6
+ "height": 234,
7
+ "protocolVersion": 2000000,
8
+ "timestamp": 1787514666006,
9
+ "parent": {
10
+ "hash": "7133aacc2ee8cdb430d624379be632bfbf6b14f7205384cc25fc5d5d6e68309a"
11
+ }
12
+ },
13
+ "transaction": {
14
+ "__typename": "RegularTransaction",
15
+ "id": 32,
16
+ "hash": "1dac099bfd8f42f26fd911a036bab2993af9a6242f5aaf7411434db92c4a8f9e",
17
+ "protocolVersion": 2000000,
18
+ "raw": "6d69646e696768743a7472616e73616374696f6e5b7631325d287369676e61747572655b76325d2c70726f6f662c706564657273656e2d7363686e6f72725b76315d293ae0000801000008400804040401040808010400040004100402041408010440100c181810101010101010101010101008020c08081c080410042004030424000428080104042ce1010304e6cd010104030401080410080104010401084008000108020c4001040000010801040401040104010840080001080104040104020401040000010801040401040204010400000104000001040000010400000104000001040000010400000104000001040000010400000104000001040000010400000038346d696e745f736869656c64656400c12001ad20010000000001010000000000000000010839000000030e22000000b5b4ea7388cb7ad405497db6686a6efd7e6a32cca03af358d9aa95cb9900830664bc22730c66de6070e9acee2d411f848adc6591771166fdd240a1eabfe969567029e570dde7a8218659835c6afda4b26acf0a7b5dadd53a13e78c7a64fd7413b847d0d1b69d483148014025d9569d3634eb52e295d5ea45308cb4ae5c5d47b56f0dedc25f2f5d1b19465d87c0c28113af75dc81ea16f432adb11392e486872f8b0cd269c777843c37ef6e832b6baf3ea4b8b3fbe9b208b10a6a5c808734fe3d86908a23a0c0c6853b75a1bc4d83b37a7bf93520dec8fdcce355bf1faf346fce264e80b026ebcceff767f7f6008f9be7a50c97f7d6abed2c0e2c1fc44c67e75c2dac0cc9784592daf2bbe72de6330c4d52841e8e7a538fbe29a109be024458b382aad10b1c91edd3cae9336cc9d78d0db92ca60adefa5370def58b1a657be5d2abc3d51e1452c626209451a99ea0c9f8a52bbb518db5c80a295a49a0a51245bb095fb27a69ae4f791ab25454c80da8a20a8f2e39b61d9bfd1362f2dc97baa0c5b872cdd261a8983112035a2fe2915b971a808944a6704a37e82a08a92b8f292fc37ab98475571ddf3a16bd9974c627718e0343febb6f1b5c8912d47fd6240f6cc19c7b1aa7f6d63b0073315d0e214cbfbce9b55b0ac71063253519994937331ca66919abdc8e41488adae2f640d850cddfea4bcab093e8fa3546950b801cb0576d01aa6bca88b47624571c080340acec8a70a1129fddcc1119f3dffb165ef52794fb61fa61c455dd040fb3819d09d80dc2225a87caf3e6de7eeb0f3de687f5e9abb7a1a0fcceb63aab98be82fafc9abe4a47a57cccf00eb05b4b9dc6f039948c26bcc6ac649fb2fa291811bb2ff4a95e89e89becf2615ceaa2b199d9175c65292413a7164e4eddd7d57421ac84bfdbf6a733d2b55848d2cf310b26277388750c869657c92afcbdf892692273f1fc48c1861043f942b867c93abc4c98e29a6b2077aa6ee3cefed5f155f5dded2bd22833a2363f7378098e7686f21dec28f8cd55b3990c024581fc360c5d9add75ab5c8b7506de0c7a57596eaabb87463d33e8f78be3f4c20f5370407cec6862e8c7144660d4c6bf493e80f5c46f27058dd3df88dcacb7e6e0495eeb4123edaef42548b2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5b07e2d55626c2b64524b5f7fda1be617754c6f0595ebfce314debf625d1b31681f38f8f4fa7bc36c9a28121eb60828b38733c9de58060ae914afa76987f149f0de7cd4cdbb5fee0bd59b432d18b89e9ec22c8648c08223a803151fa10374d2ad14438e62709bb9713e12578754caa8220cd0b6fa0226339e98480cc6debc7c06261a3096c992881aec9e8c44260c7d9371848cd752044e04e8acc9c68d17e64b2afb5a9967dc4b975ede3aa5ede99b5598305f6d4b8d61fad2fa7f42da1c01ab502d767f1c8f51a3668cca51e46f963df331508d0cac0ef3d6ee1f6c8487c473f720668d9d428085c51ea5b1000ad8b496ca2f8bfb861414c118f91ea13a3d6b570b1f9922a5c30633f16b7c084ab2abd10e30d97c701508c9d5743a0b667796d7f770c2dc7a63e7c214cbe53c10ad2b9187538db0ecaa9480ae375a7224dc1ae662bc526e84704e7498f71681e33c88366b1208badf12c22766fad315130693c8de0c2a06634841a2ce2e5da6adfb2646fe802e39e6d93ff7b7fed5b4566e8171911325cdfddb5bc57880e39204c14db4b9fb9e4335312c584ec19b092b1dcf85dd30a6aa4160d81bc13ff82850268de068429037331cdf7e71d25c2a5e93161cc44e42c53528221515b035650dd5720e76e2b0aeb43cf4463c745d852519962fec58244fe1416d63076943455b54ac162869cf75027d7725e2d7a2eedda49721512af067dcde795f35b97a6b8052b81616e90ac82e2be50469d8c2d792a2437f5ac5ea616523425185e0b1fc8b4b1797b1293529b23e5c796664ea82f6448585e8b5f007554d1f3e15451050fa12db3eb25b3ae3cfc3bc263b652c5ff9f7a548be07daf1289120f58a85c3048f9e974b761bc85805f62b29c0bce54e8ce575b0e48ebc288cbb85c534953f0f1b192e60db530fb4489c0b6efd91f90b3e67b00e61d16c5f68b918cb6ac4864cb4d9d9b1dc7fc94a3a3cd102273d002c07c93bcf06cce091bb84e2b1581d0306052c88ef596eb400cd13619c89907dc20f64c8684ed442182b7f8c4f3d2ef57f2428f7a05267562388c3191dc8448f2eb7898b6aca8196f16faf52721594acec645e81fca16ac79968fd73d1358bbb0a70110d8ca8a7840b9b30a7a6aba70d23960e835c7283a9992e61630b87a753a9b81f2f9d0175f70b338817761edfb7141e484667e3a9ffb31fabea1dd88c94243184b131afe8f366e673f6bd0c593d1e7c9deb62d7f0b7f56bbdde73d5a48c54be5161a3074a36e802f9ce9890c04b1b9cf898fe85a9311268e8032d2e6866e6c2cde2cd0fd6462ec75c19ee234bb450885b42451d4109a5d405a6340e3c9d1664f4b9cafaa324fed587bd1c8109071ccb0d659ff3ba350f86d84dc19f06f162a691700c628984bd276c21d940ffd4990f7d802df5d67dec97e71b46a158b1e759e89e3b367c93990b4a76a38b2c27570d40a9287a922f9dcf5bf242b33f12b268eb80986f7215a9b5e4bc69608acaeb755cc0ed4dd7bd88976da07e9c47756f1c9b90ef494c5cc3031ac6c9b5570fe5c45d96272716f15497ab9d41bde0af25af17b2fb7d1e99f32492fb35b5480e2cf566253a4c6c24d8f31cc4dd998de5c9c99f9122ec84aed83fdb08cbb610fea3ac11cae3eedb5f4262146848ebd602a0cd7cbe0604c2bbbd1f0d6edba74f9ea2e92b000008343800043c08010404409003043f8074acd4285f018eb45e3104599206a12605250617dff21a6bb0bcc0ab668056d00028246164645f656e74727900c11401ad14010000000001000000000000000000010836000000030913000000a7adf703f0de026dcb51028876635f530c5887113c842a9313515407e77a81a126d473213fd3cf8d6d93a6a9037f0ad5b1a5ec820ad068fb0addb214126b57ee85972d8d4b76633d23350d386d87b82e356d3d542beb4d2695e1fdd238ef0d70894b53a26d1607e1745a4bbab0931404647cf5477282b87eef93dbdb0e39c13d4498ff632a8f9ee665eb186aa16380b6b5b5a99be0c4218f42813890f1a50189313d44398d20b713c91a8666192c9e6d18a653dd2b39159e617f926b80e38b8fb869c76feed9e67e137fe117474bcb4f1f7df43fd028fe47354b8aa289cd91689b64d5947e85b43b561a29622692098ea5f4380a9fcb3f7ee88fb9766809ce2af2830124ebbdc9d388fd9ade581397ba1ced59d0848e91edf16b5ca950032812a8abd2d62b22d80593d89d1f0e3e80a712128403514fcc58550d758cce39ec8dc3d8612f279d40eef46f7e4e6c88522094bea1717672096e24f97a31354cbc706716c487a08b638c3ed2a9a2b6c365096e518b11446cae2365ca8855b4af62eac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094075db7ef4827d4ad1160e3b15681867581c5d36f8655f14e10241f0cc81d0455577efae8e5b51510b2db3bdc36f347a53e71efb5daded7fe1fb15b7094c4313d170f04f6133d8320b10e93bcc6f3369c4b2ef6a1361511e52997340c2a6e3eab1cbaf7018a432884634cd8f6f6a60331363aa2337a9d96c53dbbceb51829d4b51e1153c64f097fcbc57848ba43a4aba7b27003761fcbcbcc18399872baeabda2bb47a2df25cbba1df786ed03102d2369833bb77560c268d2994083f32ec4c1a4e489863b327b8fb025b0219ae5c6d725ea9903cc394a7e54bb7bc1903905db21ae2f70be80ef7891771dc9934fbd3ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009352799a6af4433fdac61bb7778953b4d87465ab3c191b5605d2561be44fb8463faacfddbfa36f9945ea82c1321d672aa53e71efb5daded7fe1fb15b7094c4313d170f04f6133d8320b10e93bcc6f3369c4b2ef6a1361511e52997340c2a6e3eb393ce71e25d59b1bebda78cfe3b9685e8abfa0a13b427e77c8289e9f5987ddd24e914f83327ac4b0217199d667b7116b408240bf83c42d2a0752e986409a1f9993bd098c6fd509dadd0453840bfe92f5c37fa24ae9e10c7522a981ef6c783b4ad947eab97950f65dc9a84e5a32a4001c00136a54169b6027620df958aa185b8e6266ca949322e3ccd503f018375ae56904e065db5811a3e2bc9a076ce7a9c575beea88b819d1a1570397ef0a6842f63b70b597f7378c6b5396c07a0088619b9a882396e019b0e372223a29fcc436ba4f4108796424efb4ab5b33e224f0f873fcd6715dab86e55bd4f10230ca8f136e88439db58c1dc02f4fba94515fa3f0583f9f1171ba1024ac818d9e9845c80a30d4fb6c41527bb4767ecdcce64ddc3979cb9d341d456f47ec242f9615e6f08189a378d130055f2cb9ae302899e90818d3ebb927cb2ca532792efc1d4ed8045fcbcad9976080f3f33c9c41ac7ed41fe24a92d58a95dfd584210e381b5b5f86943ca4a6cfd7c7bbe5c1be1f1ceb8493c9e7480986f7215a9b5e4bc69608acaeb755cc0ed4dd7bd88976da07e9c47756f1c9b90ef494c5cc3031ac6c9b5570fe5c45d8d4e51cec6dbbbfa67d21a1245e078f89a5358490dd829a93585753c5a15fd793cf1d3a38a3486904108f8d062cc09fb000008484c00045008010404549003043f80051bd949131d5855a2e14b8fdce667b8a88c128a2689b8c1eab9600bdf3aa9c0002824696e6372656d656e7400c11401ad14010000000001000000000000000000010809000000030513000000a2a95d863767e97e003fec05362855eeae8c4c18589bf547d3b4a6398701dd77a02b2072b100d02bbf22a582ff4c9b52a2c46f634373e0b31ad08fd754f0b3e9a7e232420cd0652d234b5627e59d3041e6b6f33c6b5590bf821330f551165b278ddd134df560ab66bc5b3ceaa16a38c669305e1ac648b733bc99d2948cbc713055ea9435c5997849a6be3f1c97a5a438ae4e36d26306f2b4013505698d41fc4345259ee7769cf6bf4d00bd0ab442659d7f44b41c79aac95c20d22e298fefc078ac8d0f2bec66fc9276e8dddf06548d5340a07f9771a0049354d345c369d80d8a44ea309a60e7e2596f599c95546272de9473444b90b86d74512d1cf66ce62518e0c78e875aceb883df5bb4df411a776a6b1cca2eaec24877c9f730618f91abf196eb0f626c4562496a3684e5d8ae09f8f18f4c9eb61e323f289a451cd3cc9208938ed943fa4e27a07bc91a347090b1cf92e3fafd4e4bda9eac15a110b821620cd5fb439f1171175c4da4759c07d5e3300393f6ec0d9ee52989c6d567199219b9c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000946e36e563a6d5ec9b921994b8ca866062ef1d299922d3d5b9f78bf9b6cba441893a2f22c957c69042d0271c2c25d022c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a559ac9e3eefdfdce2e677b18942b7c09a672157bb55364b6b9ebf86d3322eb344880ca961d56c34132e6d879559f1a9c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae212b2b1008492c62ba1e4ef269a630c7401a69669e274db2383d1f213c65bb3a789d0d32cefdaf2cd1dad269a28e3ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ed6d858323270760f98dfddfd2da62e40a4ace4512bce524fec9fdcf3150d649c149ba3037da1b45ea57ce7c60e7d62a025a132f3978036f0cf3ce0caedf4f751aed4b905a72ef2e1c49d53af38c874363098f3aac47a67df50f8e98d686f1c8dae5b8a2db48057906081c62395b0ffa1959f6594c9bd450f25c599ee613c2d176a8bde5de367d2941f690ac5509c209239570d5e02cc02649a9ec3afe10b38af44947237a34d6049242498cef9b4590c5a98b2bae0032ba1539b25c8b047438eacc0b986e318484d57ede11b5cfa8e3c0060967c2ca6093a1b23634b77b78e0a5f7bcaa3ebc883c5070e1734c19a2b9122a1d2d8783e92a070cf9df35767ced529a35d8735e6a1364316f21208831b9824816c28799861aa072cc23b14adc5b9d341d456f47ec242f9615e6f08189a378d130055f2cb9ae302899e90818d3ebb927cb2ca532792efc1d4ed8045fcbcad9976080f3f33c9c41ac7ed41fe24a92d58a95dfd584210e381b5b5f86943ca4a6cfd7c7bbe5c1be1f1ceb8493c9e7480986f7215a9b5e4bc69608acaeb755cc0ed4dd7bd88976da07e9c47756f1c9b90ef494c5cc3031ac6c9b5570fe5c45da8d1556a107b408f430c5f052dbd2189671e339faf8fc9d4b5bcd7d751cb3ba580ee6db565ede49a436599ff0671c7c40000085c6000046408010404688c03043e7ca5723bb9e6219c7e943cd692d2c4372b6e86c3a4f1a2350445dc04fffc586e00403c6d696e745f756e736869656c64656400c12001ad20010000000001010000000000000000010855000000030d220000008693f4d7e9ff5417308aca4a8225e1cfe4d55d6ca9220099644b0685eb42b9a5f8782e93cec5540bfa9215a063067deb89dff4a886921055e6c3879560b2545b787d6447a1c95075d9aae59dd1f9964cda0ad48145e49ff67a070422d65474eab567bf64adf5ffd448a97eec9fc16ed7df6931be24cd1b8948559497d2171c605ee6e1a21a7bc59e495ccfc4a6e3049bb5e72ed8074b9e090ca50f4a8502d2bd700554c88eb14242275929c31880d72966f398db833d0729774f193036aa1e6d845797e6a230935f123b07d732b797b3b42110128a49065e0fd10c292b98d0b51ed148008c166e135260415c8c46a8948fa6a82b1b2e51fdf0b7cbb1da4e4cc66633b64796decffa4964c8291dc01c79f4834b6d4b3d365162e8093c6492dfd6a7be130e64a9e3c927763e3530d5c5732e570902b068a5aa95061c07b2d94c8b6d3506c6e3afba373c7d39143d3c06f790287f07a0966c91d813e10f4c031c0464a300a1482bf082cf222efc3bf60d1211893d5be610bbe936cd9d91f241776296e8d6005e5bc7fed9d41548a9dcd87baab47c769c07fb40c2d5899e17a38be140f8f9340a112c17cc9fbfdc2a7fcc159397dc1350dc6a47eceed1614529eb44d69a10bcc4455917146d9e5bcba285f31bbf6ba68186ab8be596cf3e74fba60a95b0817b8e5d001a126b8466b5cb5f1d02ce5b672337ce5aff8f716b365e31150584bdd715dd9cb018b862ea8f219362acc2f4c66e70d1d9342cede6edc84ef9627b93e21bd702c5d859b9da42e3b07941e01c61147801d6c947b743d54b791eb9547727cf8374b9a1ffce71e56c9f729b804d120755013da4c8e46f22fb95fdbb72920fbbb9a80ff3dab976a3315b82b8e10c5ba6bb57ce09e21a68bfd43b8253ce819c0b17837ec4b7ed60be87922755cd1e3e91a2a0b964644d36f479ebd38bb93a35910c0924ae2e9e721af7680ddedb1006db3746abec4d0dba3602fad8b6948d782bf87dde8ed815eead9df289a57ed4395fe22655c42a2dab59618e4f3a8ea280fc9ea9118b5fe2e3fc6a071b5c808b39c7ce9e7d0c4505c003182de998e875e3e9a2e9e65297302492b657a744c655c6ed022e23a2e506e1bd97ec6951a6fae1da1ca6d092f7206576d175bac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b959d13074d2db0017de176986c41cdd100a302e18ac4b1871a2be2e367d9eb17803d1c27697b66d7b76478087a7094eacd006bdaff9984a5a6d274923f990a97c652e43584d32c37ef077b7ca35698d9903c07bd76507fbdaf0cf0c410ca6a597582bc7ea388c7584e106a611f307e79168d0e724fb6a1e2487d4fb944c1e5ce6061fcf80850a0f69305cf1820ac530a24a53624a77503917ccbdd54322c83d80a5170fa7c968075c89f2df33e46076ab0d317cd7aaa69384e25325d7b2311a919e22c12d1905c990d3454ace0d512478994d272f1cd758b53be46fe8da6c6e6ea44c12e36a9447310bc678344ea606a55a425d543e5dc32ccbc11fabe0ff3840eefba4525170c3960d4d19be1f01a4067b7ef9fb7b45a21545660a55011eaf98bf238f267deffa2f625531ea352f0d3aeeda918c4345d6be80777c3b64fcc8e7255f93e5cd1b40099f226e8874c33fafb8728545524f7bdb6feb04061ebdd963ff3b1ce38594c8e83602c6b59f26a56e1ad4b3840ba29345aff9519a671651ab6bf5a7385035fdf8ac53c9bdcb4bbfdd937a3bec050fde88a8bbc8944414313bf83b6f2f52822f490e1d04a7b1aa208b27fbdebaff105ef1df0d4781ae15703f261c835b84c4c1c0c80ea19f876db0b4176b1d9567f68bd1157f8e7a59be66a026e1f6d2d233faf79c205fb31a26230c866a4d88a56aa3daf620347e8e3b1c30392a7f78461c581ecdde18c6d77235b3870ddc3fc0f753694aa3485ef1292fc9034ce9579d2cc3531045a74b1c88b1245954b19e23cbe3e6f6302c6b8f5cfe8f37a46fd150725b6b0b4fb5b94879a4d5c1682a938b7812801892b8b0c420736026a693ae93b946fc30484fd793dc20941d95ab4ac55eab5c6f9b07ae52104cbed720656f9968c57c20431191b62928f5a2245d6a131fe1a55ef8c6048f735b8e81ad6706ebd2641d8507482df5f6cb52bf177876c84b003bc64061086c83a991c225d1060e5e6eb8b8b742b3688c2f9783f3cb38a7c29d99184bec2e4efbc681a11515a8d135f44bac8e16cd282390e591a80387596c8a6ecd1c74a7786788a3304a5b88e27fb22c8746dc25ea30dfa84e986f09af7af27bd65d7a92046509b8edfc70e7e7d7d7d7f938f674b4da44b71df11fbb17c2fce3459b2d4a0584d70ef5fe37b89c2e05b56b612df446670867103f72ff436970aa15dec669783c32884824a53827c29db616e2916f3d6510284f9aafc9d3d787d7e39dc11e72025806c75fc05ce865d07a2daa59165ae4629380df38866c6db139ecec9f9278edd23ea646a3a273ab0af7728be79fad0b9fab4ccbc046cecac843dd31a2d8e14118a16381d3ddb8a1e54be3d6fc2f91a7751c706e1602dbdf30efb45ab62c99158b33042cfeeaae7fa2e4e0030ca948697e99b334b198220ca6e30feb9bd38efd84d1a30be04bdc646a3da0b19a0674af792947f957f05c8280a6cd6794f7c839d480986f7215a9b5e4bc69608acaeb755cc0ed4dd7bd88976da07e9c47756f1c9b90ef494c5cc3031ac6c9b5570fe5c45daf692883b5e03530f44e663866315e944be0acd47f3621d0b07f1341821f0b67cc54a7ea06d4d120c5540f5c345daa29a496f90acbe985889dcf46df774d10940d17b8edc137cae6d8c68511f016f2fe6affcf6e7dffb10bbfd58a8cc0afa7120000087074000478080104047c8c03043e7c16d9bfbd3a47fc324126f1c3bfb73f2359a50970b9acc41bc4bcde39cd46fa40101010101010101010101010106c1080080208004440696e6372656d656e745f6d616e75616c00c11401ad1401000000000100000000000000000001081f0000000307130000008f69f68d885b5e09639f8467d9a999f9284669a2b44101825a965f8ef0c6394943662d51b7dd8dda42ced04d4ddcda2ab1b411f72f94c3a38a48391c869ed1f843e047e6d352c07beb25184dd313903566b33c85c6ebdee7b78f65112123b8b9a0f74ee9444971ff6856c29b42b66fa7e20583d34394f1a48b1431cb96085839efa6a63f0968da743f6cdf32fc83d95fb5f6d3b14c7bc108dcf9b6427cee1d79c09dd4e802bd2f2030bf7ac1e43ac1b5f52ff4116a50caef37168de4d8d97b40b5f33abde375e00b8b007673b1cc83bd290b56189362add6c59cc26a6d11210ba195da09478cd400e680031dcfe5a66a8edbf1745e9b718e2af82dc4594ee22cf29c80bdd20042b99df6ae6ff7797438eba6c7f2c19f3f7a127444040cbd69b6900f4914dc7d07d4e5c6be1925980997d358b121e426223cb8a21d6a41c85cec8b1f22df6d3f1936c46911d96ae47045b86622b72a1394f84df7481054cbeebbed1b1fced49ed3dfc5f85a0ef9f2a880f47e19c8b73e08cb93deb5341a212786c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097aae81d8cd97c372100d3d801c1d9025b43d15fea61dce904bf4bf80a0c328b9a876422db757e556dd4276d773d2c78817fdbc7a44a911c6f1da9d17f6092006261d849b3994a3ff35c4a71e99a2df47a0b15f709e0d383c8a1d620d22d103896dc0f7ceba401aad2fc7a654e2788e205cbf84207dd1444df38a5f9f164d139a614862e22c5efdd79f211e4b24653ad938a435b9625a12fec6b21957491facb8e21e01d216a5dae2423f057c9c3260f22ef627f1c1f20c37a6216e3a26c755ca088ba60aeab291ae5c8fa1851cdd9bde02755a362d410562f2d4ad29a217d8686f32ab452b655c46641a08ca04fc760c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f90c4a165955f835dd1b0afa011774384e2583f18ee6106a3fb6cb6e9155e9579a85bac2a128d5f8890bc754e6424b817fdbc7a44a911c6f1da9d17f6092006261d849b3994a3ff35c4a71e99a2df47a0b15f709e0d383c8a1d620d22d1038b299669e7689067f9734531abad069f6dbcabb5eb1907a1797962399eaa056f331dbf72539810bfdea54e6e36ec69bb2ad4d0190d3f6b54841d4a2a8b57906038020d2ab73d89d02cc4c689d4e9d9f806f097b90b80501700f448ae1c89e6c8aa39d72e9dbec2325f0e0e741b903f99d4c3a56244feaae4cf2563ca993609e9d1bd1228db77f2261e714687865ce5644a149a717932e59a08bcccb74fa1a7fab64811ba2838b7cbc8f6b3f8c7dc32600ecf1c41082db37d1987545cf3156de0ba26f6ee8a403dfd475c44946fa12aebf303251322740d79d8e7bfa1adfade89711adb5448f6db074cc6b1977d5fee5e7b10768dab146ce87480a16528dc2032842a8da02b2810dc3ab94e76cbc0dd508bf2578ce4791b7e2eddd3634dab9be70b9d341d456f47ec242f9615e6f08189a378d130055f2cb9ae302899e90818d3ebb927cb2ca532792efc1d4ed8045fcbcad9976080f3f33c9c41ac7ed41fe24a92d58a95dfd584210e381b5b5f86943ca4a6cfd7c7bbe5c1be1f1ceb8493c9e7480986f7215a9b5e4bc69608acaeb755cc0ed4dd7bd88976da07e9c47756f1c9b90ef494c5cc3031ac6c9b5570fe5c45da4cef7173af467d87d9c4448e1a6e13b9b6e6567fa37651a44daa5abffe3f8291de606876bde0fd5afbdb4f2b761e098000008888c00049008010404949003043f80dc25c6532c041f3a1f91f5f57b2eb69bb19811efa75b691453423fe835ab2f204010101044101058841010101010981010080214142010309c10190101030400dc60a87473ed73fdc363c99dcdb5a79bb3d28b9336a8d1d4c0aee61eb8d236e40400287b68423d06d2d2ad02330dd7fcd11ed8fda9de13b71ef3734aae706427998704a008010404a4a50101010103335d8b6a2644adb71be2b1db3ab470cb6b3ee07054e78a7a3f03d565043825f747a3fc9f40004612aeea7d6dbaa7c9366bbbcb3f9249cb7175d8f6662572af2732f957c873fb00ef82a0a88fbf9a090864ff8b16df4e39ba7d8a7f316dfd2625921315200a0800a80004ac08010404b09003043f807dc540c94ceb704a23875c11273e16bb0b8a87aed84de911f2133568115f25400008020000b12e0f474b9f26015e0b73ecde31d97f69f28d7e1c59ebad031b8d9e6b82e2dd9eb05412194b8d7dfc5656738ce0655f6065b3f22801ea67e6dc2d6961f4edf9bc08f4c715bc87df40b44431812d88d8de5a668da196df0acb7e93315d4d632d67cde81e67ad38a8e3d3039d3be4433ec5337103a0febb66a35284ebfa0ab21f30d0461a7149d09f5cdf6e04de2f3ce093922eb13eeb6ccd79b0a976fb8731c261d3b83135f13e6ec52437a9ff6b90078ed40a9cfe12a07f119e282feba7d87e621f0709b91001d9a1d32517c36057def4a738afda4651010f887ce2b8e6a8d8032f460e9ee6a5bcf8bf812d039596ffd7b53f2ebea432a384248ab603143c0f9708701c99b9f39c9ca63134e66cae7b31ba042abdce3e97d484ec667b0269baa313670bea5123373e59c3539d7fe812c5f6717463a5d2c59b9d4e2997648b8b326b353479b2f2ed31aad7e3fdfff8e084a525d1385099059c88e186ef0229b7bb98fc6b8b224c75c2fa164529f89328764fb81900d90b11edd1416ff52ef68578f8325cf5bab48c282a64475d09aeb8eda84c4b4baf2c5989ffbf1db9ffa0c858dd0e97b85ea970061f8af9835a7bdf922b700cc080448756e39da2e3d51429aaad93b6c88c0098ac60ef06fcfda047dbfa096abb7461f487ebe1a3868ea54ddbe518bc94e3589a8a54fcebadfcbde7eeb33f1d44ff5cac75ac40a24211ae6e90fc1b8d6bf770408a3684c6f65a364d1c77cdc034cb1fba4f0539b7cd6621e388c6c43f866be7d1e70a37bd9811b60c9bf759f7851c494b3622abf4f07c6b75794ba7b47223b1d85360341cd13ba5bbc561638a0cab8b6dc42fea9fc99f84c2086181aea63a593c5f308581c0b0750d71cbd545f0e2d3d5bc2de431430c4991081da9745a2c15225adbaae14c62822fc7f086438ce75999e5a9738b58c8ac39f116a8ecb65f6fe5efd5c1cf9bb6dc5b76b4496b135127554f5c339e76bea9fa6e112d0b996ae91a003fd40122ac44a1753033261e0840503ec9f0e9f908c7f81b024950c1e6fec0a27700fc17d399318c407997d38e618ae6e697ab1704cc017ab2c8679d7150ec02aedde42e08f7fb17e9d092709169a45a8cd0cc35318977e5c38064c954eb2db73c93ea32cc516bd40859509da3097dba07a7a89dbf42fb7f037795148f8614e7ba887e9d98a2523d965180acc7550330d5f4506dbe19e9751abf7c12366eb2779f3ebd4a430a84513d43e09c67c8a67b32f0b0aaed8ddd1392b255b4b0e94565f30751076f7e534c7c761f5b1f2b4a57be93d377566ec15ebae8ae45b02da2ce82c1d1d6e7a40cade8c406408c1c2639cfebf53e3d54d9bc380085e0f2111cfb8faaa8501f326b74b13c3a4bf0401e450ae4276cd887c417af0344cfbb03ce237beae5f9afbd86b1f4d00cc827fc0cf87a673c63eb9c0445268c371e2face1d79a0d07f39f0000000000000000000000000000000000000000000000000000000000000000e2cfafd1d8ef53fb2c84a2cab6089b1e252d08f04a65576fae7f6657b5539b4a5adbb4969d4816016f3743f708062e29947087704422b27d36d9c5219a85a132354f23a9482cb3bf32074a4313b380d5c40619c5906771aa8800ccd13fba1b16d477e384bff76cb25c7cdb222bc4a0c1accc058fcfe2c0de6b8d5d943e814f30d190e45759628aae7570392d46ff01f01150230dc547502a45b178e91b7c0560cf765c1007de21bc7ad79c41924774f225af501deb4684254e2aea4701eb9525ee6d7edc1764f700f561fea6c1221b513c0ed5f10b65b0488be1439902dd28303d157d27073bab805460da6c8ec35d6cca28b294341e07e055ee1c5602b94e27f390b6bef7eee93e0dbdc0bfb6fb05612bbe52585726df231d3b70d03d759469e283a62f0fd372cf1a4a8b73db55f3ed18ddda6ef4513624d560273ad73f264e9b2edb47ef5d4f3b268e701cc57c96f73a85ea8a7343151a7d8dc53b2e27e30a5d60a1ef237f433f8eb8b516b13d9b5a48c0bb317797375d471d5ba0d9ab3a531abdbcadec8207d54a2bf406ccabbf2f04857c7c64f95dde3b9a7cd003f59e48d2384e8bb99e9ce48684f13aa3eacf33e544d3fabb8ecd307282890400a1c168e10a8915b5945dceeb96ba9a9ec57262914a5d417fe58834be9ba12fc2c5f3196b9d9eca4b618b84bed97390cb28cf81054a67a93c1aec23d3953b74d9e4f20db94111b9267c473b50e820ded94133f488e1c16b94a49795727584667871781b19f01b25a5d9548a9c22e2943c5150b7566c3b5a4b0594f4026de54b3c0ffb2afdd7a6d02f048ab6d1edab57c3f91b96f1c3790cc25ee4998d2fcd2bd04bd04e0dd996a286ead5a7ef86997c4777c542445af73849e40cff502ed435815f6268471e7865d5952d41f8b9538bef45d4ab2324ba3607ae63e084da6a4d4661e021422e42c7f017036a499f70e4f0c656634c9a6679f8c3ab9d044587f33b1b714fc9679ae7b21ebbadd5889909665f9d94bfd6c58e0a0f47b4235ebc70a2d21727f82e2869f5d11d29ae24e1123648ed7fb6487c2e1217a288f8489116edaa9a32096ef481b45fb56571d4646f7ca70b8f23276b8d6e4689f14888c74ba7f90c690000000000000000000000000000000000000000000000000000000000000000ff2c33513fd0ca34a999eba5b48a5601d1f7061838bdfaf361f6adb0c74ddf4bb0afd49108d388edbd2c35b48875c1459f0d1257b31639dd34db44438f44bf3547e626a825ade25f6c36f006405719232e8ab9d5f0c396f97ac122c65adc3e11e41ff2628b779c222535494f869f32707f160fff9834d320676092e41c901f3c519b2157f3dbc6a56cb3e9673bf61ad23d5e13f83e01242cecb26d990abe3a4d11ae3b765760c0c7f8a65d7ba90b41a0cecf75e62fa3e5cb959b769634aea43ab2bd2c6d9612a1b572cb609381638878409abfe67e58186be0cc7356e8872114471b08d6470400844d57077719eeade0da710959f702e51b4c2c0a5ad6d21a47267f5a92b79f8fcf74b7d042bd88e26e5b2dc4b70b87ee9e31e7ebc9ec0f892c03a264d719e359c23f4a04b2efeb7bba97240847950b321a8c8ef2b0bd452d36055bb58be60c1579265f63c148d6243b009303ebec0d52220eacb11b19f5a434616b42558e4b5b35b2a1259aa740aad0aec658c62bee1ef2ddd25f4232ca976bc3a3a884a4e34e8dab622611dfea800cc7e95e4f2350e40258dcb0a0c71ed221635373857fced41a04c7fc0aa80be9775de4125a6609a6eafad9c4fecbda841442ce674cbca23265fca07a91418eb2bd085cc5841d4603bc4a9304afdc9fdd1e73bd3852fca9f1a6f171df13e27977b93481284c30493c97234a971a51f19e1c829ec9cde87afefbe63f1827519e0ac2e04e5ad8cbac58f814cf63af1397c86bed8c57d584d258f85fd2d7bdf48d352c83c2cb4aa0ba6a7e27a16da4175ef6084f9f43c7aebc74775f1bac6dc877a99edb32c9a352c3c0b5dfa8b1eaae53a74e8cac8c250948f7e09155280dccf0b34319ca5602c87cdb923625a106099a8d65059a2d186468a6b37dede04c1c541b8be74e34ace81de3ce22d2f78462936730c7d0e9ed5aaf88a761df851f3336d99f2975d2a2f046774c3cae4d1854c88b3b58a5170a56bb2d0fbb343eaff1933fa48c835818bfbec2dbd947606bfe7a6d5445cdc8c998c9e9fcab6cb01945720325920cc31dabbbc6fe25a8f243957e8c5503e6ca4bdade615346fd98d562b8a24563662867440314a6aab87598e5257f22c5623807073d47ec1c16a0d1c59aca8abc23e2b9f03fd04018d4eb91d1f89c22b0e31c5eff16a8ff1600676ea7ec2d794db749c00391dbb21223a00ba2d2fc24aad72d54991f7c8cadd87cda66f3c2cbf56286252d1b87c1481b5be864fc4502af9782034514b96029f43e2c9f7e4791de35b98bedba2df4889059467e61fccd1cee6cf74ab474f3fe2b46d1367464735cf6a1231f5522c95c198ca8ca441aedc0d78637615f032c91eaaec84ea6f6241fb8ac391a6292b1e0ea85279c560cdbe3706cfca88b92262626972327e95d355300183f0dfd3ff4ab367e932236d73bd219739b2dc5bd16f57359b0483c096ca8d22f0f3d0017aeba274579f121c8351edd623abb76c1a8c7aee7a4f25e38c8abf51dfbcee26f2bdca88f12e67a596a04bc08010408c0101403124f8b6a0810c4a501010100032b568b6a8a3302f6cf2364701760d5da8e95020318c6d1421a1a5bd3405249f8859106be4eb26bf73799b137a5b4285e2e256896d4b204259d0d31666f281dcd346e4b9f73be46f9236d19058a26fc185af6d72e8f404a7f1390f396d32172806ceb1bb40708b8c80004cc08010404d09003043f809be5efb88ca2013bd8e4eb035fd42d5245468fe9afa70d8ba9c1c419a48c4e804010101010b410101010d410101010101008020808d810b80028756e6465706c6f796564017359f6f5fb2e14c463a3ef071405b353bf95c0ff17772de83d3f0b056240925c01",
19
+ "zswapMerkleTreeRoot": "739e04ceb9281e1c1802460e2bf1226b023763fa7fc35495715fea8a05e526db45",
20
+ "transactionResult": {
21
+ "status": "SUCCESS",
22
+ "segments": null
23
+ },
24
+ "unshieldedSpentOutputs": [],
25
+ "unshieldedCreatedOutputs": [],
26
+ "zswapLedgerEvents": [],
27
+ "contractActions": [
28
+ {
29
+ "address": "3f9b35fec2b6f7a069ee41999217ef90fda0ecbcb05d054549242650cbce1a63"
30
+ }
31
+ ]
32
+ },
33
+ "expectedTokenMints": []
34
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "counter-increment",
3
+ "purpose": "call",
4
+ "block": {
5
+ "hash": "663f17a0b33794252f8d3158680f222f98cd109765ad6dc773c91fdcac009080",
6
+ "height": 239,
7
+ "protocolVersion": 2000000,
8
+ "timestamp": 1787514696001,
9
+ "parent": {
10
+ "hash": "55f3aa8acdd7f16f2d07224854e1e2e433e04bdd318a4d817d9142ab13fc9fc6"
11
+ }
12
+ },
13
+ "transaction": {
14
+ "__typename": "RegularTransaction",
15
+ "id": 33,
16
+ "hash": "3c5cf6006b85bbd6fb88c9f900abb25a9e409d642f01cdcb5dac93dafd56c3af",
17
+ "protocolVersion": 2000000,
18
+ "raw": "6d69646e696768743a7472616e73616374696f6e5b7631325d287369676e61747572655b76325d2c70726f6f662c706564657273656e2d7363686e6f72725b76315d293a780008010000ad2e0b212199d644b073b2fb4500438b5fa5faca1d5622c3c698cf24d0a023d310c534c7f35ddec4223673a48b9c47065c42e8df66aef9d950769e70e16629c1b77dcf7b7021a804bf3107812d90bbef6111b5fc0e1198fb1cc1fe9997caff1349bd0e0dfbb1b64ac74adcb097af3655acf4a7c7e446d6c1af76111ee099b54f2fc1a037526b94958f80fa64d67ddfa36ddd05321ab5899309e6d8957266b9e40ce337a7aef6b19bb089599e7690d2433865cd4edc303bde2adfc2fab35a06a64256bc342ad5050568ce79bf6836d7c1f8e27f536a335cf176d773f025873cfdddd6dedb865fd1c2cfa22e786c19c2897a12cbdd6129c092f63d3d2d44bcacd57317bfe74ca2eb17865d5b08dd8c8f181d366e08ae26de232ad232a784bb474e42b50362a59d443bdff71913a765aa3497b9c9199929e7ee57dddcb6088d5d794ea6e931bdfa55d4a3eac4b6fe16970d35da69d786ec3c38d61c1ea0fe4eff8f5961391894dd11d13036340e7ab713e3ec3f8ceba620b436c4e11b71ff2ec3f1bfbcc6e4b579f1db2128855678bec41fabaa5f0d6f617ff831b2c167c284966f8256062e374acf45f412fb19bccbaf51389b6e23a08c30e2909e2c699ef3a8c9c519160d06f81113f731814af2a30b2061e491300849e599be9056d63a4fecfa055cc2fa9ab7ac6424ee16f1d2817ef89849a4925a074f880723b2e708908aba9d278f811c36a4b59190c3e09810bf928008b9f114f05a73f0c591011077377f5a38f2a82946defbd986384e808c07ab398e68ab1ff889820909bb1e3b329cf01ecdf20d6b32e4fbde0f6cdb8c54e337348970ba9698a59c02a489ec8fa9aa78912fc4a44398b4dcfe35d8f7523c02fce3c911412def0dc2c57b6678f1b78ab14c2e67cec29654f3ece211655c85f96bb1c0a83517b38d47309320a5359026261dbc602de669a65aa99ce68b4f0f1cc7c440c57efbf524495e164f9131828d843f110ffe0958902d22bdf50f7cb10c2492961d78c29741b1acbf5bf394c1a8e615cfe27371784fb64f98d113d8895ea9516d5b1e3941fea833fd38acf18fe4c315dc10273fa5f41a59d22beaf0f9d5855f878115b71a0243149ccc7caaa3dc221dd3a032351e8ac29645570de23ec4d74aa513dd452225d3a1a8a0afb80c7a078e6f470384d154c664e614c5a89867b6812d867ab104a596bff59614296b128480450c5271112f4b718b36334c6d127f12f1faa61236e575fa61a0287caaef0e980ed67e2ecd922ee3c10f5202c1532d19bfdad325819248d1c1c1ec73e67118307b5286a27e19b5d7c8ea383e8ee03b4d9cdc226229a408d4611751439ca417ae4267e37fc148e79634f17e99bdb9536c1d11105ad03fd5558ad48f8a877ef7b73f1080a68932742666e364e921dbec32e0c3990afed327a44969b32023672ce6c760a547d096efbdffc97cfb00000000000000000000000000000000000000000000000000000000000000002ecf62bd14f06a8cd8fb39507a2a1182b5da7a46ec0cef8f48f869312ab34d58f4750c4d90f1ca7b6c233a75c401150803af2e7f9bdb4a0b980c52ea263770353d5474cb01bb3b81385c2ed1388db6b157ecb31b4476dca52d59df6f422ab65dd06bb9aa83fa38f6da74f8d10836d5d93619cc6618caa251677ca56a62da5a0c12d446ee3d578365a12dc74641847195fc38c46f31528a1ba20f7143e042d7480728bfba2ad3e2e10bd142bc317924cb4e5913be9e1e78e487be8314483ec857b27c0780e1f459a605d1797bf68e3a573a818a71e74050cc70115810672abb5f7615961607d0d11f79054555f5e2c1fbacc3e24bbedf278dbc3ac014355fea22156f00b0f52d4aed6997d7f3324e539f9a2e4f712be954a4f3b14e25920f4973d8cb92ed35773eb547e56a5eb1d2e5d28ac1717e0cb489397d5e2168237c433d366e6deee64de7d74b92f9bb5eed9e30dafed53db2a1f9fdc0efd0a4bd5c2c30e2cc0434211bcbeff8fcc9ced786465787f8b51f0d9d861a11b17ed06fed5c70b7cf7daf0996bb1ede41588685fb443a41ce29175645020eb3cdba0c31dac42b798019fe53bcb1ab39fe4c1f473ca3c3774af506fc0914f977d54e44d352af2fca4bb51c0a7a512404627689376d58a32f7d8d3e860182b1ff54f98c692adb6e1ca3699157f35110b2b3853b92b615b311499c0282d9c6b34b68d4bcc6316a3598bacdd4639e3ace32e6ef0b0f0ca33aae69416925a374132af6b81530fed618a721d3288c79a6cc95c742a4cf23f0f6df4c9282330dd478684e0101f436c716d8fb9c70d035f0cabba7942450f35a69c3c3ebf6818b4d83aa5b3d30f760f312269678fa4e87c3d7db4e13235722074194cc79cbb3631405b269f52be67e3d310d4ff996cbd272c2148a047ce1f15e74e3e1a126c28028b10a5360c0239aca20f13c8e44c54c88285b9c4de08f81e9aaabcc71bc97cab921929b87876d3c3f1ef4be4b7d577bfdf6ae1f4dec2b4fadfa6335576ebd5f4039d1e7f788ee5d9649fcfb28c7dc022b51bf6dc6745a43d6146a26e3cf207b055d8d3dab98aa34f70891db48e53f3e07649a87ad0f764ae117c6cfdca123e63e63ea1bfd757ac4a26c00000000000000000000000000000000000000000000000000000000000000002b8a4ad5b7fdfe13ca465298210c644c917483a31098d1692a002df95958bc62a341c71a8c519680b9775c7c9b2f0665aad1853df909520c23e2268a530b1555dfc169be4ac94b62bc4ce42e8a9bf64fbe4c2348869bf049f0df115a55da816332b81e806bdbba3186f84771158c95f7b517791496a5e4a82815bc1fcfcac9056512058ae3ab2f89f9d1e89d4724db651acfbce873c7985374db32a4a8006c6b717f74db7439c5468ab53518ff6ece9f8b25fa67b28656fdd62f34a6dcb718089cbf8207f2acfbc76866399c4c4ad9e2c9e9337992b3bd64c21859e70681ce62cfc35f13bdad7a46de85d66910a55ec062458d5439bedf17f3c042c1a29aa10046d07356b2e856a9590a8111edbab653c6bfb82202d4c65219ced55f0bb728599518ee9703b425d327bf2b768293e12d703e0b42855d2e634cbc8fece3fcae4fc7486f179fb26221c1fc55d553d77865ee911e06d3136971679bc3763ed9d923dfd54637394bead322656fd4321ef92809c988abc608dd78ae950eb79462e1062a79a8969a7835533729a797a9257ba8cc16b73eb811b900c30bace0f5f8c3721a0ac8066368a8d534a8c0bd65d91451b35abf6eb9f7255d47c3fb491d1b194045a4a6d3c978a52f3c78621f20279232bb5df87cb0c147ca083e796f4c5dea3dd1a8741346fc1f3bb31f879b166310b304e7148db59252ba5879acd66309fc0ef3a2fe4066381b8f2f76743bba5910eb41233044f06d63d2bdc89fd3b6fe7c1c689dd3eb1dcd58d852300cd724521affa710089be503bb3ec55a5b0117b3823ec0f0bb06fa28372b44ea6e2c10fa3638abe6952819a427fb26965bcdcebd6b4f8eb97ea5e6d37fc266715a3c92382766cf9bdfdc9db862258471f17b6d49ca71a1267670ff403f510e33deca1352d23bd66a9e852c61e28c91d08974c69b3a4b833500524f2f222c85afa618d1f2b261dc9d3575649fd45a81d8ab2148034b1d4cda99a666874145c49a6e86c3b608940ab0de7087a43d2699de16fdedc3091bc951dc878b8d350519f19343e486dc4e5886c3a82df625b29b525e3503c18c691cbb86b8986b4d1f6a2f768c40a4d47a8d0cb6062f6e9a577ed64b026ffae15db511c3942add91541b6de24da9eb9141445d2edb600839d58ec15b8b07edbb59e3a0e2c5ed1b687ebd4c3dc9c7ca6fe8b07af7e8b22815981bc1baaceed86b7194645822d8ce873a2fc115d2ac840b4eb9beff131e46fce1b86aeac5444a5dd836e951477a2ddab0b0ea795414635ba771b36aef8730b475af3ad3e7c35151270010d62e2d083606cceac9e069e4ed1b67f57668cfc38af6abcbfaa9d48fa566b7b00ea5adf9e922023d605130980a233c07667e19c8abf69604ec06026024eb0240726a938893b459b7ca96521ff324cba481e040b61d11acb6752a20d0130ccaa22de83a3e8765932d48f0bb28fa319415f29aa2617f29fe9693c56610a7ee515b32ea44e99bcf8194ad597cfe9d4b95a4980bb1ad631912834b7eb7cdf21b040408010400040008080c14032a4f8b6a080c10a1010101000343568b6aa3fd19e501b47776de37d8bfd279026c05bbb9191a9ec7a9a2323375f4dea8b117628e9b70d175c8ccc6f1a6eb0a00b54566c8b5a539a4beffcce520067814da6f0ed4f495a533abc8921ebdd679d245b537e8f4415e97f3d7ae7aaa230decd6080014000418080104041c9003043f807dc540c94ceb704a23875c11273e16bb0b8a87aed84de911f2133568115f254000088e68000c0040010428080104042c0c19000100080d040434080104000c1a0101043c080104400c38400c0c0c0c0c0c0c0c0c0c0c0c0c08020808304408040c000802032c0c0c0c0c0c0c0c0c0c484c38022ca330035601137951045104000450c12e3f9b35fec2b6f7a069ee41999217ef90fda0ecbcb05d054549242650cbce1a6324696e6372656d656e74000173bbd0af145e5b60f1620ff7b3712d29bcfc27cea0bf48caea5084214ac46f952b01812d88c9c0257d8e0bda2b9e04cd86f87cf55be40c45d4ff02c1cc1e9eb9754a91f77626fc63b4a7650784f853e9c997745ab077457fdd6241a90b77fecaeedb3b6c6b9d073aaf780b6430656578ce7d4af739973a8c63ba0e012b094220717157c386827e4778800484487949a2a53da621489e6f60f2eaf95a7cee227ee25fcf6ce11d83c47cb4bb29db4b0c1c2a3f55d4a70a12c16079adeea78168723a2da33c876e062413df6d942d0064584ddda278f386adf4777320e02f4f7c9123a6afb58281787642a66ac6f7a698c210a307f22b4f159cfddd67e042af25c4806cfd298291a4741b7e0ed9f17330389be2732fa7697edcf73c51797e0e68ef5c2f050162426a1db3a44d6acc06f6c382866c53c39f122b8aea6b012ef9f11479558311904b3cb89bbcac88fd8139d3f3d07b9a235ff4fe7117204c22e45cb3958b1d49c6c2a76b39cb2a7e5dd5a19e4629ca508f3ccde6b0ee8cde14044cf41b7487cd09423485e4d8e385b5d2ad82abe7e97a6257db7b9dc88a9ad3b04f5280f1c6a68e91e1ec2da90f6e8b5e751d30b3b0c960b92f5fcd6d864e35436b737ffe283172e25a6b096fafb75ab42247e916a5e18b71602f25453603159f78998965e7c2cbb7d0af5038cd68a6327f27e7225df874a9d20b85f6c9d6597393945ee9523e89fee9aedb5fb39253e67f565830c935b424f5f764a863f4dc0a7a55cb6016a1a29778f87201d0c99b8e2e51e3d34ecf8c785021e8d521a42aa17400c25dbfcfe4e79e89308b456adf8716ab430e029c6388e5ce7bcd04077fa8df04e682a267b615da23af3b0feed8831723d7e53e32a9001bf771566303d1aa664b3d599edb29a1671bdc40ac376d40921be0ad92639796fd8de60791ee3c00161723608425d5371e1ecc24a55fedf5902a4dddabd758acbb97bf24ac9c5508076a741b0706a1c32c84604a03dc3dd8d8e87fff2501aa90b0b7472dada1b335213841f6ad38147d0e4549b9dbdd33551e00bedde9ab96927137bb580397c0d289018a266d802352c01ce90a8964f1b5986e8c26259ca2e42527d0c7a0c101655a672d3eb1d1acb4646e948817de0d436666f5465da2f50c80e403a7f7e088ddc0cb1f93463ad7835afa3351902b1b34c0a57491a81c88b4d15a9ccfc4d0ad83aba653a4ec45befa1dae1d9f58137258531631203f4ab840c26784914589f8cc7d460c2bcb038477d972d0f6446ad7a858f3c76d211148e3d5c82196de5f5007794718953bd26a27fa811b2febbd7913c80c83c91e80ae92f3ae113ecce9b9aa16883d22ac82ebb8647bf9ef676e2084892e78787bd6496648d1466627ee295ee60cc010381a00000000000000000000000000000000000000000000000000000000000000008ea2ba318b3397f4f2f0992eb2e8b8d83176d383a402e4836b5ff7e7a27cbb0b6e2b12ec2e1454d7a697ad1ac577f71eba0e8fff5fbb888b1ac5609e2a29db32e86c65d6e3c6578f5a41260231f7e23f96d9bfc7b3464ab9a4e33a3312692e27646536d1d782d8ccc5d1e8b59153e11420f5fa1d2522e05a915e122f7f3439706dfa85c8b47cd6030b5103cef1609102b8ccb28e9562eb3a4959f375c0dfb93781d118259cb8e9687c0f8ea00f0dd45a983ab0a6ef7168cfb40fcc544412816835b9e9b156ebbb5e8ae3e81151b9dbfa0ffd67cdcf2a2b9463756bc4448ef65fab6c495aebf26466648943aa2c94bfacdb28f15bc74224adeb018c1a2ba0c13a1876c565019772f56db208208aef54a1be8a434fdf9e50b3f4f52831b734fa35840be0538e8ba49e0419aa95ea9bee3c09309989b3bccd5bda1f02262f3f9f58ad53d57cd0a7bd9a2a911cd44f0e5d99ed9ad89f83a6017704f13eef8ae89114adbdc250bfcbd9fc0706bc9950ad0e76c85888e419e11fe8d5289f14f0425e6ca6233c5f70e32140c32225bf0139eef7fb69321f0f876c787125e6ed58d00808b30de7ddae7a6857de090ce8e839f8e8f7cd4a11286f4cc87ddb18d9dcca650f86bc4a2e254928e9dcbfb2cf319b275290a3c2de40fa38bc2f13242be5d4b74d35ae6da228bb0439cd29a824eb05acc9dd1ab6cb87974ec320d0dda7c686b96300000000000000000000000000000000000000000000000000000000000000007020f824ef7e714ee4337e1f9a2c8d2c6a6989baf751c6755ab5cb2e361369631e7c70142062028bffaa0eb8d72ac7c44fd8dce91faa803b5602f61f0873dc031809ded837a6868e2a110cd2dae25e730645f52b480d9145b71113a1404f3c38b182a4ad86583688cdcb028afe54530659e325674f7affaf99f517eb1214e567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4794b73749a9fd11a8e94f0927ed5e3ac8b1e429cb2d9655f4c18e949f07b3600000000000000000000000000000000000000000000000000000000000000000d88ed781e49063277b1720ab6a7e9ee60f6ae82e687d9601e1ad0a9efed761d0000000000000000000000000000000000000000000000000000000000000000f0ca6c6516df0661eaeacb13c120aa3d7d880957c1c179aaf5318386c7843e13948f17b09d38203ce1a5083571cc78d0f7aaf98987c7ceecf850ae70ea3fb46375a132ca3c6d58bc3162db101bf918889d53a0c6ee0e59c2a21d48cca077f005e0eb07fa910da6bf1cb285f50184ee6c1769d8c94f2b013474da0082fb3e9571f1c0f5bff13b318885a28846020661ac0ab21c731ce6e5f60fc8122636b5543ad158d478295148539044b9bc402ce95260d526f42bfda8fe812fc60612ccfe255dece9fc306b898d5bc9b24b5b0523cdcdef92d89506319371dce63abb99f2610266a8757e7a2e510a70b14d864adb22c615bf63c1caa562ce42df0112770b48256634cc498c66b3f30e962366b312eb165bf28124811b53d307313fa9e9603d7809d69e99e5c5d81cd473dae0a94c28ec08496af2c02f53248b90c33749521c8cb5b48d1bb7f0be30c02ebdeda7725350c7bcd4b7a78b00b4390be179321d2fb704f82f0863a674dc20424c16f4771bc05e87dbfe59e7a9967a60116a28ee2fbb14340b10f5b9871110d9f6b8ffe48235914b8940d994296ebc68d13f273f5dd622d4b8af955fc7d7ddb83b87d18aceea6f3b341df2405ba081a21104d58d19d48eeec2067019dec43beaacb7e9375b0dd847aac9ebea9f9c693c1af05e540f614ee891766b27b78eb3ccbaf641ed1844a73c0fedad367cde85bdff68ba1d09f88ba1dd39965117c079f30a4e1d9c8722a628b0feeb56cd5fb3004d975c3138f874c48d7d8821230dc8ed29f1f0f2fb62894b8ce0e2b6ad20219e0c3c138200658f835179f84324e3652fdf83af5e67952373e696890f46366a334253463e50a4b732a2cb5709811e097e937a6328f278584e897923155ad946645dbc4d5d026d0ab2d2283660dcbfccd9167b10d88d44df866f6be13decb84cf74fef423b423414c78f93d88c0ace7438f27e54859ba5ebf5ef6069a2568903587d5c15ec47c1f044ab54678018a732c72d317dcef8bd9707ee5379df122eb36f85ba8cde1c93cc9d84cd79bbbb8e52cb1456fe1685350c7c70311c190666bc27c27c95155aa8b80501b46ad046a172394777dfc11804e2a080d44cece02638b8c58820956f92f0c52fe180752da2ed603ef2bb747b53a4ce2d29816ccb2461e777d661b0dc7384eac3e39145e4cf470b2384e6cccabbe9fc60933cdcf7c7e0158494316c494b60f2baa25031749320c9f52b3bdb4f4789fb5975fa3000dcf1ed332b46f6f254f1ea4c028af5f39f326e398703c65e62d4583c844ed4a91ad5f8c632cd1cf85d49c5120f89dfc89375b97936e8f13443d9578fb64c34ab499c1ad54f09702ba541ad600c360866f4a08a1061b5613f8120aaa50670bf4c1f4d01965d3e580911a90f8e2698d3eeebf3f108e5b7ad05410c4ec3230d1ab24959e593ad32d92c045404000458080104045ca501010101034a5d8b6a75ac6669808c8f2f71c9fc9439108a62dd7b2ff85a20ad747cfd41159327d00e0bdb86fedb3cc783de3a9636a23a8ec689af3430087252f84d9a351e17149e0d73b85e8026b1331fa0a85ce40ee74a140a0f5a14e2ca1402f3f148dbc2b2e7580708246000046408010404689003043f802f865f00aeb19334a6461a902b2c4024be03f69001b2c5b2d885a9c97bc65460400c0c0c0c200c0c0c0c0c0c0c0c6c0c0c08020808700cb80028756e6465706c6f7965640173550da95348eddd4be6abfb5f601134cc41ab763df1117da4297aff25ef4a6707",
19
+ "zswapMerkleTreeRoot": "739e04ceb9281e1c1802460e2bf1226b023763fa7fc35495715fea8a05e526db45",
20
+ "transactionResult": {
21
+ "status": "SUCCESS",
22
+ "segments": null
23
+ },
24
+ "unshieldedSpentOutputs": [],
25
+ "unshieldedCreatedOutputs": [],
26
+ "zswapLedgerEvents": [],
27
+ "contractActions": [
28
+ {
29
+ "address": "3f9b35fec2b6f7a069ee41999217ef90fda0ecbcb05d054549242650cbce1a63"
30
+ }
31
+ ]
32
+ },
33
+ "expectedTokenMints": []
34
+ }