diff --git a/.env.example b/.env.example
index 7d34cef..48c5713 100644
--- a/.env.example
+++ b/.env.example
@@ -37,7 +37,8 @@ ADMIN_WALLETS=""
ORACLE_SECRET_KEY=""
# ========== NETWORK CONFIGURATION ==========
-# Network to use: testnet or public
+# Network to use: testnet or public. Anything else (including empty) resolves
+# to testnet -- the app never silently selects a network where funds are real.
NEXT_PUBLIC_STELLAR_NETWORK=testnet
# ========== STELLAR READ ADDRESS ==========
@@ -46,13 +47,21 @@ NEXT_PUBLIC_STELLAR_NETWORK=testnet
NEXT_PUBLIC_STELLAR_READ_ADDRESS=
# ========== CONTRACT CONFIGURATION ==========
-# The deployed CoreFlow contract address on Testnet or Mainnet.
-# Update this after deploying the contract.
+# The deployed CoreFlow contract address, on the network selected above.
+#
+# REQUIRED. There is no fallback: an unset value raises a clear error rather
+# than defaulting to a hard-coded address. A previous default pointed at the
+# MAINNET contract while the network defaulted to testnet, so an unconfigured
+# deployment aimed a mainnet contract at testnet RPC and every call failed --
+# and a developer running locally was pointed at the live contract.
NEXT_PUBLIC_STELLAR_CONTRACT_ID=
# Settlement token: the Stellar Asset Contract (SAC) address used for custody.
# On escrow creation the contract pulls this token from the manager and releases
# it to workers on finalize. Use the USDC SAC for the configured network.
+# The Stellar Asset Contract used for custody and settlement (e.g. the USDC
+# SAC). Escrow creation refuses to build a transaction without it -- there is
+# no default, because guessing the settlement asset is not recoverable.
NEXT_PUBLIC_STELLAR_TOKEN_ID=
# ========== WALLET CONFIGURATION ==========
@@ -63,3 +72,40 @@ NEXT_PUBLIC_FREIGHTER_TIMEOUT=5000
# Selected automatically from NEXT_PUBLIC_STELLAR_NETWORK:
# Testnet: https://soroban-testnet.stellar.org
# Mainnet: https://mainnet.sorobanrpc.com
+
+# ========== VARIABLES WRITTEN BY `vercel env pull` ==========
+# A `vercel env pull` overwrites .env / .env.local with the DEPLOYMENT's values,
+# including these. On 2026-09-11 that silently repointed local development at the
+# production database and Mainnet v1. If you pull, re-check the environment:
+#
+# npm run check:env
+#
+# These must be LOCAL in development. `npm run check:env` refuses otherwise, and
+# it runs automatically before dev, db:migrate, db:deploy and db:seed.
+PRISMA_DATABASE_URL=""
+POSTGRES_URL=""
+# Short-lived Vercel OIDC token. Never commit; never needed locally.
+VERCEL_OIDC_TOKEN=""
+
+# ========== CRON ==========
+# Bearer secret Vercel Cron presents to GET /api/indexer/run. Preferred over
+# INDEXER_SECRET on Vercel. Generate with:
+# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
+CRON_SECRET=""
+
+# ========== BOOTSTRAP ==========
+# One-time secret for POST /api/admin/bootstrap, which claims the first admin.
+# Unset it again once the first administrator exists.
+BOOTSTRAP_SECRET=""
+
+# ========== SETTLEMENT ASSET CODE ==========
+# Display code for the asset NEXT_PUBLIC_STELLAR_TOKEN_ID issues, e.g. USDC.
+# An escrow holds exactly ONE Stellar Asset Contract, so this is the only asset
+# a payroll CSV may name here. CoreFlow never infers a SAC address from a symbol.
+NEXT_PUBLIC_SETTLEMENT_ASSET_CODE=USDC
+
+# ========== PREFLIGHT OVERRIDES (never set these by default) ==========
+# Each is a per-run, deliberate escape hatch for `scripts/check-env.mjs`:
+# COREFLOW_ALLOW_MAINNET=1 act against Mainnet on purpose
+# COREFLOW_ALLOW_REMOTE_DB=1 act against a non-local database on purpose
+# COREFLOW_ALLOW_UNKNOWN_CONTRACT=1 use a contract absent from the registry
diff --git a/.gitignore b/.gitignore
index 82b9084..78881b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,11 +20,18 @@ coverage
node_modules/
# dotenv environment variables files
+#
+# Deny EVERY .env variant and re-admit only the example. The previous list named
+# .env, .env.local and .env.*.local individually, which left .env.production,
+# .env.development and anything else a tool decides to write unignored β and a
+# `vercel env pull` writes real production secrets into files like those.
.env
-.env.local
-.env.*.local
+.env.*
!.env.example
+# Local TLS certificates for `next dev --experimental-https`
+certs/
+
# IDE & OS
.vscode/
.idea/
@@ -60,3 +67,8 @@ contracts/*/target/
# Playwright
/playwright-report/
/test-results/
+
+# Exported environment dumps (e.g. `vercel env pull`) β these hold LIVE secrets
+prodenv.txt
+*env*.txt
+.env*.txt
diff --git a/README.md b/README.md
index 9266509..78dc652 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,24 @@
## π Deployed Contract
+> ## Two deployments β read this first
+>
+> CoreFlow has **two distinct on-chain deployments** with **different security properties**:
+>
+> | | Network | Contract | Status |
+> |---|---|---|---|
+> | **v2** (hardened) | **Testnet** | `CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4` | Active. Domain-separated attestations, admin-managed oracle registry, work/amount invariant, pinned admin. |
+> | **v1** (historical) | Mainnet | `CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW` | Deployed earlier. Carries **none** of v2's hardening. |
+>
+> **v2's security improvements are NOT deployed on Mainnet.** Mainnet activity
+> referenced below was produced against **v1**. Full detail:
+> [`docs/DEPLOYMENTS.md`](docs/DEPLOYMENTS.md) Β·
+> [`docs/evidence/REVIEWER_EVIDENCE.md`](docs/evidence/REVIEWER_EVIDENCE.md)
+>
+> Testnet activity is labelled **Testnet validated**; Mainnet contract calls are
+> labelled **v1 Mainnet deployed**. Neither is revenue, pilot usage, or a
+> commercial deployment.
+
> **Live on Stellar Mainnet** β View and verify the deployed CoreFlow smart contract on Stellar Expert:
>
> π **[View Deployed Contract on Stellar Expert](https://stellar.expert/explorer/public/contract/CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW)**
diff --git a/contracts/core-flow/src/lib.rs b/contracts/core-flow/src/lib.rs
index a4ef3a3..29e4c8b 100644
--- a/contracts/core-flow/src/lib.rs
+++ b/contracts/core-flow/src/lib.rs
@@ -1,8 +1,9 @@
#![no_std]
use soroban_sdk::token::TokenClient;
+use soroban_sdk::xdr::ToXdr;
use soroban_sdk::{
contract, contracterror, contractimpl, contracttype, symbol_short, Address, Bytes, BytesN, Env,
- Vec,
+ String, Vec,
};
// ========== ENUMS & ERRORS ==========
@@ -26,6 +27,20 @@ pub enum ContractError {
ProofMissing = 13,
NonceOverflow = 14,
SignersNotDistinct = 15,
+ /// The oracle public key is not on the admin-managed registry.
+ OracleKeyNotRegistered = 16,
+ /// Attested hours x rate_per_hour does not equal the escrowed amount.
+ AmountHoursMismatch = 17,
+ /// end_date is not strictly after start_date.
+ InvalidPeriod = 18,
+ /// Batch exceeds MAX_BATCH_SIZE payments.
+ BatchTooLarge = 19,
+ /// This WASM pins an expected admin and the supplied address is not it.
+ AdminMismatch = 20,
+ /// No admin transfer is pending, or the caller is not the proposed admin.
+ NoPendingAdmin = 21,
+ /// `upgrade` requires the contract to be paused first.
+ NotPaused = 22,
}
#[contracttype]
@@ -83,7 +98,11 @@ pub enum DataKey {
Escrow(u32),
Nonce(u32),
Admin,
+ /// Proposed next admin, awaiting acceptance (two-step handover).
+ PendingAdmin,
Paused,
+ /// Registered oracle signing keys. Presence => trusted by the platform admin.
+ OracleKey(BytesN<32>),
}
// Storage TTL constants (in ledgers)
@@ -93,6 +112,45 @@ const INSTANCE_TTL_EXTEND: u32 = 17280 * 30; // Extend to 30 days
const PERSISTENT_TTL_THRESHOLD: u32 = 17280; // Extend when below 1 day
const PERSISTENT_TTL_EXTEND: u32 = 17280 * 90; // Extend to 90 days
+/// Upper bound on payments per escrow. Every entry point loads and rewrites the
+/// whole escrow, so an unbounded Vec is a denial-of-service vector: a batch big
+/// enough to exceed the ledger resource limits would make its own escrow
+/// permanently uncallable, stranding custody. 100 matches the API batch cap.
+const MAX_BATCH_SIZE: u32 = 100;
+
+// ===== Oracle attestation domain separation (schema v2) =====
+//
+// v1 signed only `escrow_id || payment_id || hours || nonce`. That message said
+// nothing about WHICH chain, WHICH contract, WHICH worker or HOW MUCH, so one
+// signature was valid on every deployment of this contract on every network for
+// the same tuple -- a Testnet attestation replayed verbatim against Mainnet.
+//
+// v2 binds the attestation to its full context. Every field below is read from
+// STORED escrow state rather than from caller arguments, so a caller cannot
+// shift the message onto a payment the oracle never saw.
+const PROOF_MAGIC: [u8; 4] = *b"CFWP"; // CoreFlow Work Proof
+const PROOF_VERSION: u16 = 2;
+
+/// Build-time admin pin β the fix for `init_admin` front-running.
+///
+/// THE PROBLEM: `init_admin` is first-caller-wins, and a Stellar transaction may
+/// carry only ONE Soroban operation, so deploy and initialize cannot be bundled
+/// atomically. That leaves a window in which anyone watching the ledger can call
+/// `init_admin` first, become admin, and then `upgrade` the contract to
+/// arbitrary code that drains every escrow's custody.
+///
+/// THE FIX: a production build bakes the expected admin address into the WASM
+/// (`COREFLOW_ADMIN=G... cargo build ...`). `init_admin` then refuses any other
+/// address, so winning the race gains an attacker nothing β the window still
+/// exists, but there is nothing to win.
+///
+/// Builds without the pin (tests, local development) keep the old first-caller
+/// behaviour, because test addresses are generated at runtime and cannot be
+/// known at compile time. `scripts/deploy-testnet.sh` refuses to deploy an
+/// unpinned WASM, and `expected_admin()` lets anyone verify a deployment's pin
+/// on-chain after the fact.
+const PINNED_ADMIN: Option<&str> = option_env!("COREFLOW_ADMIN");
+
// ========== CONTRACT ==========
#[contract]
@@ -109,14 +167,79 @@ impl CoreFlowContract {
if env.storage().instance().has(&DataKey::Admin) {
return Err(ContractError::AdminAlreadySet);
}
+
+ // Front-running guard. When this WASM was built with COREFLOW_ADMIN set,
+ // only that address may claim the role β so losing the race to call
+ // `init_admin` first costs nothing.
+ if let Some(pinned) = PINNED_ADMIN {
+ let expected = Address::from_string(&String::from_str(&env, pinned));
+ if admin != expected {
+ return Err(ContractError::AdminMismatch);
+ }
+ }
+
admin.require_auth();
env.storage().instance().set(&DataKey::Admin, &admin);
env.storage()
.instance()
.extend_ttl(INSTANCE_TTL_THRESHOLD, INSTANCE_TTL_EXTEND);
+ env.events()
+ .publish((symbol_short!("admin"), symbol_short!("init")), admin);
+ Ok(())
+ }
+
+ /// The admin address baked into this WASM at build time, if any.
+ ///
+ /// Read-only, so an operator (or an auditor) can confirm after deploy that
+ /// the running code is pinned to the key they expect, rather than trusting
+ /// that the deploy script was run correctly.
+ pub fn expected_admin(env: Env) -> Option
{
+ PINNED_ADMIN.map(|p| Address::from_string(&String::from_str(&env, p)))
+ }
+
+ /// Propose a new admin (current admin only). Step 1 of 2.
+ ///
+ /// Handover is two-step because a single-step transfer to a mistyped or
+ /// uncontrolled address permanently destroys the ability to pause, upgrade,
+ /// or manage the oracle registry. The proposed key must prove it can sign.
+ pub fn propose_admin(env: Env, new_admin: Address) -> Result<(), ContractError> {
+ Self::require_admin(&env)?;
+ env.storage()
+ .instance()
+ .set(&DataKey::PendingAdmin, &new_admin);
+ env.storage()
+ .instance()
+ .extend_ttl(INSTANCE_TTL_THRESHOLD, INSTANCE_TTL_EXTEND);
+ env.events()
+ .publish((symbol_short!("admin"), symbol_short!("propose")), new_admin);
+ Ok(())
+ }
+
+ /// Accept a pending admin handover (proposed admin only). Step 2 of 2.
+ pub fn accept_admin(env: Env) -> Result<(), ContractError> {
+ let pending: Address = env
+ .storage()
+ .instance()
+ .get(&DataKey::PendingAdmin)
+ .ok_or(ContractError::NoPendingAdmin)?;
+
+ pending.require_auth();
+
+ env.storage().instance().set(&DataKey::Admin, &pending);
+ env.storage().instance().remove(&DataKey::PendingAdmin);
+ env.storage()
+ .instance()
+ .extend_ttl(INSTANCE_TTL_THRESHOLD, INSTANCE_TTL_EXTEND);
+ env.events()
+ .publish((symbol_short!("admin"), symbol_short!("accept")), pending);
Ok(())
}
+ /// The currently configured admin, if one has been set.
+ pub fn get_admin(env: Env) -> Option {
+ env.storage().instance().get(&DataKey::Admin)
+ }
+
/// Pause or unpause state-changing operations (admin only). `cancel_escrow`
/// stays available while paused so funds can always be refunded.
pub fn set_paused(env: Env, paused: bool) -> Result<(), ContractError> {
@@ -141,6 +264,27 @@ impl CoreFlowContract {
/// the contract address or migrating escrow funds.
pub fn upgrade(env: Env, new_wasm_hash: BytesN<32>) -> Result<(), ContractError> {
Self::require_admin(&env)?;
+
+ // Upgrading is the one admin power that can drain every escrow at once:
+ // it replaces the code holding custody. Requiring the contract to be
+ // paused first makes that a deliberate two-transaction sequence with an
+ // observable `paused` event in between, rather than something that can
+ // happen silently while the system looks healthy. It does not stop a
+ // malicious admin -- nothing at this layer can -- but it removes the
+ // silent path and gives monitoring something to alert on.
+ if !env
+ .storage()
+ .instance()
+ .get(&DataKey::Paused)
+ .unwrap_or(false)
+ {
+ return Err(ContractError::NotPaused);
+ }
+
+ env.events().publish(
+ (symbol_short!("admin"), symbol_short!("upgrade")),
+ new_wasm_hash.clone(),
+ );
env.deployer().update_current_contract_wasm(new_wasm_hash);
Ok(())
}
@@ -167,8 +311,134 @@ impl CoreFlowContract {
Ok(())
}
+ // ===== Oracle key registry (admin-managed) =====
+
+ /// Register an oracle signing key as trusted by the platform (admin only).
+ ///
+ /// WHY A REGISTRY: previously the manager passed any `oracle_pubkey` they
+ /// liked into `initialize_multi_sig_escrow`, so a manager could install
+ /// their own key and sign their own "verified work" attestations. The
+ /// proof-of-work gate was therefore manager-attestable -- procedural, not
+ /// cryptographic. Escrows may now only name a key the admin has registered,
+ /// which makes the oracle an independent party by construction.
+ pub fn register_oracle_key(env: Env, pubkey: BytesN<32>) -> Result<(), ContractError> {
+ Self::require_admin(&env)?;
+ env.storage()
+ .persistent()
+ .set(&DataKey::OracleKey(pubkey.clone()), &true);
+ env.storage().persistent().extend_ttl(
+ &DataKey::OracleKey(pubkey.clone()),
+ PERSISTENT_TTL_THRESHOLD,
+ PERSISTENT_TTL_EXTEND,
+ );
+ env.events()
+ .publish((symbol_short!("oracle"), symbol_short!("reg")), pubkey);
+ Ok(())
+ }
+
+ /// Revoke a previously registered oracle key (admin only).
+ ///
+ /// Existing escrows already naming this key keep functioning -- revoking is
+ /// not retroactive, because silently invalidating in-flight attestations
+ /// would strand funded escrows. It stops the key being named by NEW escrows
+ /// and NEW rotations. To retire a key from a live escrow, the manager calls
+ /// `rotate_oracle_key`, which revokes that escrow's verified proofs.
+ pub fn revoke_oracle_key(env: Env, pubkey: BytesN<32>) -> Result<(), ContractError> {
+ Self::require_admin(&env)?;
+ env.storage()
+ .persistent()
+ .remove(&DataKey::OracleKey(pubkey.clone()));
+ env.events()
+ .publish((symbol_short!("oracle"), symbol_short!("revoke")), pubkey);
+ Ok(())
+ }
+
+ /// True if `pubkey` is on the admin-managed registry.
+ pub fn is_oracle_key_registered(env: Env, pubkey: BytesN<32>) -> bool {
+ env.storage()
+ .persistent()
+ .get(&DataKey::OracleKey(pubkey))
+ .unwrap_or(false)
+ }
+
+ /// Bootstrap exception: if no admin was ever configured, the contract has no
+ /// registry authority and the registry check cannot be satisfied by anyone.
+ /// Rather than bricking such a deployment, an admin-less contract accepts any
+ /// key -- exactly the v1 trust model, and no weaker. Once `init_admin` runs,
+ /// the registry is enforced from that point on.
+ fn require_registered_oracle(env: &Env, pubkey: &BytesN<32>) -> Result<(), ContractError> {
+ if !env.storage().instance().has(&DataKey::Admin) {
+ return Ok(());
+ }
+ if env
+ .storage()
+ .persistent()
+ .get(&DataKey::OracleKey(pubkey.clone()))
+ .unwrap_or(false)
+ {
+ Ok(())
+ } else {
+ Err(ContractError::OracleKeyNotRegistered)
+ }
+ }
+
// ===== Oracle primitives =====
+ /// SHA-256 of an address's XDR serialization.
+ ///
+ /// Addresses serialize to a variable number of bytes (an account ScAddress
+ /// and a contract ScAddress differ in length), so hashing each to a fixed 32
+ /// bytes keeps the proof preimage fixed-width and trivially reproducible
+ /// off-chain. `scripts/oracle-cli.mjs` and `src/lib/oracle/index.ts` build
+ /// the identical digest; `test_cli_generated_signature_is_accepted_onchain`
+ /// fails if the two ever drift.
+ fn addr_digest(env: &Env, addr: &Address) -> BytesN<32> {
+ env.crypto().sha256(&addr.clone().to_xdr(env))
+ }
+
+ /// Build the domain-separated attestation preimage (schema v2, 198 bytes).
+ ///
+ /// magic "CFWP" 4
+ /// version u16 BE 2
+ /// network_id sha256(passphrase) 32 <- binds to Testnet vs Mainnet
+ /// contract sha256(addr xdr) 32 <- binds to THIS deployment
+ /// worker sha256(addr xdr) 32 <- binds to the payee
+ /// token sha256(addr xdr) 32 <- binds to the asset
+ /// escrow_id u32 BE 4
+ /// payment_id u32 BE 4
+ /// amount i128 BE 16 <- binds to how much moves
+ /// hours i128 BE 16
+ /// start_date u64 BE 8
+ /// end_date u64 BE 8 <- binds to the pay period
+ /// nonce u64 BE 8
+ ///
+ /// `worker`, `token`, `amount` and the period come from the STORED payment
+ /// row, never from caller arguments.
+ fn build_proof_message(
+ env: &Env,
+ escrow_id: u32,
+ payment_id: u32,
+ payment: &PaymentSchedule,
+ hours: i128,
+ nonce: u64,
+ ) -> Bytes {
+ let mut m = Bytes::new(env);
+ m.extend_from_array(&PROOF_MAGIC);
+ m.extend_from_array(&PROOF_VERSION.to_be_bytes());
+ m.extend_from_array(&env.ledger().network_id().to_array());
+ m.extend_from_array(&Self::addr_digest(env, &env.current_contract_address()).to_array());
+ m.extend_from_array(&Self::addr_digest(env, &payment.worker).to_array());
+ m.extend_from_array(&Self::addr_digest(env, &payment.token).to_array());
+ m.extend_from_array(&escrow_id.to_be_bytes());
+ m.extend_from_array(&payment_id.to_be_bytes());
+ m.extend_from_array(&payment.amount.to_be_bytes());
+ m.extend_from_array(&hours.to_be_bytes());
+ m.extend_from_array(&payment.start_date.to_be_bytes());
+ m.extend_from_array(&payment.end_date.to_be_bytes());
+ m.extend_from_array(&nonce.to_be_bytes());
+ m
+ }
+
/// Verify an Ed25519 oracle attestation over `payload`.
///
/// NOTE ON RETURN TYPE: this cannot return `bool`. `Env::crypto().ed25519_verify`
@@ -223,6 +493,9 @@ impl CoreFlowContract {
escrow.manager.require_auth();
+ // Rotation cannot be used to escape the registry.
+ Self::require_registered_oracle(&env, &new_pubkey)?;
+
if escrow.cancelled {
return Err(ContractError::EscrowCancelled);
}
@@ -284,6 +557,13 @@ impl CoreFlowContract {
if payments.is_empty() {
return Err(ContractError::InvalidAmount);
}
+ if payments.len() > MAX_BATCH_SIZE {
+ return Err(ContractError::BatchTooLarge);
+ }
+
+ // The oracle must be one the platform admin trusts, not one the manager
+ // chose. See `register_oracle_key`.
+ Self::require_registered_oracle(&env, &oracle_pubkey)?;
// Guard amounts/rates. `total_amount` is for the event only β custody is
// now funded per asset, since a batch may mix e.g. USDC and native XLM.
@@ -293,6 +573,17 @@ impl CoreFlowContract {
if p.amount <= 0 || p.rate_per_hour <= 0 {
return Err(ContractError::InvalidAmount);
}
+ // A zero-width or inverted period would make the attested pay period
+ // meaningless, and the period is a signed field of the proof.
+ if p.end_date <= p.start_date {
+ return Err(ContractError::InvalidPeriod);
+ }
+ // The amount must be reachable by whole attested hours at this rate,
+ // otherwise `submit_hours_proof`'s `hours x rate == amount` check can
+ // never be satisfied and the escrow is funded but unsettleable.
+ if p.amount % p.rate_per_hour != 0 {
+ return Err(ContractError::AmountHoursMismatch);
+ }
total_amount += p.amount;
}
@@ -383,17 +674,45 @@ impl CoreFlowContract {
(escrow_id, manager, total_amount),
);
+ // One event PER PAYMENT, carrying that payment's full financial identity.
+ //
+ // WHY THIS EXISTS: the escrow-level events above say only how much moved
+ // in aggregate. An indexer given just those cannot reconstruct who was
+ // paid what, so it would have to read `get_escrow` at index time β which
+ // returns CURRENT state, not the state at that ledger. That makes the
+ // projection non-deterministic and unreplayable: re-indexing from
+ // scratch after later activity would produce different rows.
+ //
+ // Emitting per-payment events makes the event stream self-sufficient, so
+ // the off-chain projection is a pure function of the log. `payment_index`
+ // is the zero-based Vec index, matching the `payment_id` argument that
+ // `submit_hours_proof` and `proof_preimage` take.
+ for i in 0..payments.len() {
+ let p = payments.get(i).unwrap();
+ env.events().publish(
+ (symbol_short!("payment"), symbol_short!("add")),
+ (
+ escrow_id,
+ i,
+ p.worker.clone(),
+ p.token.clone(),
+ p.amount,
+ p.rate_per_hour,
+ p.start_date,
+ p.end_date,
+ ),
+ );
+ }
+
Ok(escrow_id)
}
- /// Submit hours proof verified by Ed25519 oracle signature.
- ///
- /// The oracle signs a 32-byte message:
- /// escrow_id (4 bytes BE) || payment_id (4 bytes BE) ||
- /// hours_logged (16 bytes BE) || nonce (8 bytes BE)
+ /// Submit hours proof verified by an Ed25519 oracle signature.
///
- /// The contract verifies the signature against the escrow's stored oracle public key
- /// and checks the nonce matches the expected value to prevent replay attacks.
+ /// The oracle signs the 198-byte domain-separated preimage documented on
+ /// `build_proof_message` (schema v2). The contract rebuilds that preimage
+ /// from stored state, verifies it against the escrow's oracle public key,
+ /// enforces `hours x rate == amount`, and consumes the next expected nonce.
pub fn submit_hours_proof(
env: Env,
escrow_id: u32,
@@ -424,13 +743,25 @@ impl CoreFlowContract {
return Err(ContractError::InvalidPaymentId);
}
- // Construct the 32-byte message the oracle should have signed
- let mut msg_data = [0u8; 32];
- msg_data[0..4].copy_from_slice(&escrow_id.to_be_bytes());
- msg_data[4..8].copy_from_slice(&payment_id.to_be_bytes());
- msg_data[8..24].copy_from_slice(&hours_logged.to_be_bytes());
- msg_data[24..32].copy_from_slice(&nonce.to_be_bytes());
- let message = Bytes::from_slice(&env, &msg_data);
+ let mut payment = escrow.payments.get(payment_id).unwrap();
+
+ // The attested work must justify the escrowed amount exactly. Without
+ // this, `hours_logged` was decorative: the oracle could attest to any
+ // number of hours while `amount` -- fixed at creation and already funded
+ // into custody -- paid out regardless. Tying them makes "verified work
+ // determines payment" an on-chain invariant rather than a description.
+ let earned = hours_logged
+ .checked_mul(payment.rate_per_hour)
+ .ok_or(ContractError::InvalidAmount)?;
+ if earned != payment.amount {
+ return Err(ContractError::AmountHoursMismatch);
+ }
+
+ // Domain-separated preimage (schema v2). Built from stored payment state,
+ // so a caller cannot retarget a signature onto a different payee, asset,
+ // amount, period, contract or network.
+ let message =
+ Self::build_proof_message(&env, escrow_id, payment_id, &payment, hours_logged, nonce);
// Signature first, then nonce. Verification traps on a bad signature, so
// consuming the nonce beforehand would let an attacker burn the escrow's
@@ -438,9 +769,7 @@ impl CoreFlowContract {
Self::verify_oracle_work(&env, &message, &signature, &escrow.oracle_pubkey);
Self::track_nonce(&env, escrow_id, nonce)?;
- // Update the payment schedule with hours logged and mark the payment as
- // carrying a verified proof β `pay_batch` requires this flag.
- let mut payment = escrow.payments.get(payment_id).unwrap();
+ // Mark the payment as carrying a verified proof β `pay_batch` requires it.
payment.hours_logged = hours_logged;
payment.proof_verified = true;
@@ -605,6 +934,22 @@ impl CoreFlowContract {
p.status = PaymentStatus::Finalized;
TokenClient::new(&env, &p.token).transfer(&contract_addr, &p.worker, &p.amount);
total_amount += p.amount;
+
+ // Per-payment settlement event, emitted AFTER the transfer for this
+ // payee. A trapping transfer reverts the whole batch, so an emitted
+ // `paid` event always corresponds to value that actually moved.
+ env.events().publish(
+ (symbol_short!("payment"), symbol_short!("paid")),
+ (
+ escrow_id,
+ i,
+ p.worker.clone(),
+ p.token.clone(),
+ p.amount,
+ p.hours_logged,
+ ),
+ );
+
finalized_payments.push_back(p);
}
@@ -695,6 +1040,12 @@ impl CoreFlowContract {
for i in 0..escrow.payments.len() {
let mut p = escrow.payments.get(i).unwrap();
p.status = PaymentStatus::Cancelled;
+ // Per-payment cancellation, so the off-chain projection can move
+ // each payment to a terminal state from the log alone.
+ env.events().publish(
+ (symbol_short!("payment"), symbol_short!("cancel")),
+ (escrow_id, i),
+ );
cancelled_payments.push_back(p);
}
escrow.payments = cancelled_payments;
@@ -720,6 +1071,104 @@ impl CoreFlowContract {
.ok_or(ContractError::InvalidPaymentId)
}
+ /// Extend an escrow's storage lifetime. Anyone may call this.
+ ///
+ /// Persistent entries that run out of rent are archived to the Expired
+ /// State Stack and can be restored; they are not deleted. The failure this
+ /// avoids is a funded escrow becoming temporarily unusable until someone
+ /// pays to restore it.
+ //
+ // ββ The Soroban storage lifecycle, precisely ββββββββββββββββββββββββββββ
+ // Escrow state and its nonce watermark live in PERSISTENT storage. When a
+ // persistent entry runs out of rent it is removed from the live ledger and
+ // placed on the Expired State Stack, from which it can be restored with a
+ // Stellar Core `RestoreFootprint` operation. Persistent entries are NOT
+ // permanently deleted -- that is the behaviour of TEMPORARY storage, which
+ // this contract deliberately does not use for anything.
+ //
+ // So the failure mode is a funded escrow becoming temporarily *unusable*
+ // (every entry point loads the escrow first, so all of them fail) until
+ // someone pays to restore it. Recoverable, not fund loss. Still worth
+ // avoiding: an escrow needing an out-of-band restore before a worker can be
+ // paid is an operational incident.
+ //
+ // ββ Why anyone may call this ββββββββββββββββββββββββββββββββββββββββββββ
+ // Requiring the manager's authorization would tie an escrow's survival to
+ // one key remaining available and willing. The party with the strongest
+ // interest in keeping a funded escrow alive is often the WORKER awaiting
+ // payment, and they hold no authority over it. Keeping this open lets the
+ // worker, the platform, or a keeper bot pay the rent. There is nothing to
+ // abuse: the only effect is paying to keep someone else's data alive, and
+ // the caller funds the transaction.
+ //
+ // Both keys are extended together. Letting the nonce watermark and the
+ // escrow diverge in lifetime would mean restoring one without the other.
+ pub fn extend_escrow_ttl(env: Env, escrow_id: u32) -> Result<(), ContractError> {
+ // Confirm the escrow exists before charging anyone rent for a key that
+ // holds nothing.
+ if !env
+ .storage()
+ .persistent()
+ .has(&DataKey::Escrow(escrow_id))
+ {
+ return Err(ContractError::InvalidPaymentId);
+ }
+
+ // Extend to the network maximum: the caller has explicitly chosen to pay
+ // for longevity, so buying the least possible would be a strange default.
+ let max = env.storage().max_ttl();
+
+ env.storage()
+ .persistent()
+ .extend_ttl(&DataKey::Escrow(escrow_id), max, max);
+ env.storage()
+ .persistent()
+ .extend_ttl(&DataKey::Nonce(escrow_id), max, max);
+ env.storage().persistent().extend_ttl(
+ &DataKey::EscrowCount,
+ max,
+ max,
+ );
+ // The contract instance carries Admin and Paused; if it lapses, nothing
+ // works regardless of how healthy an individual escrow is.
+ env.storage().instance().extend_ttl(max, max);
+
+ env.events().publish(
+ (symbol_short!("escrow"), symbol_short!("ttl")),
+ (escrow_id, max),
+ );
+
+ Ok(())
+ }
+
+ /// Return the exact bytes the oracle must sign for this payment.
+ ///
+ /// Read-only. Exposing the preimage makes the CONTRACT the single source of
+ /// truth for the message format: an off-chain signer can simulate this call
+ /// and sign the returned bytes verbatim instead of reimplementing the layout
+ /// and hoping the two agree. Every historical mismatch between a signer and
+ /// a verifier is a bug this removes by construction.
+ pub fn proof_preimage(
+ env: Env,
+ escrow_id: u32,
+ payment_id: u32,
+ hours: i128,
+ nonce: u64,
+ ) -> Result {
+ let escrow: CoreFlowEscrow = env
+ .storage()
+ .persistent()
+ .get(&DataKey::Escrow(escrow_id))
+ .ok_or(ContractError::InvalidPaymentId)?;
+ if payment_id >= escrow.payments.len() {
+ return Err(ContractError::InvalidPaymentId);
+ }
+ let payment = escrow.payments.get(payment_id).unwrap();
+ Ok(Self::build_proof_message(
+ &env, escrow_id, payment_id, &payment, hours, nonce,
+ ))
+ }
+
/// Return the next expected oracle nonce for an escrow.
/// The oracle must sign a proof using this exact value (replay protection).
/// Returns 0 for an unknown/uninitialized escrow.
diff --git a/contracts/core-flow/src/test.rs b/contracts/core-flow/src/test.rs
index 95204d5..098b01a 100644
--- a/contracts/core-flow/src/test.rs
+++ b/contracts/core-flow/src/test.rs
@@ -2,8 +2,11 @@
mod tests {
use crate::{ContractError, CoreFlowContract, CoreFlowContractClient, PaymentSchedule, PaymentStatus};
use ed25519_dalek::{Signer, SigningKey};
- use soroban_sdk::testutils::Address as _;
+ use soroban_sdk::testutils::{Address as _, Events as _, Ledger as _, LedgerInfo};
use soroban_sdk::token::{StellarAssetClient, TokenClient};
+ use soroban_sdk::xdr::ToXdr;
+ use soroban_sdk::{symbol_short, IntoVal};
+ use soroban_sdk::{Bytes, String as SorobanString};
use soroban_sdk::{Address, BytesN, Env, Vec};
// ========== HELPERS ==========
@@ -11,6 +14,12 @@ mod tests {
/// Amount minted to the manager so escrow funding transfers succeed.
const MINT_AMOUNT: i128 = 1_000_000;
+ /// This crate's own compiled WASM, used to exercise `upgrade` with a hash the
+ /// host will actually accept.
+ const CURRENT_WASM: &[u8] = include_bytes!(
+ "../target/wasm32v1-none/release/core_flow.wasm"
+ );
+
/// Generate a deterministic Ed25519 keypair for testing.
/// Returns (signing_key, oracle_pubkey_bytes).
fn generate_oracle_keypair(env: &Env) -> (SigningKey, BytesN<32>) {
@@ -42,17 +51,26 @@ mod tests {
}
/// Submit a valid oracle proof for every payment so `pay_batch` will settle.
- /// Nonce is sequential across rows, matching the contract's watermark.
+ ///
+ /// Hours are derived per row as `amount / rate_per_hour` because the contract
+ /// now enforces `hours x rate == amount`; a fixed 40 would fail any row whose
+ /// escrowed amount implies different hours. Nonce is read from the live
+ /// watermark rather than assumed.
fn prove_all(
env: &Env,
client: &CoreFlowContractClient,
+ contract_id: &Address,
signing_key: &SigningKey,
escrow_id: u32,
- count: u32,
) {
- for i in 0..count {
- let sig = sign_oracle_proof(env, signing_key, escrow_id, i, 40, i as u64);
- client.submit_hours_proof(&escrow_id, &i, &40i128, &(i as u64), &sig);
+ let escrow = client.get_escrow(&escrow_id);
+ for i in 0..escrow.payments.len() {
+ let p = escrow.payments.get(i).unwrap();
+ let hours = p.amount / p.rate_per_hour;
+ let nonce = client.get_nonce(&escrow_id);
+ let sig =
+ sign_oracle_proof(env, client, contract_id, signing_key, escrow_id, i, hours, nonce);
+ client.submit_hours_proof(&escrow_id, &i, &hours, &nonce, &sig);
}
}
@@ -60,31 +78,63 @@ mod tests {
TokenClient::new(env, token).balance(who)
}
- /// Construct the 32-byte message that the oracle should sign.
+ fn addr_digest(env: &Env, addr: &Address) -> [u8; 32] {
+ env.crypto().sha256(&addr.clone().to_xdr(env)).to_array()
+ }
+
+ /// Rebuild the 198-byte domain-separated preimage (schema v2) independently
+ /// of the contract's own builder.
+ ///
+ /// This is deliberately a second implementation rather than a call into
+ /// `CoreFlowContract::build_proof_message`. Sharing the builder would make
+ /// every signature test tautological -- it would prove only that one function
+ /// agrees with itself, and a field silently dropped from the preimage would
+ /// still pass. Written out, the layout is pinned by an independent witness.
fn build_oracle_message(
+ env: &Env,
+ contract_id: &Address,
+ payment: &PaymentSchedule,
escrow_id: u32,
payment_id: u32,
hours_logged: i128,
nonce: u64,
- ) -> [u8; 32] {
- let mut msg = [0u8; 32];
- msg[0..4].copy_from_slice(&escrow_id.to_be_bytes());
- msg[4..8].copy_from_slice(&payment_id.to_be_bytes());
- msg[8..24].copy_from_slice(&hours_logged.to_be_bytes());
- msg[24..32].copy_from_slice(&nonce.to_be_bytes());
- msg
+ ) -> [u8; 198] {
+ let mut m = [0u8; 198];
+ m[0..4].copy_from_slice(b"CFWP");
+ m[4..6].copy_from_slice(&2u16.to_be_bytes());
+ m[6..38].copy_from_slice(&env.ledger().network_id().to_array());
+ m[38..70].copy_from_slice(&addr_digest(env, contract_id));
+ m[70..102].copy_from_slice(&addr_digest(env, &payment.worker));
+ m[102..134].copy_from_slice(&addr_digest(env, &payment.token));
+ m[134..138].copy_from_slice(&escrow_id.to_be_bytes());
+ m[138..142].copy_from_slice(&payment_id.to_be_bytes());
+ m[142..158].copy_from_slice(&payment.amount.to_be_bytes());
+ m[158..174].copy_from_slice(&hours_logged.to_be_bytes());
+ m[174..182].copy_from_slice(&payment.start_date.to_be_bytes());
+ m[182..190].copy_from_slice(&payment.end_date.to_be_bytes());
+ m[190..198].copy_from_slice(&nonce.to_be_bytes());
+ m
}
/// Sign an oracle message and return BytesN<64> signature.
+ ///
+ /// The payment row is read back from the contract so the preimage carries the
+ /// same worker/token/amount/period the contract will reconstruct.
fn sign_oracle_proof(
env: &Env,
+ client: &CoreFlowContractClient,
+ contract_id: &Address,
signing_key: &SigningKey,
escrow_id: u32,
payment_id: u32,
hours_logged: i128,
nonce: u64,
) -> BytesN<64> {
- let msg = build_oracle_message(escrow_id, payment_id, hours_logged, nonce);
+ let escrow = client.get_escrow(&escrow_id);
+ let payment = escrow.payments.get(payment_id).unwrap();
+ let msg = build_oracle_message(
+ env, contract_id, &payment, escrow_id, payment_id, hours_logged, nonce,
+ );
let signature = signing_key.sign(&msg);
BytesN::from_array(env, &signature.to_bytes())
}
@@ -145,8 +195,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -227,7 +277,7 @@ mod tests {
);
assert_eq!(balance_of(&env, &token, &contract_id), 13000);
- prove_all(&env, &client, &signing_key, escrow_id, 2);
+ prove_all(&env, &client, &contract_id, &signing_key, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
client.finalize_payment(&escrow_id);
@@ -275,8 +325,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -295,7 +345,7 @@ mod tests {
);
// Manager approval
- prove_all(&env, &client, &signing_key, escrow_id, 1);
+ prove_all(&env, &client, &contract_id, &signing_key, escrow_id);
client.manager_approve(&escrow_id);
let mut escrow = client.get_escrow(&escrow_id);
assert!(escrow.manager_approved);
@@ -318,8 +368,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -337,15 +387,17 @@ mod tests {
&payments,
);
- // Sign with real Ed25519 key
- let hours: i128 = 80;
+ // Sign with real Ed25519 key. 10000 units at 250/hour is exactly 40
+ // hours -- the contract rejects any other figure with #17.
+ let hours: i128 = 40;
let nonce: u64 = 0;
- let sig = sign_oracle_proof(&env, &signing_key, escrow_id, 0, hours, nonce);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, hours, nonce);
client.submit_hours_proof(&escrow_id, &0, &hours, &nonce, &sig);
let escrow = client.get_escrow(&escrow_id);
- assert_eq!(escrow.payments.get(0).unwrap().hours_logged, 80);
+ assert_eq!(escrow.payments.get(0).unwrap().hours_logged, 40);
+ assert!(escrow.payments.get(0).unwrap().proof_verified);
}
#[test]
@@ -353,8 +405,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -377,7 +429,7 @@ mod tests {
assert_eq!(escrow.payments.get(1).unwrap().amount, 8000);
// Full flow with multiple payments
- prove_all(&env, &client, &signing_key, escrow_id, 2);
+ prove_all(&env, &client, &contract_id, &signing_key, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
let finalized = client.finalize_payment(&escrow_id);
@@ -391,8 +443,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -434,8 +486,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -468,8 +520,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -499,8 +551,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -519,15 +571,19 @@ mod tests {
);
// First submission with nonce 0
- let sig0 = sign_oracle_proof(&env, &signing_key, escrow_id, 0, 40, 0);
+ let sig0 = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 40, 0);
client.submit_hours_proof(&escrow_id, &0, &40, &0, &sig0);
+ assert_eq!(client.get_nonce(&escrow_id), 1);
- // Second submission with nonce 1 (updated hours)
- let sig1 = sign_oracle_proof(&env, &signing_key, escrow_id, 0, 80, 1);
- client.submit_hours_proof(&escrow_id, &0, &80, &1, &sig1);
+ // A second attestation at the next nonce is accepted, and the watermark
+ // advances again. The hours must match the escrowed amount both times --
+ // re-attesting is a re-confirmation, not a way to revise the payout.
+ let sig1 = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 40, 1);
+ client.submit_hours_proof(&escrow_id, &0, &40, &1, &sig1);
+ assert_eq!(client.get_nonce(&escrow_id), 2);
let escrow = client.get_escrow(&escrow_id);
- assert_eq!(escrow.payments.get(0).unwrap().hours_logged, 80);
+ assert_eq!(escrow.payments.get(0).unwrap().hours_logged, 40);
}
#[test]
@@ -535,8 +591,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -557,7 +613,7 @@ mod tests {
// Fresh escrow starts at nonce 0.
assert_eq!(client.get_nonce(&escrow_id), 0);
- let sig = sign_oracle_proof(&env, &signing_key, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 40, 0);
client.submit_hours_proof(&escrow_id, &0, &40, &0, &sig);
// Nonce advances after a successful proof.
@@ -570,8 +626,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -590,7 +646,7 @@ mod tests {
);
// First submission succeeds
- let sig = sign_oracle_proof(&env, &signing_key, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 40, 0);
client.submit_hours_proof(&escrow_id, &0, &40, &0, &sig);
// Replay same nonce β should panic with InvalidNonce
@@ -610,8 +666,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -631,7 +687,7 @@ mod tests {
let wrong_secret: [u8; 32] = [99u8; 32];
let wrong_key = SigningKey::from_bytes(&wrong_secret);
- let sig = sign_oracle_proof(&env, &wrong_key, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &wrong_key, escrow_id, 0, 40, 0);
let result = client.try_submit_hours_proof(&escrow_id, &0, &40, &0, &sig);
assert!(
@@ -648,8 +704,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -680,8 +736,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -710,8 +766,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -729,7 +785,7 @@ mod tests {
&payments,
);
- prove_all(&env, &client, &signing_key, escrow_id, 1);
+ prove_all(&env, &client, &contract_id, &signing_key, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
client.finalize_payment(&escrow_id);
@@ -744,8 +800,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -774,8 +830,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -793,7 +849,7 @@ mod tests {
&payments,
);
- prove_all(&env, &client, &signing_key, escrow_id, 1);
+ prove_all(&env, &client, &contract_id, &signing_key, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
client.finalize_payment(&escrow_id);
@@ -808,8 +864,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
// Should panic with InvalidPaymentId
client.get_escrow(&999);
@@ -821,8 +877,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -841,8 +897,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -861,7 +917,7 @@ mod tests {
);
client.cancel_escrow(&escrow_id);
- let sig = sign_oracle_proof(&env, &signing_key, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 40, 0);
// Should fail β escrow is cancelled
client.submit_hours_proof(&escrow_id, &0, &40, &0, &sig);
}
@@ -872,8 +928,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -893,7 +949,7 @@ mod tests {
client.manager_approve(&escrow_id);
- let sig = sign_oracle_proof(&env, &signing_key, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 40, 0);
// Should fail β manager already approved, cannot modify hours
client.submit_hours_proof(&escrow_id, &0, &40, &0, &sig);
}
@@ -904,8 +960,8 @@ mod tests {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let manager = Address::generate(&env);
let finance = Address::generate(&env);
@@ -927,8 +983,8 @@ mod tests {
fn test_admin_can_be_set_once() {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let admin = Address::generate(&env);
client.init_admin(&admin);
@@ -942,8 +998,8 @@ mod tests {
fn test_set_paused_without_admin_fails() {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
// No admin configured -> NotAdmin (#10).
client.set_paused(&true);
}
@@ -953,8 +1009,8 @@ mod tests {
fn test_pause_blocks_new_escrow() {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let admin = Address::generate(&env);
let manager = Address::generate(&env);
@@ -964,6 +1020,9 @@ mod tests {
let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
client.init_admin(&admin);
+ // Once an admin exists the oracle registry is enforced, so the key this
+ // escrow names has to be one the admin trusts.
+ client.register_oracle_key(&oracle_pubkey);
client.set_paused(&true);
assert!(client.is_paused());
@@ -977,8 +1036,8 @@ mod tests {
fn test_unpause_restores_operations() {
let env = Env::default();
env.mock_all_auths();
- let client =
- CoreFlowContractClient::new(&env, &env.register_contract(None, CoreFlowContract));
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
let admin = Address::generate(&env);
let manager = Address::generate(&env);
@@ -988,6 +1047,9 @@ mod tests {
let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
client.init_admin(&admin);
+ // Once an admin exists the oracle registry is enforced, so the key this
+ // escrow names has to be one the admin trusts.
+ client.register_oracle_key(&oracle_pubkey);
client.set_paused(&true);
client.set_paused(&false);
@@ -1017,6 +1079,9 @@ mod tests {
let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
client.init_admin(&admin);
+ // Once an admin exists the oracle registry is enforced, so the key this
+ // escrow names has to be one the admin trusts.
+ client.register_oracle_key(&oracle_pubkey);
let mut payments = Vec::new(&env);
payments.push_back(create_test_payment(&env, &worker, &token)); // 10000
let id = client.initialize_multi_sig_escrow(
@@ -1083,7 +1148,7 @@ mod tests {
assert_eq!(balance_of(&env, &usdc, &contract_id), 5000);
assert_eq!(balance_of(&env, &xlm, &contract_id), 8000);
- prove_all(&env, &client, &sk, escrow_id, 2);
+ prove_all(&env, &client, &contract_id, &sk, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
client.pay_batch(&escrow_id);
@@ -1188,7 +1253,7 @@ mod tests {
let escrow_id =
client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
- let sig = sign_oracle_proof(&env, &sk, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &sk, escrow_id, 0, 40, 0);
client.submit_hours_proof(&escrow_id, &0, &40i128, &0u64, &sig);
assert_eq!(client.get_nonce(&escrow_id), 1);
@@ -1235,7 +1300,7 @@ mod tests {
// catch β it takes the whole test process down with SIGABRT. That path
// is covered by the Testnet validation run instead; see the oracle CLI
// rotation walkthrough in the developer guide.
- let fresh_sig = sign_oracle_proof(&env, &new_sk, escrow_id, 0, 40, 0);
+ let fresh_sig = sign_oracle_proof(&env, &client, &contract_id, &new_sk, escrow_id, 0, 40, 0);
client.submit_hours_proof(&escrow_id, &0, &40i128, &0u64, &fresh_sig);
assert!(client.get_escrow(&escrow_id).payments.get(0).unwrap().proof_verified);
}
@@ -1258,7 +1323,7 @@ mod tests {
let escrow_id =
client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
- let sig = sign_oracle_proof(&env, &sk, escrow_id, 0, 40, 0);
+ let sig = sign_oracle_proof(&env, &client, &contract_id, &sk, escrow_id, 0, 40, 0);
client.submit_hours_proof(&escrow_id, &0, &40i128, &0u64, &sig);
assert!(client.get_escrow(&escrow_id).payments.get(0).unwrap().proof_verified);
@@ -1296,7 +1361,7 @@ mod tests {
let escrow_id =
client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
- prove_all(&env, &client, &sk, escrow_id, 1);
+ prove_all(&env, &client, &contract_id, &sk, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
client.pay_batch(&escrow_id);
@@ -1326,7 +1391,7 @@ mod tests {
let escrow_id =
client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
- prove_all(&env, &client, &sk, escrow_id, 1);
+ prove_all(&env, &client, &contract_id, &sk, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
@@ -1364,29 +1429,112 @@ mod tests {
// ========== CROSS-LANGUAGE CONFORMANCE (CLI <-> CONTRACT) ==========
+ /// Shared cross-language vector (docs/evidence/proof-vector-v2.json).
+ ///
+ /// The same constants are asserted by the TypeScript signer in
+ /// src/lib/oracle/__tests__/sign.test.ts. Two independent implementations
+ /// pinned to one vector is what makes "the signer and the verifier agree" a
+ /// tested claim rather than an assumption; a field added, reordered or
+ /// dropped on either side breaks one of the two suites.
+ const VECTOR_CONTRACT: &str = "CCQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2CNSG";
+ const VECTOR_WORKER: &str = "GB43KVROR7TFJ6KAPCYRF2FJROTZAH4FHLTJLPWX4DRZCC5NASLGITR6";
+ const VECTOR_TOKEN: &str = "CCZLFMVSWKZLFMVSWKZLFMVSWKZLFMVSWKZLFMVSWKZLFMVSWKZLEB3K";
+ /// sha256("Test SDF Network ; September 2015")
+ const VECTOR_NETWORK_ID: [u8; 32] = [
+ 206, 224, 48, 45, 89, 132, 77, 50, 189, 202, 145, 92,
+ 130, 3, 221, 68, 179, 63, 187, 126, 220, 25, 5, 30,
+ 163, 122, 190, 223, 40, 236, 212, 114,
+ ];
+ /// The 198-byte preimage the CLI produced for escrow 1 / payment 0 /
+ /// 10000 units / 40 hours / period 1000..2000 / nonce 0.
+ const VECTOR_MESSAGE: [u8; 198] = [
+ 67, 70, 87, 80, 0, 2, 206, 224, 48, 45, 89, 132,
+ 77, 50, 189, 202, 145, 92, 130, 3, 221, 68, 179, 63,
+ 187, 126, 220, 25, 5, 30, 163, 122, 190, 223, 40, 236,
+ 212, 114, 91, 12, 99, 36, 38, 131, 234, 88, 177, 74,
+ 255, 60, 106, 69, 95, 166, 219, 243, 87, 61, 222, 220,
+ 30, 79, 162, 24, 224, 64, 103, 17, 186, 66, 44, 187,
+ 208, 6, 4, 30, 234, 113, 96, 61, 172, 242, 46, 138,
+ 241, 168, 203, 242, 243, 176, 8, 60, 170, 139, 139, 243,
+ 51, 171, 86, 92, 226, 224, 81, 25, 87, 64, 74, 123,
+ 96, 183, 34, 169, 57, 133, 142, 71, 250, 146, 5, 197,
+ 247, 199, 29, 231, 148, 31, 21, 210, 244, 137, 200, 197,
+ 60, 235, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0,
+ 3, 232, 0, 0, 0, 0, 0, 0, 7, 208, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ ];
+ /// The CLI's Ed25519 signature over VECTOR_MESSAGE for the test oracle seed.
+ const VECTOR_SIGNATURE: [u8; 64] = [
+ 77, 210, 135, 45, 238, 118, 184, 14, 143, 74, 232, 251,
+ 208, 185, 36, 146, 138, 93, 230, 4, 224, 155, 50, 226,
+ 115, 102, 83, 220, 121, 142, 103, 167, 184, 83, 160, 232,
+ 41, 169, 200, 153, 188, 163, 81, 62, 52, 108, 15, 46,
+ 71, 28, 214, 133, 177, 104, 240, 9, 95, 151, 97, 216,
+ 124, 171, 62, 10,
+ ];
+
+ fn vector_env() -> Env {
+ let env = Env::default();
+ // Pin the network so the preimage's network_id field is Testnet's,
+ // matching what the CLI hashed from the passphrase.
+ let mut info = env.ledger().get();
+ info.network_id = VECTOR_NETWORK_ID;
+ env.ledger().set(info);
+ env
+ }
+
+ fn vector_payment(env: &Env) -> PaymentSchedule {
+ PaymentSchedule {
+ id: 1,
+ worker: Address::from_string(&SorobanString::from_str(env, VECTOR_WORKER)),
+ token: Address::from_string(&SorobanString::from_str(env, VECTOR_TOKEN)),
+ amount: 10000,
+ start_date: 1000,
+ end_date: 2000,
+ hours_logged: 0,
+ rate_per_hour: 250,
+ proof_verified: false,
+ status: PaymentStatus::Pending,
+ }
+ }
+
+ /// Link 1 of 2: the Rust preimage layout equals the TypeScript one.
#[test]
- fn test_cli_generated_signature_is_accepted_onchain() {
- // Byte-for-byte output of:
- // ORACLE_SECRET_KEY=0102...20 node scripts/oracle-cli.mjs sign batch.json
- // for { escrowId: 1, payees: [{ paymentId: 0, hours: 40 }], startNonce: 0 }.
- //
- // This is the guard against the two systems drifting apart: if either the
- // CLI's 32-byte encoding or the contract's reconstruction changes, this
- // test fails rather than the mismatch surfacing as an opaque Testnet
- // signature rejection during the validation run.
- const CLI_SIGNATURE: [u8; 64] = [
- 24, 178, 216, 233, 110, 113, 128, 147, 172, 148, 23, 160, 156, 230, 81, 41, 111, 33,
- 50, 78, 143, 140, 222, 254, 242, 193, 212, 137, 148, 225, 47, 85, 160, 136, 252, 244,
- 43, 115, 153, 52, 235, 138, 29, 215, 137, 174, 89, 78, 118, 214, 140, 215, 132, 182,
- 12, 151, 158, 16, 236, 90, 98, 255, 107, 12,
- ];
- // Public key the CLI printed for that same seed.
- const CLI_PUBKEY: [u8; 32] = [
- 0x79, 0xb5, 0x56, 0x2e, 0x8f, 0xe6, 0x54, 0xf9, 0x40, 0x78, 0xb1, 0x12, 0xe8, 0xa9,
- 0x8b, 0xa7, 0x90, 0x1f, 0x85, 0x3a, 0xe6, 0x95, 0xbe, 0xd7, 0xe0, 0xe3, 0x91, 0x0b,
- 0xad, 0x04, 0x96, 0x64,
- ];
+ fn test_proof_preimage_matches_cross_language_vector() {
+ let env = vector_env();
+ let contract = Address::from_string(&SorobanString::from_str(&env, VECTOR_CONTRACT));
+ let payment = vector_payment(&env);
+ let built = build_oracle_message(&env, &contract, &payment, 1, 0, 40, 0);
+
+ assert_eq!(
+ built.as_slice(),
+ VECTOR_MESSAGE.as_slice(),
+ "Rust preimage diverged from the shared CFWP-v2 vector"
+ );
+ }
+
+ /// The signature in the vector actually verifies against that preimage, so
+ /// the vector is self-consistent and not merely two copies of one mistake.
+ #[test]
+ fn test_vector_signature_verifies_against_vector_message() {
+ use ed25519_dalek::{Signature, Verifier, VerifyingKey};
+ let (signing_key, _) = generate_oracle_keypair(&Env::default());
+ let vk: VerifyingKey = signing_key.verifying_key();
+ let sig = Signature::from_bytes(&VECTOR_SIGNATURE);
+ assert!(vk.verify(&VECTOR_MESSAGE, &sig).is_ok());
+ }
+
+ /// Link 2 of 2: the CONTRACT's own builder equals the independent Rust one.
+ ///
+ /// Combined with link 1, this is what closes the loop: contract == test
+ /// reimplementation == TypeScript signer. `proof_preimage` is the contract
+ /// answering "what exactly must be signed", read from stored escrow state.
+ #[test]
+ fn test_contract_preimage_matches_independent_implementation() {
let env = Env::default();
env.mock_all_auths();
let contract_id = env.register_contract(None, CoreFlowContract);
@@ -1396,26 +1544,824 @@ mod tests {
let finance = Address::generate(&env);
let worker = Address::generate(&env);
let token = setup_token(&env, &manager);
-
- // The Rust helper derives the same key from the same seed β assert the
- // two languages agree before relying on the signature itself.
- let (_sk, derived_pubkey) = generate_oracle_keypair(&env);
- assert_eq!(derived_pubkey, BytesN::from_array(&env, &CLI_PUBKEY));
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
let mut payments = Vec::new(&env);
payments.push_back(create_test_payment(&env, &worker, &token));
let escrow_id =
- client.initialize_multi_sig_escrow(&manager, &finance, &derived_pubkey, &payments);
- assert_eq!(escrow_id, 1); // CLI signed escrowId=1
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
- // The contract accepts the CLI's bytes verbatim.
- let cli_sig = BytesN::from_array(&env, &CLI_SIGNATURE);
- client.submit_hours_proof(&escrow_id, &0, &40i128, &0u64, &cli_sig);
+ let from_contract = client.proof_preimage(&escrow_id, &0, &40i128, &0u64);
- let escrow = client.get_escrow(&escrow_id);
- assert!(escrow.payments.get(0).unwrap().proof_verified);
- assert_eq!(escrow.payments.get(0).unwrap().hours_logged, 40);
- assert_eq!(client.get_nonce(&escrow_id), 1);
+ let stored = client.get_escrow(&escrow_id).payments.get(0).unwrap();
+ let expected =
+ build_oracle_message(&env, &contract_id, &stored, escrow_id, 0, 40, 0);
+
+ assert_eq!(from_contract.len(), 198);
+ assert_eq!(
+ from_contract,
+ Bytes::from_slice(&env, &expected),
+ "contract preimage diverged from the independent implementation"
+ );
+ }
+
+ /// A signature is bound to its network: the identical attestation built for
+ /// Mainnet does not verify against the Testnet preimage. This is the
+ /// property v1 lacked, and the reason a Testnet proof could be replayed
+ /// against a Mainnet deployment.
+ #[test]
+ fn test_preimage_is_bound_to_network() {
+ let env = vector_env();
+ let contract = Address::from_string(&SorobanString::from_str(&env, VECTOR_CONTRACT));
+ let payment = vector_payment(&env);
+ let testnet = build_oracle_message(&env, &contract, &payment, 1, 0, 40, 0);
+
+ let mainnet_env = Env::default();
+ let mut info = mainnet_env.ledger().get();
+ // sha256("Public Global Stellar Network ; September 2015")
+ info.network_id = [
+ 0x7a, 0xc3, 0x39, 0x97, 0x54, 0x4e, 0x31, 0x75, 0xd2, 0x66, 0xbd, 0x02, 0x24, 0x39,
+ 0xb2, 0x2c, 0xdb, 0x16, 0x50, 0x8c, 0x01, 0x16, 0x3f, 0x26, 0xe5, 0xcb, 0x2a, 0x3e,
+ 0x10, 0x45, 0xa9, 0x79,
+ ];
+ mainnet_env.ledger().set(info);
+ let contract_m =
+ Address::from_string(&SorobanString::from_str(&mainnet_env, VECTOR_CONTRACT));
+ let payment_m = vector_payment(&mainnet_env);
+ let mainnet = build_oracle_message(&mainnet_env, &contract_m, &payment_m, 1, 0, 40, 0);
+
+ assert_ne!(
+ testnet.as_slice(),
+ mainnet.as_slice(),
+ "preimage must differ across networks or Testnet proofs replay on Mainnet"
+ );
+ }
+
+ /// A signature is bound to its payee: retargeting the attestation to a
+ /// different worker changes the preimage, so the old signature cannot pay
+ /// someone the oracle never attested to.
+ #[test]
+ fn test_preimage_is_bound_to_worker_and_amount() {
+ let env = vector_env();
+ let contract = Address::from_string(&SorobanString::from_str(&env, VECTOR_CONTRACT));
+ let base = vector_payment(&env);
+ let original = build_oracle_message(&env, &contract, &base, 1, 0, 40, 0);
+
+ let mut other_worker = base.clone();
+ other_worker.worker = Address::generate(&env);
+ assert_ne!(
+ original.as_slice(),
+ build_oracle_message(&env, &contract, &other_worker, 1, 0, 40, 0).as_slice(),
+ "preimage must bind the payee"
+ );
+
+ let mut other_amount = base.clone();
+ other_amount.amount = 20000;
+ assert_ne!(
+ original.as_slice(),
+ build_oracle_message(&env, &contract, &other_amount, 1, 0, 40, 0).as_slice(),
+ "preimage must bind the amount"
+ );
+ }
+
+
+ /// Count published events whose (topic0, topic1) match the given symbols.
+ ///
+ /// Written as an explicit loop over the soroban `Vec` rather than iterator
+ /// chains, because topics are `Val` and comparison needs the env.
+ fn count_events(env: &Env, t0: &str, t1: &str) -> u32 {
+ let want0: soroban_sdk::Val = soroban_sdk::Symbol::new(env, t0).into_val(env);
+ let want1: soroban_sdk::Val = soroban_sdk::Symbol::new(env, t1).into_val(env);
+ let mut n = 0u32;
+ let all = env.events().all();
+ for i in 0..all.len() {
+ let (_, topics, _) = all.get(i).unwrap();
+ if topics.len() < 2 {
+ continue;
+ }
+ let a = topics.get(0).unwrap();
+ let b = topics.get(1).unwrap();
+ if a.shallow_eq(&want0) && b.shallow_eq(&want1) {
+ n += 1;
+ }
+ }
+ n
+ }
+
+ // ========== PER-PAYMENT EVENTS (indexer determinism) ==========
+
+ /// The event log must be sufficient on its own to reconstruct who was paid
+ /// what. Reading `get_escrow` at index time returns CURRENT state, not state
+ /// at that ledger, which makes an off-chain projection unreplayable.
+ #[test]
+ fn test_settlement_emits_one_event_per_payment() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker1 = Address::generate(&env);
+ let worker2 = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let payments = create_multi_payments(&env, &worker1, &worker2, &token);
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+
+ // Creation emits one `payment/add` per row, carrying that row's identity.
+ let adds = count_events(&env, "payment", "add");
+ assert_eq!(adds, 2, "one payment/add event per payment at creation");
+
+ prove_all(&env, &client, &contract_id, &sk, escrow_id);
+ client.manager_approve(&escrow_id);
+ client.finance_approve(&escrow_id);
+ client.pay_batch(&escrow_id);
+
+ let paid = count_events(&env, "payment", "paid");
+ assert_eq!(paid, 2, "one payment/paid event per settled payment");
+ }
+
+ /// Cancellation must also be per-payment, so each payment can reach a
+ /// terminal state off-chain from the log alone.
+ #[test]
+ fn test_cancellation_emits_one_event_per_payment() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker1 = Address::generate(&env);
+ let worker2 = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let payments = create_multi_payments(&env, &worker1, &worker2, &token);
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+
+ client.cancel_escrow(&escrow_id);
+
+ let cancels = count_events(&env, "payment", "cancel");
+ assert_eq!(cancels, 2, "one payment/cancel event per payment");
+ }
+
+ // ========== ADMIN LIFECYCLE / FRONT-RUNNING (F-9) ==========
+
+ /// This test build carries no COREFLOW_ADMIN pin, so `expected_admin` is
+ /// None and `init_admin` keeps first-caller behaviour. Asserting it here
+ /// documents WHY the front-running tests below look the way they do, and
+ /// fails loudly if someone bakes a pin into the test profile.
+ #[test]
+ fn test_test_builds_are_unpinned() {
+ let env = Env::default();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+ assert_eq!(client.expected_admin(), None);
+ }
+
+ /// An attacker who wins the race to `init_admin` locks out the real
+ /// operator, so the deploy sequence must be treated as adversarial. This
+ /// pins the exact consequence the build-time pin exists to remove.
+ #[test]
+ fn test_init_admin_is_first_caller_wins_without_a_pin() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let attacker = Address::generate(&env);
+ let real_operator = Address::generate(&env);
+
+ client.init_admin(&attacker);
+
+ // The intended operator is now permanently locked out of an unpinned
+ // deployment. A production build sets COREFLOW_ADMIN so that the
+ // attacker's call fails with AdminMismatch instead.
+ assert_eq!(
+ client.try_init_admin(&real_operator),
+ Err(Ok(ContractError::AdminAlreadySet))
+ );
+ assert_eq!(client.get_admin(), Some(attacker));
+ }
+
+ /// Admin handover is two-step: a single-step transfer to a mistyped or
+ /// uncontrolled address would permanently destroy pause, upgrade and
+ /// registry control.
+ #[test]
+ fn test_admin_handover_requires_acceptance() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let next = Address::generate(&env);
+ client.init_admin(&admin);
+
+ client.propose_admin(&next);
+ // Proposing alone changes nothing β the old admin still holds the role.
+ assert_eq!(client.get_admin(), Some(admin));
+
+ client.accept_admin();
+ assert_eq!(client.get_admin(), Some(next));
+
+ // The handover is consumed; it cannot be replayed to seize the role back.
+ assert_eq!(client.try_accept_admin(), Err(Ok(ContractError::NoPendingAdmin)));
+ }
+
+ #[test]
+ fn test_accept_admin_without_a_proposal_fails() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ client.init_admin(&admin);
+
+ assert_eq!(client.try_accept_admin(), Err(Ok(ContractError::NoPendingAdmin)));
+ }
+
+ #[test]
+ fn test_accept_admin_requires_the_proposed_address_to_sign() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let next = Address::generate(&env);
+ client.init_admin(&admin);
+ client.propose_admin(&next);
+ client.accept_admin();
+
+ // Authorization is asserted via env.auths() rather than by calling
+ // unauthorized: a failed require_auth is a non-unwinding host trap that
+ // #[should_panic] cannot catch in native cargo test.
+ let auths = env.auths();
+ assert_eq!(auths.len(), 1);
+ assert_eq!(auths.get(0).unwrap().0, next, "only the proposed admin may accept");
+ }
+
+ /// Upgrading replaces the code holding every escrow's custody. Requiring a
+ /// pause first makes it a deliberate two-transaction sequence with an
+ /// observable event in between, rather than a silent single call.
+ #[test]
+ fn test_upgrade_requires_pause_first() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ client.init_admin(&admin);
+
+ let wasm_hash = BytesN::from_array(&env, &[7u8; 32]);
+ assert_eq!(
+ client.try_upgrade(&wasm_hash),
+ Err(Ok(ContractError::NotPaused))
+ );
+ }
+
+ // ========== UPGRADE AUTHORITY ==========
+ //
+ // `upgrade` replaces the code that holds every escrow's custody, so it is the
+ // single most consequential entry point in the contract. These tests pin the
+ // exact conditions, because "we tested it once by hand" is not evidence for a
+ // mechanism that controls funds.
+
+ /// Upgrading demands the admin's signature, and no one else's.
+ ///
+ /// Asserted via `env.auths()` rather than by calling unauthorized: a failed
+ /// `require_auth` is a non-unwinding host trap that `#[should_panic]` cannot
+ /// catch in native `cargo test`.
+ #[test]
+ fn test_upgrade_requires_admin_authorization() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ client.init_admin(&admin);
+ client.set_paused(&true);
+
+ // A hash of the currently-installed WASM keeps the call valid while we
+ // inspect who had to authorize it.
+ // Uploading a real WASM blob costs far more than a normal contract call,
+ // so the default test budget has to be lifted to exercise `upgrade` at all.
+ env.budget().reset_unlimited();
+ let wasm_hash = env.deployer().upload_contract_wasm(CURRENT_WASM);
+ client.upgrade(&wasm_hash);
+
+ let auths = env.auths();
+ assert_eq!(auths.len(), 1, "upgrade must require exactly one signer");
+ assert_eq!(auths.get(0).unwrap().0, admin, "that signer must be the admin");
+ assert_ne!(auths.get(0).unwrap().0, manager, "a manager must not authorize an upgrade");
+ }
+
+ /// An admin-less contract cannot be upgraded at all β there is no authority
+ /// to satisfy. A deployment that never calls `init_admin` is immutable.
+ #[test]
+ fn test_upgrade_impossible_without_an_admin() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let wasm_hash = BytesN::from_array(&env, &[1u8; 32]);
+ assert_eq!(client.try_upgrade(&wasm_hash), Err(Ok(ContractError::NotAdmin)));
+ }
+
+ /// Pause is mandatory, and it is checked BEFORE anything is replaced.
+ #[test]
+ fn test_upgrade_pause_is_mandatory_and_checked_first() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ client.init_admin(&admin);
+
+ // Uploading a real WASM blob costs far more than a normal contract call,
+ // so the default test budget has to be lifted to exercise `upgrade` at all.
+ env.budget().reset_unlimited();
+ let wasm_hash = env.deployer().upload_contract_wasm(CURRENT_WASM);
+
+ assert_eq!(client.try_upgrade(&wasm_hash), Err(Ok(ContractError::NotPaused)));
+ // And unpausing again does not leave a latent permission behind.
+ client.set_paused(&true);
+ client.set_paused(&false);
+ assert_eq!(client.try_upgrade(&wasm_hash), Err(Ok(ContractError::NotPaused)));
+ }
+
+ /// An upgrade is observable. A silent replacement of the code holding custody
+ /// would leave monitoring nothing to alert on.
+ #[test]
+ fn test_upgrade_emits_an_event_carrying_the_wasm_hash() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ client.init_admin(&admin);
+ client.set_paused(&true);
+
+ // Uploading a real WASM blob costs far more than a normal contract call,
+ // so the default test budget has to be lifted to exercise `upgrade` at all.
+ env.budget().reset_unlimited();
+ let wasm_hash = env.deployer().upload_contract_wasm(CURRENT_WASM);
+ client.upgrade(&wasm_hash);
+
+ assert_eq!(count_events(&env, "admin", "upgrade"), 1);
+ // The pause that necessarily preceded it is observable too, so the whole
+ // sequence is reconstructable from the log.
+ assert!(count_events(&env, "admin", "paused") >= 1);
+ }
+
+ /// Escrow state survives an upgrade: custody, approvals and payment rows are
+ /// all untouched. An upgrade that silently reset them would be catastrophic.
+ #[test]
+ fn test_upgrade_preserves_escrow_state_and_custody() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ client.init_admin(&admin);
+ client.register_oracle_key(&oracle_pubkey);
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+ prove_all(&env, &client, &contract_id, &sk, escrow_id);
+ client.manager_approve(&escrow_id);
+
+ let custody_before = balance_of(&env, &token, &contract_id);
+ let nonce_before = client.get_nonce(&escrow_id);
+ assert_eq!(custody_before, 10000);
+
+ client.set_paused(&true);
+ // Uploading a real WASM blob costs far more than a normal contract call,
+ // so the default test budget has to be lifted to exercise `upgrade` at all.
+ env.budget().reset_unlimited();
+ let wasm_hash = env.deployer().upload_contract_wasm(CURRENT_WASM);
+ client.upgrade(&wasm_hash);
+ client.set_paused(&false);
+
+ // Everything that matters is still there.
+ assert_eq!(balance_of(&env, &token, &contract_id), custody_before);
+ assert_eq!(client.get_nonce(&escrow_id), nonce_before);
+ let escrow = client.get_escrow(&escrow_id);
+ assert!(escrow.manager_approved);
+ assert!(!escrow.finance_approved);
+ assert!(escrow.payments.get(0).unwrap().proof_verified);
+ assert_eq!(client.get_admin(), Some(admin));
+ assert!(client.is_oracle_key_registered(&oracle_pubkey));
+
+ // And the escrow still settles afterwards.
+ client.finance_approve(&escrow_id);
+ client.pay_batch(&escrow_id);
+ assert_eq!(balance_of(&env, &token, &worker), 10000);
+ assert_eq!(balance_of(&env, &token, &contract_id), 0);
+ }
+
+ /// `cancel_escrow` remains callable while paused, so an upgrade window can
+ /// never trap a manager's funds: if an operator pauses and walks away, refunds
+ /// are still available.
+ #[test]
+ fn test_pause_for_upgrade_does_not_trap_funds() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ client.init_admin(&admin);
+ client.register_oracle_key(&oracle_pubkey);
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+
+ client.set_paused(&true);
+ client.cancel_escrow(&escrow_id);
+
+ assert_eq!(balance_of(&env, &token, &manager), MINT_AMOUNT);
+ assert_eq!(balance_of(&env, &token, &contract_id), 0);
+ }
+
+ /// An admin cannot install a WASM hash that was never uploaded: the host
+ /// refuses it. So naming a wrong hash fails the transaction rather than
+ /// bricking the contract β the upgrade simply does not happen.
+ ///
+ /// The refusal comes from BELOW the contract (the host, not a ContractError),
+ /// which is why this is a `should_panic` rather than a `try_` assertion.
+ #[test]
+ #[ignore = "host rejects an unuploaded WASM hash with a non-unwinding trap, which \
+#[should_panic] cannot catch in native cargo test (same limitation as \
+test_wrong_oracle_key_rejected). Verified against live Testnet instead \
+β see docs/evidence/REVIEWER_EVIDENCE.md, upgrade authority."]
+ fn test_upgrade_to_an_unknown_wasm_hash_is_refused() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ client.init_admin(&admin);
+ client.set_paused(&true);
+
+ let bogus = BytesN::from_array(&env, &[0xABu8; 32]);
+ client.upgrade(&bogus);
+ }
+
+ // ========== STORAGE LIFETIME (F-13) ==========
+
+ /// A funded escrow must not depend on the manager staying reachable to keep
+ /// its storage alive β the worker awaiting payment has the strongest
+ /// interest and no authority, so the keep-alive is permissionless.
+ #[test]
+ fn test_anyone_can_extend_escrow_ttl() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+
+ // No auth mock consumed, and no authorization demanded: a keeper bot
+ // holding no role can pay the rent.
+ env.set_auths(&[]);
+ client.extend_escrow_ttl(&escrow_id);
+
+ assert!(env.auths().is_empty(), "keep-alive must require no signer");
+ // The escrow is untouched β this only buys storage lifetime.
+ assert_eq!(client.get_escrow(&escrow_id).manager, manager);
+ }
+
+ #[test]
+ fn test_extend_ttl_on_unknown_escrow_fails() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ // Nobody should be charged rent for a key that holds nothing.
+ assert_eq!(
+ client.try_extend_escrow_ttl(&999),
+ Err(Ok(ContractError::InvalidPaymentId))
+ );
+ }
+
+ // ========== ORACLE KEY REGISTRY (F-7) ==========
+
+ /// A manager may no longer name an arbitrary oracle. Before the registry,
+ /// they could install their own key and sign their own "verified work",
+ /// which made the proof-of-work gate manager-attestable.
+ #[test]
+ fn test_escrow_rejects_unregistered_oracle_key() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, rogue_key) = generate_oracle_keypair(&env);
+
+ client.init_admin(&admin);
+ // Deliberately NOT registered.
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let res = client.try_initialize_multi_sig_escrow(&manager, &finance, &rogue_key, &payments);
+
+ assert_eq!(res, Err(Ok(ContractError::OracleKeyNotRegistered)));
+ // And no custody was pulled for a rejected escrow.
+ assert_eq!(balance_of(&env, &token, &contract_id), 0);
+ assert_eq!(balance_of(&env, &token, &manager), MINT_AMOUNT);
+ }
+
+ /// Rotation cannot be used as a back door around the registry.
+ #[test]
+ fn test_rotation_to_unregistered_key_rejected() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ client.init_admin(&admin);
+ client.register_oracle_key(&oracle_pubkey);
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+
+ let rogue = BytesN::from_array(&env, &[9u8; 32]);
+ let res = client.try_rotate_oracle_key(&escrow_id, &rogue);
+
+ assert_eq!(res, Err(Ok(ContractError::OracleKeyNotRegistered)));
+ assert_eq!(client.get_escrow(&escrow_id).oracle_pubkey, oracle_pubkey);
+ }
+
+ /// Revocation stops a key being named by NEW escrows. It is deliberately not
+ /// retroactive -- invalidating in-flight attestations would strand escrows
+ /// that are already funded.
+ #[test]
+ fn test_revoked_key_cannot_back_a_new_escrow() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ client.init_admin(&admin);
+ client.register_oracle_key(&oracle_pubkey);
+ assert!(client.is_oracle_key_registered(&oracle_pubkey));
+
+ client.revoke_oracle_key(&oracle_pubkey);
+ assert!(!client.is_oracle_key_registered(&oracle_pubkey));
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let res =
+ client.try_initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+ assert_eq!(res, Err(Ok(ContractError::OracleKeyNotRegistered)));
+ }
+
+ /// Registration is admin-only -- otherwise the registry would be decorative.
+ ///
+ /// Asserted by inspecting the authorizations the contract DEMANDED rather
+ /// than by calling unauthorized and catching a panic: a failed
+ /// `require_auth` is a non-unwinding host trap, which `#[should_panic]`
+ /// cannot catch in native `cargo test` (the same limitation documented on
+ /// `test_wrong_oracle_key_rejected`). Checking `env.auths()` proves the
+ /// admin address had to sign, which is the property that matters.
+ #[test]
+ fn test_register_oracle_key_requires_admin_authorization() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ let manager = Address::generate(&env);
+ client.init_admin(&admin);
+
+ let (_sk, key) = generate_oracle_keypair(&env);
+ client.register_oracle_key(&key);
+
+ let auths = env.auths();
+ assert_eq!(auths.len(), 1, "register_oracle_key must require exactly one signer");
+ assert_eq!(auths.get(0).unwrap().0, admin, "that signer must be the admin");
+ assert_ne!(
+ auths.get(0).unwrap().0,
+ manager,
+ "a manager must not be able to authorize registry changes"
+ );
+ }
+
+ /// Revocation is likewise admin-gated.
+ #[test]
+ fn test_revoke_oracle_key_requires_admin_authorization() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let admin = Address::generate(&env);
+ client.init_admin(&admin);
+ let (_sk, key) = generate_oracle_keypair(&env);
+ client.register_oracle_key(&key);
+
+ client.revoke_oracle_key(&key);
+
+ let auths = env.auths();
+ assert_eq!(auths.len(), 1);
+ assert_eq!(auths.get(0).unwrap().0, admin);
+ }
+
+ /// An admin-less deployment keeps the v1 trust model rather than bricking:
+ /// with no registry authority, no key could ever satisfy the check.
+ #[test]
+ fn test_admin_less_contract_accepts_any_oracle_key() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token));
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+ assert_eq!(escrow_id, 1);
+ }
+
+ // ========== WORK / AMOUNT INVARIANT (F-8) ==========
+
+ /// Attested hours must justify the escrowed amount exactly. Previously
+ /// `hours_logged` was decorative: the oracle could attest to any figure
+ /// while the pre-funded `amount` paid out regardless.
+ #[test]
+ fn test_hours_must_match_escrowed_amount() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (signing_key, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let mut payments = Vec::new(&env);
+ payments.push_back(create_test_payment(&env, &worker, &token)); // 10000 @ 250 = 40h
+ let escrow_id =
+ client.initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+
+ // A perfectly valid signature over 80 hours -- the oracle really did sign
+ // this. It is refused because 80 x 250 != 10000.
+ let sig =
+ sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, 80, 0);
+ let res = client.try_submit_hours_proof(&escrow_id, &0, &80i128, &0u64, &sig);
+
+ assert_eq!(res, Err(Ok(ContractError::AmountHoursMismatch)));
+ assert!(!client.get_escrow(&escrow_id).payments.get(0).unwrap().proof_verified);
+ }
+
+ /// An amount that no whole number of hours can reach is refused at creation,
+ /// rather than funding custody into an escrow that can never settle.
+ #[test]
+ fn test_amount_not_divisible_by_rate_rejected_at_creation() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let mut p = create_test_payment(&env, &worker, &token);
+ p.amount = 10_001; // 10001 / 250 is not a whole number of hours
+ let mut payments = Vec::new(&env);
+ payments.push_back(p);
+
+ let res =
+ client.try_initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+ assert_eq!(res, Err(Ok(ContractError::AmountHoursMismatch)));
+ assert_eq!(balance_of(&env, &token, &contract_id), 0);
+ }
+
+ // ========== BATCH / PERIOD BOUNDS ==========
+
+ #[test]
+ fn test_batch_over_cap_rejected() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ // 101 rows: one past MAX_BATCH_SIZE. An unbounded Vec would eventually
+ // exceed the ledger resource limits and strand the escrow's custody.
+ let mut payments = Vec::new(&env);
+ for _ in 0..101 {
+ let worker = Address::generate(&env);
+ let mut p = create_test_payment(&env, &worker, &token);
+ p.amount = 250; // 1 hour, keeps the funding total small
+ payments.push_back(p);
+ }
+
+ let res =
+ client.try_initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+ assert_eq!(res, Err(Ok(ContractError::BatchTooLarge)));
+ }
+
+ #[test]
+ fn test_inverted_pay_period_rejected() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, CoreFlowContract);
+ let client = CoreFlowContractClient::new(&env, &contract_id);
+
+ let manager = Address::generate(&env);
+ let finance = Address::generate(&env);
+ let worker = Address::generate(&env);
+ let token = setup_token(&env, &manager);
+ let (_sk, oracle_pubkey) = generate_oracle_keypair(&env);
+
+ let mut p = create_test_payment(&env, &worker, &token);
+ p.start_date = 2000;
+ p.end_date = 1000; // inverted
+ let mut payments = Vec::new(&env);
+ payments.push_back(p);
+
+ let res =
+ client.try_initialize_multi_sig_escrow(&manager, &finance, &oracle_pubkey, &payments);
+ assert_eq!(res, Err(Ok(ContractError::InvalidPeriod)));
}
// ========== PROPERTY / FUZZ ==========
@@ -1450,6 +2396,9 @@ mod tests {
let mut payments = Vec::new(&env);
let (mut total_a, mut total_b) = (0i128, 0i128);
for i in 0..n {
+ // rate_per_hour is 1 below, so `hours == amount` and the
+ // contract's `hours x rate == amount` invariant holds for any
+ // positive integer drawn here.
let amount = ((next() % 100_000) + 1) as i128; // 1..=100000, always positive
let use_a = next() % 2 == 0;
if use_a {
@@ -1485,7 +2434,7 @@ mod tests {
assert_eq!(balance_of(&env, &token_a, &manager), MINT_AMOUNT - total_a);
assert_eq!(balance_of(&env, &token_b, &manager), MINT_AMOUNT - total_b);
- prove_all(&env, &client, &sk, escrow_id, n as u32);
+ prove_all(&env, &client, &contract_id, &sk, escrow_id);
client.manager_approve(&escrow_id);
client.finance_approve(&escrow_id);
let finalized = client.pay_batch(&escrow_id);
@@ -1527,8 +2476,11 @@ mod tests {
for offset in 0..10u32 {
let user_index = batch * 10 + offset;
let worker = Address::generate(&env);
- let amount = 1_000 + user_index as i128;
- let hours = 40 + user_index as i128;
+ // Whole hours x rate: the contract enforces
+ // `hours x rate_per_hour == amount`, so a payroll row is
+ // defined by hours worked, not by an arbitrary sum.
+ let hours = 40 + (user_index as i128 % 8); // 40..47 hours
+ let amount = hours * 25;
let mut payments = Vec::new(&env);
payments.push_back(PaymentSchedule {
id: 1,
@@ -1549,7 +2501,7 @@ mod tests {
&oracle_pubkey,
&payments,
);
- let signature = sign_oracle_proof(&env, &signing_key, escrow_id, 0, hours, 0);
+ let signature = sign_oracle_proof(&env, &client, &contract_id, &signing_key, escrow_id, 0, hours, 0);
client.submit_hours_proof(&escrow_id, &0, &hours, &0, &signature);
client.manager_approve(&escrow_id);
@@ -1576,6 +2528,10 @@ mod tests {
total_funded += batch_funded;
}
- assert_eq!(total_funded, 50 * 1_000 + (50 * 49) / 2);
+ // 50 workers, hours cycling 40..47 at 25/hour: six full 40..47 cycles
+ // (48 workers) plus indices 48,49 at 40 and 41 hours.
+ let expected_hours: i128 = (0..50i128).map(|i| 40 + i % 8).sum();
+ assert_eq!(expected_hours, 2_169);
+ assert_eq!(total_funded, expected_hours * 25);
}
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_accept_admin_requires_the_proposed_address_to_sign.1.json b/contracts/core-flow/test_snapshots/test/tests/test_accept_admin_requires_the_proposed_address_to_sign.1.json
new file mode 100644
index 0000000..1df72b7
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_accept_admin_requires_the_proposed_address_to_sign.1.json
@@ -0,0 +1,448 @@
+{
+ "generators": {
+ "address": 3,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "accept_admin",
+ "args": []
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "propose"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "accept"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_accept_admin_without_a_proposal_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_accept_admin_without_a_proposal_fails.1.json
new file mode 100644
index 0000000..1f4a89d
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_accept_admin_without_a_proposal_fails.1.json
@@ -0,0 +1,320 @@
+{
+ "generators": {
+ "address": 2,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 21
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 21
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 21
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "accept_admin"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_admin_can_be_set_once.1.json b/contracts/core-flow/test_snapshots/test/tests/test_admin_can_be_set_once.1.json
index b013e7a..12cd62c 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_admin_can_be_set_once.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_admin_can_be_set_once.1.json
@@ -163,6 +163,29 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_admin_handover_requires_acceptance.1.json b/contracts/core-flow/test_snapshots/test/tests/test_admin_handover_requires_acceptance.1.json
new file mode 100644
index 0000000..b8f4f87
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_admin_handover_requires_acceptance.1.json
@@ -0,0 +1,654 @@
+{
+ "generators": {
+ "address": 3,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "accept_admin",
+ "args": []
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "propose"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "accept"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "accept_admin"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 21
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 21
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 21
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "accept_admin"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_admin_less_contract_accepts_any_oracle_key.1.json b/contracts/core-flow/test_snapshots/test/tests/test_admin_less_contract_accepts_any_oracle_key.1.json
new file mode 100644
index 0000000..52a9128
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_admin_less_contract_accepts_any_oracle_key.1.json
@@ -0,0 +1,1485 @@
+{
+ "generators": {
+ "address": 6,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 990000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_amount_not_divisible_by_rate_rejected_at_creation.1.json b/contracts/core-flow/test_snapshots/test/tests/test_amount_not_divisible_by_rate_rejected_at_creation.1.json
new file mode 100644
index 0000000..b86918e
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_amount_not_divisible_by_rate_rejected_at_creation.1.json
@@ -0,0 +1,986 @@
+{
+ "generators": {
+ "address": 6,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10001
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 17
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 17
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 17
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10001
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_anyone_can_extend_escrow_ttl.1.json b/contracts/core-flow/test_snapshots/test/tests/test_anyone_can_extend_escrow_ttl.1.json
new file mode 100644
index 0000000..3d195af
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_anyone_can_extend_escrow_ttl.1.json
@@ -0,0 +1,1772 @@
+{
+ "generators": {
+ "address": 6,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 990000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "extend_escrow_ttl"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "ttl"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 6312000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "extend_escrow_ttl"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_approve_cancelled_escrow_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_approve_cancelled_escrow_fails.1.json
index 16ac9fc..9433b63 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_approve_cancelled_escrow_fails.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_approve_cancelled_escrow_fails.1.json
@@ -1457,6 +1457,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1598,6 +1652,36 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_batch_over_cap_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_batch_over_cap_rejected.1.json
new file mode 100644
index 0000000..933d462
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_batch_over_cap_rejected.1.json
@@ -0,0 +1,19533 @@
+{
+ "generators": {
+ "address": 106,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMXIK"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADO7A2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRE7L"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTMX3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVUOL"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADX4G3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYF5L"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2NV3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4VML"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD65E3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEADAU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECLIE"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEETRU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEG3ZE"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCCU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAELKKE"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENSTU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEP23E"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQBEV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESJMF"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEURVV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWZ5F"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZAGV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3IOF"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5QXV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE7Y7F"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAPIG"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCHAW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFE7ZG"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFGXRW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJOKG"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFLGCW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN63G"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFPWTW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQNMH"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFSFEX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFU55H"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWVVX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZMOH"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3EGX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF547H"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF7UXX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGA3RQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCTZA"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGELAQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGDIA"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJ2TQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGLS3A"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNKCQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGPCKA"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQZVR"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSR5B"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUJER"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 19
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 19
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 19
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMXIK"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADO7A2"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRE7L"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTMX3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVUOL"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADX4G3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYF5L"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2NV3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4VML"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD65E3"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEADAU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECLIE"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEETRU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEG3ZE"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCCU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAELKKE"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENSTU"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEP23E"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQBEV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESJMF"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEURVV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWZ5F"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZAGV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3IOF"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5QXV"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE7Y7F"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAPIG"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCHAW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFE7ZG"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFGXRW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJOKG"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFLGCW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN63G"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFPWTW"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQNMH"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFSFEX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFU55H"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWVVX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZMOH"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3EGX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF547H"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF7UXX"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGA3RQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCTZA"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGELAQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGDIA"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJ2TQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGLS3A"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNKCQ"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGPCKA"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQZVR"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSR5B"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUJER"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_cancel_allowed_while_paused.1.json b/contracts/core-flow/test_snapshots/test/tests/test_cancel_allowed_while_paused.1.json
index 052e922..9d9cd11 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_cancel_allowed_while_paused.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_cancel_allowed_while_paused.1.json
@@ -67,6 +67,25 @@
}
]
],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -613,6 +632,51 @@
1555200
]
],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
[
{
"contract_data": {
@@ -709,7 +773,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
"key": {
"ledger_key_nonce": {
- "nonce": 2032731177588607455
+ "nonce": 4270020994084947596
}
},
"durability": "temporary"
@@ -724,7 +788,40 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
"key": {
"ledger_key_nonce": {
- "nonce": 2032731177588607455
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
}
},
"durability": "temporary",
@@ -742,7 +839,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4270020994084947596
+ "nonce": 2032731177588607455
}
},
"durability": "temporary"
@@ -757,7 +854,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4270020994084947596
+ "nonce": 2032731177588607455
}
},
"durability": "temporary",
@@ -775,7 +872,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4837995959683129791
+ "nonce": 8370022561469687789
}
},
"durability": "temporary"
@@ -790,7 +887,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4837995959683129791
+ "nonce": 8370022561469687789
}
},
"durability": "temporary",
@@ -1352,6 +1449,29 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1373,6 +1493,76 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1634,6 +1824,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1845,6 +2089,36 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_cancel_escrow.1.json b/contracts/core-flow/test_snapshots/test/tests/test_cancel_escrow.1.json
index 54e1e50..eadc135 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_cancel_escrow.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_cancel_escrow.1.json
@@ -1457,6 +1457,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1598,6 +1652,36 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_cancel_finalized_escrow_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_cancel_finalized_escrow_fails.1.json
index 10a57be..cced16c 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_cancel_finalized_escrow_fails.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_cancel_finalized_escrow_fails.1.json
@@ -195,6 +195,9 @@
]
],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1635,6 +1638,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1658,6 +1715,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1694,7 +2216,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -2018,6 +2540,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_each_asset_separately.1.json b/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_each_asset_separately.1.json
index 4b985a3..b42b9c2 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_each_asset_separately.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_each_asset_separately.1.json
@@ -2459,6 +2459,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2692,6 +2800,66 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_manager.1.json b/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_manager.1.json
index d1007a8..e849000 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_manager.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_cancel_refunds_manager.1.json
@@ -1459,6 +1459,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1652,6 +1706,36 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_cancellation_emits_one_event_per_payment.1.json b/contracts/core-flow/test_snapshots/test/tests/test_cancellation_emits_one_event_per_payment.1.json
new file mode 100644
index 0000000..bddd15d
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_cancellation_emits_one_event_per_payment.1.json
@@ -0,0 +1,2092 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "cancel_escrow",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "cancel_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "cancel_escrow"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_contract_preimage_matches_independent_implementation.1.json b/contracts/core-flow/test_snapshots/test/tests/test_contract_preimage_matches_independent_implementation.1.json
new file mode 100644
index 0000000..6d0b042
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_contract_preimage_matches_independent_implementation.1.json
@@ -0,0 +1,1760 @@
+{
+ "generators": {
+ "address": 6,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 990000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "proof_preimage"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "proof_preimage"
+ }
+ ],
+ "data": {
+ "bytes": "434657500002000000000000000000000000000000000000000000000000000000000000000028415d19553c5d590306a4429847180a867cfcea9393db6b5a0e0635075ea93603b07df31ca4bcd5754b472170dd2e99570c11b0f73d632d4ad64170ddff48e3c99fe05630194fe88ba3573dffbdb9cd8e97642345dbd68095cb884b659d4aae0000000100000000000000000000000000000000000027100000000000000000000000000000002800000000000003e800000000000007d00000000000000000"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.1.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.1.json
index 18214d3..ff5b6ff 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.1.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 72679
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 72679
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 72679
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 72679
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 72679
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "dfddccaf2cf3d806865b7af32b1e3c0cc717afd96959e254d1047755f6348c50efc74e2c2d642c50cf49d59dbab735ac0088bcfc55aeefa601ecd1800651d70f"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 72679
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 72679
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 72679
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 72679
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.10.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.10.json
index 2c6abcc..e5455dd 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.10.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.10.json
@@ -454,6 +454,13 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -779,7 +786,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 37860
}
}
},
@@ -872,7 +879,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 13664
}
}
},
@@ -965,7 +972,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56318
}
}
},
@@ -3076,19 +3083,50 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3098,23 +3136,105 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
+ "symbol": "payment"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
},
{
- "symbol": "balance"
+ "symbol": "add"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3124,7 +3244,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3133,14 +3253,11 @@
"symbol": "fn_return"
},
{
- "symbol": "balance"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 94178
- }
+ "u32": 1
}
}
}
@@ -3159,7 +3276,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3176,7 +3293,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3191,7 +3308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 13664
+ "lo": 94178
}
}
}
@@ -3211,14 +3328,14 @@
"symbol": "fn_call"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
"symbol": "balance"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -3228,7 +3345,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3243,7 +3360,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 905822
+ "lo": 13664
}
}
}
@@ -3263,7 +3380,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3280,7 +3397,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3295,7 +3412,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 986336
+ "lo": 905822
}
}
}
@@ -3315,33 +3432,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
}
@@ -3351,33 +3449,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 986336
+ }
}
}
}
@@ -3387,19 +3475,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -3408,56 +3501,1412 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "d088070da7e81df0a215f933293a1be54c6ebbc5691f2064d72d2be6fd227560a5b3ad22329b4b2cdf0d5aec07d7ba816dfbe312867718f0b0f0de846f205703"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "3b4882005f3d1ec785cc44caa1f9797710d83b7b51a2416855bfa3ef59c48506bd68bfa91617413b2a8095557ba8f4a32feb36998c04c63737147527909d1007"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
{
"symbol": "hours"
},
@@ -3476,7 +4925,471 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 13664
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3486,27 +5399,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3536,14 +5428,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56318
}
},
{
"u64": 2
},
{
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
+ "bytes": "815540b32c25c154926e71a1a66f8d34eeedc214a757ae1b7b02cce9098c82a22c89b5c58853d4eb282800ea67ba654b79fd176f49eea71fbbb02446d7c0c604"
}
]
}
@@ -3578,7 +5470,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56318
}
}
]
@@ -3867,6 +5759,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37860
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3959,6 +5899,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13664
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4051,6 +6039,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56318
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4132,7 +6168,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 37860
}
}
},
@@ -4225,7 +6261,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 13664
}
}
},
@@ -4318,7 +6354,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56318
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.11.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.11.json
index 7ec3f5d..0238a2a 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.11.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.11.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 9045
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 9045
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 9045
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 9045
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 9045
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "cb0741653ad6c8d64957dcc2047500f230e2bb5aff9ee25383432195e23585418e15eb06d1aa771dae81b327b7904242e6154e6116d9ed541b39b0d667735609"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 9045
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 9045
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 9045
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 9045
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.12.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.12.json
index a8ca0cf..5caa86d 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.12.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.12.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49565
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 49565
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49565
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49565
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49565
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "4195eb2493b3d4b5e0b26ae0d33054c88470df579e7dfb6ce87c45b1605714be62bde9f0ec27532e6a0657082bd8d42021329a2a38055f51743245c104a5560a"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49565
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 49565
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 49565
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49565
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.13.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.13.json
index 0b6725c..a5d09fb 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.13.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.13.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14923
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 14923
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 14923
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 14923
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14923
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "463c6dff5a8a12051b206db9440d46cd84f0fae0020e0b6e5921f2206370975b51dd0b0c71dec0c0f06831a9fb6fc160867c34964bacab297dea40975e3b1002"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14923
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 14923
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 14923
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14923
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.14.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.14.json
index af22fb5..40e9eb7 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.14.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.14.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 16941
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 93165
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56587
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 81166
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "b1638832a099102548e49acb18eb3122d19fa27829b88d558ec7c58f603760206efd4948e5b864e8f69099809dfe4096f393d8d79977ab3a8c495131c8b17709"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "dcd1b00d63112ae4c5f8d3412c48bba190478166a5f1d3e4c6ecaa189579f817665d93081dae89cd49826e06607b7d79cfd5828b15bb705b4fe449f5951aa80f"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56587
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "027b9f822fb4c01d9e0e95a7a1225da80cca3ed425fb2116e10fddd56e35c7f7a019db0fc5deb5a9ba454069d8c879c6df9010d890829fd03263e3998871b00c"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56587
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 81166
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "c57aec85ff846103bd701a2ed5f1d9cb4ac16daabdc87801fd75e11881db8ecf2d93af94140068185f5b8478fc29c4762d5f90d4461e18cd6fd291a044a7b601"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 81166
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 16941
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 93165
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56587
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 81166
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 16941
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 93165
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56587
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 81166
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.15.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.15.json
index 57e463e..6334248 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.15.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.15.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 39328
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 89370
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 99881
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 36398
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "f698349f081093d4d7bf0ed2883d23b7d4f9a8071f8deeaab48a2cd286027a5285af28cb32ce38fd4fa4e1bba90427f6a44b331312168c63d7bbe34f9cfe0f08"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "1d38c85cc113fa93716335e07d107cafbdeb488602f6617cca868530ec9e9acf1cc4d518411c81bcb5cb24c054837c740ad03e9ef24efc794a8fb6aa318f180b"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 99881
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "f58499f73b35c48813fdae930467b9a7b9265910777aa92a5121bf1bef67322685c7ed4055beea9d938ba2707d50f8e13b3ea928e8341623ef57f27182416007"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 99881
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 36398
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "a57d5ee533785fd30d62ed5c99de4270ba66b2fe6664f9d4709e6f091a2fe711f38fc1408214f26ed5553532b2c076c494b45bca59d41f93dbbc64478ed46300"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 36398
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 39328
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 89370
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 99881
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 36398
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 39328
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 89370
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 99881
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 36398
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.16.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.16.json
index 4449803..45ce6a6 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.16.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.16.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 61280
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 95674
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 41026
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 8213
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "e6e8232f60a67b1ad223839d410847fa84bcfc07a6797c1b3ee8459d6999b9157c258c973a1c83ae0c396a1721b8eb0805abb9bde9f35551a6a7289633e61200"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "0c0a361954313f4cf5532ce47bc161b621e736a7558f97ecce269e0e73a19d64959c6e8747573f64214481850d3ec11a980ae2905cd142c312b38f6b2150d00a"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 41026
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "8578f5191eb278bb42df2492065b5084ceac69b85b4f189915b3d687ac4dda7f6aec9ac3bfab73cd2dda7a7ca73418338d5d9a07a6c97c10f4273d9077669e06"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 41026
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 8213
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "d3444a7b0a3cd355bb5aa4815aa4569c19e2d34d9a5304dd57ae8bcd0539975554a365bd0e87932f8e20b063a185e08b3788344f54d77686417e43b58d5e8a06"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 8213
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61280
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 95674
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41026
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8213
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 61280
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 95674
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 41026
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 8213
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.17.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.17.json
index 7a8dc47..41620ce 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.17.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.17.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 80568
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 80568
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 80568
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 80568
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 80568
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "177553fd5d7c1a7411a0d405c2884c9c2e2ff069e0af2bf0e3f12badceb5499da788b96772900691030ebcdd6aba5da6b8332442bb0b883474f3eb1db84cc607"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 80568
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 80568
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 80568
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 80568
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.18.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.18.json
index 2597117..196cad9 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.18.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.18.json
@@ -360,6 +360,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -683,7 +688,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 1992
}
}
},
@@ -776,7 +781,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 33350
}
}
},
@@ -2717,6 +2722,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 33350
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2963,30 +3076,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2997,29 +3091,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 33350
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3032,24 +3365,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 33350
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "88cc9c5ca34145d1ed64520bf96771d317f8a23c2e6860ae0928df1dd7f2d20bb7c93697d7f72cc3ca243ca1426756ab5a83257c543520d4399e9d21265d9300"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 33350
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3079,14 +4193,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 33350
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "16a30782a554e62b9137619e6b5292308092314bc9fb44c85c6027c86ebad993b69ec8a8fa430bb196f56739bee9411f0f0be5e4ad70ed48552601cd2835b001"
}
]
}
@@ -3121,7 +4235,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 33350
}
}
]
@@ -3410,6 +4524,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1992
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3502,6 +4664,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 33350
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 33350
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3583,7 +4793,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 1992
}
}
},
@@ -3676,7 +4886,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 33350
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.19.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.19.json
index ec8def4..33847d1 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.19.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.19.json
@@ -337,6 +337,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -660,7 +665,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 73905
}
}
},
@@ -753,7 +758,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 706
}
}
},
@@ -2529,6 +2534,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 706
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2775,30 +2888,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2809,29 +2903,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 706
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -2844,24 +3177,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 706
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "44af810f7d29a7d8457e79e234eb646de92dc0d9882759aafce88bb7e4a3dc1083af26792f1aed7b5d5781623c46cb7171ed9ae1ed85e2aef2ba690e92981c03"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 706
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2891,14 +4005,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 706
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "943f6fc202adc1a8d808264f5f96971e161ec71ab34a881fbf07541a47883aa4ed54ecda8c5438552709cf41ce32a2750b9e11ada597e438afb603ec05195601"
}
]
}
@@ -2933,7 +4047,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 706
}
}
]
@@ -3222,6 +4336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 73905
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3314,6 +4476,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 706
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 706
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3395,7 +4605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 73905
}
}
},
@@ -3488,7 +4698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 706
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.2.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.2.json
index 371d03e..e6e47d3 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.2.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.2.json
@@ -360,6 +360,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -683,7 +688,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10027
}
}
},
@@ -776,7 +781,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 4103
}
}
},
@@ -2717,6 +2722,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4103
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2963,30 +3076,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2997,29 +3091,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4103
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3032,24 +3365,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4103
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "1d5158f1d7c7982da230acb1403a1c251feeb3212bf7826b71d2827c462efdd2fa4e10e244d50d9bfc2ad6f63a54a396eaed4580352d0bb432fb071327821701"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4103
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3079,14 +4193,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 4103
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "aeed8390f67c1bda1589968734acbf22ee677689f5ae96bf47e6d160ebe5816e235e28cf1b64f2f79378c2be8b1a7669b4e6a05bb9019efc2c32102c026d0d0d"
}
]
}
@@ -3121,7 +4235,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 4103
}
}
]
@@ -3410,6 +4524,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10027
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3502,6 +4664,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4103
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4103
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3583,7 +4793,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10027
}
}
},
@@ -3676,7 +4886,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 4103
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.20.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.20.json
index bda81a7..8f5b81e 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.20.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.20.json
@@ -454,6 +454,13 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -779,7 +786,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 76145
}
}
},
@@ -872,7 +879,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 88142
}
}
},
@@ -965,7 +972,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15028
}
}
},
@@ -3076,19 +3083,50 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3098,23 +3136,105 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
+ "symbol": "payment"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
},
{
- "symbol": "balance"
+ "symbol": "add"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3124,7 +3244,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3133,14 +3253,11 @@
"symbol": "fn_return"
},
{
- "symbol": "balance"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 164287
- }
+ "u32": 1
}
}
}
@@ -3159,7 +3276,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3176,7 +3293,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3191,7 +3308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 15028
+ "lo": 164287
}
}
}
@@ -3211,14 +3328,14 @@
"symbol": "fn_call"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
"symbol": "balance"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -3228,7 +3345,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3243,7 +3360,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 835713
+ "lo": 15028
}
}
}
@@ -3263,7 +3380,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3280,7 +3397,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3295,7 +3412,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 984972
+ "lo": 835713
}
}
}
@@ -3315,33 +3432,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
}
@@ -3351,33 +3449,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 984972
+ }
}
}
}
@@ -3387,19 +3475,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -3408,56 +3501,1412 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "93f2f48c87b05bf81aaf768a1651bafd86c147c136628bb2e4c74960a804112bd5d9f0930d6ab581bbd245e9fe8f24977966d5172ac61a8b8b85a1b30924900d"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "8e3465730f70f4f31ca7c2f4ac36fbb35ac3c1aa9e9ef1f9d73b02776754b0d101ae970bb67fae7266cb77fc8dd1f55d193902988e2c7597033f9820ec072a02"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
{
"symbol": "hours"
},
@@ -3476,7 +4925,471 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 88142
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3486,27 +5399,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3536,14 +5428,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15028
}
},
{
"u64": 2
},
{
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
+ "bytes": "8e9f55c835c351cf6c78e5e0a1756576d1d5d6719c1bc41079c69548ac2216a6e532cdfa0b6f7a363632a49d2a921443194b3e645ce6ede49275e61aec2a1906"
}
]
}
@@ -3578,7 +5470,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15028
}
}
]
@@ -3867,6 +5759,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 76145
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3959,6 +5899,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 88142
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4051,6 +6039,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15028
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4132,7 +6168,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 76145
}
}
},
@@ -4225,7 +6261,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 88142
}
}
},
@@ -4318,7 +6354,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15028
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.21.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.21.json
index 2571e07..252a116 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.21.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.21.json
@@ -454,6 +454,13 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -779,7 +786,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 98218
}
}
},
@@ -872,7 +879,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 47798
}
}
},
@@ -965,7 +972,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 12642
}
}
},
@@ -3076,19 +3083,50 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3098,23 +3136,105 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
+ "symbol": "payment"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
},
{
- "symbol": "balance"
+ "symbol": "add"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3124,7 +3244,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3133,14 +3253,11 @@
"symbol": "fn_return"
},
{
- "symbol": "balance"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 47798
- }
+ "u32": 1
}
}
}
@@ -3159,7 +3276,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3176,7 +3293,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3191,7 +3308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 110860
+ "lo": 47798
}
}
}
@@ -3211,14 +3328,14 @@
"symbol": "fn_call"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
"symbol": "balance"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -3228,7 +3345,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3243,7 +3360,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 952202
+ "lo": 110860
}
}
}
@@ -3263,7 +3380,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3280,7 +3397,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3295,7 +3412,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 889140
+ "lo": 952202
}
}
}
@@ -3315,33 +3432,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
}
@@ -3351,33 +3449,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 889140
+ }
}
}
}
@@ -3387,19 +3475,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -3408,56 +3501,1412 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "5590d9dd45ca88736d5cd8ff74bd1b8778dc61914ffb2e255b74ba95adca99c2e05b9a3b85fc17f3f68c5f9a8de36dc260b66efcb848d31a997a0380ddf3f109"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "73170ac73e2f1d267c6835e692dd83b3b73187d1cbbb1f5bf2c9488db51337fb4a7e44b5f603187c59bc12073b7a361c894ce38404f6627601ac94f652550003"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
{
"symbol": "hours"
},
@@ -3476,7 +4925,471 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 47798
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3486,27 +5399,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3536,14 +5428,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 12642
}
},
{
"u64": 2
},
{
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
+ "bytes": "0d09eec747314f49c5f33dbb632928b9bb2881425b227c273309b2167da42c57313649128214addf2a756978978e50390c0a373af8277b0db398c766f5031e0c"
}
]
}
@@ -3578,7 +5470,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 12642
}
}
]
@@ -3867,6 +5759,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 98218
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3959,6 +5899,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47798
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4051,6 +6039,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 12642
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4132,7 +6168,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 98218
}
}
},
@@ -4225,7 +6261,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 47798
}
}
},
@@ -4318,7 +6354,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 12642
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.22.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.22.json
index 466573f..dac5e7c 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.22.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.22.json
@@ -431,6 +431,13 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -756,7 +763,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 68141
}
}
},
@@ -849,7 +856,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 55495
}
}
},
@@ -942,7 +949,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 45771
}
}
},
@@ -2888,19 +2895,50 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -2910,23 +2948,105 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
+ "symbol": "payment"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
},
{
- "symbol": "balance"
+ "symbol": "add"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -2936,7 +3056,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
@@ -2945,14 +3065,11 @@
"symbol": "fn_return"
},
{
- "symbol": "balance"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 0
- }
+ "u32": 1
}
}
}
@@ -2971,7 +3088,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -2988,7 +3105,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3003,7 +3120,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 169407
+ "lo": 0
}
}
}
@@ -3023,14 +3140,14 @@
"symbol": "fn_call"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
"symbol": "balance"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -3040,7 +3157,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3055,7 +3172,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1000000
+ "lo": 169407
}
}
}
@@ -3075,7 +3192,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3092,7 +3209,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3107,7 +3224,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 830593
+ "lo": 1000000
}
}
}
@@ -3127,33 +3244,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
}
@@ -3163,33 +3261,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 830593
+ }
}
}
}
@@ -3199,19 +3287,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -3220,56 +3313,1412 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "2a7c5ff8ce73e61b4c65203bbe8df41fcac5d7ec8824e4dfb37cbabd47e6c5b0e0c39bfc21142c8040da8dfa75171e72592e16879b2fac75450b80cd0fd47703"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "ed65811218d7dd4125b89c9b3f2c1b01123423d5a0c40e63663bcde554af318f2ac2411748e2d1a6cd3156acff2c93315868f66ca2bd28e941746f5a16c84a09"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
{
"symbol": "hours"
},
@@ -3288,7 +4737,471 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 55495
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3298,27 +5211,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3348,14 +5240,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 45771
}
},
{
"u64": 2
},
{
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
+ "bytes": "f4acb4acf756f9ae4500bfde42d6025976903aeb0d76222c2b2ba5c72dcf80148adc71197efaa556faa6cb7af3e3b24c7c07de4d22fd7022977af96fe3b48005"
}
]
}
@@ -3390,7 +5282,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 45771
}
}
]
@@ -3679,6 +5571,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68141
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3771,6 +5711,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 55495
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3863,6 +5851,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45771
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3944,7 +5980,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 68141
}
}
},
@@ -4037,7 +6073,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 55495
}
}
},
@@ -4130,7 +6166,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 45771
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.23.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.23.json
index 539e50c..cf15847 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.23.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.23.json
@@ -360,6 +360,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -683,7 +688,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 13294
}
}
},
@@ -776,7 +781,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 84436
}
}
},
@@ -2717,6 +2722,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 84436
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2963,30 +3076,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2997,29 +3091,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 84436
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3032,24 +3365,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 84436
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "abb9f44200765a7c5c0b9a6a03bcf25d9aa35baa89f1a3f0a776c1a84bd08e51f37c487f7010a242e2021ea0fcc72d448999d2b98b0c0af392a0dba890787b0c"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 84436
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3079,14 +4193,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 84436
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "469e6e630e5f9d8c71fec7eeb061a97905d46854d309b485b348360d8535d17e17896b78ba00f861e607bb3461bf456e8edf54bbff64d78556c9492f6ac5300b"
}
]
}
@@ -3121,7 +4235,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 84436
}
}
]
@@ -3410,6 +4524,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13294
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3502,6 +4664,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 84436
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 84436
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3583,7 +4793,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 13294
}
}
},
@@ -3676,7 +4886,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 84436
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.24.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.24.json
index be2a234..9b739cb 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.24.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.24.json
@@ -454,6 +454,13 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -779,7 +786,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 54982
}
}
},
@@ -872,7 +879,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 61257
}
}
},
@@ -965,7 +972,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32416
}
}
},
@@ -3076,19 +3083,50 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3098,23 +3136,105 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
+ "symbol": "payment"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
},
{
- "symbol": "balance"
+ "symbol": "add"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -3124,7 +3244,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3133,14 +3253,11 @@
"symbol": "fn_return"
},
{
- "symbol": "balance"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 61257
- }
+ "u32": 1
}
}
}
@@ -3159,7 +3276,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3176,7 +3293,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3191,7 +3308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 87398
+ "lo": 61257
}
}
}
@@ -3211,14 +3328,14 @@
"symbol": "fn_call"
},
{
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
"symbol": "balance"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -3228,7 +3345,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3243,7 +3360,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 938743
+ "lo": 87398
}
}
}
@@ -3263,7 +3380,7 @@
"symbol": "fn_call"
},
{
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
"symbol": "balance"
@@ -3280,7 +3397,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -3295,7 +3412,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 912602
+ "lo": 938743
}
}
}
@@ -3315,33 +3432,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
}
@@ -3351,33 +3449,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 912602
+ }
}
}
}
@@ -3387,19 +3475,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -3408,56 +3501,1412 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "fb10e174f16906cab1ffc506c2d9a6377f226f11f3f361463658016a7be3d02ae51ad879e1845916fc7993a1bc0fc63b843a83fa2d1f42376325a6bdad12c50b"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "adfab390ea2460d1ed6483bc68a846a5002b5ed4ba59ed086984656bb8db52a7095bf1187cf25e3a5b96bd15af518666a5ab89fd98c087de5be51c0602c69609"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
{
"symbol": "hours"
},
@@ -3476,7 +4925,471 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 61257
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3486,27 +5399,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3536,14 +5428,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32416
}
},
{
"u64": 2
},
{
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
+ "bytes": "6418d68097dc90b1f19fba5c0e681d0eeede5a60372a441b4d8e59879a9ba2ba9f6e93271316b6a3f94b37ff212da1260e26bfec11e7b64275a89dbf42dff007"
}
]
}
@@ -3578,7 +5470,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32416
}
}
]
@@ -3867,6 +5759,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 54982
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3959,6 +5899,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 61257
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4051,6 +6039,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32416
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4132,7 +6168,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 54982
}
}
},
@@ -4225,7 +6261,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 61257
}
}
},
@@ -4318,7 +6354,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32416
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.25.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.25.json
index 221a06e..51d7d9a 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.25.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.25.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24226
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 24226
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24226
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24226
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24226
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "180ff6856c7b255b439e34aff7d6946c3c405c5a0a39de71d0876b5c14d6b6156a8ca7d6b9eb47bed71b21d56f8a795af9ca44bc061c16f1573bf81d8087440a"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24226
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 24226
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 24226
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24226
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.26.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.26.json
index 2566aac..b67d69e 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.26.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.26.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 41048
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 29221
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 31470
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56904
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "cb6df83322cc6e8ebce745b3a4836759f606e37d4bcc08ea40ca90034ccce2aafc9e47e707c94e541ba5acde90e284bd1916b02a671895b6112b687022de7c0a"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "a2a8127fb2d0e7f14f4664272139ef9d6467ab95d2cab9ee22a1a571a5a2458c7cb766cc6c5ae9843bc2de87c23271f87823237fe71d598c71c02dd533ffd206"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 31470
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "a6d4fe08697f08bb492bceb34952d78d5a908fc0e699a2f8d632f8b9964efad1e55388d952079e0f97535c7354f03551ee4fb4f41a64f6994b9cf0b26c446408"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 31470
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56904
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "665d2e17c40162f3e11e44249da9fe5ace7e936dd9bc456be5b9ea22688ecba39d103ac447b91f0f44890e3d05b0413c49c50ebec9c6cec6d186178287336704"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56904
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41048
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29221
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 31470
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 56904
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 41048
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 29221
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 31470
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 56904
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.27.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.27.json
index 50e944a..b213bb7 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.27.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.27.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 52199
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 52199
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 52199
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 52199
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 52199
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "6f08fdc0e978eff38b6c7df6d280599f3dc84cd6a6741df473f04e2463b7eeebfe04f612694971a5501546cea5140d4c7c7a6d0f04c0240191d1a15a1d859805"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 52199
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 52199
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 52199
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 52199
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.28.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.28.json
index 33a59c8..bee7393 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.28.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.28.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 6291
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6291
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6291
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6291
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 6291
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "877061ee2535837ea994adedfab2e79458b7e80f53a232387f2cdb52f1cfda938dd425a1939d7be8829036ace4ee50b0a708176a48b64b50c972ff65c34c7206"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 6291
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6291
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6291
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 6291
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.29.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.29.json
index 03a1fdb..befc626 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.29.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.29.json
@@ -337,6 +337,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -660,7 +665,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 92443
}
}
},
@@ -753,7 +758,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10118
}
}
},
@@ -2529,6 +2534,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10118
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2775,30 +2888,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2809,29 +2903,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10118
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -2844,24 +3177,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10118
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "31839e8647b53138c60099013f9ad535e30a8d09115f43ec32cae7cd263fbd5a1f3334c15365be0243b06ca7195bf681735cd3b87abd355048296aa28ce05001"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10118
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2891,14 +4005,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10118
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "3e008f92ffe34b8a14e30e1e3ebc65c39cf85206090f75d3c740c1084a662253ff60f58d2d6a927b592cef94bff21eff6909f5c938061a1abbeae7039ff58701"
}
]
}
@@ -2933,7 +4047,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10118
}
}
]
@@ -3222,6 +4336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 92443
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3314,6 +4476,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10118
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10118
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3395,7 +4605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 92443
}
}
},
@@ -3488,7 +4698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10118
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.3.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.3.json
index eb35cc3..2f3e3d8 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.3.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.3.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 37368
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37368
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37368
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 37368
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 37368
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "4cfc5bb1a812ef0c5ea6d239a4779739c49166f34d64e813e963be82e68044a5c17dcdc76785465bf8452f34c7f43aab91131973abd19af690f47ac1310fcd03"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 37368
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37368
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 37368
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 37368
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.30.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.30.json
index feed3f8..f3ecd26 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.30.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.30.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 29454
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 60460
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 96430
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 2267
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "23c02dfe55b33a6ad90425cf00ca4b071e45066eb99770a24ef5463dc741cc40cf9cfdfee7870a45928c01dbd0ddc6ada65bec216cc85054b6a36495b57a0b0a"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "783065ab899c9cae7ee80b77d1c717b013fe8132e867446fe1b93e7d954615fcdcf90d7ea2d72f6c3848f21bf0302113438fc1d52ae755ef8a23fab8c6f12a07"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 96430
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "09ee80e93b0c37a5e17d3e60c46dccaa8fc85875ad706ae3bd665f8ed69aa5bc8a38c9c651ff754c364828bab9370d541c48fa863cbcf61faa58c0a0a64b530d"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 96430
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 2267
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "e95a5645580002f0388113e0c6375b17266d338af2b225dde6b21a441d3049861003be10d981945441a74ad37f20571d5ead034d24e5580f08f7a86aa58ff909"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 2267
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 29454
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 60460
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 96430
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2267
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 29454
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 60460
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 96430
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 2267
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.4.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.4.json
index 978b79b..545b7e1 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.4.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.4.json
@@ -243,6 +243,9 @@
[],
[],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -564,7 +567,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15243
}
}
},
@@ -2174,6 +2177,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15243
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2405,6 +2462,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15243
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15243
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2434,14 +2956,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15243
}
},
{
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "22afd2c33b73fafd9d362c2f9c59281a0562c71f5d64dfeb16a8584b64ab24682fa4c3e4e47d87268840bd013580e868965908c07b771f424ed0401af6b2ab0d"
}
]
}
@@ -2476,7 +2998,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15243
}
}
]
@@ -2765,6 +3287,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15243
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15243
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2846,7 +3416,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 15243
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.5.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.5.json
index d41cc04..cb42d26 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.5.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.5.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 82586
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 27845
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49824
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24655
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "306364ce9fe9a1ba5dc3b3877ce28ada4bd786708046b846b9307a4db3dd8f0119d0e2688cc57373c5f1c91ad4753f36c5f51dedf65ef32209955b502ff07706"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "28cb91051201f8feb8947e53f6f3449ee53b0203ed9dd0e54e70a610b8c030ea825ce133081dd19162764db89ae76ec66f1c8c0622198b0d2c45b21afddafa0a"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49824
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "ce565fee8ae7639ccfd4b97aff80bb7b41c4b3e3b9faf1b942dd2837021e063a0528b85846d1640f0cb02d632de49913e5e0aebaf7c324e49484a3988e3dcd03"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49824
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24655
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "c53f94c0ef6024a616516de2d51179af688e2f9ce4e3e4aaf65574d06482efb2b64fee839dc4bc0070dc6206451cc86a7c9558058d1680347e63b4a49d91c000"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24655
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 82586
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27845
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 49824
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 24655
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 82586
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 27845
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 49824
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 24655
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.6.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.6.json
index 9276284..2197997 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.6.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.6.json
@@ -548,6 +548,15 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -875,7 +884,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 47144
}
}
},
@@ -968,7 +977,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 59934
}
}
},
@@ -1061,7 +1070,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 87517
}
}
},
@@ -1154,7 +1163,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 26601
}
}
},
@@ -3427,6 +3436,222 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3673,30 +3898,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -3707,37 +3913,1764 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "699391c6dc11cefa4a9c32ad5c7125f76bcef778ea63d581afde8b3d0788a8e31929cd4bb00261d11f1a80ff03b54d490b7d8cfa08cd0c952463cf84627f6208"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "07ba26c9f25cc9753f7d3c0a20a6def61f77e60b698e3502785f37a9d05be02adb8e6384d8c9fe90e3907af150e65a419cc515e38a087cf089a9fba07776c00d"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
},
{
"event": {
@@ -3751,10 +5684,499 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
}
}
},
@@ -3784,19 +6206,19 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 87517
}
},
{
- "u64": 1
+ "u64": 2
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "bb155c9e652a2d5a49d184d46e0158915e76e1788b9d24810ec521993c59dff025c46f69c6b185121b42a3957f4ee675262d77894a2450074d53c9cf6c790103"
}
]
}
@@ -3826,12 +6248,12 @@
"u32": 1
},
{
- "u32": 1
+ "u32": 2
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 87517
}
}
]
@@ -3877,30 +6299,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 2
- },
- {
- "bytes": "42a8a6e2f333f122243e8032db35a15f3768a4c4d8d1ac04225d2dec4bfd7a854557e5f31ccc384f19bfc1b67df3520008c1b2990160ecc6e3861d0a3967a303"
- }
- ]
+ "u32": 1
}
}
}
@@ -3911,29 +6314,503 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_nonce"
}
],
"data": {
- "vec": [
+ "u64": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 2
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3943,27 +6820,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3993,14 +6849,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 26601
}
},
{
"u64": 3
},
{
- "bytes": "795b279eabbed5a31288680b0eaece08d4954d8075346e0fb285c119274de9f6114c9775682b73b49eae78d2e91942e0078ab29f08d09226aa0f23f3f23e3d0d"
+ "bytes": "3af9870e63bcbfe7c3aa8ce52183129966286364e6fc2e66dd5a72887a49f55df0fdb3541d5d31b9d1a4f87183f7016bd864c40d4115a981c05d279062a04805"
}
]
}
@@ -4035,7 +6891,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 26601
}
}
]
@@ -4324,6 +7180,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47144
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4416,6 +7320,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 59934
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4508,6 +7460,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 87517
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4600,6 +7600,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 26601
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -4681,7 +7729,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 47144
}
}
},
@@ -4774,7 +7822,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 59934
}
}
},
@@ -4867,7 +7915,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 87517
}
}
},
@@ -4960,7 +8008,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 26601
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.7.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.7.json
index c6b3a86..1f2f730 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.7.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.7.json
@@ -360,6 +360,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -683,7 +688,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32618
}
}
},
@@ -776,7 +781,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14558
}
}
},
@@ -2717,6 +2722,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 14558
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2963,30 +3076,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2997,29 +3091,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 14558
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3032,24 +3365,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 14558
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "b08a36aa1cbfecbf2263773f9832db3b434efc82a66ea06fbb266b954078dea48f6bd169fac8a832078b13df8293aea10bdb84de70713b4a5c61d1f10722570f"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 14558
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3079,14 +4193,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14558
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "3f8be013842982b91d5a2524b3d5671dc61c41089bc5f5addacc4f976ab150d0c70e178307ce503aa1023ec0373c0595825d04f31a0560ec644b75576d0da605"
}
]
}
@@ -3121,7 +4235,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14558
}
}
]
@@ -3410,6 +4524,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32618
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3502,6 +4664,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 14558
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 14558
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3583,7 +4793,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32618
}
}
},
@@ -3676,7 +4886,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 14558
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.8.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.8.json
index 1e46935..b6d025f 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.8.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.8.json
@@ -360,6 +360,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -683,7 +688,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 40066
}
}
},
@@ -776,7 +781,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 68669
}
}
},
@@ -2717,6 +2722,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68669
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2963,30 +3076,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2997,29 +3091,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68669
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -3032,24 +3365,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68669
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "5041cfacaaee67be90f68b5642a15b0ef69b7444faeb69496e69b48a4f69a6097c97f31c0da7969ad6f19d28a778257e9a5c6ad619f2afeff1e4d9076af02005"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 68669
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3079,14 +4193,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 68669
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "62eaa0149aad38bbc0927524407ba648ae2b61b2285b255acb76df15412adbedda52633ee860d07834d626f482cdb3aa8259b093c7f98423cef6d135bedadb0f"
}
]
}
@@ -3121,7 +4235,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 68669
}
}
]
@@ -3410,6 +4524,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40066
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3502,6 +4664,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68669
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 68669
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3583,7 +4793,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 40066
}
}
},
@@ -3676,7 +4886,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 68669
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.9.json b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.9.json
index efc63c1..f03c578 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.9.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_custody_sum_invariant_fuzz.9.json
@@ -337,6 +337,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -660,7 +665,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 27185
}
}
},
@@ -753,7 +758,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 67837
}
}
},
@@ -2529,6 +2534,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 67837
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2775,30 +2888,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "u32": 1
}
}
}
@@ -2809,29 +2903,268 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 67837
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -2844,24 +3177,805 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 67837
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "6cb0bf905a30ed3c1f98d89dfb11dfee0b3f4b1d9d7efe3011922fc0787d6ef19dbaaa75eea2e9c93ff12166d232c6df9d6ab54b2641d20ded6d137cd5972001"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
"data": "void"
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 67837
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2891,14 +4005,14 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 67837
}
},
{
"u64": 1
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "bytes": "5042b2f888922cc4396d20935ac12ad68bb2b2eb68f4fde93773481af54b3d2c6a296838c23f5f77b66a60df04923a6c935f5a77869043b3f558f0f607dd670d"
}
]
}
@@ -2933,7 +4047,7 @@
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 67837
}
}
]
@@ -3222,6 +4336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 27185
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3314,6 +4476,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 67837
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 67837
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3395,7 +4605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 27185
}
}
},
@@ -3488,7 +4698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 67837
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_double_approval_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_double_approval_rejected.1.json
index 4bcf723..8ffe42e 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_double_approval_rejected.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_double_approval_rejected.1.json
@@ -1457,6 +1457,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_double_cancel_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_double_cancel_rejected.1.json
index 6af2ad8..ad7e200 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_double_cancel_rejected.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_double_cancel_rejected.1.json
@@ -1457,6 +1457,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1598,6 +1652,36 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_double_finalize_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_double_finalize_rejected.1.json
index 411c865..a49867d 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_double_finalize_rejected.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_double_finalize_rejected.1.json
@@ -195,6 +195,9 @@
]
],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1635,6 +1638,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1658,6 +1715,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1694,7 +2216,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -2018,6 +2540,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_escrow_rejects_unregistered_oracle_key.1.json b/contracts/core-flow/test_snapshots/test/tests/test_escrow_rejects_unregistered_oracle_key.1.json
new file mode 100644
index 0000000..75820fb
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_escrow_rejects_unregistered_oracle_key.1.json
@@ -0,0 +1,1174 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 16
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 16
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 16
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_extend_ttl_on_unknown_escrow_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_extend_ttl_on_unknown_escrow_fails.1.json
new file mode 100644
index 0000000..6962e83
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_extend_ttl_on_unknown_escrow_fails.1.json
@@ -0,0 +1,191 @@
+{
+ "generators": {
+ "address": 1,
+ "nonce": 0
+ },
+ "auth": [
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "extend_escrow_ttl"
+ }
+ ],
+ "data": {
+ "u32": 999
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "extend_escrow_ttl"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 4
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 4
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 4
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "extend_escrow_ttl"
+ },
+ {
+ "vec": [
+ {
+ "u32": 999
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.1.json b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.1.json
index 85fd308..3977844 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.1.json
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -282,7 +283,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
},
@@ -387,7 +388,7 @@
{
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
]
@@ -400,6 +401,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -487,7 +489,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
},
@@ -592,7 +594,7 @@
{
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
]
@@ -605,6 +607,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -692,7 +695,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
},
@@ -797,7 +800,7 @@
{
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
]
@@ -810,6 +813,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -897,7 +901,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
},
@@ -1002,7 +1006,7 @@
{
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
]
@@ -1015,6 +1019,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1102,7 +1107,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
},
@@ -1207,7 +1212,7 @@
{
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
]
@@ -1220,6 +1225,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1307,7 +1313,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
},
@@ -1412,7 +1418,7 @@
{
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
]
@@ -1425,6 +1431,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1512,7 +1519,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
},
@@ -1617,7 +1624,7 @@
{
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
]
@@ -1630,6 +1637,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1717,7 +1725,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
},
@@ -1822,7 +1830,7 @@
{
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
]
@@ -1835,6 +1843,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1922,7 +1931,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
},
@@ -2027,7 +2036,7 @@
{
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
]
@@ -2040,6 +2049,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -2484,7 +2494,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
},
@@ -2688,7 +2698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
},
@@ -2892,7 +2902,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
},
@@ -3096,7 +3106,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
},
@@ -3300,7 +3310,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
},
@@ -3504,7 +3514,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
},
@@ -3708,7 +3718,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
},
@@ -3912,7 +3922,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
},
@@ -3931,7 +3941,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 48
+ "lo": 40
}
}
},
@@ -4116,7 +4126,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
},
@@ -4135,7 +4145,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 49
+ "lo": 41
}
}
},
@@ -6203,7 +6213,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 989955
+ "lo": 989275
}
}
},
@@ -6349,7 +6359,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
},
@@ -6422,7 +6432,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
},
@@ -6495,7 +6505,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
},
@@ -6568,7 +6578,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
},
@@ -6641,7 +6651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
},
@@ -6714,7 +6724,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
},
@@ -6787,7 +6797,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
},
@@ -6860,7 +6870,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
},
@@ -6933,7 +6943,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
},
@@ -7568,6 +7578,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7591,6 +7655,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7627,7 +7899,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "f3bdf6eb753157650d1687999d22798556297ff817141b43381969e7a981c98f73d17aa603cb38614a91578a2b58c0ad1f16643ee4d0613d2b19b5ca3712dc05"
}
]
}
@@ -7951,6 +8223,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -8196,7 +8516,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
},
@@ -8318,7 +8638,7 @@
{
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
]
@@ -8352,7 +8672,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
}
@@ -8407,7 +8727,7 @@
{
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
]
@@ -8421,39 +8741,301 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 2
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
- },
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
{
"symbol": "submit_hours_proof"
}
@@ -8476,7 +9058,7 @@
"u64": 0
},
{
- "bytes": "4fd7e0520cedc7e296837af5e262f55057d29e51c634e1799a00f09bfbbe406ff50709d9b9f07cf73f04ecb1096425d7ff7f1c9ce4bc20a3d47be9ee679e0b0d"
+ "bytes": "b0c4a348b2142ce3d68ecf85aa173005d75bf5dd1f736fe95f07862e505da9c9fdb63f13924aa5ea93883df60ed73a2a4984592361cf135dc3a35075ab28a905"
}
]
}
@@ -8737,7 +9319,7 @@
{
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
]
@@ -8771,7 +9353,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
}
@@ -8800,6 +9382,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -8823,7 +9453,7 @@
{
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
},
{
@@ -8862,7 +9492,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
},
@@ -8997,7 +9627,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1001
+ "lo": 1025
}
}
}
@@ -9045,7 +9675,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
},
@@ -9167,7 +9797,7 @@
{
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
]
@@ -9201,7 +9831,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
}
@@ -9256,7 +9886,292 @@
{
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -9266,29 +10181,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 3
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -9325,7 +10217,7 @@
"u64": 0
},
{
- "bytes": "4a405d8cd217247f0c9dc7f7c07b0dd0ed509e958891877aabe388214c6b288cdbf98a62acaa840b36cea28f4dbdccae6c98d792beef2557516b2973b7959e06"
+ "bytes": "58203a1c6196802ee6dd1506d260d164fa4fff95bf83641bb1f2e7d06c98d17fdd99897719feeeb6f12878bd09594bd86d8fea0726bf4c283a5d547a24497b0b"
}
]
}
@@ -9586,7 +10478,7 @@
{
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
]
@@ -9620,7 +10512,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
}
@@ -9649,6 +10541,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 42
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -9672,7 +10612,7 @@
{
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
},
{
@@ -9711,7 +10651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
},
@@ -9846,7 +10786,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1002
+ "lo": 1050
}
}
}
@@ -9894,7 +10834,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
},
@@ -10016,7 +10956,7 @@
{
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
]
@@ -10050,7 +10990,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
}
@@ -10105,7 +11045,292 @@
{
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10115,29 +11340,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 4
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -10174,7 +11376,7 @@
"u64": 0
},
{
- "bytes": "96e3a45b28240716232209b6a9500ddbb6e54f435761ac404f4aef55a8a0612e844d743f2b8294ee3ee73f43f6a64bc02edcfe71af2bb3315afca512a2e6fa08"
+ "bytes": "ce92b45540af8346ab71c2323647054722445dcae4ddd77c0ca81664d72532bee6130e61a9da5ce71f87a4c29d06c4319a973bfa81d42c076c47afd534f7ef07"
}
]
}
@@ -10435,7 +11637,7 @@
{
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
]
@@ -10469,7 +11671,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
}
@@ -10498,6 +11700,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -10521,7 +11771,7 @@
{
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
},
{
@@ -10560,7 +11810,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
},
@@ -10695,7 +11945,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1003
+ "lo": 1075
}
}
}
@@ -10743,7 +11993,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
},
@@ -10865,7 +12115,7 @@
{
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
]
@@ -10899,7 +12149,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
}
@@ -10954,7 +12204,292 @@
{
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10964,29 +12499,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 5
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11023,7 +12535,7 @@
"u64": 0
},
{
- "bytes": "9a6541295dd4655b2d7e0327f02a754e39313526982a4029ad796559adeaba87062b57f7aa7d6d16fe739334f3b8207ce6a579b557a03c53706349e1accaf30b"
+ "bytes": "86df43a17e7b99e9b4ac8c3288c9b2427c135f9156b1067eec8bb704aa12d19fe9605505e9e63c13348f37ca9332066a4fecb7b52d99a9424ff9fab4f01a2507"
}
]
}
@@ -11284,7 +12796,7 @@
{
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
]
@@ -11318,7 +12830,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
}
@@ -11347,6 +12859,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 44
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -11370,7 +12930,7 @@
{
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
},
{
@@ -11409,7 +12969,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
},
@@ -11544,7 +13104,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1004
+ "lo": 1100
}
}
}
@@ -11592,7 +13152,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
},
@@ -11714,7 +13274,7 @@
{
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
]
@@ -11748,7 +13308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
}
@@ -11803,7 +13363,292 @@
{
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -11813,29 +13658,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 6
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11872,7 +13694,7 @@
"u64": 0
},
{
- "bytes": "457aa20d374504b7c28425cf16bf372b3600437ab8d0d179a518197eaa54f8b92efd7cdfa1d1e6186a18129192cc40974e7fb98ff0d40935728cc19f21952509"
+ "bytes": "93db3d860077a2b9de2d750e66d22966fb2a983a0abd22344576e4ce758db78145e3ae1a13468cae55ac42158bab13528b13837de933d0692d8f623124fc2506"
}
]
}
@@ -12133,7 +13955,7 @@
{
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
]
@@ -12167,7 +13989,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
}
@@ -12196,6 +14018,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -12219,7 +14089,7 @@
{
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
},
{
@@ -12258,7 +14128,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
},
@@ -12393,7 +14263,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1005
+ "lo": 1125
}
}
}
@@ -12441,7 +14311,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
},
@@ -12563,7 +14433,7 @@
{
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
]
@@ -12597,7 +14467,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
}
@@ -12652,7 +14522,292 @@
{
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -12662,29 +14817,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -12721,7 +14853,7 @@
"u64": 0
},
{
- "bytes": "5109c8b858121e373e339fb0460ac50c42ee970a8f71531b264915d92d1ad99f22b85dcf88ca82510e5561fa8a57a7ec2dcc754e4d20c17d1b288fb6313b3a0c"
+ "bytes": "78de14750f19ddd60f832717c51cdaebb03269672380e312d2a52f14124acacf2fd1d76793d52b901fd9d5924af9e7846eb7285613512f80b677dddafe79cf0c"
}
]
}
@@ -12982,7 +15114,7 @@
{
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
]
@@ -13016,7 +15148,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
}
@@ -13045,6 +15177,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 46
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13068,7 +15248,7 @@
{
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
},
{
@@ -13107,7 +15287,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
},
@@ -13242,7 +15422,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1006
+ "lo": 1150
}
}
}
@@ -13290,7 +15470,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
},
@@ -13412,7 +15592,7 @@
{
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
]
@@ -13446,7 +15626,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
}
@@ -13501,8 +15681,62 @@
{
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
}
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -13534,6 +15768,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13570,7 +16012,7 @@
"u64": 0
},
{
- "bytes": "934ee6312f83e268ed46997c327da7b599a6924aafd12ed17de3d3b349f94789cc1ba89c62e07dc775f8e895890a281b61598e65128011e75d7b5f5e64ca3902"
+ "bytes": "21d4c6568c4c893fc4c0af018bd4d0ed57effc83e1fad9ddf600a74ee7f2a9a2161f38819e538a6e0e0dc181fb3675662308f82c3fa07b58cb3b62aa8f7bf407"
}
]
}
@@ -13831,7 +16273,7 @@
{
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
]
@@ -13865,7 +16307,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
}
@@ -13894,6 +16336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13917,7 +16407,7 @@
{
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
},
{
@@ -13956,7 +16446,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
},
@@ -14091,7 +16581,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1007
+ "lo": 1175
}
}
}
@@ -14139,7 +16629,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
},
@@ -14261,7 +16751,7 @@
{
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
]
@@ -14295,7 +16785,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
}
@@ -14350,8 +16840,62 @@
{
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -14383,6 +16927,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 9
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14412,14 +17164,14 @@
{
"i128": {
"hi": 0,
- "lo": 48
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "ab7b644a45b721b869e7930ae8e4b2f60a24f07057474a671e6efb0dd1da79d6b361aa2bd9c228b2814169bfa5c1b37ab92338ffe3d75ae7f5a935ecc3516d03"
+ "bytes": "d4648fd46183ca8c9f003f3259fb7b7bf958d251b12f5e89c49bd6751b6fd42c665652a2f062db9be7c17fe7b92293e3c7fec3155edfdb906dc2914298af780d"
}
]
}
@@ -14454,7 +17206,7 @@
{
"i128": {
"hi": 0,
- "lo": 48
+ "lo": 40
}
}
]
@@ -14680,7 +17432,7 @@
{
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
]
@@ -14714,7 +17466,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
}
@@ -14725,19 +17477,67 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "transfer"
+ "symbol": "paid"
}
],
- "data": "void"
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
}
}
},
@@ -14766,7 +17566,7 @@
{
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
},
{
@@ -14805,7 +17605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
},
@@ -14824,7 +17624,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 48
+ "lo": 40
}
}
},
@@ -14940,7 +17740,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1008
+ "lo": 1000
}
}
}
@@ -14988,7 +17788,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
},
@@ -15110,7 +17910,7 @@
{
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
]
@@ -15144,7 +17944,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
}
@@ -15199,8 +17999,62 @@
{
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
}
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -15232,6 +18086,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 10
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15261,14 +18323,14 @@
{
"i128": {
"hi": 0,
- "lo": 49
+ "lo": 41
}
},
{
"u64": 0
},
{
- "bytes": "9fec7531fce60790b499876f9c7d0c2f773dd10f57e55e82f3106223859ed77c14bffbd2fddfa11bf29c206a17b04d4270a8a6142c9e580bf94b171494187f00"
+ "bytes": "fcc334487ed0de43025a2cd64a471dd18bd7aa9999f5843b4e3820b640616df48dd1771190860bb7c67960c7dbe62e7b957d35e0cfbefc2fc0ebf2387a72a600"
}
]
}
@@ -15303,7 +18365,7 @@
{
"i128": {
"hi": 0,
- "lo": 49
+ "lo": 41
}
}
]
@@ -15529,7 +18591,7 @@
{
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
]
@@ -15563,7 +18625,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
}
@@ -15592,6 +18654,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15615,7 +18725,7 @@
{
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
},
{
@@ -15654,7 +18764,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
},
@@ -15673,7 +18783,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 49
+ "lo": 41
}
}
},
@@ -15789,7 +18899,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1009
+ "lo": 1025
}
}
}
@@ -15893,7 +19003,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 989955
+ "lo": 989275
}
}
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.2.json b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.2.json
index c1aea09..aea659d 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.2.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.2.json
@@ -77,7 +77,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
},
@@ -182,7 +182,7 @@
{
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
]
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -282,7 +283,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
},
@@ -387,7 +388,7 @@
{
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
]
@@ -400,6 +401,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -487,7 +489,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
},
@@ -592,7 +594,7 @@
{
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
]
@@ -605,6 +607,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -692,7 +695,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
},
@@ -797,7 +800,7 @@
{
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
]
@@ -810,6 +813,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -897,7 +901,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
},
@@ -1002,7 +1006,7 @@
{
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
]
@@ -1015,6 +1019,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1102,7 +1107,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
},
@@ -1207,7 +1212,7 @@
{
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
]
@@ -1220,6 +1225,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1307,7 +1313,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
},
@@ -1412,7 +1418,7 @@
{
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
]
@@ -1425,6 +1431,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1512,7 +1519,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
},
@@ -1617,7 +1624,7 @@
{
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
]
@@ -1630,6 +1637,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1717,7 +1725,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
},
@@ -1822,7 +1830,7 @@
{
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
]
@@ -1835,6 +1843,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1922,7 +1931,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
},
@@ -2027,7 +2036,7 @@
{
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
]
@@ -2040,6 +2049,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -2280,7 +2290,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
},
@@ -2299,7 +2309,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 50
+ "lo": 42
}
}
},
@@ -2484,7 +2494,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
},
@@ -2503,7 +2513,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 51
+ "lo": 43
}
}
},
@@ -2688,7 +2698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
},
@@ -2707,7 +2717,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 52
+ "lo": 44
}
}
},
@@ -2892,7 +2902,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
},
@@ -2911,7 +2921,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 53
+ "lo": 45
}
}
},
@@ -3096,7 +3106,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
},
@@ -3115,7 +3125,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 54
+ "lo": 46
}
}
},
@@ -3300,7 +3310,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
},
@@ -3319,7 +3329,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 55
+ "lo": 47
}
}
},
@@ -3504,7 +3514,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
},
@@ -3523,7 +3533,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 56
+ "lo": 40
}
}
},
@@ -3708,7 +3718,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
},
@@ -3727,7 +3737,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 57
+ "lo": 41
}
}
},
@@ -3912,7 +3922,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
},
@@ -3931,7 +3941,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 58
+ "lo": 42
}
}
},
@@ -4116,7 +4126,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
},
@@ -4135,7 +4145,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 59
+ "lo": 43
}
}
},
@@ -6203,7 +6213,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 989855
+ "lo": 989175
}
}
},
@@ -6276,7 +6286,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
},
@@ -6349,7 +6359,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
},
@@ -6422,7 +6432,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
},
@@ -6495,7 +6505,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
},
@@ -6568,7 +6578,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
},
@@ -6641,7 +6651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
},
@@ -6714,7 +6724,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
},
@@ -6787,7 +6797,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
},
@@ -6860,7 +6870,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
},
@@ -6933,7 +6943,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
},
@@ -7347,7 +7357,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
},
@@ -7469,7 +7479,7 @@
{
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
]
@@ -7503,7 +7513,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
}
@@ -7558,8 +7568,62 @@
{
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -7591,6 +7655,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7620,14 +7892,14 @@
{
"i128": {
"hi": 0,
- "lo": 50
+ "lo": 42
}
},
{
"u64": 0
},
{
- "bytes": "7e0d8bceaece11d56b262f470c8ba2fd9c21516d631cd89e87271d8a64fec6cc10cf90de772f7ca104d7419effa7fa6da908d3946186384ff4ccc6759cd1ee0f"
+ "bytes": "8946adfbb98b808216f39748c4032a859db049757712c8f01b089f91fd3d012cf62d85abc2275452f5bb430d1d3e52f1871ae52de30b13aff66cb6c774decc01"
}
]
}
@@ -7662,7 +7934,7 @@
{
"i128": {
"hi": 0,
- "lo": 50
+ "lo": 42
}
}
]
@@ -7888,7 +8160,7 @@
{
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
]
@@ -7922,7 +8194,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
}
@@ -7951,6 +8223,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 42
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7974,7 +8294,7 @@
{
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
},
{
@@ -8013,7 +8333,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
},
@@ -8032,7 +8352,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 50
+ "lo": 42
}
}
},
@@ -8148,7 +8468,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1010
+ "lo": 1050
}
}
}
@@ -8196,7 +8516,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
},
@@ -8318,7 +8638,7 @@
{
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
]
@@ -8352,7 +8672,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
}
@@ -8407,7 +8727,7 @@
{
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
]
@@ -8421,41 +8741,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 2
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -8467,16 +8761,304 @@
"u32": 0
},
{
- "i128": {
- "hi": 0,
- "lo": 51
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
},
{
"u64": 0
},
{
- "bytes": "ef4b6b3c52005414fe8ab41900235123fffaa29b036106a35b1a5919e0a81af2dbb813af8e11723f8c37b78e95e9f2f2c5c58fc1fee727b397a0f5f595991405"
+ "bytes": "36f1703ed6943326de57044e396af29517a8adb1b2c326c263a3cf3ec258284ca5e69afa7b61f123836ef41680966ae1ce80dbb6538247b485f3538ed52a1603"
}
]
}
@@ -8511,7 +9093,7 @@
{
"i128": {
"hi": 0,
- "lo": 51
+ "lo": 43
}
}
]
@@ -8737,7 +9319,7 @@
{
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
]
@@ -8771,7 +9353,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
}
@@ -8800,6 +9382,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -8823,7 +9453,7 @@
{
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
},
{
@@ -8862,7 +9492,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
},
@@ -8881,7 +9511,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 51
+ "lo": 43
}
}
},
@@ -8997,7 +9627,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1011
+ "lo": 1075
}
}
}
@@ -9045,7 +9675,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
},
@@ -9167,7 +9797,7 @@
{
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
]
@@ -9201,7 +9831,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
}
@@ -9256,7 +9886,292 @@
{
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -9266,29 +10181,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 3
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -9318,14 +10210,14 @@
{
"i128": {
"hi": 0,
- "lo": 52
+ "lo": 44
}
},
{
"u64": 0
},
{
- "bytes": "b3dbf47d6ec2bb53fa28d1068469dce3524bda5547e0df644adb7b0380486f8f9332db4e8ef6d60622b06144bde67cbf5fd924689b38626183fbfd388534dd01"
+ "bytes": "2ec5c5e91d38790211a5b60c908973082de26033a4954b634e7fcdcf4f60e0ee0267812477b338224402c244772f7f2d8e4031afe0e5c8a2e46232750f22ca05"
}
]
}
@@ -9360,7 +10252,7 @@
{
"i128": {
"hi": 0,
- "lo": 52
+ "lo": 44
}
}
]
@@ -9586,7 +10478,7 @@
{
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
]
@@ -9620,7 +10512,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
}
@@ -9649,6 +10541,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 44
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -9672,7 +10612,7 @@
{
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
},
{
@@ -9711,7 +10651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
},
@@ -9730,7 +10670,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 52
+ "lo": 44
}
}
},
@@ -9846,7 +10786,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1012
+ "lo": 1100
}
}
}
@@ -9894,7 +10834,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
},
@@ -10016,7 +10956,7 @@
{
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
]
@@ -10050,7 +10990,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
}
@@ -10105,7 +11045,292 @@
{
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10115,29 +11340,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 4
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -10167,14 +11369,14 @@
{
"i128": {
"hi": 0,
- "lo": 53
+ "lo": 45
}
},
{
"u64": 0
},
{
- "bytes": "ae244c3e6a03c0188b70aa3d2f528120fddc890c5f3871a70ed07eda904faac01a4e18268686646e3a928f6d9c799674c52bac97ea0f551e595640b488116808"
+ "bytes": "6a8abed0892305be95f440eb3c677e14f8a3c925dff7f01980a8cffb4549793f4f9dea65649f2bbd4abfd9bb0968e451e269817007584d360c03189c60a3f10c"
}
]
}
@@ -10209,7 +11411,7 @@
{
"i128": {
"hi": 0,
- "lo": 53
+ "lo": 45
}
}
]
@@ -10435,7 +11637,7 @@
{
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
]
@@ -10469,7 +11671,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
}
@@ -10498,6 +11700,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -10521,7 +11771,7 @@
{
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
},
{
@@ -10560,7 +11810,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
},
@@ -10579,7 +11829,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 53
+ "lo": 45
}
}
},
@@ -10695,7 +11945,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1013
+ "lo": 1125
}
}
}
@@ -10743,7 +11993,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
},
@@ -10865,7 +12115,7 @@
{
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
]
@@ -10899,7 +12149,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
}
@@ -10954,7 +12204,292 @@
{
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10964,29 +12499,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 5
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11016,14 +12528,14 @@
{
"i128": {
"hi": 0,
- "lo": 54
+ "lo": 46
}
},
{
"u64": 0
},
{
- "bytes": "b51a55c6721b84d769a03d0a974a224432a68103183cca8b4d3b89a98c051513cb1af78e9a6323378cc0a34d26dcf621525c57d3f2904706709bfe9d88a3e208"
+ "bytes": "bba3603ddbeaff7da7725a0441c61333095ec24cd210af17467bca1d6de1db170d40a4f63350fa837549270544d4bc8409bd595690096274d9bb5170e2e23609"
}
]
}
@@ -11058,7 +12570,7 @@
{
"i128": {
"hi": 0,
- "lo": 54
+ "lo": 46
}
}
]
@@ -11284,7 +12796,7 @@
{
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
]
@@ -11318,7 +12830,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
}
@@ -11347,6 +12859,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 46
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -11370,7 +12930,7 @@
{
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
},
{
@@ -11409,7 +12969,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
},
@@ -11428,7 +12988,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 54
+ "lo": 46
}
}
},
@@ -11544,7 +13104,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1014
+ "lo": 1150
}
}
}
@@ -11592,7 +13152,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
},
@@ -11714,7 +13274,7 @@
{
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
]
@@ -11748,7 +13308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
}
@@ -11803,7 +13363,292 @@
{
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -11813,29 +13658,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 6
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11865,14 +13687,14 @@
{
"i128": {
"hi": 0,
- "lo": 55
+ "lo": 47
}
},
{
"u64": 0
},
{
- "bytes": "07e630f0e448a4cf5eea9f89692a65b223f420ec752ae40b3e832a9bf36a1872c95c90530538389ac2ef7fc7ecaf04049fb06428cc5b0146963dce677968390c"
+ "bytes": "51c4d1943de94c0a9c7faf657d22f3119a1ccdf0e7f17fd9ddf3a8dce9f6c51c4b7f3cde5d07192ae32a0c82fe38c5b6adcd910b5daf08c2a088422b7794150d"
}
]
}
@@ -11907,7 +13729,7 @@
{
"i128": {
"hi": 0,
- "lo": 55
+ "lo": 47
}
}
]
@@ -12133,7 +13955,7 @@
{
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
]
@@ -12167,7 +13989,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
}
@@ -12196,6 +14018,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -12219,7 +14089,7 @@
{
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
},
{
@@ -12258,7 +14128,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
},
@@ -12277,7 +14147,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 55
+ "lo": 47
}
}
},
@@ -12393,7 +14263,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1015
+ "lo": 1175
}
}
}
@@ -12441,7 +14311,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
},
@@ -12563,7 +14433,7 @@
{
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
]
@@ -12597,7 +14467,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
}
@@ -12652,7 +14522,292 @@
{
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -12662,29 +14817,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -12714,14 +14846,14 @@
{
"i128": {
"hi": 0,
- "lo": 56
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "660aec17de53aa28e1fe44943ffe37fb826208dfa675443100bf83dfca64ef178e2a12ebc1072589e1529b7bd3f9a5c61590ceed07546787dbd6458df515e408"
+ "bytes": "d05f4637e65927c3b0795327c26361b2ed291bf71a994a4c8c529c0fd597108df93b80e5ef5868c19d6898958e3ddf1cd3b1bbd185701db6895715a322af8f09"
}
]
}
@@ -12756,7 +14888,7 @@
{
"i128": {
"hi": 0,
- "lo": 56
+ "lo": 40
}
}
]
@@ -12982,7 +15114,7 @@
{
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
]
@@ -13016,7 +15148,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
}
@@ -13045,6 +15177,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13068,7 +15248,7 @@
{
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
},
{
@@ -13107,7 +15287,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
},
@@ -13126,7 +15306,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 56
+ "lo": 40
}
}
},
@@ -13242,7 +15422,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1016
+ "lo": 1000
}
}
}
@@ -13290,7 +15470,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
},
@@ -13412,7 +15592,7 @@
{
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
]
@@ -13446,7 +15626,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
}
@@ -13501,7 +15681,292 @@
{
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -13511,29 +15976,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 8
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -13563,14 +16005,14 @@
{
"i128": {
"hi": 0,
- "lo": 57
+ "lo": 41
}
},
{
"u64": 0
},
{
- "bytes": "fa8436b69fb7e9b151855c7e3757017ee05a8d55d7b57c5b66e82156ebbb7569fd4b612e517c375d7c364a980b0f3467cc3c7004163b776a60ec148897bafb0e"
+ "bytes": "7683d168d6f6d6ccc0a6f379da9631528435318edf7a187604567113e66dbae1b8c7edd2dc25d1c632c2682be58f720ce270a85b19399cb1bcc4cc21e760cb04"
}
]
}
@@ -13605,7 +16047,7 @@
{
"i128": {
"hi": 0,
- "lo": 57
+ "lo": 41
}
}
]
@@ -13831,7 +16273,7 @@
{
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
]
@@ -13865,7 +16307,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
}
@@ -13894,6 +16336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13917,7 +16407,7 @@
{
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
},
{
@@ -13956,7 +16446,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
},
@@ -13975,7 +16465,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 57
+ "lo": 41
}
}
},
@@ -14091,7 +16581,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1017
+ "lo": 1025
}
}
}
@@ -14139,7 +16629,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
},
@@ -14261,7 +16751,7 @@
{
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
]
@@ -14295,7 +16785,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
}
@@ -14350,8 +16840,62 @@
{
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -14383,6 +16927,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 9
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14412,14 +17164,14 @@
{
"i128": {
"hi": 0,
- "lo": 58
+ "lo": 42
}
},
{
"u64": 0
},
{
- "bytes": "51f9f0bcbaba1fc6990506211d28cfbe1e2fadc714d4594cd336da853eb5ad2002f3bb4f83cc298e4f02430f1bccc74ec03a246fbbcefe03a06210cf05f8990c"
+ "bytes": "6d35cc2f5339d66cb8f78762b8e26440010f47b27c365d66741ae2e0064077bad638cc980c0cdfb6bdd43a55635361e0dbf3b8a1a2de0a47bcc59003b14bb30e"
}
]
}
@@ -14454,7 +17206,7 @@
{
"i128": {
"hi": 0,
- "lo": 58
+ "lo": 42
}
}
]
@@ -14680,7 +17432,7 @@
{
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
]
@@ -14714,7 +17466,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
}
@@ -14743,6 +17495,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 42
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14766,7 +17566,7 @@
{
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
},
{
@@ -14805,7 +17605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
},
@@ -14824,7 +17624,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 58
+ "lo": 42
}
}
},
@@ -14940,7 +17740,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1018
+ "lo": 1050
}
}
}
@@ -14988,7 +17788,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
},
@@ -15110,7 +17910,7 @@
{
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
]
@@ -15144,7 +17944,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
}
@@ -15199,8 +17999,62 @@
{
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -15232,6 +18086,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 10
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15261,14 +18323,14 @@
{
"i128": {
"hi": 0,
- "lo": 59
+ "lo": 43
}
},
{
"u64": 0
},
{
- "bytes": "8b7ea526dea787ee3ba311bf7dca6e10b424626e380908e03e3f7a46285941b6c0f234d9427ffa745a17c3d6ce73df8aee694f8790ddb05a62069c6ff2475905"
+ "bytes": "4e7dc0761d72f9f9262af1bf9b005a082c78d18a09c26f7d09dab930d1995bb8c5a956b672089f0769f3bc4462fe916ba8b360b1c2b8d0d8662a6a2fc5359205"
}
]
}
@@ -15303,7 +18365,7 @@
{
"i128": {
"hi": 0,
- "lo": 59
+ "lo": 43
}
}
]
@@ -15529,7 +18591,7 @@
{
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
]
@@ -15563,7 +18625,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
}
@@ -15592,6 +18654,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15615,7 +18725,7 @@
{
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
},
{
@@ -15654,7 +18764,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
},
@@ -15673,7 +18783,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 59
+ "lo": 43
}
}
},
@@ -15789,7 +18899,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1019
+ "lo": 1075
}
}
}
@@ -15893,7 +19003,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 989855
+ "lo": 989175
}
}
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.3.json b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.3.json
index 72f4a2f..0629346 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.3.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.3.json
@@ -77,7 +77,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
},
@@ -182,7 +182,7 @@
{
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
]
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -282,7 +283,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
},
@@ -387,7 +388,7 @@
{
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
]
@@ -400,6 +401,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -487,7 +489,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
},
@@ -592,7 +594,7 @@
{
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
]
@@ -605,6 +607,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -692,7 +695,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
},
@@ -797,7 +800,7 @@
{
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
]
@@ -810,6 +813,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -897,7 +901,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
},
@@ -1002,7 +1006,7 @@
{
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
]
@@ -1015,6 +1019,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1220,6 +1225,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1307,7 +1313,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
},
@@ -1412,7 +1418,7 @@
{
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
]
@@ -1425,6 +1431,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1512,7 +1519,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
},
@@ -1617,7 +1624,7 @@
{
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
]
@@ -1630,6 +1637,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1717,7 +1725,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
},
@@ -1822,7 +1830,7 @@
{
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
]
@@ -1835,6 +1843,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1922,7 +1931,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
},
@@ -2027,7 +2036,7 @@
{
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
]
@@ -2040,6 +2049,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -2280,7 +2290,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
},
@@ -2299,7 +2309,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 60
+ "lo": 44
}
}
},
@@ -2484,7 +2494,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
},
@@ -2503,7 +2513,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 61
+ "lo": 45
}
}
},
@@ -2688,7 +2698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
},
@@ -2707,7 +2717,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 62
+ "lo": 46
}
}
},
@@ -2892,7 +2902,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
},
@@ -2911,7 +2921,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 63
+ "lo": 47
}
}
},
@@ -3096,7 +3106,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
},
@@ -3115,7 +3125,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 64
+ "lo": 40
}
}
},
@@ -3319,7 +3329,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 65
+ "lo": 41
}
}
},
@@ -3504,7 +3514,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
},
@@ -3523,7 +3533,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 66
+ "lo": 42
}
}
},
@@ -3708,7 +3718,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
},
@@ -3727,7 +3737,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 67
+ "lo": 43
}
}
},
@@ -3912,7 +3922,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
},
@@ -3931,7 +3941,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 68
+ "lo": 44
}
}
},
@@ -4116,7 +4126,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
},
@@ -4135,7 +4145,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 69
+ "lo": 45
}
}
},
@@ -6203,7 +6213,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 989755
+ "lo": 989075
}
}
},
@@ -6276,7 +6286,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
},
@@ -6349,7 +6359,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
},
@@ -6422,7 +6432,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
},
@@ -6495,7 +6505,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
},
@@ -6568,7 +6578,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
},
@@ -6714,7 +6724,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
},
@@ -6787,7 +6797,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
},
@@ -6860,7 +6870,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
},
@@ -6933,7 +6943,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
},
@@ -7347,7 +7357,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
},
@@ -7469,7 +7479,7 @@
{
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
]
@@ -7503,7 +7513,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
}
@@ -7558,8 +7568,62 @@
{
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -7591,6 +7655,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7620,14 +7892,14 @@
{
"i128": {
"hi": 0,
- "lo": 60
+ "lo": 44
}
},
{
"u64": 0
},
{
- "bytes": "28c5e436b91ea686d33438503eb28eef162b4cc7fb6c3926e1ab245cfc1d9be477062f9326f088d9ffba3c5d7af20cc18f546ff48df2c4dd30743a76dfe07006"
+ "bytes": "2c3e5421e070670c1afb5c45a4b91dd140a8b6ea6fa0f7b973abc2f114029f19a434c1a77a969586d955f1c3e6e86d96c64f6745c2255d424118d4b3eafc0a01"
}
]
}
@@ -7662,7 +7934,7 @@
{
"i128": {
"hi": 0,
- "lo": 60
+ "lo": 44
}
}
]
@@ -7888,7 +8160,7 @@
{
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
]
@@ -7922,7 +8194,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
}
@@ -7951,6 +8223,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 44
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7974,7 +8294,7 @@
{
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
},
{
@@ -8013,7 +8333,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
},
@@ -8032,7 +8352,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 60
+ "lo": 44
}
}
},
@@ -8148,7 +8468,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1020
+ "lo": 1100
}
}
}
@@ -8196,7 +8516,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
},
@@ -8318,7 +8638,7 @@
{
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
]
@@ -8352,7 +8672,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
}
@@ -8407,7 +8727,7 @@
{
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
]
@@ -8421,41 +8741,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 2
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -8467,16 +8761,304 @@
"u32": 0
},
{
- "i128": {
- "hi": 0,
- "lo": 61
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
},
{
"u64": 0
},
{
- "bytes": "2bf97e6f7e3248ef87acd9406a0c0e89912ec6ba5e33183fbf9054911debf7416e249534ba03d7926332fee9d06c2554a1cea7508dd42c6f43948df51b51290d"
+ "bytes": "4ef0cb60637c8694795757de734d48731eb0c25ddea6e537cfb1da110423712308995fff17fa188332cd2f2c42ad2b252f3b3b00eeeafc6667b38e0a50342901"
}
]
}
@@ -8511,7 +9093,7 @@
{
"i128": {
"hi": 0,
- "lo": 61
+ "lo": 45
}
}
]
@@ -8737,7 +9319,7 @@
{
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
]
@@ -8771,7 +9353,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
}
@@ -8800,6 +9382,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -8823,7 +9453,7 @@
{
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
},
{
@@ -8862,7 +9492,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
},
@@ -8881,7 +9511,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 61
+ "lo": 45
}
}
},
@@ -8997,7 +9627,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1021
+ "lo": 1125
}
}
}
@@ -9045,7 +9675,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
},
@@ -9167,7 +9797,7 @@
{
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
]
@@ -9201,7 +9831,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
}
@@ -9256,7 +9886,292 @@
{
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -9266,29 +10181,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 3
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -9318,14 +10210,14 @@
{
"i128": {
"hi": 0,
- "lo": 62
+ "lo": 46
}
},
{
"u64": 0
},
{
- "bytes": "7840751be0255989e8ffb0102370cac59ad868f37b3d61e7a503fa8e4ba7c2dd41fb6ab7d7c68e10343d4a70d4e2536d6e001acdf991bc46022b3451b084210d"
+ "bytes": "6da1ab1eaba553b79d98842f2b71bf8e708c07f52ed31f7eec7c06a46b8f7e5f316976e4e3f901dd5c0474bfc98dfda5e407e0114beb91a207b61e5862f0e501"
}
]
}
@@ -9360,7 +10252,7 @@
{
"i128": {
"hi": 0,
- "lo": 62
+ "lo": 46
}
}
]
@@ -9586,7 +10478,7 @@
{
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
]
@@ -9620,7 +10512,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
}
@@ -9649,6 +10541,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 46
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -9672,7 +10612,7 @@
{
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
},
{
@@ -9711,7 +10651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
},
@@ -9730,7 +10670,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 62
+ "lo": 46
}
}
},
@@ -9846,7 +10786,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1022
+ "lo": 1150
}
}
}
@@ -9894,7 +10834,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
},
@@ -10016,7 +10956,7 @@
{
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
]
@@ -10050,7 +10990,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
}
@@ -10105,7 +11045,292 @@
{
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10115,29 +11340,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 4
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -10167,14 +11369,14 @@
{
"i128": {
"hi": 0,
- "lo": 63
+ "lo": 47
}
},
{
"u64": 0
},
{
- "bytes": "3c6b61579f53247b5c157f67ad81206bb1a99822a20689e329622900a486701211863d52c0dbb4d6b1e180bf4fa5aefed8b3c4b9819b701d40657272d404ca01"
+ "bytes": "78edf280f2afe21e2cc68ea3dcb57532e23f2798bca34c01c2cd1de3fd20f9f54415fadd13e362843e694ced675a1427605bb96078e6ae116f8268cb26878903"
}
]
}
@@ -10209,7 +11411,7 @@
{
"i128": {
"hi": 0,
- "lo": 63
+ "lo": 47
}
}
]
@@ -10435,7 +11637,7 @@
{
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
]
@@ -10469,7 +11671,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
}
@@ -10498,6 +11700,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -10521,7 +11771,7 @@
{
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
},
{
@@ -10560,7 +11810,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
},
@@ -10579,7 +11829,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 63
+ "lo": 47
}
}
},
@@ -10695,7 +11945,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1023
+ "lo": 1175
}
}
}
@@ -10743,7 +11993,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
},
@@ -10865,7 +12115,7 @@
{
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
]
@@ -10899,7 +12149,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
}
@@ -10954,7 +12204,292 @@
{
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10964,29 +12499,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 5
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11016,14 +12528,14 @@
{
"i128": {
"hi": 0,
- "lo": 64
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "46b4cfe3f1d9c2e0f39db865cd511c28e8a7ad23073bfa12cfaf6dfb26236ce001cdc7410c0a745f3bee14e33fae37261f3b5f6de7a7565a3cdbb333d8f87607"
+ "bytes": "fe6bff9baf9580f64d1941fd292a9b7f0a3544520bd6de91d51f43a6f3b5693ae55189ba26363291b12f770931ed6817d46a73bc24cbf23318dbff5d66237401"
}
]
}
@@ -11058,7 +12570,7 @@
{
"i128": {
"hi": 0,
- "lo": 64
+ "lo": 40
}
}
]
@@ -11284,7 +12796,7 @@
{
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
]
@@ -11318,7 +12830,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
}
@@ -11347,6 +12859,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -11370,7 +12930,7 @@
{
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
},
{
@@ -11409,7 +12969,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
},
@@ -11428,7 +12988,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 64
+ "lo": 40
}
}
},
@@ -11544,7 +13104,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1024
+ "lo": 1000
}
}
}
@@ -11813,29 +13373,291 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 6
- }
- }
- }
- },
- "failed_call": false
- },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -11865,14 +13687,14 @@
{
"i128": {
"hi": 0,
- "lo": 65
+ "lo": 41
}
},
{
"u64": 0
},
{
- "bytes": "b825bcee15dae8ed24b756f967222e8bcbf289ea4e537401686730c7e728f2de4abda1fc2df95bef1d179675119ba539436e42f0bb501a1316fbf5774c868b00"
+ "bytes": "2ce06cd0b18b3ee528cfcf65a6a95cafed08c815eb06e8ee04aefd48cbe174ed3a739ce0c9d3012938b93bba2e18960892280abbeb44ceafdf8b9985964a740a"
}
]
}
@@ -11907,7 +13729,7 @@
{
"i128": {
"hi": 0,
- "lo": 65
+ "lo": 41
}
}
]
@@ -12196,6 +14018,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -12277,7 +14147,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 65
+ "lo": 41
}
}
},
@@ -12441,7 +14311,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
},
@@ -12563,7 +14433,7 @@
{
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
]
@@ -12597,7 +14467,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
}
@@ -12652,7 +14522,292 @@
{
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -12662,29 +14817,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -12714,14 +14846,14 @@
{
"i128": {
"hi": 0,
- "lo": 66
+ "lo": 42
}
},
{
"u64": 0
},
{
- "bytes": "10c197095f621f40937cb0de74279c290e66f967b3a38db21bb22cbf04c0262fe22c73514c34d7c9d4893bc4ea913523c7a75412d931233cea6f8747225b3305"
+ "bytes": "c66e038cfe123551e0742837f594bb5fcf0d6d830fdca43be881d9ec5c2504aff8be18a3810e1f040cdf315b406227671d75f5d3962279df6c9b219b47886607"
}
]
}
@@ -12756,7 +14888,7 @@
{
"i128": {
"hi": 0,
- "lo": 66
+ "lo": 42
}
}
]
@@ -12982,7 +15114,7 @@
{
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
]
@@ -13016,7 +15148,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
}
@@ -13045,6 +15177,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 42
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13068,7 +15248,7 @@
{
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
},
{
@@ -13107,7 +15287,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
},
@@ -13126,7 +15306,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 66
+ "lo": 42
}
}
},
@@ -13242,7 +15422,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1026
+ "lo": 1050
}
}
}
@@ -13290,7 +15470,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
},
@@ -13412,7 +15592,7 @@
{
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
]
@@ -13446,7 +15626,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
}
@@ -13501,7 +15681,292 @@
{
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -13511,29 +15976,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 8
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -13563,14 +16005,14 @@
{
"i128": {
"hi": 0,
- "lo": 67
+ "lo": 43
}
},
{
"u64": 0
},
{
- "bytes": "e0389cda265e610230087341d21c0e9dd3d073aab8049d9f717ba39bd932b51fd1a3ea4ab031c0416e797867060961cc3655095903cded1576b7f4804233280a"
+ "bytes": "512bbaaa69266eb2a9fed423d3603210286e995723e53fc7f14b392ffcdeeb9eec050a08a5e9eb43d2614335b0eb50145dc42ee54898987f10fcdd35d571820a"
}
]
}
@@ -13605,7 +16047,7 @@
{
"i128": {
"hi": 0,
- "lo": 67
+ "lo": 43
}
}
]
@@ -13831,7 +16273,7 @@
{
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
]
@@ -13865,7 +16307,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
}
@@ -13894,6 +16336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13917,7 +16407,7 @@
{
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
},
{
@@ -13956,7 +16446,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
},
@@ -13975,7 +16465,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 67
+ "lo": 43
}
}
},
@@ -14091,7 +16581,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1027
+ "lo": 1075
}
}
}
@@ -14139,7 +16629,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
},
@@ -14261,7 +16751,7 @@
{
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
]
@@ -14295,7 +16785,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
}
@@ -14350,8 +16840,62 @@
{
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -14383,6 +16927,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 9
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14412,14 +17164,14 @@
{
"i128": {
"hi": 0,
- "lo": 68
+ "lo": 44
}
},
{
"u64": 0
},
{
- "bytes": "bc2db9f91104247812fa54e4259a76ad46e50f0d741db6cb0f306693f2ae03bc7eb7ba5cb621b689995c752713c5a3983419bde6b078c9aaa964af1dc3e30208"
+ "bytes": "bd6d14233079d62994c1f78474a5b9dbe595889af9613bb99bdaf23ec897e24d2cc6e4ebad90dbb1fd69c7fb1c9271ccaac00bb7142d75075213c7ab4b999f09"
}
]
}
@@ -14454,7 +17206,7 @@
{
"i128": {
"hi": 0,
- "lo": 68
+ "lo": 44
}
}
]
@@ -14680,7 +17432,7 @@
{
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
]
@@ -14714,7 +17466,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
}
@@ -14743,6 +17495,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 44
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14766,7 +17566,7 @@
{
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
},
{
@@ -14805,7 +17605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
},
@@ -14824,7 +17624,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 68
+ "lo": 44
}
}
},
@@ -14940,7 +17740,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1028
+ "lo": 1100
}
}
}
@@ -14988,7 +17788,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
},
@@ -15110,7 +17910,7 @@
{
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
]
@@ -15144,7 +17944,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
}
@@ -15199,8 +17999,62 @@
{
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -15232,6 +18086,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 10
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15261,14 +18323,14 @@
{
"i128": {
"hi": 0,
- "lo": 69
+ "lo": 45
}
},
{
"u64": 0
},
{
- "bytes": "66e8486454c77b759cc376b0eb15143c9e50e06456313d59b0132e7c7d098d42990a7a81424e0a85d7f08b79c92e8d6dfb018472b4b350eb5633a6faa8afd00e"
+ "bytes": "8d79fcbea3330ec3aea06ed4c3f3bf751a26277b4cbdb54a63313defb9e2a19f13c508e26290843c87da97af908f08274073bc0a5ab33bdf4f22df60952b0f06"
}
]
}
@@ -15303,7 +18365,7 @@
{
"i128": {
"hi": 0,
- "lo": 69
+ "lo": 45
}
}
]
@@ -15529,7 +18591,7 @@
{
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
]
@@ -15563,7 +18625,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
}
@@ -15592,6 +18654,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15615,7 +18725,7 @@
{
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
},
{
@@ -15654,7 +18764,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
},
@@ -15673,7 +18783,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 69
+ "lo": 45
}
}
},
@@ -15789,7 +18899,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1029
+ "lo": 1125
}
}
}
@@ -15893,7 +19003,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 989755
+ "lo": 989075
}
}
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.4.json b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.4.json
index 47d4d40..98320cb 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.4.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.4.json
@@ -77,7 +77,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
},
@@ -182,7 +182,7 @@
{
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
]
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -282,7 +283,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
},
@@ -387,7 +388,7 @@
{
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
]
@@ -400,6 +401,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -487,7 +489,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
},
@@ -592,7 +594,7 @@
{
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
]
@@ -605,6 +607,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -692,7 +695,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
},
@@ -797,7 +800,7 @@
{
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
]
@@ -810,6 +813,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -897,7 +901,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
},
@@ -1002,7 +1006,7 @@
{
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
]
@@ -1015,6 +1019,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1102,7 +1107,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
},
@@ -1207,7 +1212,7 @@
{
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
]
@@ -1220,6 +1225,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1307,7 +1313,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
},
@@ -1412,7 +1418,7 @@
{
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
]
@@ -1425,6 +1431,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1512,7 +1519,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
},
@@ -1617,7 +1624,7 @@
{
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
]
@@ -1630,6 +1637,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1717,7 +1725,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
},
@@ -1822,7 +1830,7 @@
{
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
]
@@ -1835,6 +1843,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1922,7 +1931,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
},
@@ -2027,7 +2036,7 @@
{
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
]
@@ -2040,6 +2049,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -2280,7 +2290,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
},
@@ -2299,7 +2309,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 70
+ "lo": 46
}
}
},
@@ -2484,7 +2494,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
},
@@ -2503,7 +2513,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 71
+ "lo": 47
}
}
},
@@ -2688,7 +2698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
},
@@ -2707,7 +2717,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 72
+ "lo": 40
}
}
},
@@ -2892,7 +2902,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
},
@@ -2911,7 +2921,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 73
+ "lo": 41
}
}
},
@@ -3096,7 +3106,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
},
@@ -3115,7 +3125,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 74
+ "lo": 42
}
}
},
@@ -3300,7 +3310,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
},
@@ -3319,7 +3329,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 75
+ "lo": 43
}
}
},
@@ -3504,7 +3514,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
},
@@ -3523,7 +3533,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 76
+ "lo": 44
}
}
},
@@ -3708,7 +3718,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
},
@@ -3727,7 +3737,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 77
+ "lo": 45
}
}
},
@@ -3912,7 +3922,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
},
@@ -3931,7 +3941,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 78
+ "lo": 46
}
}
},
@@ -4116,7 +4126,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
},
@@ -4135,7 +4145,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 79
+ "lo": 47
}
}
},
@@ -6203,7 +6213,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 989655
+ "lo": 988975
}
}
},
@@ -6276,7 +6286,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
},
@@ -6349,7 +6359,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
},
@@ -6422,7 +6432,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
},
@@ -6495,7 +6505,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
},
@@ -6568,7 +6578,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
},
@@ -6641,7 +6651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
},
@@ -6714,7 +6724,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
},
@@ -6787,7 +6797,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
},
@@ -6860,7 +6870,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
},
@@ -6933,7 +6943,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
},
@@ -7347,7 +7357,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
},
@@ -7469,7 +7479,7 @@
{
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
]
@@ -7503,7 +7513,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
}
@@ -7558,8 +7568,62 @@
{
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -7591,6 +7655,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7620,14 +7892,14 @@
{
"i128": {
"hi": 0,
- "lo": 70
+ "lo": 46
}
},
{
"u64": 0
},
{
- "bytes": "5a22ea413ca0401b50ee3247d52ff3b500806802a88cf6ae06a0c22c579bbe4b975325be1e325403bc096f467857e34d3e2fc972fcb0adc902fb0ffb07193f02"
+ "bytes": "364c12645f814ed95cc74f4f7d445f783462b459f2323a462662d9c674058c6b402e1af8f49524a489dab0d79b4d7b21d64c505e77ad303260e54d06e169680f"
}
]
}
@@ -7662,7 +7934,7 @@
{
"i128": {
"hi": 0,
- "lo": 70
+ "lo": 46
}
}
]
@@ -7888,7 +8160,7 @@
{
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
]
@@ -7922,7 +8194,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
}
@@ -7951,6 +8223,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 46
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7974,7 +8294,7 @@
{
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
},
{
@@ -8013,7 +8333,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
},
@@ -8032,7 +8352,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 70
+ "lo": 46
}
}
},
@@ -8148,7 +8468,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1030
+ "lo": 1150
}
}
}
@@ -8196,7 +8516,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
},
@@ -8318,7 +8638,7 @@
{
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
]
@@ -8352,7 +8672,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
}
@@ -8407,7 +8727,7 @@
{
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
]
@@ -8421,41 +8741,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 2
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -8467,16 +8761,304 @@
"u32": 0
},
{
- "i128": {
- "hi": 0,
- "lo": 71
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
},
{
"u64": 0
},
{
- "bytes": "2117b0b382778e26a644d474734c7e729c8449fa371cb7462a6f89d1198b80d050e6b0bbfffb48a3a13c284f6f63bd13e849d9d3584419da8cfdd03b1f92830b"
+ "bytes": "b73e74e2d5b9ccaa9030f43428d4f3b3ec40d1a5bbe37081c0723af0743edabddd58fd0d8a64712a92682aaa5bf0352a5e05fef7455900e0ab8e96026d5a2b04"
}
]
}
@@ -8511,7 +9093,7 @@
{
"i128": {
"hi": 0,
- "lo": 71
+ "lo": 47
}
}
]
@@ -8737,7 +9319,7 @@
{
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
]
@@ -8771,7 +9353,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
}
@@ -8800,6 +9382,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -8823,7 +9453,7 @@
{
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
},
{
@@ -8862,7 +9492,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
},
@@ -8881,7 +9511,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 71
+ "lo": 47
}
}
},
@@ -8997,7 +9627,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1031
+ "lo": 1175
}
}
}
@@ -9045,7 +9675,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
},
@@ -9167,7 +9797,7 @@
{
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
]
@@ -9201,7 +9831,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
}
@@ -9256,7 +9886,292 @@
{
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -9266,29 +10181,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 3
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -9318,14 +10210,14 @@
{
"i128": {
"hi": 0,
- "lo": 72
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "8c67db2b74dde5a5a6529e777b02b6dcf23ccd78bbe567ba4f74c2344429aabaff04ce612f9de35df1e9b74cee5f108394d9a0a013b7566203f17bcbbfbd340f"
+ "bytes": "768256c8b84d94eefb8ae111dd915eb7867b0f9c0d377d7ad833eda0384a04c155423a9e670221ade98ba37f8c580fa09499ef176077dee903a21ef69d547109"
}
]
}
@@ -9360,7 +10252,7 @@
{
"i128": {
"hi": 0,
- "lo": 72
+ "lo": 40
}
}
]
@@ -9586,7 +10478,7 @@
{
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
]
@@ -9620,7 +10512,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
}
@@ -9649,6 +10541,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -9672,7 +10612,7 @@
{
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
},
{
@@ -9711,7 +10651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
},
@@ -9730,7 +10670,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 72
+ "lo": 40
}
}
},
@@ -9846,7 +10786,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1032
+ "lo": 1000
}
}
}
@@ -9894,7 +10834,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
},
@@ -10016,7 +10956,7 @@
{
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
]
@@ -10050,7 +10990,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
}
@@ -10105,7 +11045,292 @@
{
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10115,29 +11340,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 4
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -10167,14 +11369,14 @@
{
"i128": {
"hi": 0,
- "lo": 73
+ "lo": 41
}
},
{
"u64": 0
},
{
- "bytes": "b66692099a7804383f5a7e641db230d95aed95c1b1b67bdd844660d4e38263e877755e0a69d931841c23c6979eb1f39741c1044446dbc37abb01453c9cb8c80a"
+ "bytes": "02f6671462b560aba5667318689eb2d05610d976d43e98a483803261a1717718a779e7b4c2aa962c460c2c7ee6d2a8b590f01f8c382a8f7a74ece58e3eda440c"
}
]
}
@@ -10209,7 +11411,7 @@
{
"i128": {
"hi": 0,
- "lo": 73
+ "lo": 41
}
}
]
@@ -10435,7 +11637,7 @@
{
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
]
@@ -10469,7 +11671,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
}
@@ -10498,6 +11700,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -10521,7 +11771,7 @@
{
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
},
{
@@ -10560,7 +11810,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
},
@@ -10579,7 +11829,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 73
+ "lo": 41
}
}
},
@@ -10695,7 +11945,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1033
+ "lo": 1025
}
}
}
@@ -10743,7 +11993,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
},
@@ -10865,7 +12115,7 @@
{
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
]
@@ -10899,7 +12149,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
}
@@ -10954,7 +12204,292 @@
{
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10964,29 +12499,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 5
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11016,14 +12528,14 @@
{
"i128": {
"hi": 0,
- "lo": 74
+ "lo": 42
}
},
{
"u64": 0
},
{
- "bytes": "3d8f1fa603ed3e54929365e7c658fea48a123129844716e672e172f7fedcf1b239597985059f4ff2ede356a4345c4964d7647eeb8bbddea080da04a9948c3501"
+ "bytes": "325e8902c6ab4247e807f1604fc409ebe33d15a04165f1aa30893ff4381e6bb14145920301f7c740bfbd6034c2806435a2ce42aa58889794b9a572af5ee9620b"
}
]
}
@@ -11058,7 +12570,7 @@
{
"i128": {
"hi": 0,
- "lo": 74
+ "lo": 42
}
}
]
@@ -11284,7 +12796,7 @@
{
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
]
@@ -11318,7 +12830,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
}
@@ -11347,6 +12859,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 42
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -11370,7 +12930,7 @@
{
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
},
{
@@ -11409,7 +12969,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
},
@@ -11428,7 +12988,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 74
+ "lo": 42
}
}
},
@@ -11544,7 +13104,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1034
+ "lo": 1050
}
}
}
@@ -11592,7 +13152,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
},
@@ -11714,7 +13274,7 @@
{
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
]
@@ -11748,7 +13308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
}
@@ -11803,7 +13363,292 @@
{
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -11813,29 +13658,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 6
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11865,14 +13687,14 @@
{
"i128": {
"hi": 0,
- "lo": 75
+ "lo": 43
}
},
{
"u64": 0
},
{
- "bytes": "82319cdad7c54deb5dd1e94e261f930f7f4296fe7a1b3a1f02e89a9901fae196068164800891f623db1a7fcaf09f095fb379fb1f136a024b94f96413d3d6ee04"
+ "bytes": "5db6e9be3c6e6f2c25fd2451aaec2678778c007bba3235062eee3d8bdd7665253733b5c59e669854ea10c7e265354faf690bac9bf48606d888ab6910dc1bbb0c"
}
]
}
@@ -11907,7 +13729,7 @@
{
"i128": {
"hi": 0,
- "lo": 75
+ "lo": 43
}
}
]
@@ -12133,7 +13955,7 @@
{
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
]
@@ -12167,7 +13989,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
}
@@ -12196,6 +14018,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -12219,7 +14089,7 @@
{
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
},
{
@@ -12258,7 +14128,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
},
@@ -12277,7 +14147,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 75
+ "lo": 43
}
}
},
@@ -12393,7 +14263,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1035
+ "lo": 1075
}
}
}
@@ -12441,7 +14311,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
},
@@ -12563,7 +14433,7 @@
{
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
]
@@ -12597,7 +14467,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
}
@@ -12652,7 +14522,292 @@
{
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -12662,29 +14817,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -12714,14 +14846,14 @@
{
"i128": {
"hi": 0,
- "lo": 76
+ "lo": 44
}
},
{
"u64": 0
},
{
- "bytes": "19060c5d8f3a537ab390474ef80637ea8c00d844d4b1a9175bff864ee2836209d6a088fa9aaf037bef96b7e85394a7e35f05aca1d428fcfb2aa11a778b9cb602"
+ "bytes": "cda731688cee9b92b5f21572170b6dbdb4135bfd64b8be21a300cd774da7960fcdd80ff493786d709519136272fc6e1b7c7566ae5f2dd1ea6a00c25aa1ca7f0d"
}
]
}
@@ -12756,7 +14888,7 @@
{
"i128": {
"hi": 0,
- "lo": 76
+ "lo": 44
}
}
]
@@ -12982,7 +15114,7 @@
{
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
]
@@ -13016,7 +15148,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
}
@@ -13045,6 +15177,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 44
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13068,7 +15248,7 @@
{
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
},
{
@@ -13107,7 +15287,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
},
@@ -13126,7 +15306,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 76
+ "lo": 44
}
}
},
@@ -13242,7 +15422,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1036
+ "lo": 1100
}
}
}
@@ -13290,7 +15470,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
},
@@ -13412,7 +15592,7 @@
{
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
]
@@ -13446,7 +15626,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
}
@@ -13501,7 +15681,292 @@
{
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -13511,29 +15976,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 8
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -13563,14 +16005,14 @@
{
"i128": {
"hi": 0,
- "lo": 77
+ "lo": 45
}
},
{
"u64": 0
},
{
- "bytes": "3e45c0d6a763f893f705710184269c18f5600f05b0a0126194e62aea00f2faf73f7cf8c34c992ab19e675518306f9ecd2f9f81105f8e7f7f48d577d11e17fe0c"
+ "bytes": "85cdcd47e10007537035e84d29dbf2c31202ec64b1310fe7bfa611b2b169200fbf22944745f40538591443ab19084f869b3081b63ba5086d36f2d2136e8e4b06"
}
]
}
@@ -13605,7 +16047,7 @@
{
"i128": {
"hi": 0,
- "lo": 77
+ "lo": 45
}
}
]
@@ -13831,7 +16273,7 @@
{
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
]
@@ -13865,7 +16307,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
}
@@ -13894,6 +16336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13917,7 +16407,7 @@
{
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
},
{
@@ -13956,7 +16446,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
},
@@ -13975,7 +16465,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 77
+ "lo": 45
}
}
},
@@ -14091,7 +16581,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1037
+ "lo": 1125
}
}
}
@@ -14139,7 +16629,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
},
@@ -14261,7 +16751,7 @@
{
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
]
@@ -14295,7 +16785,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
}
@@ -14350,8 +16840,62 @@
{
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -14383,6 +16927,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 9
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14412,14 +17164,14 @@
{
"i128": {
"hi": 0,
- "lo": 78
+ "lo": 46
}
},
{
"u64": 0
},
{
- "bytes": "1c8b86304c5955c33f80e62593952cbdaed3183285d32f76790324ea32dd106c16cfc4a301f2042cb3d810db26001301b6f2b4e08924d186fba67bf93283140f"
+ "bytes": "40f2dd7690303bb23b90b95c85a15cb516b463f18b72e05af08a08e2f8ed263769a66763816f7daccc9d12e54a179817ad2a699f7054b9b886c375999683cf07"
}
]
}
@@ -14454,7 +17206,7 @@
{
"i128": {
"hi": 0,
- "lo": 78
+ "lo": 46
}
}
]
@@ -14680,7 +17432,7 @@
{
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
]
@@ -14714,7 +17466,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
}
@@ -14743,6 +17495,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 46
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14766,7 +17566,7 @@
{
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
},
{
@@ -14805,7 +17605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
},
@@ -14824,7 +17624,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 78
+ "lo": 46
}
}
},
@@ -14940,7 +17740,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1038
+ "lo": 1150
}
}
}
@@ -14988,7 +17788,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
},
@@ -15110,7 +17910,7 @@
{
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
]
@@ -15144,7 +17944,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
}
@@ -15199,8 +17999,62 @@
{
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -15232,6 +18086,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 10
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15261,14 +18323,14 @@
{
"i128": {
"hi": 0,
- "lo": 79
+ "lo": 47
}
},
{
"u64": 0
},
{
- "bytes": "dd384682c50396e7c61c0611d7a18e044172868409fbcae3078add45887f49490324030c20506fe2f8b717a9f56b149b6c70fa39b239fbac5c541bf45870bb07"
+ "bytes": "f0a59e86f41e9b1ccbc96b183541801819609f9b0a18157355ad5ad3948d08fbc2f9df2d8239b281e8ba086107eb10ddb3380232be6b416a750c055399f0c705"
}
]
}
@@ -15303,7 +18365,7 @@
{
"i128": {
"hi": 0,
- "lo": 79
+ "lo": 47
}
}
]
@@ -15529,7 +18591,7 @@
{
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
]
@@ -15563,7 +18625,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
}
@@ -15592,6 +18654,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15615,7 +18725,7 @@
{
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
},
{
@@ -15654,7 +18764,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
},
@@ -15673,7 +18783,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 79
+ "lo": 47
}
}
},
@@ -15789,7 +18899,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1039
+ "lo": 1175
}
}
}
@@ -15893,7 +19003,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 989655
+ "lo": 988975
}
}
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.5.json b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.5.json
index 2877959..3977844 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.5.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_fifty_user_end_to_end_simulation.5.json
@@ -77,7 +77,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
},
@@ -182,7 +182,7 @@
{
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
]
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -282,7 +283,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
},
@@ -387,7 +388,7 @@
{
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
]
@@ -400,6 +401,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -487,7 +489,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
},
@@ -592,7 +594,7 @@
{
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
]
@@ -605,6 +607,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -692,7 +695,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
},
@@ -797,7 +800,7 @@
{
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
]
@@ -810,6 +813,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -897,7 +901,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
},
@@ -1002,7 +1006,7 @@
{
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
]
@@ -1015,6 +1019,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1102,7 +1107,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
},
@@ -1207,7 +1212,7 @@
{
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
]
@@ -1220,6 +1225,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1307,7 +1313,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
},
@@ -1412,7 +1418,7 @@
{
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
]
@@ -1425,6 +1431,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1512,7 +1519,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
},
@@ -1617,7 +1624,7 @@
{
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
]
@@ -1630,6 +1637,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1717,7 +1725,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
},
@@ -1822,7 +1830,7 @@
{
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
]
@@ -1835,6 +1843,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1922,7 +1931,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
},
@@ -2027,7 +2036,7 @@
{
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
]
@@ -2040,6 +2049,7 @@
]
],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -2280,7 +2290,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
},
@@ -2299,7 +2309,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
},
@@ -2484,7 +2494,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
},
@@ -2503,7 +2513,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 81
+ "lo": 41
}
}
},
@@ -2688,7 +2698,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
},
@@ -2707,7 +2717,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 82
+ "lo": 42
}
}
},
@@ -2892,7 +2902,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
},
@@ -2911,7 +2921,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 83
+ "lo": 43
}
}
},
@@ -3096,7 +3106,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
},
@@ -3115,7 +3125,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 84
+ "lo": 44
}
}
},
@@ -3300,7 +3310,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
},
@@ -3319,7 +3329,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 85
+ "lo": 45
}
}
},
@@ -3504,7 +3514,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
},
@@ -3523,7 +3533,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 86
+ "lo": 46
}
}
},
@@ -3708,7 +3718,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
},
@@ -3727,7 +3737,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 87
+ "lo": 47
}
}
},
@@ -3912,7 +3922,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
},
@@ -3931,7 +3941,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 88
+ "lo": 40
}
}
},
@@ -4116,7 +4126,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
},
@@ -4135,7 +4145,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 89
+ "lo": 41
}
}
},
@@ -6203,7 +6213,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 989555
+ "lo": 989275
}
}
},
@@ -6276,7 +6286,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
},
@@ -6349,7 +6359,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
},
@@ -6422,7 +6432,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
},
@@ -6495,7 +6505,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
},
@@ -6568,7 +6578,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
},
@@ -6641,7 +6651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
},
@@ -6714,7 +6724,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
},
@@ -6787,7 +6797,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
},
@@ -6860,7 +6870,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
},
@@ -6933,7 +6943,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
},
@@ -7347,7 +7357,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
},
@@ -7469,7 +7479,7 @@
{
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
]
@@ -7503,7 +7513,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
}
@@ -7558,8 +7568,62 @@
{
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -7591,6 +7655,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7620,14 +7892,14 @@
{
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "e2a94c3b6dff951ce7886580f6059823e7b14f23b83ee8dc1085cf1f0dce39ac69d532ca0c7d9eb9956e2f444a08b3947f1c9cccb8cba27fe6293485f20c6a04"
+ "bytes": "f3bdf6eb753157650d1687999d22798556297ff817141b43381969e7a981c98f73d17aa603cb38614a91578a2b58c0ad1f16643ee4d0613d2b19b5ca3712dc05"
}
]
}
@@ -7662,7 +7934,7 @@
{
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
]
@@ -7888,7 +8160,7 @@
{
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
]
@@ -7922,7 +8194,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
}
@@ -7951,6 +8223,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -7974,7 +8294,7 @@
{
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
},
{
@@ -8013,7 +8333,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
},
@@ -8032,7 +8352,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
},
@@ -8148,7 +8468,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1040
+ "lo": 1000
}
}
}
@@ -8196,7 +8516,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
},
@@ -8318,7 +8638,7 @@
{
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
]
@@ -8352,7 +8672,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
}
@@ -8407,7 +8727,7 @@
{
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
]
@@ -8421,41 +8741,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 2
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -8467,16 +8761,304 @@
"u32": 0
},
{
- "i128": {
- "hi": 0,
- "lo": 81
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
},
{
"u64": 0
},
{
- "bytes": "de0c941d45277de86bb6075286efd0f1ab3c3fee9cb8ad63952ea2f2745fd6917a87845720472aea6b6dc2f68751d1c3a87a293318224f244224e771a3c18d0c"
+ "bytes": "b0c4a348b2142ce3d68ecf85aa173005d75bf5dd1f736fe95f07862e505da9c9fdb63f13924aa5ea93883df60ed73a2a4984592361cf135dc3a35075ab28a905"
}
]
}
@@ -8511,7 +9093,7 @@
{
"i128": {
"hi": 0,
- "lo": 81
+ "lo": 41
}
}
]
@@ -8737,7 +9319,7 @@
{
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
]
@@ -8771,7 +9353,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
}
@@ -8800,6 +9382,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -8823,7 +9453,7 @@
{
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
},
{
@@ -8862,7 +9492,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
},
@@ -8881,7 +9511,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 81
+ "lo": 41
}
}
},
@@ -8997,7 +9627,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1041
+ "lo": 1025
}
}
}
@@ -9045,7 +9675,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
},
@@ -9167,7 +9797,7 @@
{
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
]
@@ -9201,7 +9831,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
}
@@ -9256,7 +9886,292 @@
{
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -9266,29 +10181,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 3
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -9318,14 +10210,14 @@
{
"i128": {
"hi": 0,
- "lo": 82
+ "lo": 42
}
},
{
"u64": 0
},
{
- "bytes": "efbf61f0cacf3470547d075e91b907a789b6a32733ad3fd2df2d2bdb3cd56d52449b81756224a8851f889e6521885282802a187827f64350bfde404c2e9abe0d"
+ "bytes": "58203a1c6196802ee6dd1506d260d164fa4fff95bf83641bb1f2e7d06c98d17fdd99897719feeeb6f12878bd09594bd86d8fea0726bf4c283a5d547a24497b0b"
}
]
}
@@ -9360,7 +10252,7 @@
{
"i128": {
"hi": 0,
- "lo": 82
+ "lo": 42
}
}
]
@@ -9586,7 +10478,7 @@
{
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
]
@@ -9620,7 +10512,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
}
@@ -9649,6 +10541,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1050
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 42
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -9672,7 +10612,7 @@
{
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
},
{
@@ -9711,7 +10651,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
},
@@ -9730,7 +10670,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 82
+ "lo": 42
}
}
},
@@ -9846,7 +10786,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1042
+ "lo": 1050
}
}
}
@@ -9894,7 +10834,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
},
@@ -10016,7 +10956,7 @@
{
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
]
@@ -10050,7 +10990,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
}
@@ -10105,7 +11045,292 @@
{
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10115,29 +11340,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 4
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -10167,14 +11369,14 @@
{
"i128": {
"hi": 0,
- "lo": 83
+ "lo": 43
}
},
{
"u64": 0
},
{
- "bytes": "38a44d079e557be046a134aff30f7b70bb7fd887a192eec86a12679e17b84f23d077ed3ec9a4164304cb4b071d64bc8792f8a31253ecbc98a7f74e344aeb1005"
+ "bytes": "ce92b45540af8346ab71c2323647054722445dcae4ddd77c0ca81664d72532bee6130e61a9da5ce71f87a4c29d06c4319a973bfa81d42c076c47afd534f7ef07"
}
]
}
@@ -10209,7 +11411,7 @@
{
"i128": {
"hi": 0,
- "lo": 83
+ "lo": 43
}
}
]
@@ -10435,7 +11637,7 @@
{
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
]
@@ -10469,7 +11671,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
}
@@ -10498,6 +11700,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 4
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1075
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 43
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -10521,7 +11771,7 @@
{
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
},
{
@@ -10560,7 +11810,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
},
@@ -10579,7 +11829,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 83
+ "lo": 43
}
}
},
@@ -10695,7 +11945,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1043
+ "lo": 1075
}
}
}
@@ -10743,7 +11993,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
},
@@ -10865,7 +12115,7 @@
{
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
]
@@ -10899,7 +12149,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
}
@@ -10954,7 +12204,292 @@
{
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 5
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -10964,29 +12499,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 5
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11016,14 +12528,14 @@
{
"i128": {
"hi": 0,
- "lo": 84
+ "lo": 44
}
},
{
"u64": 0
},
{
- "bytes": "8c351f097382ba7cb2302ab83ef686a8c0999dcd8e6aad88e1cb41c19f2721a6fe3585f5455d9d6fa9e55e1ee583335668984a8d5e0ba8c8ac704b95dfc99807"
+ "bytes": "86df43a17e7b99e9b4ac8c3288c9b2427c135f9156b1067eec8bb704aa12d19fe9605505e9e63c13348f37ca9332066a4fecb7b52d99a9424ff9fab4f01a2507"
}
]
}
@@ -11058,7 +12570,7 @@
{
"i128": {
"hi": 0,
- "lo": 84
+ "lo": 44
}
}
]
@@ -11284,7 +12796,7 @@
{
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
]
@@ -11318,7 +12830,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
}
@@ -11347,6 +12859,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 5
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1100
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 44
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -11370,7 +12930,7 @@
{
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
},
{
@@ -11409,7 +12969,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
},
@@ -11428,7 +12988,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 84
+ "lo": 44
}
}
},
@@ -11544,7 +13104,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1044
+ "lo": 1100
}
}
}
@@ -11592,7 +13152,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
},
@@ -11714,7 +13274,7 @@
{
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
]
@@ -11748,7 +13308,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
}
@@ -11803,7 +13363,292 @@
{
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 6
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -11813,29 +13658,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 6
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -11865,14 +13687,14 @@
{
"i128": {
"hi": 0,
- "lo": 85
+ "lo": 45
}
},
{
"u64": 0
},
{
- "bytes": "67095d1c9b515479564af51b896c715701809d5573a3de47cf66fb757ae9f4f7858c4c6caca12ec3e1ff14fbea765ab612883547e8597a0fa756160c8774d809"
+ "bytes": "93db3d860077a2b9de2d750e66d22966fb2a983a0abd22344576e4ce758db78145e3ae1a13468cae55ac42158bab13528b13837de933d0692d8f623124fc2506"
}
]
}
@@ -11907,7 +13729,7 @@
{
"i128": {
"hi": 0,
- "lo": 85
+ "lo": 45
}
}
]
@@ -12133,7 +13955,7 @@
{
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
]
@@ -12167,7 +13989,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
}
@@ -12196,6 +14018,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 6
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1125
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 45
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -12219,7 +14089,7 @@
{
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
},
{
@@ -12258,7 +14128,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
},
@@ -12277,7 +14147,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 85
+ "lo": 45
}
}
},
@@ -12393,7 +14263,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1045
+ "lo": 1125
}
}
}
@@ -12441,7 +14311,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
},
@@ -12563,7 +14433,7 @@
{
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
]
@@ -12597,7 +14467,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
}
@@ -12652,7 +14522,292 @@
{
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -12662,29 +14817,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -12714,14 +14846,14 @@
{
"i128": {
"hi": 0,
- "lo": 86
+ "lo": 46
}
},
{
"u64": 0
},
{
- "bytes": "19ed90dbec83cb4b90365d366992e0080ea80c7a15822620d7977d65177bcdec37ee509570fdbe99bf6eab3ee34830abd383f0fcd6ef8d3a1b13a79b8ddb1705"
+ "bytes": "78de14750f19ddd60f832717c51cdaebb03269672380e312d2a52f14124acacf2fd1d76793d52b901fd9d5924af9e7846eb7285613512f80b677dddafe79cf0c"
}
]
}
@@ -12756,7 +14888,7 @@
{
"i128": {
"hi": 0,
- "lo": 86
+ "lo": 46
}
}
]
@@ -12982,7 +15114,7 @@
{
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
]
@@ -13016,7 +15148,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
}
@@ -13045,6 +15177,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 7
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1150
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 46
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13068,7 +15248,7 @@
{
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
},
{
@@ -13107,7 +15287,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
},
@@ -13126,7 +15306,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 86
+ "lo": 46
}
}
},
@@ -13242,7 +15422,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1046
+ "lo": 1150
}
}
}
@@ -13290,7 +15470,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
},
@@ -13412,7 +15592,7 @@
{
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
]
@@ -13446,7 +15626,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
}
@@ -13501,7 +15681,292 @@
{
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 8
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ }
+ }
+ ]
+ }
+ ]
}
}
]
@@ -13511,29 +15976,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 8
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -13563,14 +16005,14 @@
{
"i128": {
"hi": 0,
- "lo": 87
+ "lo": 47
}
},
{
"u64": 0
},
{
- "bytes": "be77e46e11a4445948d6be660cc6b98426ec50a2ffcaa18613c4354ab81eceb874cddb51f066fa38f9d9f4be5220a81e2e7afef83c773e15ff8e2e4dded7840b"
+ "bytes": "21d4c6568c4c893fc4c0af018bd4d0ed57effc83e1fad9ddf600a74ee7f2a9a2161f38819e538a6e0e0dc181fb3675662308f82c3fa07b58cb3b62aa8f7bf407"
}
]
}
@@ -13605,7 +16047,7 @@
{
"i128": {
"hi": 0,
- "lo": 87
+ "lo": 47
}
}
]
@@ -13831,7 +16273,7 @@
{
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
]
@@ -13865,7 +16307,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
}
@@ -13894,6 +16336,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 8
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1175
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 47
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -13917,7 +16407,7 @@
{
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
},
{
@@ -13956,7 +16446,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
},
@@ -13975,7 +16465,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 87
+ "lo": 47
}
}
},
@@ -14091,7 +16581,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1047
+ "lo": 1175
}
}
}
@@ -14139,7 +16629,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
},
@@ -14261,7 +16751,7 @@
{
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
]
@@ -14295,7 +16785,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
}
@@ -14350,8 +16840,62 @@
{
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -14383,6 +16927,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 9
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14412,14 +17164,14 @@
{
"i128": {
"hi": 0,
- "lo": 88
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "4b369131d5cfa8fdf3b05573d0c0d853185b87b879639c8959d4d207b74c85548020b7f8991f8b753a19e0b743f562fafda60fb9d571f61c9ca17d90b7adda0f"
+ "bytes": "d4648fd46183ca8c9f003f3259fb7b7bf958d251b12f5e89c49bd6751b6fd42c665652a2f062db9be7c17fe7b92293e3c7fec3155edfdb906dc2914298af780d"
}
]
}
@@ -14454,7 +17206,7 @@
{
"i128": {
"hi": 0,
- "lo": 88
+ "lo": 40
}
}
]
@@ -14680,7 +17432,7 @@
{
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
]
@@ -14714,7 +17466,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
}
@@ -14743,6 +17495,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 9
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -14766,7 +17566,7 @@
{
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
},
{
@@ -14805,7 +17605,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
},
@@ -14824,7 +17624,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 88
+ "lo": 40
}
}
},
@@ -14940,7 +17740,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1048
+ "lo": 1000
}
}
}
@@ -14988,7 +17788,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
},
@@ -15110,7 +17910,7 @@
{
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
]
@@ -15144,7 +17944,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
}
@@ -15199,8 +17999,62 @@
{
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25
}
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
}
]
}
@@ -15232,6 +18086,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 10
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15261,14 +18323,14 @@
{
"i128": {
"hi": 0,
- "lo": 89
+ "lo": 41
}
},
{
"u64": 0
},
{
- "bytes": "bb05f06a2a202215b8cd6f8e2c2ce842730c5259dcec757ab59392b684a83660e71a067997e32f0e08c334e8eb5a39c5ee4e5db4921f9e7754eafa74442e1a0d"
+ "bytes": "fcc334487ed0de43025a2cd64a471dd18bd7aa9999f5843b4e3820b640616df48dd1771190860bb7c67960c7dbe62e7b957d35e0cfbefc2fc0ebf2387a72a600"
}
]
}
@@ -15303,7 +18365,7 @@
{
"i128": {
"hi": 0,
- "lo": 89
+ "lo": 41
}
}
]
@@ -15529,7 +18591,7 @@
{
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
]
@@ -15563,7 +18625,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
}
@@ -15592,6 +18654,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 10
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1025
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 41
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -15615,7 +18725,7 @@
{
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
},
{
@@ -15654,7 +18764,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
},
@@ -15673,7 +18783,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 89
+ "lo": 41
}
}
},
@@ -15789,7 +18899,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 1049
+ "lo": 1025
}
}
}
@@ -15893,7 +19003,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 989555
+ "lo": 989275
}
}
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_finalize_payment_alias_matches_pay_batch.1.json b/contracts/core-flow/test_snapshots/test/tests/test_finalize_payment_alias_matches_pay_batch.1.json
index c63f5bb..a39bb22 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_finalize_payment_alias_matches_pay_batch.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_finalize_payment_alias_matches_pay_batch.1.json
@@ -195,6 +195,9 @@
]
],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1635,6 +1638,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1658,6 +1715,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1694,7 +2216,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -2018,6 +2540,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_finalize_transfers_funds_to_workers.1.json b/contracts/core-flow/test_snapshots/test/tests/test_finalize_transfers_funds_to_workers.1.json
index 68ad5af..e5f04ef 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_finalize_transfers_funds_to_workers.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_finalize_transfers_funds_to_workers.1.json
@@ -290,6 +290,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -549,7 +554,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 20
}
}
},
@@ -642,7 +647,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32
}
}
},
@@ -1995,93 +2000,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
- },
- {
- "symbol": "balance"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "balance"
- }
- ],
- "data": {
- "i128": {
- "hi": 0,
- "lo": 13000
- }
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -2093,118 +2020,28 @@
"u32": 0
},
{
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "hours"
- },
- {
- "symbol": "submit"
- }
- ],
- "data": {
- "vec": [
- {
- "u32": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
- "u32": 0
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 5000
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 1
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 250
}
},
{
- "u64": 1
+ "u64": 1000
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
+ "u64": 2000
}
]
}
@@ -2222,10 +2059,10 @@
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "payment"
},
{
- "symbol": "submit"
+ "symbol": "add"
}
],
"data": {
@@ -2236,11 +2073,29 @@
{
"u32": 1
},
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 250
}
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
}
]
}
@@ -2261,10 +2116,12 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "initialize_multi_sig_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -2282,37 +2139,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
- },
- {
- "symbol": "manager_approve"
- }
- ],
- "data": {
- "u32": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "approve"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
- "symbol": "manager"
+ "symbol": "balance"
}
],
"data": {
- "u32": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -2322,7 +2156,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -2331,10 +2165,15 @@
"symbol": "fn_return"
},
{
- "symbol": "manager_approve"
+ "symbol": "balance"
}
],
- "data": "void"
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
}
}
},
@@ -2355,7 +2194,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "finance_approve"
+ "symbol": "get_escrow"
}
],
"data": {
@@ -2370,23 +2209,1298 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "approve"
+ "symbol": "fn_return"
},
{
- "symbol": "finance"
+ "symbol": "get_escrow"
}
],
"data": {
- "u32": 1
- }
- }
- }
- },
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "b6ebcd4469c7dae15fe1dc6dcc0bd31e39ca0640e1168820a1bc0df3688c27720d8c78dc3c5c44fac27997fb2dfd7adc92cb1afc9487eff89d103fb1237f4700"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "9893e1c074420b367134a73ff93579053a8f08d96398000b7aa74f6de48dea491df543614af5a469ee16fe41be96b69e39fcda3a004afa8a5f0194cc65e3f904"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "manager"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "finance"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
"failed_call": false
},
{
@@ -2528,6 +3642,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2620,6 +3782,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2701,7 +3911,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 20
}
}
},
@@ -2794,7 +4004,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_finalize_without_finance_approval_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_finalize_without_finance_approval_fails.1.json
index c6bda2e..c3953ea 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_finalize_without_finance_approval_fails.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_finalize_without_finance_approval_fails.1.json
@@ -1457,6 +1457,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_full_approval_and_finalize_flow.1.json b/contracts/core-flow/test_snapshots/test/tests/test_full_approval_and_finalize_flow.1.json
index 9f16876..89d5fa6 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_full_approval_and_finalize_flow.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_full_approval_and_finalize_flow.1.json
@@ -195,6 +195,9 @@
]
],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1640,41 +1643,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -1686,52 +1663,28 @@
"u32": 0
},
{
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "hours"
- },
- {
- "symbol": "submit"
- }
- ],
- "data": {
- "vec": [
- {
- "u32": 1
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
},
{
- "u32": 0
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
},
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 250
}
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
}
]
}
@@ -1752,54 +1705,7 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
- },
- {
- "symbol": "manager_approve"
- }
- ],
- "data": {
- "u32": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "approve"
- },
- {
- "symbol": "manager"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
@@ -1810,27 +1716,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "manager_approve"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1911,7 +1796,7 @@
"symbol": "manager_approved"
},
"val": {
- "bool": true
+ "bool": false
}
},
{
@@ -1981,7 +1866,7 @@
"symbol": "proof_verified"
},
"val": {
- "bool": true
+ "bool": false
}
},
{
@@ -2054,30 +1939,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "finance_approve"
- }
- ],
- "data": {
- "u32": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "approve"
- },
- {
- "symbol": "finance"
+ "symbol": "get_nonce"
}
],
"data": {
@@ -2100,10 +1962,12 @@
"symbol": "fn_return"
},
{
- "symbol": "finance_approve"
+ "symbol": "get_nonce"
}
],
- "data": "void"
+ "data": {
+ "u64": 0
+ }
}
}
},
@@ -2165,7 +2029,7 @@
"symbol": "finance_approved"
},
"val": {
- "bool": true
+ "bool": false
}
},
{
@@ -2189,7 +2053,7 @@
"symbol": "manager_approved"
},
"val": {
- "bool": true
+ "bool": false
}
},
{
@@ -2259,7 +2123,7 @@
"symbol": "proof_verified"
},
"val": {
- "bool": true
+ "bool": false
}
},
{
@@ -2332,11 +2196,30 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "finalize_payment"
+ "symbol": "submit_hours_proof"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
+ }
+ ]
}
}
}
@@ -2347,32 +2230,29 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ "symbol": "hours"
},
{
- "symbol": "transfer"
+ "symbol": "submit"
}
],
"data": {
"vec": [
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "u32": 1
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u32": 0
},
{
"i128": {
"hi": 0,
- "lo": 10000
+ "lo": 40
}
}
]
@@ -2385,30 +2265,19 @@
{
"event": {
"ext": "v0",
- "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
- "type_": "contract",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "transfer"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "symbol": "fn_return"
},
{
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ "symbol": "submit_hours_proof"
}
],
- "data": {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
+ "data": "void"
}
}
},
@@ -2417,19 +2286,720 @@
{
"event": {
"ext": "v0",
- "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "transfer"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "manager_approve"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "manager"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "finance"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "finalize_payment"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_get_nonce_tracks_expected_value.1.json b/contracts/core-flow/test_snapshots/test/tests/test_get_nonce_tracks_expected_value.1.json
index a58e445..71bdb5c 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_get_nonce_tracks_expected_value.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_get_nonce_tracks_expected_value.1.json
@@ -196,6 +196,7 @@
],
[],
[],
+ [],
[]
],
"ledger": {
@@ -1407,6 +1408,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1479,6 +1534,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1515,7 +1778,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_hours_must_match_escrowed_amount.1.json b/contracts/core-flow/test_snapshots/test/tests/test_hours_must_match_escrowed_amount.1.json
new file mode 100644
index 0000000..25c7bb1
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_hours_must_match_escrowed_amount.1.json
@@ -0,0 +1,2053 @@
+{
+ "generators": {
+ "address": 6,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 990000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 80
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "f34fa264aee6a0771c184e41b9f9ccbed3b6551284a5336af1f2a13ed95ff6b6bb87796dd50d7cb8388a41e062467ac4a62e73af50b80e7efac3479d6b06fe03"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 17
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 17
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 17
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ },
+ {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 80
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "f34fa264aee6a0771c184e41b9f9ccbed3b6551284a5336af1f2a13ed95ff6b6bb87796dd50d7cb8388a41e062467ac4a62e73af50b80e7efac3479d6b06fe03"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_init_admin_is_first_caller_wins_without_a_pin.1.json b/contracts/core-flow/test_snapshots/test/tests/test_init_admin_is_first_caller_wins_without_a_pin.1.json
new file mode 100644
index 0000000..d881dfc
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_init_admin_is_first_caller_wins_without_a_pin.1.json
@@ -0,0 +1,374 @@
+{
+ "generators": {
+ "address": 3,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 12
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 12
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 12
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "init_admin"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_initialize_multi_sig_escrow_happy_path.1.json b/contracts/core-flow/test_snapshots/test/tests/test_initialize_multi_sig_escrow_happy_path.1.json
index d6f0e0e..225ea73 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_initialize_multi_sig_escrow_happy_path.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_initialize_multi_sig_escrow_happy_path.1.json
@@ -1405,6 +1405,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_initialize_pulls_funds_into_custody.1.json b/contracts/core-flow/test_snapshots/test/tests/test_initialize_pulls_funds_into_custody.1.json
index ff14d64..f695b08 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_initialize_pulls_funds_into_custody.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_initialize_pulls_funds_into_custody.1.json
@@ -1406,6 +1406,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_inverted_pay_period_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_inverted_pay_period_rejected.1.json
new file mode 100644
index 0000000..4e42d7d
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_inverted_pay_period_rejected.1.json
@@ -0,0 +1,933 @@
+{
+ "generators": {
+ "address": 6,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 18
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 18
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 18
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_multiple_escrows_sequential_ids.1.json b/contracts/core-flow/test_snapshots/test/tests/test_multiple_escrows_sequential_ids.1.json
index 9fff45d..fb2d123 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_multiple_escrows_sequential_ids.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_multiple_escrows_sequential_ids.1.json
@@ -2260,6 +2260,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2544,6 +2598,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 2
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2828,6 +2936,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 3
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_multiple_payment_schedules.1.json b/contracts/core-flow/test_snapshots/test/tests/test_multiple_payment_schedules.1.json
index a8a389f..2fe35fc 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_multiple_payment_schedules.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_multiple_payment_schedules.1.json
@@ -290,6 +290,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -546,7 +551,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 20
}
}
},
@@ -639,7 +644,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32
}
}
},
@@ -1988,6 +1993,114 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2327,66 +2440,11 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
- "data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "hours"
- },
- {
- "symbol": "submit"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "u32": 1
}
}
}
@@ -2405,87 +2463,1143 @@
"symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
- },
- {
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "hours"
- },
- {
- "symbol": "submit"
- }
- ],
- "data": {
- "vec": [
- {
- "u32": 1
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
},
{
- "i128": {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "b6ebcd4469c7dae15fe1dc6dcc0bd31e39ca0640e1168820a1bc0df3688c27720d8c78dc3c5c44fac27997fb2dfd7adc92cb1afc9487eff89d103fb1237f4700"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "9893e1c074420b367134a73ff93579053a8f08d96398000b7aa74f6de48dea491df543614af5a469ee16fe41be96b69e39fcda3a004afa8a5f0194cc65e3f904"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
"hi": 0,
- "lo": 40
+ "lo": 32
}
}
]
@@ -2774,6 +3888,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2866,6 +4028,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2947,7 +4157,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 20
}
}
},
@@ -3040,7 +4250,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 32
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_nonce_increments_after_proof.1.json b/contracts/core-flow/test_snapshots/test/tests/test_nonce_increments_after_proof.1.json
index dcfb47a..c2108a7 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_nonce_increments_after_proof.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_nonce_increments_after_proof.1.json
@@ -196,6 +196,10 @@
],
[],
[],
+ [],
+ [],
+ [],
+ [],
[]
],
"ledger": {
@@ -396,7 +400,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
},
@@ -1411,41 +1415,15 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize_multi_sig_escrow"
- }
- ],
- "data": {
- "u32": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "payment"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "add"
}
],
"data": {
@@ -1456,17 +1434,29 @@
{
"u32": 0
},
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
{
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 10000
}
},
{
- "u64": 0
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "u64": 1000
+ },
+ {
+ "u64": 2000
}
]
}
@@ -1479,32 +1469,19 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "u32": 1
}
}
}
@@ -1514,19 +1491,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -1535,40 +1517,177 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 80
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
},
{
- "bytes": "a4b9cf06f3a7bdcbbc5b2df03ddb68a1bcda6ac34f586250b9461fc1bbe8f54ca8416cc3e96d53cdf9ba701022ec8114224f2612bb193296736c88fe43bf4d0c"
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
}
]
}
@@ -1580,16 +1699,19 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": null,
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_call"
},
{
- "symbol": "submit"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
}
],
"data": {
@@ -1603,11 +1725,412 @@
{
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
- }
- ]
- }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "3db63200510731d5b7fd44cb1d446ada545d7f880706526f1f0a7e30122fae733b6092d20b01a9af5bb9e49cc76ab2aec487dfe3edfc07e990b2fdf952085805"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
}
}
},
@@ -1634,6 +2157,55 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1767,7 +2339,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_nonce_replay_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_nonce_replay_rejected.1.json
index 1eb1eb1..87a30ef 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_nonce_replay_rejected.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_nonce_replay_rejected.1.json
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[]
],
"ledger": {
@@ -1406,6 +1407,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1429,6 +1484,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1465,7 +1728,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1567,7 +1830,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1669,7 +1932,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_pause_blocks_new_escrow.1.json b/contracts/core-flow/test_snapshots/test/tests/test_pause_blocks_new_escrow.1.json
index cec2d95..bddf86f 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_pause_blocks_new_escrow.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_pause_blocks_new_escrow.1.json
@@ -67,6 +67,25 @@
}
]
],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -160,6 +179,51 @@
15
]
],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
[
{
"contract_data": {
@@ -250,6 +314,39 @@
15
]
],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
[
{
"contract_data": {
@@ -760,6 +857,29 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -781,6 +901,76 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_pause_for_upgrade_does_not_trap_funds.1.json b/contracts/core-flow/test_snapshots/test/tests/test_pause_for_upgrade_does_not_trap_funds.1.json
new file mode 100644
index 0000000..9d9cd11
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_pause_for_upgrade_does_not_trap_funds.1.json
@@ -0,0 +1,2271 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "cancel_escrow",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Paused"
+ }
+ ]
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "cancel_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "cancel_escrow"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_refuses_payment_without_oracle_proof.1.json b/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_refuses_payment_without_oracle_proof.1.json
index f234d22..ec1a564 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_refuses_payment_without_oracle_proof.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_refuses_payment_without_oracle_proof.1.json
@@ -1511,6 +1511,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_settles_two_assets_in_one_call.1.json b/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_settles_two_assets_in_one_call.1.json
index fe39e73..4b822eb 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_settles_two_assets_in_one_call.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_pay_batch_settles_two_assets_in_one_call.1.json
@@ -358,6 +358,11 @@
[],
[],
[],
+ [],
+ [],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -681,7 +686,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 5000
}
}
},
@@ -774,7 +779,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 8000
}
}
},
@@ -2719,19 +2724,50 @@
"event": {
"ext": "v0",
"contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "payment"
},
{
- "symbol": "initialize_multi_sig_escrow"
+ "symbol": "add"
}
],
"data": {
- "u32": 1
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -2741,23 +2777,51 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ "symbol": "payment"
},
{
- "symbol": "balance"
+ "symbol": "add"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CCFPZOCU33AWX2NKX47XD6W5JNYFP7MU57DTQFB5XOOQSJLSSC4PMX25"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u64": 2
+ }
+ ]
}
}
}
@@ -2767,7 +2831,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
@@ -2776,14 +2840,11 @@
"symbol": "fn_return"
},
{
- "symbol": "balance"
+ "symbol": "initialize_multi_sig_escrow"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
+ "u32": 1
}
}
}
@@ -2802,7 +2863,7 @@
"symbol": "fn_call"
},
{
- "bytes": "8afcb854dec16be9aabf3f71fadd4b7057fd94efc738143dbb9d09257290b8f6"
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
},
{
"symbol": "balance"
@@ -2819,7 +2880,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "8afcb854dec16be9aabf3f71fadd4b7057fd94efc738143dbb9d09257290b8f6",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
"type_": "diagnostic",
"body": {
"v0": {
@@ -2834,7 +2895,7 @@
"data": {
"i128": {
"hi": 0,
- "lo": 8000
+ "lo": 5000
}
}
}
@@ -2854,33 +2915,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "bytes": "8afcb854dec16be9aabf3f71fadd4b7057fd94efc738143dbb9d09257290b8f6"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- },
- {
- "u64": 0
- },
- {
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -2890,33 +2932,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
+ "contract_id": "8afcb854dec16be9aabf3f71fadd4b7057fd94efc738143dbb9d09257290b8f6",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "hours"
+ "symbol": "fn_return"
},
{
- "symbol": "submit"
+ "symbol": "balance"
}
],
"data": {
- "vec": [
- {
- "u32": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 40
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
}
}
}
@@ -2926,19 +2958,24 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
},
{
- "symbol": "submit_hours_proof"
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
}
],
- "data": "void"
+ "data": {
+ "u32": 1
+ }
}
}
},
@@ -2947,124 +2984,1201 @@
{
"event": {
"ext": "v0",
- "contract_id": null,
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ "symbol": "fn_return"
},
{
- "symbol": "submit_hours_proof"
+ "symbol": "get_escrow"
}
],
"data": {
- "vec": [
+ "map": [
{
- "u32": 1
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
{
- "u64": 1
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
},
{
- "bytes": "545f3be0dcd295023476a3607937196eb3b6bcd47e2bf7af5a5a1e72b485af566db6496d36b3c076cf68c07d96b4f65845979ffcd3281947244628009bb1cd08"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "hours"
- },
- {
- "symbol": "submit"
- }
- ],
- "data": {
- "vec": [
- {
- "u32": 1
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
},
{
- "u32": 1
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
},
{
- "i128": {
- "hi": 0,
- "lo": 40
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
}
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "submit_hours_proof"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
- },
- {
- "symbol": "manager_approve"
- }
- ],
- "data": {
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CCFPZOCU33AWX2NKX47XD6W5JNYFP7MU57DTQFB5XOOQSJLSSC4PMX25"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CCFPZOCU33AWX2NKX47XD6W5JNYFP7MU57DTQFB5XOOQSJLSSC4PMX25"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "16948d36522fa6266fe7885233868b8455914850a1827343ab1328314bbf227ecdf45964d1b136b60fe42b5b2b18816499d4779175362784e9ca24a7edf33f07"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CCFPZOCU33AWX2NKX47XD6W5JNYFP7MU57DTQFB5XOOQSJLSSC4PMX25"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "4b59f43c8cc29da8ccc0bea1e894bf2c75478b75d8382a94642015aece339db82a1edfc8571230b2583462d46e4ef1a41b48932057ac28a9fbb924aa51a11c09"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": {
"u32": 1
}
}
@@ -3304,6 +4418,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3396,6 +4558,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CCFPZOCU33AWX2NKX47XD6W5JNYFP7MU57DTQFB5XOOQSJLSSC4PMX25"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -3477,7 +4687,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 5000
}
}
},
@@ -3570,7 +4780,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 40
+ "lo": 8000
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_register_oracle_key_requires_admin_authorization.1.json b/contracts/core-flow/test_snapshots/test/tests/test_register_oracle_key_requires_admin_authorization.1.json
new file mode 100644
index 0000000..0f61a1a
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_register_oracle_key_requires_admin_authorization.1.json
@@ -0,0 +1,377 @@
+{
+ "generators": {
+ "address": 3,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_replayed_nonce_is_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_replayed_nonce_is_rejected.1.json
index 2e841b9..75d7586 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_replayed_nonce_is_rejected.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_replayed_nonce_is_rejected.1.json
@@ -197,6 +197,7 @@
[],
[],
[],
+ [],
[]
],
"ledger": {
@@ -1408,6 +1409,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1431,6 +1486,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1467,7 +1730,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1618,7 +1881,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1720,7 +1983,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_revoke_oracle_key_requires_admin_authorization.1.json b/contracts/core-flow/test_snapshots/test/tests/test_revoke_oracle_key_requires_admin_authorization.1.json
new file mode 100644
index 0000000..99f1f93
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_revoke_oracle_key_requires_admin_authorization.1.json
@@ -0,0 +1,454 @@
+{
+ "generators": {
+ "address": 2,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "revoke_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "revoke_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "revoke"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "revoke_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_revoked_key_cannot_back_a_new_escrow.1.json b/contracts/core-flow/test_snapshots/test/tests/test_revoked_key_cannot_back_a_new_escrow.1.json
new file mode 100644
index 0000000..3a9f3c6
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_revoked_key_cannot_back_a_new_escrow.1.json
@@ -0,0 +1,1412 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "revoke_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "is_oracle_key_registered"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "is_oracle_key_registered"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "revoke_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "revoke"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "revoke_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "is_oracle_key_registered"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "is_oracle_key_registered"
+ }
+ ],
+ "data": {
+ "bool": false
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 16
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 16
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 16
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_rotation_invalidates_retired_key_signatures.1.json b/contracts/core-flow/test_snapshots/test/tests/test_rotation_invalidates_retired_key_signatures.1.json
index 81a40a1..9395c9f 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_rotation_invalidates_retired_key_signatures.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_rotation_invalidates_retired_key_signatures.1.json
@@ -218,6 +218,7 @@
],
[],
[],
+ [],
[]
],
"ledger": {
@@ -1462,6 +1463,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1777,6 +1832,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "fd1724385aa0c75b64fb78cd602fa1d991fdebf76b13c58ed702eac835e9f618"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1813,7 +2076,7 @@
"u64": 0
},
{
- "bytes": "3b87b0b7ef1445a9b6bdd887950d6a04f1ba399b8a6d86c0972d603589e25bec9212d24a0ee04382757645e8c2dab59a825f63af11fde1a51e9c17c1493b8a0d"
+ "bytes": "c9796b8e511b81e823107a66524b375b4e22fd59d1c2d71929e7c922ef1031ef8ad171a071e433b35595f8a7f34be555dd3c4dd96b28d9b05d7269ee8f16b60f"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_rotation_refused_after_settlement.1.json b/contracts/core-flow/test_snapshots/test/tests/test_rotation_refused_after_settlement.1.json
index 59a8eb0..24f699d 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_rotation_refused_after_settlement.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_rotation_refused_after_settlement.1.json
@@ -195,6 +195,9 @@
]
],
[],
+ [],
+ [],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1635,6 +1638,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1658,6 +1715,471 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1694,7 +2216,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -2018,6 +2540,54 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_rotation_revokes_previously_verified_proofs.1.json b/contracts/core-flow/test_snapshots/test/tests/test_rotation_revokes_previously_verified_proofs.1.json
index ef61470..ee90d97 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_rotation_revokes_previously_verified_proofs.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_rotation_revokes_previously_verified_proofs.1.json
@@ -196,6 +196,7 @@
],
[],
[],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -1567,6 +1568,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1590,6 +1645,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1626,7 +1889,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_rotation_to_unregistered_key_rejected.1.json b/contracts/core-flow/test_snapshots/test/tests/test_rotation_to_unregistered_key_rejected.1.json
new file mode 100644
index 0000000..7badf7e
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_rotation_to_unregistered_key_rejected.1.json
@@ -0,0 +1,2122 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 0
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 990000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "rotate_oracle_key"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "bytes": "0909090909090909090909090909090909090909090909090909090909090909"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "rotate_oracle_key"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 16
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 16
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 16
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "rotate_oracle_key"
+ },
+ {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "bytes": "0909090909090909090909090909090909090909090909090909090909090909"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_settlement_emits_one_event_per_payment.1.json b/contracts/core-flow/test_snapshots/test/tests/test_settlement_emits_one_event_per_payment.1.json
new file mode 100644
index 0000000..8c9891a
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_settlement_emits_one_event_per_payment.1.json
@@ -0,0 +1,4024 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "manager_approve",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "finance_approve",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "pay_batch",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 2
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 987000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "b6ebcd4469c7dae15fe1dc6dcc0bd31e39ca0640e1168820a1bc0df3688c27720d8c78dc3c5c44fac27997fb2dfd7adc92cb1afc9487eff89d103fb1237f4700"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ },
+ {
+ "u64": 1
+ },
+ {
+ "bytes": "9893e1c074420b367134a73ff93579053a8f08d96398000b7aa74f6de48dea491df543614af5a469ee16fe41be96b69e39fcda3a004afa8a5f0194cc65e3f904"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "manager"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "finance"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "pay_batch"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "final"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 13000
+ }
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "pay_batch"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 32
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_after_approval_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_after_approval_fails.1.json
index ca5d5c2..597c473 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_after_approval_fails.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_after_approval_fails.1.json
@@ -213,6 +213,7 @@
}
]
],
+ [],
[]
],
"ledger": {
@@ -1457,6 +1458,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1550,6 +1605,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1586,7 +1849,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1688,7 +1951,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_cancelled_escrow_fails.1.json b/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_cancelled_escrow_fails.1.json
index f8ed56c..cf34b70 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_cancelled_escrow_fails.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_cancelled_escrow_fails.1.json
@@ -213,6 +213,7 @@
}
]
],
+ [],
[]
],
"ledger": {
@@ -1457,6 +1458,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1598,6 +1653,36 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "cancel"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1642,6 +1727,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 4
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1678,7 +1971,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1780,7 +2073,7 @@
"u64": 0
},
{
- "bytes": "18b2d8e96e718093ac9417a09ce651296f21324e8f8cdefef2c1d48994e12f55a088fcf42b739934eb8a1dd789ae594e76d68cd784b60c979e10ec5a62ff6b0c"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_proof_with_valid_ed25519_signature.1.json b/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_proof_with_valid_ed25519_signature.1.json
index fd4214a..3586e81 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_proof_with_valid_ed25519_signature.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_submit_hours_proof_with_valid_ed25519_signature.1.json
@@ -195,6 +195,7 @@
]
],
[],
+ [],
[]
],
"ledger": {
@@ -395,7 +396,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
},
@@ -1406,6 +1407,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1429,6 +1484,214 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1458,14 +1721,14 @@
{
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
},
{
"u64": 0
},
{
- "bytes": "e2a94c3b6dff951ce7886580f6059823e7b14f23b83ee8dc1085cf1f0dce39ac69d532ca0c7d9eb9956e2f444a08b3947f1c9cccb8cba27fe6293485f20c6a04"
+ "bytes": "14ca76db4040720f8a4c055d61aaf9514e5ddae23e2b2d0a099d0823d60336866e0603c7b7f66e37a882ad58d8b30af02a1835c2b67adb14ba799c6f061b0500"
}
]
}
@@ -1500,7 +1763,7 @@
{
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
]
@@ -1664,7 +1927,7 @@
"val": {
"i128": {
"hi": 0,
- "lo": 80
+ "lo": 40
}
}
},
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_test_builds_are_unpinned.1.json b/contracts/core-flow/test_snapshots/test/tests/test_test_builds_are_unpinned.1.json
new file mode 100644
index 0000000..862626b
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_test_builds_are_unpinned.1.json
@@ -0,0 +1,121 @@
+{
+ "generators": {
+ "address": 1,
+ "nonce": 0
+ },
+ "auth": [
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "expected_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "expected_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_unpause_restores_operations.1.json b/contracts/core-flow/test_snapshots/test/tests/test_unpause_restores_operations.1.json
index 5074aee..9c5872b 100644
--- a/contracts/core-flow/test_snapshots/test/tests/test_unpause_restores_operations.1.json
+++ b/contracts/core-flow/test_snapshots/test/tests/test_unpause_restores_operations.1.json
@@ -67,6 +67,25 @@
}
]
],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
@@ -611,6 +630,51 @@
1555200
]
],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
[
{
"contract_data": {
@@ -734,6 +798,39 @@
15
]
],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
[
{
"contract_data": {
@@ -773,7 +870,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4270020994084947596
+ "nonce": 8370022561469687789
}
},
"durability": "temporary"
@@ -788,7 +885,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4270020994084947596
+ "nonce": 8370022561469687789
}
},
"durability": "temporary",
@@ -1350,6 +1447,29 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1371,6 +1491,76 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -1772,6 +1962,60 @@
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_upgrade_emits_an_event_carrying_the_wasm_hash.1.json b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_emits_an_event_carrying_the_wasm_hash.1.json
new file mode 100644
index 0000000..b88aa0a
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_emits_an_event_carrying_the_wasm_hash.1.json
@@ -0,0 +1,527 @@
+{
+ "generators": {
+ "address": 2,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "upgrade",
+ "args": [
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Paused"
+ }
+ ]
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da",
+ "code": "0061736d01000000019b022960037f7f7f017f60027f7f017f60047e7e7e7e017e60027e7e017e60037e7e7e017e6000017e60017e017e60037f7f7f0060027f7e0060047f7f7f7f0060057f7f7e7f7f0060027f7f017e60047f7f7f7e0060027e7f017e60017f017e60017e017f6000017f60017f0060017f017f60027f7e017f60057f7e7e7e7e0060057e7e7e7e7e017e60067f7f7e7e7e7e017f60027f7f0060067f7f7f7e7e7e0060077f7f7f7f7e7e7e017e60057f7f7f7f7f0060000060057f7e7e7f7f017e60057f7e7e7f7f0060057f7f7f7f7f017e60067f7e7f7f7f7f017e60037f7f7f017e60037f7e7e017f60037f7e7e017e60027f7e017e60047f7e7e7e017e60057f7e7e7e7e017e60037f7e7e0060047f7e7e7f0060067f7e7e7e7e7f0002d901240162013200020162013100020162016a0003016d01390004016d016100020176016700030178013000030178013100030178013300050178013600050178013700050178013800050169015f00060169013000060169013600030169013700060169013800060176015f0005017601300004017601310003017601330006017601360003016c015f0004016c01300003016c01310003016c01320003016c01360006016c01370002016c013800030164015f00040162015f00060162013400050162013800060163015f000601630130000401610130000603f301f1010707070708090a010b07070701070c070c070c070c0b0c0b010701070707070b07070707070707070d0e0b0b0b0b0b070b0b0b0b0b0b0b070b0b0b0107060f05060f0510051106120510060f060f060f060f0313021415160612061206170612061706120218060e1110120b1907070707071a070707070707070707070701111b0b0b0b0b0b0e0c1c1d1e1f20071120010107070b0912120e11122122072223230e2422232224222325230e230b09070e1c1d201e1f2022220e0e0e0e23232223230e242223222422222223252224230e23232423050717060f0e0f0808260007171a11010101001111271427281400140405017001040405030100110619037f01418080c0000b7f0041d08ac0000b7f0041d08ac0000b07ba031b066d656d6f727902000a696e69745f61646d696e00610e65787065637465645f61646d696e00630d70726f706f73655f61646d696e00640c6163636570745f61646d696e0066096765745f61646d696e00680a7365745f706175736564006a0969735f706175736564006c0775706772616465006e1372656769737465725f6f7261636c655f6b65790070117265766f6b655f6f7261636c655f6b657900721869735f6f7261636c655f6b65795f72656769737465726564007411726f746174655f6f7261636c655f6b657900761b696e697469616c697a655f6d756c74695f7369675f657363726f770078127375626d69745f686f7572735f70726f6f66007a0f6d616e616765725f617070726f7665007c0f66696e616e63655f617070726f7665007e1066696e616c697a655f7061796d656e740080010d63616e63656c5f657363726f770082010a6765745f657363726f7700840111657874656e645f657363726f775f74746c0086010e70726f6f665f707265696d616765008801096765745f6e6f6e6365008a01097061795f6261746368008001015f00a4010a5f5f646174615f656e6403010b5f5f686561705f626173650302090c010041010b03a201890288020adff901f1014602017f017e23808080800041106b220324808080800020032001200210a580808000200329030821042000200329030037030020002004370308200341106a2480808080000b6102017f017e23808080800041106b22032480808080002003200229030022041081828080000240024020032802000d00200329030821040c010b2001200410c38180800021040b2000420037030020002004370308200341106a2480808080000b6401027e02400240024020022903002203a741ff0171220241c000460d0020024106470d0142002104200310fc8180800021030c020b420021042001200310c48180800021030c010b4201210410f98180800021030b20002004370300200020033703080bf80304027f017e017f047e23808080800041d0006b22032480808080004100210402400340200441c000460d01200320046a4202370300200441086a21040c000b0b0240024002400240024002400240024002402002290300220542ff018342cc00520d0020012005419482c0800041082003410810af818080001a410120032d0000220441004741017420044101461b22044102460d01410120032d0008220241004741017420024101461b22024102460d02200341c0006a200341106a2001109c8180800020032802400d0320032903482105200341c0006a200341186a2001109c8180800020032802400d04410120032d0020220641004741017420064101461b22064102460d0520032903482107200341c0006a200341286a2001109a8180800020032802400d062003290330220842ff01834204520d0702402003290338220942ff018342cb00520d002003290348210a200020043a0026200020023a0025200020063a002420002008422088a7360220200020093703182000200a37031020002005370308200020073703000c090b200041023a00260c080b200041023a00260c070b200041023a00260c060b200041023a00260c050b200041023a00260c040b200041023a00260c030b200041023a00260c020b200041023a00260c010b200041023a00260b200341d0006a2480808080000b3b01017f23808080800041106b2202248080808000200220013703082000200241086a10d48180800010cc818080001a200241106a2480808080000b12002000200142012002200310aa808080000b270020002000200110ac808080002002200310fe81808000200410fe8180800010cd818080001a0b4d02017f017e41022102024020002000200110ac808080002203420110bf81808000450d00410121020240024020002003420110c081808000a741ff01710e020102000b000b410021020b20020bcb0502017f017e23808080800041306b220224808080800002400240024002400240024002400240024020012802000e0700010203040506000b200241206a200041e082c08000109f8180800020022802200d07200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c060b200241206a200041f082c08000109f8180800020022802200d0620022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d062002200229032837031020022003370308200241206a200241086a2000109d818080000c050b200241206a2000418083c08000109f8180800020022802200d0520022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d052002200229032837031020022003370308200241206a200241086a2000109d818080000c040b200241206a2000419083c08000109f8180800020022802200d04200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c030b200241206a200041a483c08000109f8180800020022802200d03200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c020b200241206a200041b483c08000109f8180800020022802200d02200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c010b200241206a200041c883c08000109f8180800020022802200d0120022002290328370318200241186a10d4818080002103200241206a200141086a200010a18180800020022802200d012002200229032837031020022003370308200241206a200241086a2000109d818080000b20022903282103200229032050450d00200241306a24808080800020030f0b000b5e01017e02400240024020012001200210ac808080002203420110bf818080000d00410021010c010b20012003420110c081808000220342ff01834204520d012003422088a72102410121010b20002002360204200020013602000f0b000b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200042003703000c010b200320012004420110c081808000370308200341106a2001200341086a10a68080800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b880102017f017e23808080800041306b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200041023a00260c010b200320012004420110c081808000370300200341086a2001200310a78080800020032d002e4102460d012000200341086a41281093828080001a0b200341306a2480808080000f0b000b160020002000200110ac80808000420110bf818080000b1000200020012002420110b2808080000b210020002000200110ac808080002002200010a781808000200310ca818080001a0b1000200020012002420110b4808080000b210020002000200110ac808080002000200210b980808000200310ca818080001a0b1000200020012002420110b6808080000b210020002000200110ac808080002002200010a681808000200310ca818080001a0b1000200020012002420110b8808080000b210020002000200110ac808080002000200210bb80808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110db80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b210020002000200110ac808080002002200010a881808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110a480808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4d02017f017e41022102024020002000200110ac808080002203420210bf81808000450d00410121020240024020002003420210c081808000a741ff01710e020102000b000b410021020b20020b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420210bf818080000d00200042003703000c010b200320012004420210c081808000370308200341106a2001200341086a10b18180800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b160020002000200110ac80808000420210bf818080000b1000200020012002420210b6808080000b1000200020012002420210ba808080000b850102017f027e23808080800041106b220324808080800020032001200210b6818080000240024020032802000d00200320032903082204370300420121050240200341086a200410d08180800010ff8180800041c000470d0020002003290300370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b950203017f017e027f23808080800041c0006b22032480808080002001200210c380808000210420032001200241086a10c38080800037030820032004370300410021020240034020024110460d01200341106a20026a4202370300200241086a21020c000b0b200341246a200341106a200341106a41106a2003200341106a109681808000410020032802382202200328023422056b2206200620024b1b21022003280224200541037422066a2105200328022c20066a2106024003402002450d0120052006200110a981808000370300200541086a2105200641086a21062002417f6a21020c000b0b2001200341106a410210b08180800021042000420037030020002004370308200341c0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110d381808000024020022802004101470d00000b20022903082103200241106a24808080800020030b7902017f027e23808080800041206b2203248080808000200341106a2002200110a0818080000240024020032802100d00200320032903183703082001200341086a410110b0818080002104420021050c010b10f9818080002104420121050b2000200537030020002004370308200341206a2480808080000ba30102017f017e23808080800041206b2203248080808000200341106a200120021091818080000240024020032802100d0020032903182104200341106a2001200241046a10918180800020032802100d00200320032903183703082003200437030020012003410210b081808000210420004200370300200020043703080c010b10f981808000210420004201370300200020043703080b200341206a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200210918180800002400240024020032802200d0020032903282104200341206a2001200241046a10918180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200241086a10918180800002400240024020032802200d0020032903282104200341206a20022001109e8180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd00102017f027e23808080800041306b2203248080808000200341206a2001200241106a10918180800002400240024020032802200d0020032903282104200341206a200120021094818080002003290328210520032802200d01200341206a2001200241146a10918180800020032802200d002003200329032837031820032005370310200320043703082001200341086a410310b081808000210520004200370300200020053703080c020b10f98180800021050b20004201370300200020053703080b200341306a2480808080000bd20202017f067e23808080800041c0006b2203248080808000200341306a2001200241206a10918180800002400240024020032802300d0020032903382104200341306a2001200241246a10918180800020032802300d0020032903382105200341306a200241106a2001109e8180800020032802300d0020032903382106200341306a200241186a2001109e8180800020032802300d0020032903382107200341306a200120021094818080002003290338210820032802300d01200341306a2001200241306a1094818080002003290338210902402003280230450d00200921080c020b20032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410610b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341c0006a2480808080000bbd0302017f087e23808080800041d0006b2203248080808000200341c0006a2001200241386a10918180800002400240024020032802400d0020032903482104200341c0006a20012002413c6a10918180800020032802400d0020032903482105200341c0006a200241206a2001109e8180800020032802400d0020032903482106200341c0006a200241286a2001109e8180800020032802400d0020032903482107200341c0006a200120021094818080002003290348210820032802400d01200341c0006a2001200241106a1094818080002003290348210902402003280240450d00200921080c020b200341c0006a2001200241306a10a4808080002003290348210a02402003280240450d00200a21080c020b200341c0006a2001200241c0006a10a4808080002003290348210b02402003280240450d00200b21080c020b2003200b3703382003200a37033020032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410810b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341d0006a2480808080000b2a00024020022802000d0020004200370300200042023703080f0b2000200241086a2001109e818080000b4001017f23808080800041106b2202248080808000200220003703082001200241086a200110a88180800010ce818080002100200241106a24808080800020000b15002000280200417f6aad4220864283808080107c0b4502017f017e23808080800041106b220224808080800020022000200110c780808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1d00024020012802000d0020012903080f0b200141046a10cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c680808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6902027f017e23808080800041106b2202248080808000200141046a21030240024020012802000d00200220002003109181808000024020022802000d00200229030821040c020b10f9818080001a000b200310cd8080800021040b200241106a24808080800020040b4502017f017e23808080800041106b220224808080800020022000200110d380808000024020022802004101470d00000b20022903082103200241106a24808080800020030bd00302017f097e23808080800041e0006b2203248080808000200341d0006a200120021094818080000240024020032802500d0020032903582104200341d0006a2001200241c8006a10a48080800020032802500d0020032903582105200341d0006a2001200241106a10948180800020032802500d0020032903582106200341d0006a2001200241d0006a10918180800020032802500d0020032903582107200341d0006a2001200241d8006a10938180800020032802500d0020032903582108200341d0006a2001200241206a10948180800020032802500d0020032903582109200341d0006a2001200241c0006a10a48080800020032802500d002003290358210a2002350254210b200341d0006a200241386a2001109e8180800020032802500d002003290358210c200341d0006a200241306a2001109e8180800020032802500d00200320032903583703482003200c3703402003200b4220864204843703382003200a370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200141dc80c08000410a2003410a10ae81808000210420004200370300200020043703080c010b200042013703000b200341e0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110c280808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110b781808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110ca80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1700024020012802000d0042020f0b200110cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c980808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c580808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c880808000024020022802004101470d00000b20022903082103200241106a24808080800020030bf20202017f067e23808080800041d0006b2203248080808000200341c0006a2001200241266a1093818080000240024020032802400d0020032903482104200341c0006a2001200241256a10938180800020032802400d0020032903482105200341c0006a200241086a2001109e8180800020032802400d0020032903482106200341c0006a20022001109e8180800020032802400d0020032903482107200341c0006a2001200241246a10938180800020032802400d0020032903482108200341c0006a200241106a200110a18180800020032802400d0020032903482109200341c0006a2001200241206a10918180800020032802400d0020032003290348370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200320022903183703382001419482c0800041082003410810ae81808000210420004200370300200020043703080c010b200042013703000b200341d0006a2480808080000b6802017f017e23808080800041106b22022480808080000240024020012802000d0020022000200141086a10d381808000024020022802000d00200229030821030c020b10f9818080001a000b200141046a10cd8080800021030b200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110cb80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6502017f017e23808080800041106b22022480808080000240024020012d00264102460d0020022000200110db80808000024020022802000d00200229030821030c020b10f9818080001a000b200110cd8080800021030b200241106a24808080800020030b2501017e20002903002202422088a72200410520004105491b4105200242ff01834204511b0b9e0502027f0b7e23808080800041f0006b22032480808080004100210402400340200441d000460d01200320046a4202370300200441086a21040c000b0b024002400240024002400240024002400240024002402002290300220542ff018342cc00520d002001200541dc80c08000410a2003410a10af818080001a200341d0006a2001200310928180800020032802500d01200341e8006a290300210520032903602106200341d0006a2001200341086a10a68080800020032802500d0220032903582107200341d0006a2001200341106a10928180800020032802500d032003290318220842ff01834204520d04410120032d0020220441004741017420044101461b22044102460d05200341e8006a29030021092003290360210a200341d0006a2001200341286a10928180800020032802500d06200341e8006a290300210b2003290360210c200341d0006a2001200341306a10a68080800020032802500d072003290358210d200341386a200410df8080800022024105460d08200341d0006a200341c0006a2001109c8180800020032802500d092003290358210e200341d0006a200341c8006a2001109c81808000024020032802500d002003290358210f2000200c3703202000200a37031020002006370300200020043a00582000200236025420002008422088a7360250200020073703482000200d3703402000200e3703382000200f3703302000200b37032820002009370318200020053703080c0b0b200041053602540c0a0b200041053602540c090b200041053602540c080b200041053602540c070b200041053602540c060b200041053602540c050b200041053602540c040b200041053602540c030b200041053602540c020b200041053602540c010b200041053602540b200341f0006a2480808080000b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e2808080003602082001200141086a10d7808080002100200141206a24808080800020000be90101027f23808080800041306b2201248080808000200120003703082001412f6a10bd81808000410c210202402001412f6a41d083c0800010be808080000d00200141086a10b2818080002001412f6a10bd818080002001412f6a41d083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ef2eed90b3703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020b200141306a24808080800020020b3d02017f017e23808080800041206b2200248080808000200042003703082000411f6a200041086a10dd808080002101200041206a24808080800020010b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e5808080003602082001200141086a10d7808080002100200141206a24808080800020000bdd0101027f23808080800041306b220124808080800020012000370308200141106a108c818080000240024020012802100d002001412f6a10bd818080002001412f6a41e083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ed4b8bacdbed7013703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020c010b200128021421020b200141306a24808080800020020b3e02017f017e23808080800041106b2200248080808000200010e78080800036020c20002000410c6a10d7808080002101200041106a24808080800020010bad0203017f017e017f23808080800041306b22002480808080002000412f6a10bd81808000200041106a2000412f6a41e083c0800010bd808080000240024020002802104101470d00200020002903182201370308200041086a10b2818080002000412f6a10bd818080002000412f6a41d083c08000200041086a10c0808080002000412f6a10bd818080002000412f6a2000412f6a41e083c0800010ac80808000420210cb818080001a2000412f6a10bd818080002000412f6a418087014180d21f10c181808000200020013703202000428ef2b5958ab5023703182000428ee6aeb9ea043703102000412f6a2000412f6a200041106a10d480808000200041206a2000412f6a10a88180800010c2818080001a410021020c010b411521020b200041306a24808080800020020b4102017f017e23808080800041206b2200248080808000200041086a10e9808080002000411f6a200041086a10dd808080002101200041206a24808080800020010b3e01017f23808080800041106b22012480808080002001410f6a10bd8180800020002001410f6a41d083c0800010bd80808000200141106a2480808080000b5c01027f23808080800041106b2201248080808000410121020240024002402000a741ff01710e020102000b000b410021020b2001200210eb8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bdc0101017f23808080800041206b2201248080808000200120003a0007200141086a108c818080000240024020012802080d002001411f6a10bd818080002001411f6a41f083c08000200141076a10bf808080002001411f6a10bd818080002001411f6a418087014180d21f10c181808000200120012d00073a001e2001428ed2aadceeac033703102001428ee6aeb9ea043703082001411f6a2001411f6a200141086a10d4808080002001411e6a2001411f6a10a68180800010c2818080001a410021000c010b200128020c21000b200141206a24808080800020000b4102017f017e23808080800041106b2200248080808000200010ed808080003a000e2000410e6a2000410f6a10a6818080002101200041106a24808080800020010b4401027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000200141fd01710b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010ef808080003602082001200141086a10d7808080002100200141206a24808080800020000bcd0101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd81808000411621022001411f6a41f083c0800010bc8080800041fd0171450d01200120003703102001428ed4a9f3cdadeb013703082001428ee6aeb9ea043703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a2001411f6a10bd818080002001411f6a200010a880808000410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f1808080003602082001200141086a10d7808080002100200141206a24808080800020000be60101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418084c0800010b5808080002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418087014180f6de0010a980808000200120003703102001428ed8ea1b3703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f3808080003602082001200141086a10d7808080002100200141206a24808080800020000bc20101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001411f6a200110ac80808000420110cb818080001a200120003703102001428ed4b0faaebd033703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6b01017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f5808080003a0008200141086a2001411f6a10a6818080002100200141206a24808080800020000b5101027f23808080800041206b22012480808080002001411f6a10bd8180800020014106360208200120003703102001411f6a200141086a10ab808080002102200141206a248080808000200241fd01710b7a01017f23808080800041206b2202248080808000200220013703000240200042ff01834204520d00200241086a2002411f6a2002109b8180800020022802084101460d0020022000422088a7200229031010f7808080003602082002200241086a10d7808080002100200241206a24808080800020000f0b000b990801087f2380808080004180036b2202248080808000200220013703000240108d8180800022030d00200241ff026a10bd81808000200241013602302002200036023420024190026a200241ff026a200241306a10af80808000024020022d00b60222034102460d002002280290022104200241086a41047220024190026a41047241221093828080001a200220033a002e20022004360208200220022d00b7023a002f200241086a10b2818080002002108e8180800022030d014108210320022d002e0d0141002103200241286a2204200229032010c88180800010ff818080002105024002400340024020052003470d00200220013703180240200228022841016a2203450d00200220033602282002200241ff026a10c5818080002201370340200241c8006a21062004200229032010c88180800010ff818080002107200241e9026a220841036a2109410021030340024020072003470d0020022001370320200241ff026a10bd8180800020024190026a41086a2203200241306a41086a22042903003703002002200229033037039002200241ff026a20024190026a200241086a10b380808000200241ff026a10bd81808000200320042903003703002002200229033037039002200241ff026a20024190026a418087014180f6de0010a980808000200220022802283602b401200220003602b0012002428ed4b9b3cebe03370398022002428ed4b1d4f9a60337039002200241ff026a200241ff026a20024190026a10d480808000200241ff026a200241b0016a10d98080800010c2818080001a410021030c080b4105210502402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e08080800020022802e40222054105460d06200241b0016a20024190026a41d4001093828080001a200220092800003600ab01200220082800003602a8010b200241d0006a200241b0016a41d4001093828080001a200220022800ab0136004b200220022802a801360248024020054105460d0020024190026a200241d0006a41d4001093828080001a2009200228004b36000020082002280248360000200241003a00e802200220053602e402200220062002290340200620024190026a10d28080800010c9818080002201370340200341016a21030c010b0b419884c08000108782808000000b418884c08000108c82808000000b02402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e080808000200341016a210320022802e402417d6a0e03020103010b0b41a884c08000108782808000000b410621030c020b000b410421030b20024180036a24808080800020030be70101017f23808080800041c0006b2204248080808000200420013703182004200037031020042002370320200441286a2004413f6a200441106a10b181808000024020042802284101460d0020042903302101200441286a2004413f6a200441186a10b18180800020042802284101460d0020042903302100200441286a2004413f6a200441206a109b8180800020042802284101460d00200342ff018342cb00520d00200441086a200120002004290330200310f980808000200420042903083702282004413f6a200441286a10d1808080002103200441c0006a24808080800020030f0b000bf01104077f027e037f017e23808080800041e0026b220524808080800020052002370320200520013703182005200337032820052004370330410121060240108d8180800022070d00200541186a10b2818080000240200541186a200541206a10b481808000450d00410f21070c010b0240200541386a2208200529033010c88180800010ff81808000450d0002402008200529033010c88180800010ff8180800041e4004d0d00411321070c020b200541286a108e8180800022070d01410021072008200529033010c88180800010ff81808000210920054188026a210a200541106a210b4200210c4200210d0340024002400240024020092007470d00200541df026a10bd818080002005200541df026a41b884c0800010ad808080004100210a02402005280204410020052802004101711b41016a220e450d002005200e36023c2005200541df026a10aa8180800037034020054188016a21062008200529033010c88180800010ff81808000210f02400340200f200a200f200a4b1b211003400240200a2010470d0041002107200541f3006a41003600002005410036027020052005290330370368200520033703602005200529032037035820052005290318370350200541df026a10bd81808000200541013602b8012005200e3602bc01200541df026a200541b8016a200541d0006a10b380808000200541df026a10bd81808000200541e0016a41086a2206200541b8016a41086a290300370300200520052903b8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541023602c8012005200e3602cc01200541df026a200541c8016a41d884c0800010b780808000200541df026a10bd818080002006200541c8016a41086a290300370300200520052903c8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541df026a41b884c080002005413c6a10b180808000200541df026a10bd81808000200541df026a41b884c08000418087014180f6de0010a9808080002005200d3703f8012005200c3703f0012005200528023c3602e801200520052903183703e0012005428ed2eadca9bda3013703c8022005428ef8f49b8ad7023703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10ce8080800010c2818080001a2008200529033010c88180800010ff81808000210620054188026a21090340024020062007470d00200528023c2107410021060c0d0b02402008200529033010c88180800010ff8180800020074d0d00200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b4024105460d0820052903a002210220052903a80221012005290390022104200529039802210320052903e001210d20052903e801210c2005290380022111200520092903003703f801200520113703f0012005200c3703e8012005200d3703e0012005200528023c3602980220052003370388022005200437038002200520013703a00220052002370390022005200736029c022005428ed2a9133703c8022005428ef2b3d5ecb7d6013703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10d68080800010c2818080001a200741016a21070c010b0b41e084c08000108782808000000b2008200529033010c88180800010ff81808000200a4d0d02200520082005290330200a10fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105460d05200a41016a210b200520052903980237034841002107024003400240200a2007470d00200542003703c802200542003703c002410021072008200529033010c88180800010ff81808000210a024003400240200a2007470d002005200541df026a200541c8006a10d1818080003703e001200541e0016a200541186a200541c0006a200541c0026a10d281808000200b210a0c070b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703d801200541e0016a2008200541d8016a10e08080800020052802b40222094105460d0a200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801024002402006200541c8006a10b481808000450d0020052903c80222022005290358220185427f852002200220017c20052903c002220120052903507c2204200154ad7c220185834200530d01200520043703c002200520013703c8020b200741016a21070c010b0b419085c08000108c82808000000b418085c08000108782808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b40222094105460d07200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801200741016a21072006200541c8006a10b481808000450d000b200b210a0c010b0b0b41a085c08000108782808000000b41f084c08000108782808000000b41c884c08000108c82808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105470d020b000b41b085c08000108782808000000b4101210620052903e00122045020052903e80122024200532002501b0d01200529038002221150200a29030022014200532001501b0d01024020052903a80220052903a002560d00411221070c030b200541086a200420022011200110948280800002402005290308200b290300844200510d00411121070c030b0240200d200285427f85200d200d20027c200c20047c2202200c54ad7c220185834200530d00200741016a21072002210c2001210d0c010b0b41c085c08000108c82808000000b410721070b2000200736020420002006360200200541e0026a2480808080000bfd0101017f23808080800041d0006b22052480808080002005200337031020052002370308200520043703180240200042ff01834204520d00200142ff01834204520d00200541206a200541cf006a200541086a10928180800020052802204101460d00200541386a290300210320052903302102200541206a200541cf006a200541106a10a68080800020052802204101460d0020052903282104200541206a200541cf006a200541186a10c18080800020052802204101460d0020052000422088a72001422088a7200220032004200529032810fb808080003602202005200541206a10d7808080002100200541d0006a24808080800020000f0b000bef0801047f23808080800041d0026b2206248080808000200620053703200240108d8180800022070d00200641cf026a10bd818080002006410136025020062000360254200641d0016a200641cf026a200641d0006a10af808080000240024020062d00f60122074102460d0020062802d0012108200641286a410472200641d0016a41047241221093828080001a20062008360228200620062d00f7013a004f200620073a004e02402007410171450d00410821070c030b4101210720062d004c0d0220062d004d0d02200641c8006a2208200629034010c88180800010ff8180800020014b0d010b410421070c010b024002402008200629034010c88180800010ff8180800020014d0d00200620082006290340200110fe8180800010c7818080003703b002200641d0016a2008200641b0026a10e08080800020062802a40222074105470d01000b41d085c08000108782808000000b200641e0006a200641d0016a41d4001093828080001a200620073602b401200620062903a8023703b8012006410036021c200641086a2002200320062903800120064188016a2903002006411c6a1091828080000240200628021c450d00410721070c010b02402006290308200629036085200641106a290300200629036885844200510d00411121070c010b2006200641cf026a20002001200641e0006a2002200320041090818080003703c801200641cf026a10bd81808000200641cf026a200641386a200641c8016a200641206a10b981808000200641cf026a10bd81808000200641023602b002200620003602b402200641d0016a200641cf026a200641b0026a10ae808080004109210720062903d801420020062802d0011b2004520d0002402004427f520d00410e21070c010b2006200442017c3703c002200641cf026a10bd81808000200641d0016a41086a2207200641b0026a41086a2209290300370300200620062903b0023703d001200641cf026a200641d0016a200641c0026a10b780808000200641cf026a10bd8180800020072009290300370300200620062903b0023703d001200641cf026a200641d0016a418087014180f6de0010a9808080002006200337037820062002370370200641013a00b801200641d0016a200641e0006a41e0001093828080001a200620082006290340200110fe818080002008200641d0016a10d28080800010c681808000370340200641cf026a10bd818080002007200641d0006a41086a2208290300370300200620062903503703d001200641cf026a200641d0016a200641286a10b380808000200641cf026a10bd8180800020072008290300370300200620062903503703d001200641cf026a200641d0016a418087014180f6de0010a980808000200620033703e801200620023703e001200620013602d401200620003602d0012006428ef2aef9a9c7033703b8022006428ef0b79ddd053703b002200641cf026a200641cf026a200641b0026a10d480808000200641cf026a200641d0016a10d08080800010c2818080001a410021070b200641d0026a24808080800020070b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710fd8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbb0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a10b281808000024020012d002c450d00410121020c020b200141013a002c200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428eeeaad6b9b6ca013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710ff8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbe0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a41086a10b281808000024020012d002d450d00410121020c020b200141013a002d200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428ed4e8d9b9f6ae013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b4b01017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a71081818080002001200110cf808080002100200141106a24808080800020000bd20a04047f017e047f057e23808080800041b0026b22022480808080000240024002400240108d8180800022030d00200241af026a10bd818080002002410136023020022001360234200241b0016a200241af026a200241306a10af8080800020022d00d60122034102460d0120022802b0012104200241086a410472200241b0016a41047241221093828080001a20022004360208200220022d00d7013a002f200220033a002e02402003410171450d00410821030c030b200241086a10b2818080000240200241086a200241106a10b481808000450d00410f21030c030b4105210320022d002c4101470d0220022d002d4101470d0241002104200241286a2203200229032010c88180800010ff818080002105024002400340024020052004470d002002200241af026a10aa818080003703402002200241af026a10c5818080002206370348200241d0006a210720024180016a210820024188016a2109410021042003200229032010c88180800010ff818080002105200241e8006a210a4200210b4200210c02400340024020052004470d0020022006370320200241af026a10bd81808000200241b0016a41086a2203200241306a41086a2204290300370300200220022903303703b001200241af026a200241b0016a200241086a10b380808000200241af026a10bd8180800020032004290300370300200220022903303703b001200241af026a200241b0016a418087014180f6de0010a9808080002007200229034810c88180800010ff8180800021032002200c3703b8012002200b3703b001200220033602c401200220013602c0012002428ee2e6d9bb053703582002428ef2b3d5ecb7d601370350200241af026a200241af026a200241d0006a10d480808000200241af026a200241b0016a10da8080800010c2818080001a20002002290348370308200041003602000c0a0b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c78180800037039802200241b0016a200320024198026a10e0808080002002280284024105460d05200241d0006a200241b0016a41d4001093828080001a200241033602a40120022002290388023703a8012002200241af026a200910d1818080003703b001200241b0016a200241c0006a2008200241d0006a10d2818080000240200c2002290358220685427f85200c200c20067c200b2002290350220d7c220e200b54ad7c220f85834200530d00200220022903603703e0012002200d3703b001200220013602d00120022002290388013703c80120022002290380013703c001200220063703b8012002200a2903003703e801200220043602d4012002428ed2aeb30d3703a0022002428ef2b3d5ecb7d60137039802200241af026a200241af026a20024198026a10d480808000200241af026a200241b0016a10d88080800010c2818080001a200241b0016a200241d0006a41e0001093828080001a2002200720022903482007200241b0016a10d28080800010c9818080002206370348200441016a2104200e210b200f210c0c010b0b41f085c08000108c828080000c040b41e085c08000108782808000000b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c781808000370350200241b0016a2003200241d0006a10e08080800020022802840222074105460d02024020074103460d00200441016a210420022d0088024101710d010b0b410d410620074103471b21030c040b418086c08000108782808000000b000b20004101360200200020033602040c020b410421030b20004101360200200020033602040b200241b0026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710838180800036020c20012001410c6a10d7808080002100200141106a24808080800020000b8b0d04087f017e017f027e23808080800041c0026b2201248080808000200141bf026a10bd818080002001410136023020012000360234200141d0016a200141bf026a200141306a10af808080000240024020012d00f60122024102460d0020012802d0012103200141086a410472200141d0016a41047241221093828080001a20012003360208200120012d00f7013a002f200120023a002e4108210320024101710d01200141086a10b28180800041002102200141286a2203200129032010c88180800010ff818080002104024002400340024020042002470d002001200141bf026a10aa8180800037034020014198016a2104410021052003200129032010c88180800010ff8180800021060240034020062005200620054b1b2107034020052108024020082007470d00200141013a002e2001200141bf026a10c58180800022093703c801200141d0016a2104410021022003200129032010c88180800010ff81808000210a03400240200a2002470d0020012009370320200141bf026a10bd81808000200141d0016a41086a200141306a41086a290300370300200120012903303703d001200141bf026a200141d0016a200141086a10b380808000200120003602602001428ee2aaf4ecc4023703d8012001428ef8f49b8ad7023703d001200141bf026a200141bf026a200141d0016a10d480808000200141e0006a200141bf026a10a78180800010c2818080001a410021030c0b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d08200141e0006a200141d0016a41d4001093828080001a20012903a8022109200120003602502001428ee2aaf4ecc4023703d8012001428ef2b3d5ecb7d6013703d00120012002360254200141bf026a200141bf026a200141d0016a10d480808000200141bf026a200141d0006a10d98080800010c2818080001a200141d0016a200141e0006a41d4001093828080001a200120093703a802200141043602a4022001200420012903c8012004200141d0016a10d28080800010c98180800022093703c801200241016a21020c010b0b419086c08000108782808000000b2003200129032010c88180800010ff8180800020084d0d02200120032001290320200810fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d05200841016a21052001200129038802370348410021020340024020082002470d002001420037035820014200370350410021022003200129032010c88180800010ff8180800021080340024020082002470d002001290350420052200129035822094200552009501b450d052001200141bf026a200141c8006a10d1818080003703d001200141d0016a200141c0006a200141086a200141d0006a10d2818080000c050b024002402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c7818080003703c801200141d0016a2003200141c8016a10e08080800020012802a402220a4105470d010c0a0b41b086c08000108782808000000b200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b80102402004200141c8006a10b481808000450d000240200129035822092001290368220b85427f8520092009200b7c2001290350220b20012903607c220c200b54ad7c220b85834200530d002001200c3703502001200b3703580c010b41c086c08000108c82808000000b200241016a21020c000b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370350200141d0016a2003200141d0006a10e08080800020012802a402220a4105460d07200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b801200241016a21022004200141c8006a10b481808000450d010c020b0b0b0b41d086c08000108782808000000b41a086c08000108782808000000b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e080808000200241016a210220012802a402417d6a0e03030102010b0b41e086c08000108782808000000b000b410621030c010b410421030b200141c0026a24808080800020030b4e01017f23808080800041306b22012480808080000240200042ff01834204510d00000b20012000422088a71085818080002001412f6a200110de808080002100200141306a24808080800020000b7a01017f23808080800041c0006b22022480808080002002413f6a10bd81808000200241013602282002200136022c20022002413f6a200241286a10af808080000240024020022d00264102470d00200041023a0026200041043602000c010b2000200241281093828080001a0b200241c0006a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710878180800036020c20012001410c6a10d7808080002100200141106a24808080800020000bd70201027f23808080800041306b22012480808080002001412f6a10bd8180800020014101360200200120003602044104210202402001412f6a200110b080808000450d002001412f6a10be8180800021022001412f6a10bd81808000200141106a41086a200141086a290300370300200120012903003703102001412f6a200141106a2002200210a9808080002001412f6a10bd8180800020014102360210200120003602142001412f6a200141106a2002200210a9808080002001412f6a10bd818080002001412f6a41b884c080002002200210a9808080002001412f6a10bd818080002001412f6a2002200210c18180800020012002360228200120003602242001428ee2f91c3703182001428ef8f49b8ad7023703102001412f6a2001412f6a200141106a10d4808080002001412f6a200141246a10d98080800010c2818080001a410021020b200141306a24808080800020020bcb0101017f23808080800041c0006b220424808080800020042003370308200420023703000240200042ff01834204520d00200142ff01834204520d00200441106a2004413f6a200410928180800020042802104101460d00200441286a290300210320042903202102200441106a2004413f6a200441086a10a68080800020042802104101460d00200441106a2000422088a72001422088a72002200320042903181089818080002004413f6a200441106a10dc808080002100200441c0006a24808080800020000f0b000b970301037f2380808080004180026b2206248080808000200641ff016a10bd81808000200641013602302006200136023420064190016a200641ff016a200641306a10af808080000240024020062d00b60122074102460d002006280290012108200641086a41047220064190016a41047241221093828080001a200620073a002e20062008360208200620062d00b7013a002f0240200641286a2207200629032010c88180800010ff8180800020024d0d00024002402007200629032010c88180800010ff8180800020024d0d00200620072006290320200210fe8180800010c78180800037033020064190016a2007200641306a10e08080800020062802e40122074105470d01000b41f086c08000108782808000000b200641306a20064190016a41d4001093828080001a2006200736028401200620062903e80137038801200641ff016a20012002200641306a200320042005109081808000210420004100360200200020043703080c020b20004281808080c0003703000c010b20004281808080c0003703000b20064180026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a7108b818080003703002001410f6a200110bb808080002100200141106a24808080800020000b6502017f017e23808080800041306b22012480808080002001412f6a10bd81808000200141023602082001200036020c200141186a2001412f6a200141086a10ae808080002001280218210020012903202102200141306a2480808080002002420020001b0b860102027f017e23808080800041206b22012480808080002001411f6a10bd81808000200141086a2001411f6a41d083c0800010bd80808000410121020240024020012802084101470d00200120012903102203370300200110b28180800020002003370308410021020c010b2000410a3602040b20002002360200200141206a2480808080000b4901027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000410b4100200141fd01711b0b7f01027f23808080800041206b22012480808080002001411f6a10bd818080004100210202402001411f6a41d083c0800010be80808000450d002001411f6a10bd818080002001410636020820012000290300370310410041102001411f6a200141086a10ab8080800041fd01711b21020b200141206a24808080800020020b4d02017f017e23808080800041106b2202248080808000200010bd8180800020022001290300200010cc808080003703002002410f6a200210b8818080002103200241106a24808080800020030b8b0f04017f017e087f017e23808080800041e0006b22072480808080002007200010cf818080002208370300200741086a21092007200920082009200810d08180800010ff8180800010fe81808000418184c08000410410ac81808000220837030020074180043b01382007200920082009200810d08180800010ff8180800010fe81808000200741386a410210ac818080003703002007200741df006a10bc81808000370330200741386a41186a220a4200370300200741386a41106a220b4200370300200741386a41086a220c420037030020074200370338200741306a41086a220d200741306a10d4818080004204200741386a412010ad81808000200741106a41186a220e200a290300370300200741106a41106a220f200b290300370300200741106a41086a2210200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac818080003703002007200010aa8180800037033020072000200741306a108f81808000370308200a4200370300200b4200370300200c420037030020074200370338200741086a41086a200741086a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341306a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341386a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800022083703002007200141187420014180fe03714108747220014108764180fe0371200141187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac8180800022083703002007200241187420024180fe03714108747220024108764180fe0371200241187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac81808000221137030020072003290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703402007200341086a290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703382007200920112009201110d08180800010ff8180800010fe81808000200741386a411010ac8180800022083703002007200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703402007200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe038320054238888484843703382007200920082009200810d08180800010ff8180800010fe81808000200741386a411010ac81808000220537030020072003290340220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac81808000220537030020072003290348220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac8180800022043703002007200642388620064280fe0383422886842006428080fc0783421886200642808080f80f834208868484200642088842808080f80f832006421888428080fc07838420064228884280fe03832006423888848484370338200920042009200410d08180800010ff8180800010fe81808000200741386a410810ac818080002104200741e0006a24808080800020040b190020004200370300200020023502004220864204843703080b7c01027e024002400240024020022903002203a741ff0171220241c500460d002002410b470d02200041106a20031080828080000c010b2001200310e58180800021042001200310e481808000210320002004370318200020033703100b420021030c010b200010f981808000370308420121030b200020033703000b130020004200370300200020023100003703080b4602017f017e23808080800041106b2203248080808000200320012002109581808000200329030821042000200329030037030020002004370308200341106a2480808080000b6d02017f027e23808080800041106b2203248080808000200320022903002204200241086a29030022051082828080000240024020032802000d00200329030821040c010b20012005200410e38180800021040b2000420037030020002004370308200341106a2480808080000b4b00200041003602102000200436020c2000200336020820002002360204200020013602002000200220016b410376220236021820002002200420036b410376220420022004491b3602140b3901017f23808080800041106b22032480808080002003200229020037020820002001200341086a109881808000200341106a2480808080000b6a02027f017e23808080800041106b22032480808080002003200228020022042002280204220210fa818080000240024020032802000d00200329030821050c010b20012004200210d78180800021050b2000420037030020002005370308200341106a2480808080000b5202017f017e23808080800041106b2203248080808000200320022903083703082003200229030037030020012003410210da8180800021042000420037030020002004370308200341106a2480808080000b0e00200020012001109b818080000b7d02017f027e23808080800041106b2203248080808000024002402002290300220442ff018342c800520d0020032004370308420121050240200341106a200410f58180800010ff818080004120470d0020002003290308370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b2e01027e4201210302402001290300220442ff018342cd00520d0020002004370308420021030b200020033703000b0e002000200220011099818080000b130020004200370300200020012903003703080b5102017f017e23808080800041106b220324808080800020032001200210978180800042012104024020032802000d0020002003290308370308420021040b20002004370300200341106a2480808080000b130020004200370300200020012903003703080b130020004200370300200020012903003703080b1200200141bb87c08000410f108b828080000b0300000b02000b4502017f017e23808080800041106b2202248080808000200220002001109481808000024020022802004101470d00000b20022903082103200241106a24808080800020030b070020003100000b0d0020003502004220864204840b070020002903000b070020002903000b0a00200010df818080000b6001017f23808080800041106b22042480808080000240200020012903002002290300200310f28180800042ff01834202510d00419087c08000412b2004410f6a418087c0800041b088c08000108682808000000b200441106a2480808080000b12002000200120022003200410d5818080000b12002000200120022003200410d6818080000b12002000200120022003200410d8818080000b140020002001200220032004200510d9818080000b0e0020002001200210da818080000b2e01027e4201210302402002290300220442ff018342cd00520d0020002004370308420021030b200020033703000b1300200041086a200029030010f8818080001a0b5902017f017e23808080800041206b22032480808080002003200236020c20032001360208200341106a2000200341086a109781808000024020032802104101470d00000b20032903182104200341206a24808080800020040b11002000200110b58180800041ff0171450b2601017e417f200041086a2000290300200129030010db81808000220242005220024200531b0b2e01027e4201210302402002290300220442ff018342c800520d0020002004370308420021030b200020033703000b130020004200370300200020022903003703080b0f002000200129030010f6818080000b1a00200020012903002002290300200329030010f7818080001a0b1000200010dd8180800010ff818080000b1000200010e08180800010ff818080000b0a00200010de818080000b02000b6d01037f23808080800041106b22012480808080002001410f6a10ba818080002102024002402001410f6a10bb8180800022032002490d00200320026b41016a22020d0141a889c08000108c82808000000b41a889c08000108d82808000000b200141106a24808080800020020b140020002001200210ec8180800010fd818080000b0e0020002001200210ed818080000b1b002000200110fe81808000200210fe8180800010f1818080001a0b0e0020002001200210dc818080000b0c002000200110e1818080000b0c002000200110e2818080000b0a00200010e6818080000b1000200020012002200310e7818080000b0e0020002001200210e8818080000b0c002000200110e9818080000b0e0020002001200210ea818080000b1000200020012002200310eb818080000b0e0020002001200210ee818080000b0c002000200110ef818080000b12002000200120022003200410f0818080000b0c002000200110f3818080000b0a00200010f4818080000b0c002000200110f5818080000b070020012903000bdf0102027f027e23808080800041c0006b22042480808080002004200041086a220541b889c08000410810b381808000370308200129030021062002290300210720042005200310a5818080003703202004200737031820042006370310410021010340024020014118470d00410021010240034020014118460d01200441286a20016a200441106a20016a290300370300200141086a21010c000b0b20052000200441086a2005200441286a410310da8180800010ab81808000200441c0006a2480808080000f0b200441286a20016a4202370300200141086a21010c000b0b130020004200370300200020022903003703080b070020002903000b1e00200120022003ad4220864204842004ad4220864204841080808080000b1f00200120022003ad4220864204842004ad4220864204841081808080001a0b1a002001ad4220864204842002ad4220864204841082808080000b2e00024020022004460d00000b2001ad4220864204842003ad4220864204842002ad4220864204841083808080000b3000024020032005460d00000b20012002ad4220864204842004ad4220864204842003ad4220864204841084808080000b1a002001ad4220864204842002ad4220864204841085808080000b0c00200120021086808080000b0c00200120021087808080000b08001088808080000b08001089808080000b0800108a808080000b0800108b808080000b0a002001108c808080000b0a002001108d808080000b0c0020012002108e808080000b0a002001108f808080000b0a0020011090808080000b08001091808080000b0e002001200220031092808080000b0c00200120021093808080000b0a0020011094808080000b0c00200120021095808080000b0e002001200220031096808080000b0c00200120021097808080000b0c00200120021098808080000b0c00200120021099808080000b0a002001109a808080000b10002001200220032004109b808080000b0c0020012002109c808080000b0e00200120022003109d808080000b0a002001109e808080000b0800109f808080000b0a00200110a0808080000b0a00200110a1808080000b0e0020012002200310a2808080000b0a00200110a3808080000b0900428390808080010bb50102017f017e23808080800041106b220324808080800002400240200241094b0d00420021040340024020020d002000410036020020002004420886420e843703080c030b200341086a20012d000010fb81808000024020032d00084103460d0020002003290308370204200041013602000c030b200141016a21012002417f6a2102200442068620033100098421040c000b0b20002002360208200041003a0004200041013602000b200341106a2480808080000b820101017f410121020240200141ff017141df00460d000240200141506a41ff0171410a490d000240200141bf7f6a41ff0171411a490d0002402001419f7f6a41ff0171411a490d00200020013a0001200041013a00000f0b200141456a21020c020b2001414b6a21020c010b200141526a21020b200041033a0000200020023a00010b070020004208880b070020004201510b0b002000ad4220864204840b08002000422088a70b160020002001423f87370308200020014208873703000b3201017e420121020240200142ffffffffffffffff00560d0020002001420886420684370308420021020b200020023703000b5001017e42012103024020014280808080808080c0007c42ffffffffffffffff00560d0020012001852001423f87200285844200520d0020002001420886420b84370308420021030b200020033703000ba00601067f0240200028020022032000280208220472450d0002402004410171450d00200120026a210502400240200028020c22060d0041002107200121080c010b41002107200121080340200822042005460d020240024020042c00002208417f4c0d00200441016a21080c010b0240200841604f0d00200441026a21080c010b0240200841704f0d00200441036a21080c010b200441046a21080b200820046b20076a21072006417f6a22060d000b0b20082005460d00024020082c00002204417f4a0d0020044160491a0b024002402007450d00024020072002490d0020072002460d01410021040c020b200120076a2c000041404e0d00410021040c010b200121040b2007200220041b21022004200120041b21010b024020030d00200028021c20012002200028022028020c118080808000000f0b200028020421030240024020024110490d0020012002108a8280800021040c010b024020020d00410021040c010b2002410371210602400240200241044f0d0041002104410021070c010b2002410c712105410021044100210703402004200120076a22082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a21042005200741046a2207470d000b0b2006450d00200120076a21080340200420082c000041bf7f4a6a2104200841016a21082006417f6a22060d000b0b02400240200320044d0d00200320046b2106024002400240410020002d0018220420044103461b22040e03020001020b20062104410021060c010b20064101762104200641016a41017621060b200441016a21042000280210210720002802202108200028021c210003402004417f6a2204450d0220002007200828021011818080800000450d000b41010f0b200028021c20012002200028022028020c118080808000000f0b0240200020012002200828020c11808080800000450d0041010f0b410021040340024020062004470d0020062006490f0b200441016a210420002007200828021011818080800000450d000b2004417f6a2006490f0b200028021c20012002200028022028020c118080808000000b4d01017f23808080800041206b22032480808080002003410036021020034101360204200342043702082003200136021c200320003602182003200341186a36020020032002108582808000000b3601017f23808080800041106b2202248080808000200241013b010c2002200136020820022000360204200241046a10a381808000000b8f0101017f23808080800041c0006b22052480808080002005200136020c2005200036020820052003360214200520023602102005410236021c200541c08ac08000360218200542023702242005418280808000ad422086200541106aad843703382005418380808000ad422086200541086aad843703302005200541306a360220200541186a2004108582808000000b130041908ac08000412b2000108482808000000b14002001200028020020002802041083828080000b180020002802002001200028020428020c118180808000000be90601087f024002402001200041036a417c71220220006b2203490d00200120036b22044104490d002004410371210541002106410021010240200220004622070d004100210102400240200020026b2208417c4d0d00410021090c010b4100210903402001200020096a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2101200941046a22090d000b0b20070d00200020096a21020340200120022c000041bf7f4a6a2101200241016a2102200841016a22080d000b0b200020036a210002402005450d0020002004417c716a22022c000041bf7f4a210620054101460d00200620022c000141bf7f4a6a210620054102460d00200620022c000241bf7f4a6a21060b20044102762108200620016a21030340200021042008450d02200841c001200841c001491b220641037121072006410274210541002102024020084104490d002004200541f007716a210941002102200421010340200128020c2200417f7341077620004106767241818284087120012802082200417f7341077620004106767241818284087120012802042200417f7341077620004106767241818284087120012802002200417f7341077620004106767241818284087120026a6a6a6a2102200141106a22012009470d000b0b200820066b2108200420056a2100200241087641ff81fc0771200241ff81fc07716a418180046c41107620036a21032007450d000b2004200641fc01714102746a22022802002201417f734107762001410676724181828408712101024020074101460d0020022802042200417f7341077620004106767241818284087120016a210120074102460d0020022802082202417f7341077620024106767241818284087120016a21010b200141087641ff811c71200141ff81fc07716a418180046c41107620036a0f0b024020010d0041000f0b2001410371210902400240200141044f0d0041002103410021020c010b2001417c712108410021034100210203402003200020026a22012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a21032008200241046a2202470d000b0b2009450d00200020026a21010340200320012c000041bf7f4a6a2103200141016a21012009417f6a22090d000b0b20030b1a00200028021c20012002200028022028020c118080808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141dc89c0800036020820014204370210200141086a2000108582808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141888ac0800036020820014204370210200141086a2000108582808000000b5701017e02400240200341c000710d002003450d012002410020036b413f71ad8620012003413f71ad220488842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080bf60804017f017e037f047e23808080800041b0016b2205248080808000420021060240024002400240024020047920037942c0007c20044200521ba7220720027920017942c0007c20024200521ba722084d0d002008413f4b0d01200741df004b0d02200720086b4120490d03200541a0016a2003200441e00020076b2209108e8280800020053502a00142017c210a4200210b420021060240024002400240034020054190016a2001200241c00020086b2208108e82808000200529039001210c0240200820094f0d00200541d0006a200320042008108e82808000024002402005290350220a50450d000c010b200c200a80210c0b200541c0006a200c420020032004109282808000024020012005290340220d5422082002200541c8006a290300220a542002200a511b0d002002200a7d2008ad7d21022001200d7d21012006200b200c7c220c200b54ad7c21060c0b0b200220047c200120037c2204200154ad7c200a7d2004200d54ad7d21022004200d7d21012006200c200b7c427f7c220c200b54ad7c21060c0a0b20054180016a200c200a80220c4200200820096b41ff00712208109082808000200541f0006a200c420020032004109282808000200541e0006a2005290370200541f0006a41086a290300200810908280800020054180016a41086a29030020067c2005290380012206200b7c220b200654ad7c210620072002200541e0006a41086a2903007d20012005290360220c54ad7d2202792001200c7d22017942c0007c20024200521ba722084d0d012008413f4d0d000b200350450d010c020b20012003542208200220045420022004511b450d02200b210c0c070b200120038021020b200120038221012006200b20027c220c200b54ad7c2106420021020c050b200220047d2008ad7d2102200120037d21012006200b42017c220c50ad7c21060c040b200220044200200120035a200220045a20022004511b22081b7d20012003420020081b220454ad7d2102200120047d21012008ad210c0c030b20012001200380220c20037e7d210142002106420021020c020b20022002200342ffffffff0f83220480220620037e7d4220862001422088220c842004802202422086200c200220037e7d422086200142ffffffff0f83842201200480220384210c2001200320047e7d210120024220882006842106420021020c010b200541306a2003200441c00020086b2208108e82808000200541206a200120022008108e8280800042002106200541106a200342002005290320200529033080220c4200109282808000200520044200200c42001092828080002005290310210a02400240200541086a290300200541106a41086a290300220d20052903007c220b200d54ad7c4200520d002001200a5422082002200b542002200b511b450d010b200420027c200320017c2201200354ad7c200b7d2001200a54ad7d2102200c427f7c210c2001200a7d21010c010b2002200b7d2008ad7d21022001200a7d2101420021060b200020013703102000200c3703002000200237031820002006370308200541b0016a2480808080000b5701017e02400240200341c000710d002003450d0120022003413f71ad2204862001410020036b413f71ad88842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080bf50303017f027e027f23808080800041e0006b220624808080800042002107420021084100210902402001200284500d002003200484500d00420020037d2003200442005322091b2107420020017d20012002420053220a1b2108420020042003420052ad7c7d200420091b21032004200285210402400240420020022001420052ad7c7d2002200a1b2202500d0002402003500d00200641d0006a2007200320082002109282808000200641d8006a290300210141012109200629035021020c020b200641c0006a2008420020072003109282808000200641306a2002420020072003109282808000200641c0006a41086a290300220220062903307c2201200254200641306a41086a290300420052722109200629034021020c010b02402003500d00200641206a2007420020082002109282808000200641106a2003420020082002109282808000200641206a41086a290300220220062903107c2201200254200641106a41086a290300420052722109200629032021020c010b20062007200320082002109282808000200641086a290300210141002109200629030021020b420020027d20022004420053220a1b2108420020012002420052ad7c7d2001200a1b22072004854200590d00410121090b200520093602002000200737030820002008370300200641e0006a2480808080000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072003422088220820067e22062005200142208822097e7c22054220867c220a3703002000200820097e2005200654ad4220862005422088847c200a200754ad7c200420017e200320027e7c7c3703080ba50501087f02400240200241104f0d00200021030c010b02402000410020006b41037122046a220520004d0d002004417f6a2106200021032001210702402004450d002004210820002103200121070340200320072d00003a0000200741016a2107200341016a21032008417f6a22080d000b0b20064107490d000340200320072d00003a0000200341016a200741016a2d00003a0000200341026a200741026a2d00003a0000200341036a200741036a2d00003a0000200341046a200741046a2d00003a0000200341056a200741056a2d00003a0000200341066a200741066a2d00003a0000200341076a200741076a2d00003a0000200741086a2107200341086a22032005470d000b0b2005200220046b2208417c7122066a210302400240200120046a22074103710d00200520034f0d0120072101034020052001280200360200200141046a2101200541046a22052003490d000c020b0b200520034f0d002007410374220241187121042007417c71220941046a2101410020026b411871210a2009280200210203402005200220047620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20084103712102200720066a21010b02402003200320026a22054f0d002002417f6a2108024020024107712207450d000340200320012d00003a0000200141016a2101200341016a21032007417f6a22070d000b0b20084107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032005470d000b0b20000b4b01017f23808080800041206b220524808080800020052001200220032004108f82808000200529031021042000200541186a29030037030820002004370300200541206a2480808080000b0bda0a0100418080c0000bd00a7372632f6c69622e7273616d6f756e74656e645f64617465686f7572735f6c6f67676564696470726f6f665f7665726966696564726174655f7065725f686f757273746172745f64617465737461747573746f6b656e776f726b65720a001000060000001000100008000000180010000c0000002400100002000000260010000e000000340010000d000000410010000a0000004b001000060000005100100005000000560010000600000063616e63656c6c656466696e616e63655f617070726f76656466696e616e63655f617070726f7665726d616e616765726d616e616765725f617070726f7665646f7261636c655f7075626b65796f7261636c655f726f746174696f6e737061796d656e7473000000ac00100009000000b500100010000000c500100010000000d500100007000000dc00100010000000ec0010000d000000f9001000100000000901100008000000457363726f77436f756e7400540110000b000000457363726f77000068011000060000004e6f6e6365000000780110000500000041646d696e000000880110000500000050656e64696e6741646d696e980110000c0000005061757365640000ac011000060000004f7261636c654b6579000000bc011000090000000300000000000000000000000000000004000000000000000000000000000000050000000000000000000000000000000143465750000000000010000a000000fd01000009000000000010000a0000000302000030000000000010000a000000f70100002700000000000000000000000000000000000000000010000a000000500200001e0000000000000000000000000010000a000000b302000025000000000010000a0000005d0200002b000000000010000a0000006c02000029000000000010000a0000006e02000015000000000010000a0000006102000024000000000010000a0000003c02000025000000000010000a0000004b0200000d000000000010000a000000ea0200003b000000000010000a000000a503000030000000000010000a000000a80300000d000000000010000a000000950300002c000000000010000a0000001104000030000000000010000a000000ee03000032000000000010000a000000fd03000030000000000010000a000000ff03000015000000000010000a000000f20300002b000000000010000a000000e403000027000000000010000a0000008e040000370000000000000000000000010000000100000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c7565436f6e76657273696f6e4572726f722f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f656e762e7273000000ca03100063000000770100000e0000002f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f73746f726167652e72730040041000670000009a000000090000007472616e73666572617474656d707420746f206164642077697468206f766572666c6f77c00410001c000000617474656d707420746f2073756274726163742077697468206f766572666c6f77000000e40410002100000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75653a2000000001000000000000003b05100002000000008f460e636f6e74726163747370656376300000000400000000000000000000000d436f6e74726163744572726f7200000000000016000000000000000f416c7265616479417070726f7665640000000001000000000000000c556e617574686f72697a6564000000020000000000000016496e76616c69644f7261636c655369676e61747572650000000000030000000000000010496e76616c69645061796d656e744964000000040000000000000015496e73756666696369656e74417070726f76616c730000000000000500000000000000175061796d656e74416c726561647946696e616c697a65640000000006000000000000000d496e76616c6964416d6f756e7400000000000007000000000000000f457363726f7743616e63656c6c65640000000008000000000000000c496e76616c69644e6f6e63650000000900000000000000084e6f7441646d696e0000000a000000000000000650617573656400000000000b000000000000000f41646d696e416c7265616479536574000000000c000000000000000c50726f6f664d697373696e670000000d000000000000000d4e6f6e63654f766572666c6f770000000000000e00000000000000125369676e6572734e6f7444697374696e637400000000000f0000003b546865206f7261636c65207075626c6963206b6579206973206e6f74206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000164f7261636c654b65794e6f745265676973746572656400000000001000000042417474657374656420686f757273207820726174655f7065725f686f757220646f6573206e6f7420657175616c2074686520657363726f77656420616d6f756e742e000000000013416d6f756e74486f7572734d69736d6174636800000000110000002a656e645f64617465206973206e6f74207374726963746c792061667465722073746172745f646174652e00000000000d496e76616c6964506572696f64000000000000120000002642617463682065786365656473204d41585f42415443485f53495a45207061796d656e74732e00000000000d4261746368546f6f4c61726765000000000000130000004454686973205741534d2070696e7320616e2065787065637465642061646d696e20616e642074686520737570706c6965642061646472657373206973206e6f742069742e0000000d41646d696e4d69736d6174636800000000000014000000464e6f2061646d696e207472616e736665722069732070656e64696e672c206f72207468652063616c6c6572206973206e6f74207468652070726f706f7365642061646d696e2e00000000000e4e6f50656e64696e6741646d696e000000000015000000336075706772616465602072657175697265732074686520636f6e747261637420746f206265207061757365642066697273742e00000000094e6f74506175736564000000000000160000000300000000000000000000000d5061796d656e7453746174757300000000000005000000000000000750656e64696e670000000000000000000000000f4d616e61676572417070726f7665640000000001000000000000000f46696e616e6365417070726f7665640000000002000000000000000946696e616c697a656400000000000003000000000000000943616e63656c6c6564000000000000040000000100000000000000000000000f5061796d656e745363686564756c65000000000a0000000000000006616d6f756e7400000000000b0000000000000008656e645f6461746500000006000000000000000c686f7572735f6c6f676765640000000b00000000000000026964000000000004000000815365742074727565206f6e6c7920627920607375626d69745f686f7572735f70726f6f666020616674657220612076616c69642045643235353139206f7261636c650a7369676e61747572652e20607061795f626174636860207265667573657320746f20736574746c652061207061796d656e7420776974686f75742069742e0000000000000e70726f6f665f7665726966696564000000000001000000000000000d726174655f7065725f686f75720000000000000b000000000000000a73746172745f6461746500000000000600000000000000067374617475730000000007d00000000d5061796d656e745374617475730000000000008c5065722d7061796565205374656c6c617220417373657420436f6e7472616374202853414329206164647265737320e2809420652e672e2074686520555344432053414320666f720a6f6e6520706179656520616e6420746865206e617469766520584c4d2053414320666f7220616e6f746865722077697468696e207468652073616d652062617463682e00000005746f6b656e000000000000130000000000000006776f726b65720000000000130000000100000000000000000000000e436f7265466c6f77457363726f77000000000008000000000000000963616e63656c6c656400000000000001000000000000001066696e616e63655f617070726f76656400000001000000000000001066696e616e63655f617070726f7665720000001300000000000000076d616e61676572000000001300000000000000106d616e616765725f617070726f76656400000001000000000000000d6f7261636c655f7075626b6579000000000003ee000000200000004354696d657320746865206f7261636c65206b657920686173206265656e20726f7461746564206f6e207468697320657363726f772028617564697420747261696c292e00000000106f7261636c655f726f746174696f6e730000000400000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000002000000000000000000000007446174614b6579000000000700000000000000000000000b457363726f77436f756e7400000000010000000000000006457363726f77000000000001000000040000000100000000000000054e6f6e6365000000000000010000000400000000000000000000000541646d696e000000000000000000003d50726f706f736564206e6578742061646d696e2c206177616974696e6720616363657074616e6365202874776f2d737465702068616e646f766572292e0000000000000c50656e64696e6741646d696e0000000000000000000000065061757365640000000000010000004a52656769737465726564206f7261636c65207369676e696e67206b6579732e2050726573656e6365203d3e20747275737465642062792074686520706c6174666f726d2061646d696e2e0000000000094f7261636c654b657900000000000001000003ee0000002000000000000000c85365742074686520636f6e74726163742061646d696e206f6e63652c20696d6d6564696174656c79206166746572206465706c6f792e204964656d706f74656e742d67756172643a0a6661696c7320696620616e2061646d696e20697320616c726561647920636f6e666967757265642e204966206e657665722063616c6c65642c2074686520636f6e74726163740a73696d706c7920686173206e6f2061646d696e20616e642063616e206e6576657220626520706175736564206f722075706772616465642e0000000a696e69745f61646d696e000000000001000000000000000561646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000f85468652061646d696e20616464726573732062616b656420696e746f2074686973205741534d206174206275696c642074696d652c20696620616e792e0a0a526561642d6f6e6c792c20736f20616e206f70657261746f7220286f7220616e2061756469746f72292063616e20636f6e6669726d206166746572206465706c6f7920746861740a7468652072756e6e696e6720636f64652069732070696e6e656420746f20746865206b65792074686579206578706563742c20726174686572207468616e207472757374696e670a7468617420746865206465706c6f7920736372697074207761732072756e20636f72726563746c792e0000000e65787065637465645f61646d696e00000000000000000001000003e800000013000000000000010d50726f706f73652061206e65772061646d696e202863757272656e742061646d696e206f6e6c79292e20537465702031206f6620322e0a0a48616e646f7665722069732074776f2d73746570206265636175736520612073696e676c652d73746570207472616e7366657220746f2061206d69737479706564206f720a756e636f6e74726f6c6c65642061646472657373207065726d616e656e746c792064657374726f797320746865206162696c69747920746f2070617573652c20757067726164652c0a6f72206d616e61676520746865206f7261636c652072656769737472792e205468652070726f706f736564206b6579206d7573742070726f76652069742063616e207369676e2e0000000000000d70726f706f73655f61646d696e0000000000000100000000000000096e65775f61646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000004341636365707420612070656e64696e672061646d696e2068616e646f766572202870726f706f7365642061646d696e206f6e6c79292e20537465702032206f6620322e000000000c6163636570745f61646d696e0000000000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000345468652063757272656e746c7920636f6e666967757265642061646d696e2c206966206f6e6520686173206265656e207365742e000000096765745f61646d696e0000000000000000000001000003e80000001300000000000000865061757365206f7220756e70617573652073746174652d6368616e67696e67206f7065726174696f6e73202861646d696e206f6e6c79292e206063616e63656c5f657363726f77600a737461797320617661696c61626c65207768696c652070617573656420736f2066756e64732063616e20616c7761797320626520726566756e6465642e00000000000a7365745f706175736564000000000001000000000000000670617573656400000000000100000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000000000000969735f7061757365640000000000000000000001000000010000000000000076557067726164652074686520636f6e7472616374205741534d202861646d696e206f6e6c79292e20456e61626c657320666978657320776974686f7574206368616e67696e670a74686520636f6e74726163742061646472657373206f72206d6967726174696e6720657363726f772066756e64732e000000000007757067726164650000000001000000000000000d6e65775f7761736d5f68617368000000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000001e4526567697374657220616e206f7261636c65207369676e696e67206b657920617320747275737465642062792074686520706c6174666f726d202861646d696e206f6e6c79292e0a0a57485920412052454749535452593a2070726576696f75736c7920746865206d616e616765722070617373656420616e7920606f7261636c655f7075626b65796020746865790a6c696b656420696e746f2060696e697469616c697a655f6d756c74695f7369675f657363726f77602c20736f2061206d616e6167657220636f756c6420696e7374616c6c0a7468656972206f776e206b657920616e64207369676e207468656972206f776e2022766572696669656420776f726b22206174746573746174696f6e732e205468650a70726f6f662d6f662d776f726b206761746520776173207468657265666f7265206d616e616765722d61747465737461626c65202d2d2070726f6365647572616c2c206e6f740a63727970746f677261706869632e20457363726f7773206d6179206e6f77206f6e6c79206e616d652061206b6579207468652061646d696e2068617320726567697374657265642c0a7768696368206d616b657320746865206f7261636c6520616e20696e646570656e64656e7420706172747920627920636f6e737472756374696f6e2e0000001372656769737465725f6f7261636c655f6b6579000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019b5265766f6b6520612070726576696f75736c792072656769737465726564206f7261636c65206b6579202861646d696e206f6e6c79292e0a0a4578697374696e6720657363726f777320616c7265616479206e616d696e672074686973206b6579206b6565702066756e6374696f6e696e67202d2d207265766f6b696e672069730a6e6f7420726574726f6163746976652c20626563617573652073696c656e746c7920696e76616c69646174696e6720696e2d666c69676874206174746573746174696f6e730a776f756c6420737472616e642066756e64656420657363726f77732e2049742073746f707320746865206b6579206265696e67206e616d6564206279204e455720657363726f77730a616e64204e455720726f746174696f6e732e20546f207265746972652061206b65792066726f6d2061206c69766520657363726f772c20746865206d616e616765722063616c6c730a60726f746174655f6f7261636c655f6b6579602c207768696368207265766f6b6573207468617420657363726f7727732076657269666965642070726f6f66732e00000000117265766f6b655f6f7261636c655f6b65790000000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000325472756520696620607075626b657960206973206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000001869735f6f7261636c655f6b65795f726567697374657265640000000100000000000000067075626b65790000000003ee00000020000000010000000100000000000000d3526f7461746520746865206f7261636c65207075626c6963206b657920666f7220616e20657363726f772e205369676e6174757265732070726f6475636564206279207468650a72657469726564206b65792073746f7020766572696679696e6720696d6d6564696174656c792c2073696e636520607665726966795f6f7261636c655f776f726b602072656164730a746869732073746f726564206b65792e204d616e616765722d617574686f72697a65643b2072656675736564206f6e63652066756e64732068617665206d6f7665642e0000000011726f746174655f6f7261636c655f6b6579000000000000020000000000000009657363726f775f696400000000000004000000000000000a6e65775f7075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000a2496e697469616c697a652061206d756c74692d7369676e617475726520657363726f772077697468207061796d656e74207363686564756c657320616e64206f7261636c65207075626c6963206b65792e0a546865206f7261636c655f7075626b657920697320616e2045643235353139207075626c6963206b6579207573656420746f2076657269667920776f726b2070726f6f66207369676e6174757265732e00000000001b696e697469616c697a655f6d756c74695f7369675f657363726f77000000000400000000000000076d616e616765720000000013000000000000001066696e616e63655f617070726f76657200000013000000000000000d6f7261636c655f7075626b6579000000000003ee0000002000000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000001000003e900000004000007d00000000d436f6e74726163744572726f7200000000000000000001595375626d697420686f7572732070726f6f6620766572696669656420627920616e2045643235353139206f7261636c65207369676e61747572652e0a0a546865206f7261636c65207369676e7320746865203139382d6279746520646f6d61696e2d73657061726174656420707265696d61676520646f63756d656e746564206f6e0a606275696c645f70726f6f665f6d657373616765602028736368656d61207632292e2054686520636f6e74726163742072656275696c6473207468617420707265696d6167650a66726f6d2073746f7265642073746174652c20766572696669657320697420616761696e73742074686520657363726f772773206f7261636c65207075626c6963206b65792c0a656e666f726365732060686f75727320782072617465203d3d20616d6f756e74602c20616e6420636f6e73756d657320746865206e657874206578706563746564206e6f6e63652e000000000000127375626d69745f686f7572735f70726f6f660000000000050000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f6964000000000004000000000000000c686f7572735f6c6f676765640000000b00000000000000056e6f6e63650000000000000600000000000000097369676e6174757265000000000003ee0000004000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e4d616e6167657220617070726f76616c206f66207061796d656e7428732900000000000f6d616e616765725f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e46696e616e636520617070726f76616c206f66207061796d656e7428732900000000000f66696e616e63655f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000bb46696e616c697a65207061796d656e74206f6e636520626f746820617070726f76616c7320617265206f627461696e65640a4465707265636174656420616c6961732072657461696e656420736f20746865204d61696e6e65742d6465706c6f7965642041424920616e6420746865206578697374696e670a64617368626f61726420636c69656e74206b65657020776f726b696e672e204e65772063616c6c6572732073686f756c642075736520607061795f6261746368602e000000001066696e616c697a655f7061796d656e74000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f7200000000000000000000b2536574746c65206576657279207061796d656e7420696e2074686520657363726f773a206f6e65207472616e73616374696f6e2c206f6e6520534143207472616e73666572207065720a70617965652c206561636820696e20746861742070617965652773206f776e2061737365742e20526571756972657320626f746820617070726f76616c7320414e4420610a7665726966696564206f7261636c652070726f6f66206f6e20657665727920726f772e0000000000097061795f6261746368000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f72000000000000000000006e43616e63656c20616e20657363726f77202864697370757465207265736f6c7574696f6e20e28094206d616e61676572206f6e6c79292e0a416c6c6f776564206576656e207768696c65207061757365642028656d657267656e6379207769746864726177616c2070617468292e00000000000d63616e63656c5f657363726f77000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f720000000000000000000017526574726965766520657363726f772064657461696c73000000000a6765745f657363726f770000000000010000000000000009657363726f775f69640000000000000400000001000003e9000007d00000000e436f7265466c6f77457363726f770000000007d00000000d436f6e74726163744572726f720000000000000000000121457874656e6420616e20657363726f7727732073746f72616765206c69666574696d652e20416e796f6e65206d61792063616c6c20746869732e0a0a50657273697374656e7420656e747269657320746861742072756e206f7574206f662072656e742061726520617263686976656420746f2074686520457870697265640a537461746520537461636b20616e642063616e20626520726573746f7265643b207468657920617265206e6f742064656c657465642e20546865206661696c75726520746869730a61766f69647320697320612066756e64656420657363726f77206265636f6d696e672074656d706f726172696c7920756e757361626c6520756e74696c20736f6d656f6e650a7061797320746f20726573746f72652069742e00000000000011657874656e645f657363726f775f74746c000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019552657475726e2074686520657861637420627974657320746865206f7261636c65206d757374207369676e20666f722074686973207061796d656e742e0a0a526561642d6f6e6c792e204578706f73696e672074686520707265696d616765206d616b65732074686520434f4e5452414354207468652073696e676c6520736f75726365206f660a747275746820666f7220746865206d65737361676520666f726d61743a20616e206f66662d636861696e207369676e65722063616e2073696d756c61746520746869732063616c6c0a616e64207369676e207468652072657475726e656420627974657320766572626174696d20696e7374656164206f66207265696d706c656d656e74696e6720746865206c61796f75740a616e6420686f70696e67207468652074776f2061677265652e20457665727920686973746f726963616c206d69736d61746368206265747765656e2061207369676e657220616e640a6120766572696669657220697320612062756720746869732072656d6f76657320627920636f6e737472756374696f6e2e0000000000000e70726f6f665f707265696d6167650000000000040000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f69640000000000040000000000000005686f7572730000000000000b00000000000000056e6f6e63650000000000000600000001000003e90000000e000007d00000000d436f6e74726163744572726f7200000000000000000000ac52657475726e20746865206e657874206578706563746564206f7261636c65206e6f6e636520666f7220616e20657363726f772e0a546865206f7261636c65206d757374207369676e20612070726f6f66207573696e6720746869732065786163742076616c756520287265706c61792070726f74656374696f6e292e0a52657475726e73203020666f7220616e20756e6b6e6f776e2f756e696e697469616c697a656420657363726f772e000000096765745f6e6f6e6365000000000000010000000000000009657363726f775f6964000000000000040000000100000006001e11636f6e7472616374656e766d6574617630000000000000001400000000006f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e38352e3000000000000000000008727373646b7665720000002f32302e352e30233965326333303232623433353562323234613761383134653133626135313736316565623134626200"
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "system",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "executable_update"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "Wasm"
+ },
+ {
+ "bytes": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ ]
+ },
+ {
+ "vec": [
+ {
+ "symbol": "Wasm"
+ },
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": []
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_upgrade_impossible_without_an_admin.1.json b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_impossible_without_an_admin.1.json
new file mode 100644
index 0000000..3ab0a19
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_impossible_without_an_admin.1.json
@@ -0,0 +1,191 @@
+{
+ "generators": {
+ "address": 1,
+ "nonce": 0
+ },
+ "auth": [
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": null
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "0101010101010101010101010101010101010101010101010101010101010101"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 10
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 10
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 10
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "upgrade"
+ },
+ {
+ "vec": [
+ {
+ "bytes": "0101010101010101010101010101010101010101010101010101010101010101"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_upgrade_pause_is_mandatory_and_checked_first.1.json b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_pause_is_mandatory_and_checked_first.1.json
new file mode 100644
index 0000000..9e135a4
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_pause_is_mandatory_and_checked_first.1.json
@@ -0,0 +1,719 @@
+{
+ "generators": {
+ "address": 2,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": false
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Paused"
+ }
+ ]
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da",
+ "code": "0061736d01000000019b022960037f7f7f017f60027f7f017f60047e7e7e7e017e60027e7e017e60037e7e7e017e6000017e60017e017e60037f7f7f0060027f7e0060047f7f7f7f0060057f7f7e7f7f0060027f7f017e60047f7f7f7e0060027e7f017e60017f017e60017e017f6000017f60017f0060017f017f60027f7e017f60057f7e7e7e7e0060057e7e7e7e7e017e60067f7f7e7e7e7e017f60027f7f0060067f7f7f7e7e7e0060077f7f7f7f7e7e7e017e60057f7f7f7f7f0060000060057f7e7e7f7f017e60057f7e7e7f7f0060057f7f7f7f7f017e60067f7e7f7f7f7f017e60037f7f7f017e60037f7e7e017f60037f7e7e017e60027f7e017e60047f7e7e7e017e60057f7e7e7e7e017e60037f7e7e0060047f7e7e7f0060067f7e7e7e7e7f0002d901240162013200020162013100020162016a0003016d01390004016d016100020176016700030178013000030178013100030178013300050178013600050178013700050178013800050169015f00060169013000060169013600030169013700060169013800060176015f0005017601300004017601310003017601330006017601360003016c015f0004016c01300003016c01310003016c01320003016c01360006016c01370002016c013800030164015f00040162015f00060162013400050162013800060163015f000601630130000401610130000603f301f1010707070708090a010b07070701070c070c070c070c0b0c0b010701070707070b07070707070707070d0e0b0b0b0b0b070b0b0b0b0b0b0b070b0b0b0107060f05060f0510051106120510060f060f060f060f0313021415160612061206170612061706120218060e1110120b1907070707071a070707070707070707070701111b0b0b0b0b0b0e0c1c1d1e1f20071120010107070b0912120e11122122072223230e2422232224222325230e230b09070e1c1d201e1f2022220e0e0e0e23232223230e242223222422222223252224230e23232423050717060f0e0f0808260007171a11010101001111271427281400140405017001040405030100110619037f01418080c0000b7f0041d08ac0000b7f0041d08ac0000b07ba031b066d656d6f727902000a696e69745f61646d696e00610e65787065637465645f61646d696e00630d70726f706f73655f61646d696e00640c6163636570745f61646d696e0066096765745f61646d696e00680a7365745f706175736564006a0969735f706175736564006c0775706772616465006e1372656769737465725f6f7261636c655f6b65790070117265766f6b655f6f7261636c655f6b657900721869735f6f7261636c655f6b65795f72656769737465726564007411726f746174655f6f7261636c655f6b657900761b696e697469616c697a655f6d756c74695f7369675f657363726f770078127375626d69745f686f7572735f70726f6f66007a0f6d616e616765725f617070726f7665007c0f66696e616e63655f617070726f7665007e1066696e616c697a655f7061796d656e740080010d63616e63656c5f657363726f770082010a6765745f657363726f7700840111657874656e645f657363726f775f74746c0086010e70726f6f665f707265696d616765008801096765745f6e6f6e6365008a01097061795f6261746368008001015f00a4010a5f5f646174615f656e6403010b5f5f686561705f626173650302090c010041010b03a201890288020adff901f1014602017f017e23808080800041106b220324808080800020032001200210a580808000200329030821042000200329030037030020002004370308200341106a2480808080000b6102017f017e23808080800041106b22032480808080002003200229030022041081828080000240024020032802000d00200329030821040c010b2001200410c38180800021040b2000420037030020002004370308200341106a2480808080000b6401027e02400240024020022903002203a741ff0171220241c000460d0020024106470d0142002104200310fc8180800021030c020b420021042001200310c48180800021030c010b4201210410f98180800021030b20002004370300200020033703080bf80304027f017e017f047e23808080800041d0006b22032480808080004100210402400340200441c000460d01200320046a4202370300200441086a21040c000b0b0240024002400240024002400240024002402002290300220542ff018342cc00520d0020012005419482c0800041082003410810af818080001a410120032d0000220441004741017420044101461b22044102460d01410120032d0008220241004741017420024101461b22024102460d02200341c0006a200341106a2001109c8180800020032802400d0320032903482105200341c0006a200341186a2001109c8180800020032802400d04410120032d0020220641004741017420064101461b22064102460d0520032903482107200341c0006a200341286a2001109a8180800020032802400d062003290330220842ff01834204520d0702402003290338220942ff018342cb00520d002003290348210a200020043a0026200020023a0025200020063a002420002008422088a7360220200020093703182000200a37031020002005370308200020073703000c090b200041023a00260c080b200041023a00260c070b200041023a00260c060b200041023a00260c050b200041023a00260c040b200041023a00260c030b200041023a00260c020b200041023a00260c010b200041023a00260b200341d0006a2480808080000b3b01017f23808080800041106b2202248080808000200220013703082000200241086a10d48180800010cc818080001a200241106a2480808080000b12002000200142012002200310aa808080000b270020002000200110ac808080002002200310fe81808000200410fe8180800010cd818080001a0b4d02017f017e41022102024020002000200110ac808080002203420110bf81808000450d00410121020240024020002003420110c081808000a741ff01710e020102000b000b410021020b20020bcb0502017f017e23808080800041306b220224808080800002400240024002400240024002400240024020012802000e0700010203040506000b200241206a200041e082c08000109f8180800020022802200d07200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c060b200241206a200041f082c08000109f8180800020022802200d0620022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d062002200229032837031020022003370308200241206a200241086a2000109d818080000c050b200241206a2000418083c08000109f8180800020022802200d0520022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d052002200229032837031020022003370308200241206a200241086a2000109d818080000c040b200241206a2000419083c08000109f8180800020022802200d04200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c030b200241206a200041a483c08000109f8180800020022802200d03200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c020b200241206a200041b483c08000109f8180800020022802200d02200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c010b200241206a200041c883c08000109f8180800020022802200d0120022002290328370318200241186a10d4818080002103200241206a200141086a200010a18180800020022802200d012002200229032837031020022003370308200241206a200241086a2000109d818080000b20022903282103200229032050450d00200241306a24808080800020030f0b000b5e01017e02400240024020012001200210ac808080002203420110bf818080000d00410021010c010b20012003420110c081808000220342ff01834204520d012003422088a72102410121010b20002002360204200020013602000f0b000b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200042003703000c010b200320012004420110c081808000370308200341106a2001200341086a10a68080800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b880102017f017e23808080800041306b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200041023a00260c010b200320012004420110c081808000370300200341086a2001200310a78080800020032d002e4102460d012000200341086a41281093828080001a0b200341306a2480808080000f0b000b160020002000200110ac80808000420110bf818080000b1000200020012002420110b2808080000b210020002000200110ac808080002002200010a781808000200310ca818080001a0b1000200020012002420110b4808080000b210020002000200110ac808080002000200210b980808000200310ca818080001a0b1000200020012002420110b6808080000b210020002000200110ac808080002002200010a681808000200310ca818080001a0b1000200020012002420110b8808080000b210020002000200110ac808080002000200210bb80808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110db80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b210020002000200110ac808080002002200010a881808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110a480808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4d02017f017e41022102024020002000200110ac808080002203420210bf81808000450d00410121020240024020002003420210c081808000a741ff01710e020102000b000b410021020b20020b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420210bf818080000d00200042003703000c010b200320012004420210c081808000370308200341106a2001200341086a10b18180800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b160020002000200110ac80808000420210bf818080000b1000200020012002420210b6808080000b1000200020012002420210ba808080000b850102017f027e23808080800041106b220324808080800020032001200210b6818080000240024020032802000d00200320032903082204370300420121050240200341086a200410d08180800010ff8180800041c000470d0020002003290300370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b950203017f017e027f23808080800041c0006b22032480808080002001200210c380808000210420032001200241086a10c38080800037030820032004370300410021020240034020024110460d01200341106a20026a4202370300200241086a21020c000b0b200341246a200341106a200341106a41106a2003200341106a109681808000410020032802382202200328023422056b2206200620024b1b21022003280224200541037422066a2105200328022c20066a2106024003402002450d0120052006200110a981808000370300200541086a2105200641086a21062002417f6a21020c000b0b2001200341106a410210b08180800021042000420037030020002004370308200341c0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110d381808000024020022802004101470d00000b20022903082103200241106a24808080800020030b7902017f027e23808080800041206b2203248080808000200341106a2002200110a0818080000240024020032802100d00200320032903183703082001200341086a410110b0818080002104420021050c010b10f9818080002104420121050b2000200537030020002004370308200341206a2480808080000ba30102017f017e23808080800041206b2203248080808000200341106a200120021091818080000240024020032802100d0020032903182104200341106a2001200241046a10918180800020032802100d00200320032903183703082003200437030020012003410210b081808000210420004200370300200020043703080c010b10f981808000210420004201370300200020043703080b200341206a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200210918180800002400240024020032802200d0020032903282104200341206a2001200241046a10918180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200241086a10918180800002400240024020032802200d0020032903282104200341206a20022001109e8180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd00102017f027e23808080800041306b2203248080808000200341206a2001200241106a10918180800002400240024020032802200d0020032903282104200341206a200120021094818080002003290328210520032802200d01200341206a2001200241146a10918180800020032802200d002003200329032837031820032005370310200320043703082001200341086a410310b081808000210520004200370300200020053703080c020b10f98180800021050b20004201370300200020053703080b200341306a2480808080000bd20202017f067e23808080800041c0006b2203248080808000200341306a2001200241206a10918180800002400240024020032802300d0020032903382104200341306a2001200241246a10918180800020032802300d0020032903382105200341306a200241106a2001109e8180800020032802300d0020032903382106200341306a200241186a2001109e8180800020032802300d0020032903382107200341306a200120021094818080002003290338210820032802300d01200341306a2001200241306a1094818080002003290338210902402003280230450d00200921080c020b20032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410610b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341c0006a2480808080000bbd0302017f087e23808080800041d0006b2203248080808000200341c0006a2001200241386a10918180800002400240024020032802400d0020032903482104200341c0006a20012002413c6a10918180800020032802400d0020032903482105200341c0006a200241206a2001109e8180800020032802400d0020032903482106200341c0006a200241286a2001109e8180800020032802400d0020032903482107200341c0006a200120021094818080002003290348210820032802400d01200341c0006a2001200241106a1094818080002003290348210902402003280240450d00200921080c020b200341c0006a2001200241306a10a4808080002003290348210a02402003280240450d00200a21080c020b200341c0006a2001200241c0006a10a4808080002003290348210b02402003280240450d00200b21080c020b2003200b3703382003200a37033020032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410810b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341d0006a2480808080000b2a00024020022802000d0020004200370300200042023703080f0b2000200241086a2001109e818080000b4001017f23808080800041106b2202248080808000200220003703082001200241086a200110a88180800010ce818080002100200241106a24808080800020000b15002000280200417f6aad4220864283808080107c0b4502017f017e23808080800041106b220224808080800020022000200110c780808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1d00024020012802000d0020012903080f0b200141046a10cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c680808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6902027f017e23808080800041106b2202248080808000200141046a21030240024020012802000d00200220002003109181808000024020022802000d00200229030821040c020b10f9818080001a000b200310cd8080800021040b200241106a24808080800020040b4502017f017e23808080800041106b220224808080800020022000200110d380808000024020022802004101470d00000b20022903082103200241106a24808080800020030bd00302017f097e23808080800041e0006b2203248080808000200341d0006a200120021094818080000240024020032802500d0020032903582104200341d0006a2001200241c8006a10a48080800020032802500d0020032903582105200341d0006a2001200241106a10948180800020032802500d0020032903582106200341d0006a2001200241d0006a10918180800020032802500d0020032903582107200341d0006a2001200241d8006a10938180800020032802500d0020032903582108200341d0006a2001200241206a10948180800020032802500d0020032903582109200341d0006a2001200241c0006a10a48080800020032802500d002003290358210a2002350254210b200341d0006a200241386a2001109e8180800020032802500d002003290358210c200341d0006a200241306a2001109e8180800020032802500d00200320032903583703482003200c3703402003200b4220864204843703382003200a370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200141dc80c08000410a2003410a10ae81808000210420004200370300200020043703080c010b200042013703000b200341e0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110c280808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110b781808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110ca80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1700024020012802000d0042020f0b200110cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c980808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c580808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c880808000024020022802004101470d00000b20022903082103200241106a24808080800020030bf20202017f067e23808080800041d0006b2203248080808000200341c0006a2001200241266a1093818080000240024020032802400d0020032903482104200341c0006a2001200241256a10938180800020032802400d0020032903482105200341c0006a200241086a2001109e8180800020032802400d0020032903482106200341c0006a20022001109e8180800020032802400d0020032903482107200341c0006a2001200241246a10938180800020032802400d0020032903482108200341c0006a200241106a200110a18180800020032802400d0020032903482109200341c0006a2001200241206a10918180800020032802400d0020032003290348370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200320022903183703382001419482c0800041082003410810ae81808000210420004200370300200020043703080c010b200042013703000b200341d0006a2480808080000b6802017f017e23808080800041106b22022480808080000240024020012802000d0020022000200141086a10d381808000024020022802000d00200229030821030c020b10f9818080001a000b200141046a10cd8080800021030b200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110cb80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6502017f017e23808080800041106b22022480808080000240024020012d00264102460d0020022000200110db80808000024020022802000d00200229030821030c020b10f9818080001a000b200110cd8080800021030b200241106a24808080800020030b2501017e20002903002202422088a72200410520004105491b4105200242ff01834204511b0b9e0502027f0b7e23808080800041f0006b22032480808080004100210402400340200441d000460d01200320046a4202370300200441086a21040c000b0b024002400240024002400240024002400240024002402002290300220542ff018342cc00520d002001200541dc80c08000410a2003410a10af818080001a200341d0006a2001200310928180800020032802500d01200341e8006a290300210520032903602106200341d0006a2001200341086a10a68080800020032802500d0220032903582107200341d0006a2001200341106a10928180800020032802500d032003290318220842ff01834204520d04410120032d0020220441004741017420044101461b22044102460d05200341e8006a29030021092003290360210a200341d0006a2001200341286a10928180800020032802500d06200341e8006a290300210b2003290360210c200341d0006a2001200341306a10a68080800020032802500d072003290358210d200341386a200410df8080800022024105460d08200341d0006a200341c0006a2001109c8180800020032802500d092003290358210e200341d0006a200341c8006a2001109c81808000024020032802500d002003290358210f2000200c3703202000200a37031020002006370300200020043a00582000200236025420002008422088a7360250200020073703482000200d3703402000200e3703382000200f3703302000200b37032820002009370318200020053703080c0b0b200041053602540c0a0b200041053602540c090b200041053602540c080b200041053602540c070b200041053602540c060b200041053602540c050b200041053602540c040b200041053602540c030b200041053602540c020b200041053602540c010b200041053602540b200341f0006a2480808080000b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e2808080003602082001200141086a10d7808080002100200141206a24808080800020000be90101027f23808080800041306b2201248080808000200120003703082001412f6a10bd81808000410c210202402001412f6a41d083c0800010be808080000d00200141086a10b2818080002001412f6a10bd818080002001412f6a41d083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ef2eed90b3703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020b200141306a24808080800020020b3d02017f017e23808080800041206b2200248080808000200042003703082000411f6a200041086a10dd808080002101200041206a24808080800020010b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e5808080003602082001200141086a10d7808080002100200141206a24808080800020000bdd0101027f23808080800041306b220124808080800020012000370308200141106a108c818080000240024020012802100d002001412f6a10bd818080002001412f6a41e083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ed4b8bacdbed7013703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020c010b200128021421020b200141306a24808080800020020b3e02017f017e23808080800041106b2200248080808000200010e78080800036020c20002000410c6a10d7808080002101200041106a24808080800020010bad0203017f017e017f23808080800041306b22002480808080002000412f6a10bd81808000200041106a2000412f6a41e083c0800010bd808080000240024020002802104101470d00200020002903182201370308200041086a10b2818080002000412f6a10bd818080002000412f6a41d083c08000200041086a10c0808080002000412f6a10bd818080002000412f6a2000412f6a41e083c0800010ac80808000420210cb818080001a2000412f6a10bd818080002000412f6a418087014180d21f10c181808000200020013703202000428ef2b5958ab5023703182000428ee6aeb9ea043703102000412f6a2000412f6a200041106a10d480808000200041206a2000412f6a10a88180800010c2818080001a410021020c010b411521020b200041306a24808080800020020b4102017f017e23808080800041206b2200248080808000200041086a10e9808080002000411f6a200041086a10dd808080002101200041206a24808080800020010b3e01017f23808080800041106b22012480808080002001410f6a10bd8180800020002001410f6a41d083c0800010bd80808000200141106a2480808080000b5c01027f23808080800041106b2201248080808000410121020240024002402000a741ff01710e020102000b000b410021020b2001200210eb8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bdc0101017f23808080800041206b2201248080808000200120003a0007200141086a108c818080000240024020012802080d002001411f6a10bd818080002001411f6a41f083c08000200141076a10bf808080002001411f6a10bd818080002001411f6a418087014180d21f10c181808000200120012d00073a001e2001428ed2aadceeac033703102001428ee6aeb9ea043703082001411f6a2001411f6a200141086a10d4808080002001411e6a2001411f6a10a68180800010c2818080001a410021000c010b200128020c21000b200141206a24808080800020000b4102017f017e23808080800041106b2200248080808000200010ed808080003a000e2000410e6a2000410f6a10a6818080002101200041106a24808080800020010b4401027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000200141fd01710b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010ef808080003602082001200141086a10d7808080002100200141206a24808080800020000bcd0101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd81808000411621022001411f6a41f083c0800010bc8080800041fd0171450d01200120003703102001428ed4a9f3cdadeb013703082001428ee6aeb9ea043703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a2001411f6a10bd818080002001411f6a200010a880808000410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f1808080003602082001200141086a10d7808080002100200141206a24808080800020000be60101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418084c0800010b5808080002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418087014180f6de0010a980808000200120003703102001428ed8ea1b3703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f3808080003602082001200141086a10d7808080002100200141206a24808080800020000bc20101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001411f6a200110ac80808000420110cb818080001a200120003703102001428ed4b0faaebd033703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6b01017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f5808080003a0008200141086a2001411f6a10a6818080002100200141206a24808080800020000b5101027f23808080800041206b22012480808080002001411f6a10bd8180800020014106360208200120003703102001411f6a200141086a10ab808080002102200141206a248080808000200241fd01710b7a01017f23808080800041206b2202248080808000200220013703000240200042ff01834204520d00200241086a2002411f6a2002109b8180800020022802084101460d0020022000422088a7200229031010f7808080003602082002200241086a10d7808080002100200241206a24808080800020000f0b000b990801087f2380808080004180036b2202248080808000200220013703000240108d8180800022030d00200241ff026a10bd81808000200241013602302002200036023420024190026a200241ff026a200241306a10af80808000024020022d00b60222034102460d002002280290022104200241086a41047220024190026a41047241221093828080001a200220033a002e20022004360208200220022d00b7023a002f200241086a10b2818080002002108e8180800022030d014108210320022d002e0d0141002103200241286a2204200229032010c88180800010ff818080002105024002400340024020052003470d00200220013703180240200228022841016a2203450d00200220033602282002200241ff026a10c5818080002201370340200241c8006a21062004200229032010c88180800010ff818080002107200241e9026a220841036a2109410021030340024020072003470d0020022001370320200241ff026a10bd8180800020024190026a41086a2203200241306a41086a22042903003703002002200229033037039002200241ff026a20024190026a200241086a10b380808000200241ff026a10bd81808000200320042903003703002002200229033037039002200241ff026a20024190026a418087014180f6de0010a980808000200220022802283602b401200220003602b0012002428ed4b9b3cebe03370398022002428ed4b1d4f9a60337039002200241ff026a200241ff026a20024190026a10d480808000200241ff026a200241b0016a10d98080800010c2818080001a410021030c080b4105210502402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e08080800020022802e40222054105460d06200241b0016a20024190026a41d4001093828080001a200220092800003600ab01200220082800003602a8010b200241d0006a200241b0016a41d4001093828080001a200220022800ab0136004b200220022802a801360248024020054105460d0020024190026a200241d0006a41d4001093828080001a2009200228004b36000020082002280248360000200241003a00e802200220053602e402200220062002290340200620024190026a10d28080800010c9818080002201370340200341016a21030c010b0b419884c08000108782808000000b418884c08000108c82808000000b02402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e080808000200341016a210320022802e402417d6a0e03020103010b0b41a884c08000108782808000000b410621030c020b000b410421030b20024180036a24808080800020030be70101017f23808080800041c0006b2204248080808000200420013703182004200037031020042002370320200441286a2004413f6a200441106a10b181808000024020042802284101460d0020042903302101200441286a2004413f6a200441186a10b18180800020042802284101460d0020042903302100200441286a2004413f6a200441206a109b8180800020042802284101460d00200342ff018342cb00520d00200441086a200120002004290330200310f980808000200420042903083702282004413f6a200441286a10d1808080002103200441c0006a24808080800020030f0b000bf01104077f027e037f017e23808080800041e0026b220524808080800020052002370320200520013703182005200337032820052004370330410121060240108d8180800022070d00200541186a10b2818080000240200541186a200541206a10b481808000450d00410f21070c010b0240200541386a2208200529033010c88180800010ff81808000450d0002402008200529033010c88180800010ff8180800041e4004d0d00411321070c020b200541286a108e8180800022070d01410021072008200529033010c88180800010ff81808000210920054188026a210a200541106a210b4200210c4200210d0340024002400240024020092007470d00200541df026a10bd818080002005200541df026a41b884c0800010ad808080004100210a02402005280204410020052802004101711b41016a220e450d002005200e36023c2005200541df026a10aa8180800037034020054188016a21062008200529033010c88180800010ff81808000210f02400340200f200a200f200a4b1b211003400240200a2010470d0041002107200541f3006a41003600002005410036027020052005290330370368200520033703602005200529032037035820052005290318370350200541df026a10bd81808000200541013602b8012005200e3602bc01200541df026a200541b8016a200541d0006a10b380808000200541df026a10bd81808000200541e0016a41086a2206200541b8016a41086a290300370300200520052903b8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541023602c8012005200e3602cc01200541df026a200541c8016a41d884c0800010b780808000200541df026a10bd818080002006200541c8016a41086a290300370300200520052903c8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541df026a41b884c080002005413c6a10b180808000200541df026a10bd81808000200541df026a41b884c08000418087014180f6de0010a9808080002005200d3703f8012005200c3703f0012005200528023c3602e801200520052903183703e0012005428ed2eadca9bda3013703c8022005428ef8f49b8ad7023703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10ce8080800010c2818080001a2008200529033010c88180800010ff81808000210620054188026a21090340024020062007470d00200528023c2107410021060c0d0b02402008200529033010c88180800010ff8180800020074d0d00200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b4024105460d0820052903a002210220052903a80221012005290390022104200529039802210320052903e001210d20052903e801210c2005290380022111200520092903003703f801200520113703f0012005200c3703e8012005200d3703e0012005200528023c3602980220052003370388022005200437038002200520013703a00220052002370390022005200736029c022005428ed2a9133703c8022005428ef2b3d5ecb7d6013703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10d68080800010c2818080001a200741016a21070c010b0b41e084c08000108782808000000b2008200529033010c88180800010ff81808000200a4d0d02200520082005290330200a10fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105460d05200a41016a210b200520052903980237034841002107024003400240200a2007470d00200542003703c802200542003703c002410021072008200529033010c88180800010ff81808000210a024003400240200a2007470d002005200541df026a200541c8006a10d1818080003703e001200541e0016a200541186a200541c0006a200541c0026a10d281808000200b210a0c070b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703d801200541e0016a2008200541d8016a10e08080800020052802b40222094105460d0a200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801024002402006200541c8006a10b481808000450d0020052903c80222022005290358220185427f852002200220017c20052903c002220120052903507c2204200154ad7c220185834200530d01200520043703c002200520013703c8020b200741016a21070c010b0b419085c08000108c82808000000b418085c08000108782808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b40222094105460d07200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801200741016a21072006200541c8006a10b481808000450d000b200b210a0c010b0b0b41a085c08000108782808000000b41f084c08000108782808000000b41c884c08000108c82808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105470d020b000b41b085c08000108782808000000b4101210620052903e00122045020052903e80122024200532002501b0d01200529038002221150200a29030022014200532001501b0d01024020052903a80220052903a002560d00411221070c030b200541086a200420022011200110948280800002402005290308200b290300844200510d00411121070c030b0240200d200285427f85200d200d20027c200c20047c2202200c54ad7c220185834200530d00200741016a21072002210c2001210d0c010b0b41c085c08000108c82808000000b410721070b2000200736020420002006360200200541e0026a2480808080000bfd0101017f23808080800041d0006b22052480808080002005200337031020052002370308200520043703180240200042ff01834204520d00200142ff01834204520d00200541206a200541cf006a200541086a10928180800020052802204101460d00200541386a290300210320052903302102200541206a200541cf006a200541106a10a68080800020052802204101460d0020052903282104200541206a200541cf006a200541186a10c18080800020052802204101460d0020052000422088a72001422088a7200220032004200529032810fb808080003602202005200541206a10d7808080002100200541d0006a24808080800020000f0b000bef0801047f23808080800041d0026b2206248080808000200620053703200240108d8180800022070d00200641cf026a10bd818080002006410136025020062000360254200641d0016a200641cf026a200641d0006a10af808080000240024020062d00f60122074102460d0020062802d0012108200641286a410472200641d0016a41047241221093828080001a20062008360228200620062d00f7013a004f200620073a004e02402007410171450d00410821070c030b4101210720062d004c0d0220062d004d0d02200641c8006a2208200629034010c88180800010ff8180800020014b0d010b410421070c010b024002402008200629034010c88180800010ff8180800020014d0d00200620082006290340200110fe8180800010c7818080003703b002200641d0016a2008200641b0026a10e08080800020062802a40222074105470d01000b41d085c08000108782808000000b200641e0006a200641d0016a41d4001093828080001a200620073602b401200620062903a8023703b8012006410036021c200641086a2002200320062903800120064188016a2903002006411c6a1091828080000240200628021c450d00410721070c010b02402006290308200629036085200641106a290300200629036885844200510d00411121070c010b2006200641cf026a20002001200641e0006a2002200320041090818080003703c801200641cf026a10bd81808000200641cf026a200641386a200641c8016a200641206a10b981808000200641cf026a10bd81808000200641023602b002200620003602b402200641d0016a200641cf026a200641b0026a10ae808080004109210720062903d801420020062802d0011b2004520d0002402004427f520d00410e21070c010b2006200442017c3703c002200641cf026a10bd81808000200641d0016a41086a2207200641b0026a41086a2209290300370300200620062903b0023703d001200641cf026a200641d0016a200641c0026a10b780808000200641cf026a10bd8180800020072009290300370300200620062903b0023703d001200641cf026a200641d0016a418087014180f6de0010a9808080002006200337037820062002370370200641013a00b801200641d0016a200641e0006a41e0001093828080001a200620082006290340200110fe818080002008200641d0016a10d28080800010c681808000370340200641cf026a10bd818080002007200641d0006a41086a2208290300370300200620062903503703d001200641cf026a200641d0016a200641286a10b380808000200641cf026a10bd8180800020072008290300370300200620062903503703d001200641cf026a200641d0016a418087014180f6de0010a980808000200620033703e801200620023703e001200620013602d401200620003602d0012006428ef2aef9a9c7033703b8022006428ef0b79ddd053703b002200641cf026a200641cf026a200641b0026a10d480808000200641cf026a200641d0016a10d08080800010c2818080001a410021070b200641d0026a24808080800020070b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710fd8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbb0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a10b281808000024020012d002c450d00410121020c020b200141013a002c200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428eeeaad6b9b6ca013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710ff8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbe0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a41086a10b281808000024020012d002d450d00410121020c020b200141013a002d200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428ed4e8d9b9f6ae013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b4b01017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a71081818080002001200110cf808080002100200141106a24808080800020000bd20a04047f017e047f057e23808080800041b0026b22022480808080000240024002400240108d8180800022030d00200241af026a10bd818080002002410136023020022001360234200241b0016a200241af026a200241306a10af8080800020022d00d60122034102460d0120022802b0012104200241086a410472200241b0016a41047241221093828080001a20022004360208200220022d00d7013a002f200220033a002e02402003410171450d00410821030c030b200241086a10b2818080000240200241086a200241106a10b481808000450d00410f21030c030b4105210320022d002c4101470d0220022d002d4101470d0241002104200241286a2203200229032010c88180800010ff818080002105024002400340024020052004470d002002200241af026a10aa818080003703402002200241af026a10c5818080002206370348200241d0006a210720024180016a210820024188016a2109410021042003200229032010c88180800010ff818080002105200241e8006a210a4200210b4200210c02400340024020052004470d0020022006370320200241af026a10bd81808000200241b0016a41086a2203200241306a41086a2204290300370300200220022903303703b001200241af026a200241b0016a200241086a10b380808000200241af026a10bd8180800020032004290300370300200220022903303703b001200241af026a200241b0016a418087014180f6de0010a9808080002007200229034810c88180800010ff8180800021032002200c3703b8012002200b3703b001200220033602c401200220013602c0012002428ee2e6d9bb053703582002428ef2b3d5ecb7d601370350200241af026a200241af026a200241d0006a10d480808000200241af026a200241b0016a10da8080800010c2818080001a20002002290348370308200041003602000c0a0b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c78180800037039802200241b0016a200320024198026a10e0808080002002280284024105460d05200241d0006a200241b0016a41d4001093828080001a200241033602a40120022002290388023703a8012002200241af026a200910d1818080003703b001200241b0016a200241c0006a2008200241d0006a10d2818080000240200c2002290358220685427f85200c200c20067c200b2002290350220d7c220e200b54ad7c220f85834200530d00200220022903603703e0012002200d3703b001200220013602d00120022002290388013703c80120022002290380013703c001200220063703b8012002200a2903003703e801200220043602d4012002428ed2aeb30d3703a0022002428ef2b3d5ecb7d60137039802200241af026a200241af026a20024198026a10d480808000200241af026a200241b0016a10d88080800010c2818080001a200241b0016a200241d0006a41e0001093828080001a2002200720022903482007200241b0016a10d28080800010c9818080002206370348200441016a2104200e210b200f210c0c010b0b41f085c08000108c828080000c040b41e085c08000108782808000000b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c781808000370350200241b0016a2003200241d0006a10e08080800020022802840222074105460d02024020074103460d00200441016a210420022d0088024101710d010b0b410d410620074103471b21030c040b418086c08000108782808000000b000b20004101360200200020033602040c020b410421030b20004101360200200020033602040b200241b0026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710838180800036020c20012001410c6a10d7808080002100200141106a24808080800020000b8b0d04087f017e017f027e23808080800041c0026b2201248080808000200141bf026a10bd818080002001410136023020012000360234200141d0016a200141bf026a200141306a10af808080000240024020012d00f60122024102460d0020012802d0012103200141086a410472200141d0016a41047241221093828080001a20012003360208200120012d00f7013a002f200120023a002e4108210320024101710d01200141086a10b28180800041002102200141286a2203200129032010c88180800010ff818080002104024002400340024020042002470d002001200141bf026a10aa8180800037034020014198016a2104410021052003200129032010c88180800010ff8180800021060240034020062005200620054b1b2107034020052108024020082007470d00200141013a002e2001200141bf026a10c58180800022093703c801200141d0016a2104410021022003200129032010c88180800010ff81808000210a03400240200a2002470d0020012009370320200141bf026a10bd81808000200141d0016a41086a200141306a41086a290300370300200120012903303703d001200141bf026a200141d0016a200141086a10b380808000200120003602602001428ee2aaf4ecc4023703d8012001428ef8f49b8ad7023703d001200141bf026a200141bf026a200141d0016a10d480808000200141e0006a200141bf026a10a78180800010c2818080001a410021030c0b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d08200141e0006a200141d0016a41d4001093828080001a20012903a8022109200120003602502001428ee2aaf4ecc4023703d8012001428ef2b3d5ecb7d6013703d00120012002360254200141bf026a200141bf026a200141d0016a10d480808000200141bf026a200141d0006a10d98080800010c2818080001a200141d0016a200141e0006a41d4001093828080001a200120093703a802200141043602a4022001200420012903c8012004200141d0016a10d28080800010c98180800022093703c801200241016a21020c010b0b419086c08000108782808000000b2003200129032010c88180800010ff8180800020084d0d02200120032001290320200810fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d05200841016a21052001200129038802370348410021020340024020082002470d002001420037035820014200370350410021022003200129032010c88180800010ff8180800021080340024020082002470d002001290350420052200129035822094200552009501b450d052001200141bf026a200141c8006a10d1818080003703d001200141d0016a200141c0006a200141086a200141d0006a10d2818080000c050b024002402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c7818080003703c801200141d0016a2003200141c8016a10e08080800020012802a402220a4105470d010c0a0b41b086c08000108782808000000b200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b80102402004200141c8006a10b481808000450d000240200129035822092001290368220b85427f8520092009200b7c2001290350220b20012903607c220c200b54ad7c220b85834200530d002001200c3703502001200b3703580c010b41c086c08000108c82808000000b200241016a21020c000b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370350200141d0016a2003200141d0006a10e08080800020012802a402220a4105460d07200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b801200241016a21022004200141c8006a10b481808000450d010c020b0b0b0b41d086c08000108782808000000b41a086c08000108782808000000b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e080808000200241016a210220012802a402417d6a0e03030102010b0b41e086c08000108782808000000b000b410621030c010b410421030b200141c0026a24808080800020030b4e01017f23808080800041306b22012480808080000240200042ff01834204510d00000b20012000422088a71085818080002001412f6a200110de808080002100200141306a24808080800020000b7a01017f23808080800041c0006b22022480808080002002413f6a10bd81808000200241013602282002200136022c20022002413f6a200241286a10af808080000240024020022d00264102470d00200041023a0026200041043602000c010b2000200241281093828080001a0b200241c0006a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710878180800036020c20012001410c6a10d7808080002100200141106a24808080800020000bd70201027f23808080800041306b22012480808080002001412f6a10bd8180800020014101360200200120003602044104210202402001412f6a200110b080808000450d002001412f6a10be8180800021022001412f6a10bd81808000200141106a41086a200141086a290300370300200120012903003703102001412f6a200141106a2002200210a9808080002001412f6a10bd8180800020014102360210200120003602142001412f6a200141106a2002200210a9808080002001412f6a10bd818080002001412f6a41b884c080002002200210a9808080002001412f6a10bd818080002001412f6a2002200210c18180800020012002360228200120003602242001428ee2f91c3703182001428ef8f49b8ad7023703102001412f6a2001412f6a200141106a10d4808080002001412f6a200141246a10d98080800010c2818080001a410021020b200141306a24808080800020020bcb0101017f23808080800041c0006b220424808080800020042003370308200420023703000240200042ff01834204520d00200142ff01834204520d00200441106a2004413f6a200410928180800020042802104101460d00200441286a290300210320042903202102200441106a2004413f6a200441086a10a68080800020042802104101460d00200441106a2000422088a72001422088a72002200320042903181089818080002004413f6a200441106a10dc808080002100200441c0006a24808080800020000f0b000b970301037f2380808080004180026b2206248080808000200641ff016a10bd81808000200641013602302006200136023420064190016a200641ff016a200641306a10af808080000240024020062d00b60122074102460d002006280290012108200641086a41047220064190016a41047241221093828080001a200620073a002e20062008360208200620062d00b7013a002f0240200641286a2207200629032010c88180800010ff8180800020024d0d00024002402007200629032010c88180800010ff8180800020024d0d00200620072006290320200210fe8180800010c78180800037033020064190016a2007200641306a10e08080800020062802e40122074105470d01000b41f086c08000108782808000000b200641306a20064190016a41d4001093828080001a2006200736028401200620062903e80137038801200641ff016a20012002200641306a200320042005109081808000210420004100360200200020043703080c020b20004281808080c0003703000c010b20004281808080c0003703000b20064180026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a7108b818080003703002001410f6a200110bb808080002100200141106a24808080800020000b6502017f017e23808080800041306b22012480808080002001412f6a10bd81808000200141023602082001200036020c200141186a2001412f6a200141086a10ae808080002001280218210020012903202102200141306a2480808080002002420020001b0b860102027f017e23808080800041206b22012480808080002001411f6a10bd81808000200141086a2001411f6a41d083c0800010bd80808000410121020240024020012802084101470d00200120012903102203370300200110b28180800020002003370308410021020c010b2000410a3602040b20002002360200200141206a2480808080000b4901027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000410b4100200141fd01711b0b7f01027f23808080800041206b22012480808080002001411f6a10bd818080004100210202402001411f6a41d083c0800010be80808000450d002001411f6a10bd818080002001410636020820012000290300370310410041102001411f6a200141086a10ab8080800041fd01711b21020b200141206a24808080800020020b4d02017f017e23808080800041106b2202248080808000200010bd8180800020022001290300200010cc808080003703002002410f6a200210b8818080002103200241106a24808080800020030b8b0f04017f017e087f017e23808080800041e0006b22072480808080002007200010cf818080002208370300200741086a21092007200920082009200810d08180800010ff8180800010fe81808000418184c08000410410ac81808000220837030020074180043b01382007200920082009200810d08180800010ff8180800010fe81808000200741386a410210ac818080003703002007200741df006a10bc81808000370330200741386a41186a220a4200370300200741386a41106a220b4200370300200741386a41086a220c420037030020074200370338200741306a41086a220d200741306a10d4818080004204200741386a412010ad81808000200741106a41186a220e200a290300370300200741106a41106a220f200b290300370300200741106a41086a2210200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac818080003703002007200010aa8180800037033020072000200741306a108f81808000370308200a4200370300200b4200370300200c420037030020074200370338200741086a41086a200741086a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341306a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341386a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800022083703002007200141187420014180fe03714108747220014108764180fe0371200141187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac8180800022083703002007200241187420024180fe03714108747220024108764180fe0371200241187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac81808000221137030020072003290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703402007200341086a290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703382007200920112009201110d08180800010ff8180800010fe81808000200741386a411010ac8180800022083703002007200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703402007200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe038320054238888484843703382007200920082009200810d08180800010ff8180800010fe81808000200741386a411010ac81808000220537030020072003290340220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac81808000220537030020072003290348220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac8180800022043703002007200642388620064280fe0383422886842006428080fc0783421886200642808080f80f834208868484200642088842808080f80f832006421888428080fc07838420064228884280fe03832006423888848484370338200920042009200410d08180800010ff8180800010fe81808000200741386a410810ac818080002104200741e0006a24808080800020040b190020004200370300200020023502004220864204843703080b7c01027e024002400240024020022903002203a741ff0171220241c500460d002002410b470d02200041106a20031080828080000c010b2001200310e58180800021042001200310e481808000210320002004370318200020033703100b420021030c010b200010f981808000370308420121030b200020033703000b130020004200370300200020023100003703080b4602017f017e23808080800041106b2203248080808000200320012002109581808000200329030821042000200329030037030020002004370308200341106a2480808080000b6d02017f027e23808080800041106b2203248080808000200320022903002204200241086a29030022051082828080000240024020032802000d00200329030821040c010b20012005200410e38180800021040b2000420037030020002004370308200341106a2480808080000b4b00200041003602102000200436020c2000200336020820002002360204200020013602002000200220016b410376220236021820002002200420036b410376220420022004491b3602140b3901017f23808080800041106b22032480808080002003200229020037020820002001200341086a109881808000200341106a2480808080000b6a02027f017e23808080800041106b22032480808080002003200228020022042002280204220210fa818080000240024020032802000d00200329030821050c010b20012004200210d78180800021050b2000420037030020002005370308200341106a2480808080000b5202017f017e23808080800041106b2203248080808000200320022903083703082003200229030037030020012003410210da8180800021042000420037030020002004370308200341106a2480808080000b0e00200020012001109b818080000b7d02017f027e23808080800041106b2203248080808000024002402002290300220442ff018342c800520d0020032004370308420121050240200341106a200410f58180800010ff818080004120470d0020002003290308370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b2e01027e4201210302402001290300220442ff018342cd00520d0020002004370308420021030b200020033703000b0e002000200220011099818080000b130020004200370300200020012903003703080b5102017f017e23808080800041106b220324808080800020032001200210978180800042012104024020032802000d0020002003290308370308420021040b20002004370300200341106a2480808080000b130020004200370300200020012903003703080b130020004200370300200020012903003703080b1200200141bb87c08000410f108b828080000b0300000b02000b4502017f017e23808080800041106b2202248080808000200220002001109481808000024020022802004101470d00000b20022903082103200241106a24808080800020030b070020003100000b0d0020003502004220864204840b070020002903000b070020002903000b0a00200010df818080000b6001017f23808080800041106b22042480808080000240200020012903002002290300200310f28180800042ff01834202510d00419087c08000412b2004410f6a418087c0800041b088c08000108682808000000b200441106a2480808080000b12002000200120022003200410d5818080000b12002000200120022003200410d6818080000b12002000200120022003200410d8818080000b140020002001200220032004200510d9818080000b0e0020002001200210da818080000b2e01027e4201210302402002290300220442ff018342cd00520d0020002004370308420021030b200020033703000b1300200041086a200029030010f8818080001a0b5902017f017e23808080800041206b22032480808080002003200236020c20032001360208200341106a2000200341086a109781808000024020032802104101470d00000b20032903182104200341206a24808080800020040b11002000200110b58180800041ff0171450b2601017e417f200041086a2000290300200129030010db81808000220242005220024200531b0b2e01027e4201210302402002290300220442ff018342c800520d0020002004370308420021030b200020033703000b130020004200370300200020022903003703080b0f002000200129030010f6818080000b1a00200020012903002002290300200329030010f7818080001a0b1000200010dd8180800010ff818080000b1000200010e08180800010ff818080000b0a00200010de818080000b02000b6d01037f23808080800041106b22012480808080002001410f6a10ba818080002102024002402001410f6a10bb8180800022032002490d00200320026b41016a22020d0141a889c08000108c82808000000b41a889c08000108d82808000000b200141106a24808080800020020b140020002001200210ec8180800010fd818080000b0e0020002001200210ed818080000b1b002000200110fe81808000200210fe8180800010f1818080001a0b0e0020002001200210dc818080000b0c002000200110e1818080000b0c002000200110e2818080000b0a00200010e6818080000b1000200020012002200310e7818080000b0e0020002001200210e8818080000b0c002000200110e9818080000b0e0020002001200210ea818080000b1000200020012002200310eb818080000b0e0020002001200210ee818080000b0c002000200110ef818080000b12002000200120022003200410f0818080000b0c002000200110f3818080000b0a00200010f4818080000b0c002000200110f5818080000b070020012903000bdf0102027f027e23808080800041c0006b22042480808080002004200041086a220541b889c08000410810b381808000370308200129030021062002290300210720042005200310a5818080003703202004200737031820042006370310410021010340024020014118470d00410021010240034020014118460d01200441286a20016a200441106a20016a290300370300200141086a21010c000b0b20052000200441086a2005200441286a410310da8180800010ab81808000200441c0006a2480808080000f0b200441286a20016a4202370300200141086a21010c000b0b130020004200370300200020022903003703080b070020002903000b1e00200120022003ad4220864204842004ad4220864204841080808080000b1f00200120022003ad4220864204842004ad4220864204841081808080001a0b1a002001ad4220864204842002ad4220864204841082808080000b2e00024020022004460d00000b2001ad4220864204842003ad4220864204842002ad4220864204841083808080000b3000024020032005460d00000b20012002ad4220864204842004ad4220864204842003ad4220864204841084808080000b1a002001ad4220864204842002ad4220864204841085808080000b0c00200120021086808080000b0c00200120021087808080000b08001088808080000b08001089808080000b0800108a808080000b0800108b808080000b0a002001108c808080000b0a002001108d808080000b0c0020012002108e808080000b0a002001108f808080000b0a0020011090808080000b08001091808080000b0e002001200220031092808080000b0c00200120021093808080000b0a0020011094808080000b0c00200120021095808080000b0e002001200220031096808080000b0c00200120021097808080000b0c00200120021098808080000b0c00200120021099808080000b0a002001109a808080000b10002001200220032004109b808080000b0c0020012002109c808080000b0e00200120022003109d808080000b0a002001109e808080000b0800109f808080000b0a00200110a0808080000b0a00200110a1808080000b0e0020012002200310a2808080000b0a00200110a3808080000b0900428390808080010bb50102017f017e23808080800041106b220324808080800002400240200241094b0d00420021040340024020020d002000410036020020002004420886420e843703080c030b200341086a20012d000010fb81808000024020032d00084103460d0020002003290308370204200041013602000c030b200141016a21012002417f6a2102200442068620033100098421040c000b0b20002002360208200041003a0004200041013602000b200341106a2480808080000b820101017f410121020240200141ff017141df00460d000240200141506a41ff0171410a490d000240200141bf7f6a41ff0171411a490d0002402001419f7f6a41ff0171411a490d00200020013a0001200041013a00000f0b200141456a21020c020b2001414b6a21020c010b200141526a21020b200041033a0000200020023a00010b070020004208880b070020004201510b0b002000ad4220864204840b08002000422088a70b160020002001423f87370308200020014208873703000b3201017e420121020240200142ffffffffffffffff00560d0020002001420886420684370308420021020b200020023703000b5001017e42012103024020014280808080808080c0007c42ffffffffffffffff00560d0020012001852001423f87200285844200520d0020002001420886420b84370308420021030b200020033703000ba00601067f0240200028020022032000280208220472450d0002402004410171450d00200120026a210502400240200028020c22060d0041002107200121080c010b41002107200121080340200822042005460d020240024020042c00002208417f4c0d00200441016a21080c010b0240200841604f0d00200441026a21080c010b0240200841704f0d00200441036a21080c010b200441046a21080b200820046b20076a21072006417f6a22060d000b0b20082005460d00024020082c00002204417f4a0d0020044160491a0b024002402007450d00024020072002490d0020072002460d01410021040c020b200120076a2c000041404e0d00410021040c010b200121040b2007200220041b21022004200120041b21010b024020030d00200028021c20012002200028022028020c118080808000000f0b200028020421030240024020024110490d0020012002108a8280800021040c010b024020020d00410021040c010b2002410371210602400240200241044f0d0041002104410021070c010b2002410c712105410021044100210703402004200120076a22082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a21042005200741046a2207470d000b0b2006450d00200120076a21080340200420082c000041bf7f4a6a2104200841016a21082006417f6a22060d000b0b02400240200320044d0d00200320046b2106024002400240410020002d0018220420044103461b22040e03020001020b20062104410021060c010b20064101762104200641016a41017621060b200441016a21042000280210210720002802202108200028021c210003402004417f6a2204450d0220002007200828021011818080800000450d000b41010f0b200028021c20012002200028022028020c118080808000000f0b0240200020012002200828020c11808080800000450d0041010f0b410021040340024020062004470d0020062006490f0b200441016a210420002007200828021011818080800000450d000b2004417f6a2006490f0b200028021c20012002200028022028020c118080808000000b4d01017f23808080800041206b22032480808080002003410036021020034101360204200342043702082003200136021c200320003602182003200341186a36020020032002108582808000000b3601017f23808080800041106b2202248080808000200241013b010c2002200136020820022000360204200241046a10a381808000000b8f0101017f23808080800041c0006b22052480808080002005200136020c2005200036020820052003360214200520023602102005410236021c200541c08ac08000360218200542023702242005418280808000ad422086200541106aad843703382005418380808000ad422086200541086aad843703302005200541306a360220200541186a2004108582808000000b130041908ac08000412b2000108482808000000b14002001200028020020002802041083828080000b180020002802002001200028020428020c118180808000000be90601087f024002402001200041036a417c71220220006b2203490d00200120036b22044104490d002004410371210541002106410021010240200220004622070d004100210102400240200020026b2208417c4d0d00410021090c010b4100210903402001200020096a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2101200941046a22090d000b0b20070d00200020096a21020340200120022c000041bf7f4a6a2101200241016a2102200841016a22080d000b0b200020036a210002402005450d0020002004417c716a22022c000041bf7f4a210620054101460d00200620022c000141bf7f4a6a210620054102460d00200620022c000241bf7f4a6a21060b20044102762108200620016a21030340200021042008450d02200841c001200841c001491b220641037121072006410274210541002102024020084104490d002004200541f007716a210941002102200421010340200128020c2200417f7341077620004106767241818284087120012802082200417f7341077620004106767241818284087120012802042200417f7341077620004106767241818284087120012802002200417f7341077620004106767241818284087120026a6a6a6a2102200141106a22012009470d000b0b200820066b2108200420056a2100200241087641ff81fc0771200241ff81fc07716a418180046c41107620036a21032007450d000b2004200641fc01714102746a22022802002201417f734107762001410676724181828408712101024020074101460d0020022802042200417f7341077620004106767241818284087120016a210120074102460d0020022802082202417f7341077620024106767241818284087120016a21010b200141087641ff811c71200141ff81fc07716a418180046c41107620036a0f0b024020010d0041000f0b2001410371210902400240200141044f0d0041002103410021020c010b2001417c712108410021034100210203402003200020026a22012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a21032008200241046a2202470d000b0b2009450d00200020026a21010340200320012c000041bf7f4a6a2103200141016a21012009417f6a22090d000b0b20030b1a00200028021c20012002200028022028020c118080808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141dc89c0800036020820014204370210200141086a2000108582808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141888ac0800036020820014204370210200141086a2000108582808000000b5701017e02400240200341c000710d002003450d012002410020036b413f71ad8620012003413f71ad220488842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080bf60804017f017e037f047e23808080800041b0016b2205248080808000420021060240024002400240024020047920037942c0007c20044200521ba7220720027920017942c0007c20024200521ba722084d0d002008413f4b0d01200741df004b0d02200720086b4120490d03200541a0016a2003200441e00020076b2209108e8280800020053502a00142017c210a4200210b420021060240024002400240034020054190016a2001200241c00020086b2208108e82808000200529039001210c0240200820094f0d00200541d0006a200320042008108e82808000024002402005290350220a50450d000c010b200c200a80210c0b200541c0006a200c420020032004109282808000024020012005290340220d5422082002200541c8006a290300220a542002200a511b0d002002200a7d2008ad7d21022001200d7d21012006200b200c7c220c200b54ad7c21060c0b0b200220047c200120037c2204200154ad7c200a7d2004200d54ad7d21022004200d7d21012006200c200b7c427f7c220c200b54ad7c21060c0a0b20054180016a200c200a80220c4200200820096b41ff00712208109082808000200541f0006a200c420020032004109282808000200541e0006a2005290370200541f0006a41086a290300200810908280800020054180016a41086a29030020067c2005290380012206200b7c220b200654ad7c210620072002200541e0006a41086a2903007d20012005290360220c54ad7d2202792001200c7d22017942c0007c20024200521ba722084d0d012008413f4d0d000b200350450d010c020b20012003542208200220045420022004511b450d02200b210c0c070b200120038021020b200120038221012006200b20027c220c200b54ad7c2106420021020c050b200220047d2008ad7d2102200120037d21012006200b42017c220c50ad7c21060c040b200220044200200120035a200220045a20022004511b22081b7d20012003420020081b220454ad7d2102200120047d21012008ad210c0c030b20012001200380220c20037e7d210142002106420021020c020b20022002200342ffffffff0f83220480220620037e7d4220862001422088220c842004802202422086200c200220037e7d422086200142ffffffff0f83842201200480220384210c2001200320047e7d210120024220882006842106420021020c010b200541306a2003200441c00020086b2208108e82808000200541206a200120022008108e8280800042002106200541106a200342002005290320200529033080220c4200109282808000200520044200200c42001092828080002005290310210a02400240200541086a290300200541106a41086a290300220d20052903007c220b200d54ad7c4200520d002001200a5422082002200b542002200b511b450d010b200420027c200320017c2201200354ad7c200b7d2001200a54ad7d2102200c427f7c210c2001200a7d21010c010b2002200b7d2008ad7d21022001200a7d2101420021060b200020013703102000200c3703002000200237031820002006370308200541b0016a2480808080000b5701017e02400240200341c000710d002003450d0120022003413f71ad2204862001410020036b413f71ad88842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080bf50303017f027e027f23808080800041e0006b220624808080800042002107420021084100210902402001200284500d002003200484500d00420020037d2003200442005322091b2107420020017d20012002420053220a1b2108420020042003420052ad7c7d200420091b21032004200285210402400240420020022001420052ad7c7d2002200a1b2202500d0002402003500d00200641d0006a2007200320082002109282808000200641d8006a290300210141012109200629035021020c020b200641c0006a2008420020072003109282808000200641306a2002420020072003109282808000200641c0006a41086a290300220220062903307c2201200254200641306a41086a290300420052722109200629034021020c010b02402003500d00200641206a2007420020082002109282808000200641106a2003420020082002109282808000200641206a41086a290300220220062903107c2201200254200641106a41086a290300420052722109200629032021020c010b20062007200320082002109282808000200641086a290300210141002109200629030021020b420020027d20022004420053220a1b2108420020012002420052ad7c7d2001200a1b22072004854200590d00410121090b200520093602002000200737030820002008370300200641e0006a2480808080000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072003422088220820067e22062005200142208822097e7c22054220867c220a3703002000200820097e2005200654ad4220862005422088847c200a200754ad7c200420017e200320027e7c7c3703080ba50501087f02400240200241104f0d00200021030c010b02402000410020006b41037122046a220520004d0d002004417f6a2106200021032001210702402004450d002004210820002103200121070340200320072d00003a0000200741016a2107200341016a21032008417f6a22080d000b0b20064107490d000340200320072d00003a0000200341016a200741016a2d00003a0000200341026a200741026a2d00003a0000200341036a200741036a2d00003a0000200341046a200741046a2d00003a0000200341056a200741056a2d00003a0000200341066a200741066a2d00003a0000200341076a200741076a2d00003a0000200741086a2107200341086a22032005470d000b0b2005200220046b2208417c7122066a210302400240200120046a22074103710d00200520034f0d0120072101034020052001280200360200200141046a2101200541046a22052003490d000c020b0b200520034f0d002007410374220241187121042007417c71220941046a2101410020026b411871210a2009280200210203402005200220047620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20084103712102200720066a21010b02402003200320026a22054f0d002002417f6a2108024020024107712207450d000340200320012d00003a0000200141016a2101200341016a21032007417f6a22070d000b0b20084107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032005470d000b0b20000b4b01017f23808080800041206b220524808080800020052001200220032004108f82808000200529031021042000200541186a29030037030820002004370300200541206a2480808080000b0bda0a0100418080c0000bd00a7372632f6c69622e7273616d6f756e74656e645f64617465686f7572735f6c6f67676564696470726f6f665f7665726966696564726174655f7065725f686f757273746172745f64617465737461747573746f6b656e776f726b65720a001000060000001000100008000000180010000c0000002400100002000000260010000e000000340010000d000000410010000a0000004b001000060000005100100005000000560010000600000063616e63656c6c656466696e616e63655f617070726f76656466696e616e63655f617070726f7665726d616e616765726d616e616765725f617070726f7665646f7261636c655f7075626b65796f7261636c655f726f746174696f6e737061796d656e7473000000ac00100009000000b500100010000000c500100010000000d500100007000000dc00100010000000ec0010000d000000f9001000100000000901100008000000457363726f77436f756e7400540110000b000000457363726f77000068011000060000004e6f6e6365000000780110000500000041646d696e000000880110000500000050656e64696e6741646d696e980110000c0000005061757365640000ac011000060000004f7261636c654b6579000000bc011000090000000300000000000000000000000000000004000000000000000000000000000000050000000000000000000000000000000143465750000000000010000a000000fd01000009000000000010000a0000000302000030000000000010000a000000f70100002700000000000000000000000000000000000000000010000a000000500200001e0000000000000000000000000010000a000000b302000025000000000010000a0000005d0200002b000000000010000a0000006c02000029000000000010000a0000006e02000015000000000010000a0000006102000024000000000010000a0000003c02000025000000000010000a0000004b0200000d000000000010000a000000ea0200003b000000000010000a000000a503000030000000000010000a000000a80300000d000000000010000a000000950300002c000000000010000a0000001104000030000000000010000a000000ee03000032000000000010000a000000fd03000030000000000010000a000000ff03000015000000000010000a000000f20300002b000000000010000a000000e403000027000000000010000a0000008e040000370000000000000000000000010000000100000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c7565436f6e76657273696f6e4572726f722f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f656e762e7273000000ca03100063000000770100000e0000002f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f73746f726167652e72730040041000670000009a000000090000007472616e73666572617474656d707420746f206164642077697468206f766572666c6f77c00410001c000000617474656d707420746f2073756274726163742077697468206f766572666c6f77000000e40410002100000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75653a2000000001000000000000003b05100002000000008f460e636f6e74726163747370656376300000000400000000000000000000000d436f6e74726163744572726f7200000000000016000000000000000f416c7265616479417070726f7665640000000001000000000000000c556e617574686f72697a6564000000020000000000000016496e76616c69644f7261636c655369676e61747572650000000000030000000000000010496e76616c69645061796d656e744964000000040000000000000015496e73756666696369656e74417070726f76616c730000000000000500000000000000175061796d656e74416c726561647946696e616c697a65640000000006000000000000000d496e76616c6964416d6f756e7400000000000007000000000000000f457363726f7743616e63656c6c65640000000008000000000000000c496e76616c69644e6f6e63650000000900000000000000084e6f7441646d696e0000000a000000000000000650617573656400000000000b000000000000000f41646d696e416c7265616479536574000000000c000000000000000c50726f6f664d697373696e670000000d000000000000000d4e6f6e63654f766572666c6f770000000000000e00000000000000125369676e6572734e6f7444697374696e637400000000000f0000003b546865206f7261636c65207075626c6963206b6579206973206e6f74206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000164f7261636c654b65794e6f745265676973746572656400000000001000000042417474657374656420686f757273207820726174655f7065725f686f757220646f6573206e6f7420657175616c2074686520657363726f77656420616d6f756e742e000000000013416d6f756e74486f7572734d69736d6174636800000000110000002a656e645f64617465206973206e6f74207374726963746c792061667465722073746172745f646174652e00000000000d496e76616c6964506572696f64000000000000120000002642617463682065786365656473204d41585f42415443485f53495a45207061796d656e74732e00000000000d4261746368546f6f4c61726765000000000000130000004454686973205741534d2070696e7320616e2065787065637465642061646d696e20616e642074686520737570706c6965642061646472657373206973206e6f742069742e0000000d41646d696e4d69736d6174636800000000000014000000464e6f2061646d696e207472616e736665722069732070656e64696e672c206f72207468652063616c6c6572206973206e6f74207468652070726f706f7365642061646d696e2e00000000000e4e6f50656e64696e6741646d696e000000000015000000336075706772616465602072657175697265732074686520636f6e747261637420746f206265207061757365642066697273742e00000000094e6f74506175736564000000000000160000000300000000000000000000000d5061796d656e7453746174757300000000000005000000000000000750656e64696e670000000000000000000000000f4d616e61676572417070726f7665640000000001000000000000000f46696e616e6365417070726f7665640000000002000000000000000946696e616c697a656400000000000003000000000000000943616e63656c6c6564000000000000040000000100000000000000000000000f5061796d656e745363686564756c65000000000a0000000000000006616d6f756e7400000000000b0000000000000008656e645f6461746500000006000000000000000c686f7572735f6c6f676765640000000b00000000000000026964000000000004000000815365742074727565206f6e6c7920627920607375626d69745f686f7572735f70726f6f666020616674657220612076616c69642045643235353139206f7261636c650a7369676e61747572652e20607061795f626174636860207265667573657320746f20736574746c652061207061796d656e7420776974686f75742069742e0000000000000e70726f6f665f7665726966696564000000000001000000000000000d726174655f7065725f686f75720000000000000b000000000000000a73746172745f6461746500000000000600000000000000067374617475730000000007d00000000d5061796d656e745374617475730000000000008c5065722d7061796565205374656c6c617220417373657420436f6e7472616374202853414329206164647265737320e2809420652e672e2074686520555344432053414320666f720a6f6e6520706179656520616e6420746865206e617469766520584c4d2053414320666f7220616e6f746865722077697468696e207468652073616d652062617463682e00000005746f6b656e000000000000130000000000000006776f726b65720000000000130000000100000000000000000000000e436f7265466c6f77457363726f77000000000008000000000000000963616e63656c6c656400000000000001000000000000001066696e616e63655f617070726f76656400000001000000000000001066696e616e63655f617070726f7665720000001300000000000000076d616e61676572000000001300000000000000106d616e616765725f617070726f76656400000001000000000000000d6f7261636c655f7075626b6579000000000003ee000000200000004354696d657320746865206f7261636c65206b657920686173206265656e20726f7461746564206f6e207468697320657363726f772028617564697420747261696c292e00000000106f7261636c655f726f746174696f6e730000000400000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000002000000000000000000000007446174614b6579000000000700000000000000000000000b457363726f77436f756e7400000000010000000000000006457363726f77000000000001000000040000000100000000000000054e6f6e6365000000000000010000000400000000000000000000000541646d696e000000000000000000003d50726f706f736564206e6578742061646d696e2c206177616974696e6720616363657074616e6365202874776f2d737465702068616e646f766572292e0000000000000c50656e64696e6741646d696e0000000000000000000000065061757365640000000000010000004a52656769737465726564206f7261636c65207369676e696e67206b6579732e2050726573656e6365203d3e20747275737465642062792074686520706c6174666f726d2061646d696e2e0000000000094f7261636c654b657900000000000001000003ee0000002000000000000000c85365742074686520636f6e74726163742061646d696e206f6e63652c20696d6d6564696174656c79206166746572206465706c6f792e204964656d706f74656e742d67756172643a0a6661696c7320696620616e2061646d696e20697320616c726561647920636f6e666967757265642e204966206e657665722063616c6c65642c2074686520636f6e74726163740a73696d706c7920686173206e6f2061646d696e20616e642063616e206e6576657220626520706175736564206f722075706772616465642e0000000a696e69745f61646d696e000000000001000000000000000561646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000f85468652061646d696e20616464726573732062616b656420696e746f2074686973205741534d206174206275696c642074696d652c20696620616e792e0a0a526561642d6f6e6c792c20736f20616e206f70657261746f7220286f7220616e2061756469746f72292063616e20636f6e6669726d206166746572206465706c6f7920746861740a7468652072756e6e696e6720636f64652069732070696e6e656420746f20746865206b65792074686579206578706563742c20726174686572207468616e207472757374696e670a7468617420746865206465706c6f7920736372697074207761732072756e20636f72726563746c792e0000000e65787065637465645f61646d696e00000000000000000001000003e800000013000000000000010d50726f706f73652061206e65772061646d696e202863757272656e742061646d696e206f6e6c79292e20537465702031206f6620322e0a0a48616e646f7665722069732074776f2d73746570206265636175736520612073696e676c652d73746570207472616e7366657220746f2061206d69737479706564206f720a756e636f6e74726f6c6c65642061646472657373207065726d616e656e746c792064657374726f797320746865206162696c69747920746f2070617573652c20757067726164652c0a6f72206d616e61676520746865206f7261636c652072656769737472792e205468652070726f706f736564206b6579206d7573742070726f76652069742063616e207369676e2e0000000000000d70726f706f73655f61646d696e0000000000000100000000000000096e65775f61646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000004341636365707420612070656e64696e672061646d696e2068616e646f766572202870726f706f7365642061646d696e206f6e6c79292e20537465702032206f6620322e000000000c6163636570745f61646d696e0000000000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000345468652063757272656e746c7920636f6e666967757265642061646d696e2c206966206f6e6520686173206265656e207365742e000000096765745f61646d696e0000000000000000000001000003e80000001300000000000000865061757365206f7220756e70617573652073746174652d6368616e67696e67206f7065726174696f6e73202861646d696e206f6e6c79292e206063616e63656c5f657363726f77600a737461797320617661696c61626c65207768696c652070617573656420736f2066756e64732063616e20616c7761797320626520726566756e6465642e00000000000a7365745f706175736564000000000001000000000000000670617573656400000000000100000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000000000000969735f7061757365640000000000000000000001000000010000000000000076557067726164652074686520636f6e7472616374205741534d202861646d696e206f6e6c79292e20456e61626c657320666978657320776974686f7574206368616e67696e670a74686520636f6e74726163742061646472657373206f72206d6967726174696e6720657363726f772066756e64732e000000000007757067726164650000000001000000000000000d6e65775f7761736d5f68617368000000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000001e4526567697374657220616e206f7261636c65207369676e696e67206b657920617320747275737465642062792074686520706c6174666f726d202861646d696e206f6e6c79292e0a0a57485920412052454749535452593a2070726576696f75736c7920746865206d616e616765722070617373656420616e7920606f7261636c655f7075626b65796020746865790a6c696b656420696e746f2060696e697469616c697a655f6d756c74695f7369675f657363726f77602c20736f2061206d616e6167657220636f756c6420696e7374616c6c0a7468656972206f776e206b657920616e64207369676e207468656972206f776e2022766572696669656420776f726b22206174746573746174696f6e732e205468650a70726f6f662d6f662d776f726b206761746520776173207468657265666f7265206d616e616765722d61747465737461626c65202d2d2070726f6365647572616c2c206e6f740a63727970746f677261706869632e20457363726f7773206d6179206e6f77206f6e6c79206e616d652061206b6579207468652061646d696e2068617320726567697374657265642c0a7768696368206d616b657320746865206f7261636c6520616e20696e646570656e64656e7420706172747920627920636f6e737472756374696f6e2e0000001372656769737465725f6f7261636c655f6b6579000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019b5265766f6b6520612070726576696f75736c792072656769737465726564206f7261636c65206b6579202861646d696e206f6e6c79292e0a0a4578697374696e6720657363726f777320616c7265616479206e616d696e672074686973206b6579206b6565702066756e6374696f6e696e67202d2d207265766f6b696e672069730a6e6f7420726574726f6163746976652c20626563617573652073696c656e746c7920696e76616c69646174696e6720696e2d666c69676874206174746573746174696f6e730a776f756c6420737472616e642066756e64656420657363726f77732e2049742073746f707320746865206b6579206265696e67206e616d6564206279204e455720657363726f77730a616e64204e455720726f746174696f6e732e20546f207265746972652061206b65792066726f6d2061206c69766520657363726f772c20746865206d616e616765722063616c6c730a60726f746174655f6f7261636c655f6b6579602c207768696368207265766f6b6573207468617420657363726f7727732076657269666965642070726f6f66732e00000000117265766f6b655f6f7261636c655f6b65790000000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000325472756520696620607075626b657960206973206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000001869735f6f7261636c655f6b65795f726567697374657265640000000100000000000000067075626b65790000000003ee00000020000000010000000100000000000000d3526f7461746520746865206f7261636c65207075626c6963206b657920666f7220616e20657363726f772e205369676e6174757265732070726f6475636564206279207468650a72657469726564206b65792073746f7020766572696679696e6720696d6d6564696174656c792c2073696e636520607665726966795f6f7261636c655f776f726b602072656164730a746869732073746f726564206b65792e204d616e616765722d617574686f72697a65643b2072656675736564206f6e63652066756e64732068617665206d6f7665642e0000000011726f746174655f6f7261636c655f6b6579000000000000020000000000000009657363726f775f696400000000000004000000000000000a6e65775f7075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000a2496e697469616c697a652061206d756c74692d7369676e617475726520657363726f772077697468207061796d656e74207363686564756c657320616e64206f7261636c65207075626c6963206b65792e0a546865206f7261636c655f7075626b657920697320616e2045643235353139207075626c6963206b6579207573656420746f2076657269667920776f726b2070726f6f66207369676e6174757265732e00000000001b696e697469616c697a655f6d756c74695f7369675f657363726f77000000000400000000000000076d616e616765720000000013000000000000001066696e616e63655f617070726f76657200000013000000000000000d6f7261636c655f7075626b6579000000000003ee0000002000000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000001000003e900000004000007d00000000d436f6e74726163744572726f7200000000000000000001595375626d697420686f7572732070726f6f6620766572696669656420627920616e2045643235353139206f7261636c65207369676e61747572652e0a0a546865206f7261636c65207369676e7320746865203139382d6279746520646f6d61696e2d73657061726174656420707265696d61676520646f63756d656e746564206f6e0a606275696c645f70726f6f665f6d657373616765602028736368656d61207632292e2054686520636f6e74726163742072656275696c6473207468617420707265696d6167650a66726f6d2073746f7265642073746174652c20766572696669657320697420616761696e73742074686520657363726f772773206f7261636c65207075626c6963206b65792c0a656e666f726365732060686f75727320782072617465203d3d20616d6f756e74602c20616e6420636f6e73756d657320746865206e657874206578706563746564206e6f6e63652e000000000000127375626d69745f686f7572735f70726f6f660000000000050000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f6964000000000004000000000000000c686f7572735f6c6f676765640000000b00000000000000056e6f6e63650000000000000600000000000000097369676e6174757265000000000003ee0000004000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e4d616e6167657220617070726f76616c206f66207061796d656e7428732900000000000f6d616e616765725f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e46696e616e636520617070726f76616c206f66207061796d656e7428732900000000000f66696e616e63655f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000bb46696e616c697a65207061796d656e74206f6e636520626f746820617070726f76616c7320617265206f627461696e65640a4465707265636174656420616c6961732072657461696e656420736f20746865204d61696e6e65742d6465706c6f7965642041424920616e6420746865206578697374696e670a64617368626f61726420636c69656e74206b65657020776f726b696e672e204e65772063616c6c6572732073686f756c642075736520607061795f6261746368602e000000001066696e616c697a655f7061796d656e74000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f7200000000000000000000b2536574746c65206576657279207061796d656e7420696e2074686520657363726f773a206f6e65207472616e73616374696f6e2c206f6e6520534143207472616e73666572207065720a70617965652c206561636820696e20746861742070617965652773206f776e2061737365742e20526571756972657320626f746820617070726f76616c7320414e4420610a7665726966696564206f7261636c652070726f6f66206f6e20657665727920726f772e0000000000097061795f6261746368000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f72000000000000000000006e43616e63656c20616e20657363726f77202864697370757465207265736f6c7574696f6e20e28094206d616e61676572206f6e6c79292e0a416c6c6f776564206576656e207768696c65207061757365642028656d657267656e6379207769746864726177616c2070617468292e00000000000d63616e63656c5f657363726f77000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f720000000000000000000017526574726965766520657363726f772064657461696c73000000000a6765745f657363726f770000000000010000000000000009657363726f775f69640000000000000400000001000003e9000007d00000000e436f7265466c6f77457363726f770000000007d00000000d436f6e74726163744572726f720000000000000000000121457874656e6420616e20657363726f7727732073746f72616765206c69666574696d652e20416e796f6e65206d61792063616c6c20746869732e0a0a50657273697374656e7420656e747269657320746861742072756e206f7574206f662072656e742061726520617263686976656420746f2074686520457870697265640a537461746520537461636b20616e642063616e20626520726573746f7265643b207468657920617265206e6f742064656c657465642e20546865206661696c75726520746869730a61766f69647320697320612066756e64656420657363726f77206265636f6d696e672074656d706f726172696c7920756e757361626c6520756e74696c20736f6d656f6e650a7061797320746f20726573746f72652069742e00000000000011657874656e645f657363726f775f74746c000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019552657475726e2074686520657861637420627974657320746865206f7261636c65206d757374207369676e20666f722074686973207061796d656e742e0a0a526561642d6f6e6c792e204578706f73696e672074686520707265696d616765206d616b65732074686520434f4e5452414354207468652073696e676c6520736f75726365206f660a747275746820666f7220746865206d65737361676520666f726d61743a20616e206f66662d636861696e207369676e65722063616e2073696d756c61746520746869732063616c6c0a616e64207369676e207468652072657475726e656420627974657320766572626174696d20696e7374656164206f66207265696d706c656d656e74696e6720746865206c61796f75740a616e6420686f70696e67207468652074776f2061677265652e20457665727920686973746f726963616c206d69736d61746368206265747765656e2061207369676e657220616e640a6120766572696669657220697320612062756720746869732072656d6f76657320627920636f6e737472756374696f6e2e0000000000000e70726f6f665f707265696d6167650000000000040000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f69640000000000040000000000000005686f7572730000000000000b00000000000000056e6f6e63650000000000000600000001000003e90000000e000007d00000000d436f6e74726163744572726f7200000000000000000000ac52657475726e20746865206e657874206578706563746564206f7261636c65206e6f6e636520666f7220616e20657363726f772e0a546865206f7261636c65206d757374207369676e20612070726f6f66207573696e6720746869732065786163742076616c756520287265706c61792070726f74656374696f6e292e0a52657475726e73203020666f7220616e20756e6b6e6f776e2f756e696e697469616c697a656420657363726f772e000000096765745f6e6f6e6365000000000000010000000000000009657363726f775f6964000000000000040000000100000006001e11636f6e7472616374656e766d6574617630000000000000001400000000006f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e38352e3000000000000000000008727373646b7665720000002f32302e352e30233965326333303232623433353562323234613761383134653133626135313736316565623134626200"
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 22
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 22
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 22
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "upgrade"
+ },
+ {
+ "vec": [
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": false
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": false
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 22
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 22
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 22
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "upgrade"
+ },
+ {
+ "vec": [
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_upgrade_preserves_escrow_state_and_custody.1.json b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_preserves_escrow_state_and_custody.1.json
new file mode 100644
index 0000000..de03583
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_preserves_escrow_state_and_custody.1.json
@@ -0,0 +1,4104 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "register_oracle_key",
+ "args": [
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "initialize_multi_sig_escrow",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "manager_approve",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "upgrade",
+ "args": [
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": false
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "finance_approve",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "pay_batch",
+ "args": [
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Escrow"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "EscrowCount"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u32": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Nonce"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "u64": 1
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "OracleKey"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "bool": true
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 1555200
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Paused"
+ }
+ ]
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 990000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da",
+ "code": "0061736d01000000019b022960037f7f7f017f60027f7f017f60047e7e7e7e017e60027e7e017e60037e7e7e017e6000017e60017e017e60037f7f7f0060027f7e0060047f7f7f7f0060057f7f7e7f7f0060027f7f017e60047f7f7f7e0060027e7f017e60017f017e60017e017f6000017f60017f0060017f017f60027f7e017f60057f7e7e7e7e0060057e7e7e7e7e017e60067f7f7e7e7e7e017f60027f7f0060067f7f7f7e7e7e0060077f7f7f7f7e7e7e017e60057f7f7f7f7f0060000060057f7e7e7f7f017e60057f7e7e7f7f0060057f7f7f7f7f017e60067f7e7f7f7f7f017e60037f7f7f017e60037f7e7e017f60037f7e7e017e60027f7e017e60047f7e7e7e017e60057f7e7e7e7e017e60037f7e7e0060047f7e7e7f0060067f7e7e7e7e7f0002d901240162013200020162013100020162016a0003016d01390004016d016100020176016700030178013000030178013100030178013300050178013600050178013700050178013800050169015f00060169013000060169013600030169013700060169013800060176015f0005017601300004017601310003017601330006017601360003016c015f0004016c01300003016c01310003016c01320003016c01360006016c01370002016c013800030164015f00040162015f00060162013400050162013800060163015f000601630130000401610130000603f301f1010707070708090a010b07070701070c070c070c070c0b0c0b010701070707070b07070707070707070d0e0b0b0b0b0b070b0b0b0b0b0b0b070b0b0b0107060f05060f0510051106120510060f060f060f060f0313021415160612061206170612061706120218060e1110120b1907070707071a070707070707070707070701111b0b0b0b0b0b0e0c1c1d1e1f20071120010107070b0912120e11122122072223230e2422232224222325230e230b09070e1c1d201e1f2022220e0e0e0e23232223230e242223222422222223252224230e23232423050717060f0e0f0808260007171a11010101001111271427281400140405017001040405030100110619037f01418080c0000b7f0041d08ac0000b7f0041d08ac0000b07ba031b066d656d6f727902000a696e69745f61646d696e00610e65787065637465645f61646d696e00630d70726f706f73655f61646d696e00640c6163636570745f61646d696e0066096765745f61646d696e00680a7365745f706175736564006a0969735f706175736564006c0775706772616465006e1372656769737465725f6f7261636c655f6b65790070117265766f6b655f6f7261636c655f6b657900721869735f6f7261636c655f6b65795f72656769737465726564007411726f746174655f6f7261636c655f6b657900761b696e697469616c697a655f6d756c74695f7369675f657363726f770078127375626d69745f686f7572735f70726f6f66007a0f6d616e616765725f617070726f7665007c0f66696e616e63655f617070726f7665007e1066696e616c697a655f7061796d656e740080010d63616e63656c5f657363726f770082010a6765745f657363726f7700840111657874656e645f657363726f775f74746c0086010e70726f6f665f707265696d616765008801096765745f6e6f6e6365008a01097061795f6261746368008001015f00a4010a5f5f646174615f656e6403010b5f5f686561705f626173650302090c010041010b03a201890288020adff901f1014602017f017e23808080800041106b220324808080800020032001200210a580808000200329030821042000200329030037030020002004370308200341106a2480808080000b6102017f017e23808080800041106b22032480808080002003200229030022041081828080000240024020032802000d00200329030821040c010b2001200410c38180800021040b2000420037030020002004370308200341106a2480808080000b6401027e02400240024020022903002203a741ff0171220241c000460d0020024106470d0142002104200310fc8180800021030c020b420021042001200310c48180800021030c010b4201210410f98180800021030b20002004370300200020033703080bf80304027f017e017f047e23808080800041d0006b22032480808080004100210402400340200441c000460d01200320046a4202370300200441086a21040c000b0b0240024002400240024002400240024002402002290300220542ff018342cc00520d0020012005419482c0800041082003410810af818080001a410120032d0000220441004741017420044101461b22044102460d01410120032d0008220241004741017420024101461b22024102460d02200341c0006a200341106a2001109c8180800020032802400d0320032903482105200341c0006a200341186a2001109c8180800020032802400d04410120032d0020220641004741017420064101461b22064102460d0520032903482107200341c0006a200341286a2001109a8180800020032802400d062003290330220842ff01834204520d0702402003290338220942ff018342cb00520d002003290348210a200020043a0026200020023a0025200020063a002420002008422088a7360220200020093703182000200a37031020002005370308200020073703000c090b200041023a00260c080b200041023a00260c070b200041023a00260c060b200041023a00260c050b200041023a00260c040b200041023a00260c030b200041023a00260c020b200041023a00260c010b200041023a00260b200341d0006a2480808080000b3b01017f23808080800041106b2202248080808000200220013703082000200241086a10d48180800010cc818080001a200241106a2480808080000b12002000200142012002200310aa808080000b270020002000200110ac808080002002200310fe81808000200410fe8180800010cd818080001a0b4d02017f017e41022102024020002000200110ac808080002203420110bf81808000450d00410121020240024020002003420110c081808000a741ff01710e020102000b000b410021020b20020bcb0502017f017e23808080800041306b220224808080800002400240024002400240024002400240024020012802000e0700010203040506000b200241206a200041e082c08000109f8180800020022802200d07200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c060b200241206a200041f082c08000109f8180800020022802200d0620022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d062002200229032837031020022003370308200241206a200241086a2000109d818080000c050b200241206a2000418083c08000109f8180800020022802200d0520022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d052002200229032837031020022003370308200241206a200241086a2000109d818080000c040b200241206a2000419083c08000109f8180800020022802200d04200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c030b200241206a200041a483c08000109f8180800020022802200d03200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c020b200241206a200041b483c08000109f8180800020022802200d02200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c010b200241206a200041c883c08000109f8180800020022802200d0120022002290328370318200241186a10d4818080002103200241206a200141086a200010a18180800020022802200d012002200229032837031020022003370308200241206a200241086a2000109d818080000b20022903282103200229032050450d00200241306a24808080800020030f0b000b5e01017e02400240024020012001200210ac808080002203420110bf818080000d00410021010c010b20012003420110c081808000220342ff01834204520d012003422088a72102410121010b20002002360204200020013602000f0b000b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200042003703000c010b200320012004420110c081808000370308200341106a2001200341086a10a68080800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b880102017f017e23808080800041306b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200041023a00260c010b200320012004420110c081808000370300200341086a2001200310a78080800020032d002e4102460d012000200341086a41281093828080001a0b200341306a2480808080000f0b000b160020002000200110ac80808000420110bf818080000b1000200020012002420110b2808080000b210020002000200110ac808080002002200010a781808000200310ca818080001a0b1000200020012002420110b4808080000b210020002000200110ac808080002000200210b980808000200310ca818080001a0b1000200020012002420110b6808080000b210020002000200110ac808080002002200010a681808000200310ca818080001a0b1000200020012002420110b8808080000b210020002000200110ac808080002000200210bb80808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110db80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b210020002000200110ac808080002002200010a881808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110a480808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4d02017f017e41022102024020002000200110ac808080002203420210bf81808000450d00410121020240024020002003420210c081808000a741ff01710e020102000b000b410021020b20020b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420210bf818080000d00200042003703000c010b200320012004420210c081808000370308200341106a2001200341086a10b18180800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b160020002000200110ac80808000420210bf818080000b1000200020012002420210b6808080000b1000200020012002420210ba808080000b850102017f027e23808080800041106b220324808080800020032001200210b6818080000240024020032802000d00200320032903082204370300420121050240200341086a200410d08180800010ff8180800041c000470d0020002003290300370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b950203017f017e027f23808080800041c0006b22032480808080002001200210c380808000210420032001200241086a10c38080800037030820032004370300410021020240034020024110460d01200341106a20026a4202370300200241086a21020c000b0b200341246a200341106a200341106a41106a2003200341106a109681808000410020032802382202200328023422056b2206200620024b1b21022003280224200541037422066a2105200328022c20066a2106024003402002450d0120052006200110a981808000370300200541086a2105200641086a21062002417f6a21020c000b0b2001200341106a410210b08180800021042000420037030020002004370308200341c0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110d381808000024020022802004101470d00000b20022903082103200241106a24808080800020030b7902017f027e23808080800041206b2203248080808000200341106a2002200110a0818080000240024020032802100d00200320032903183703082001200341086a410110b0818080002104420021050c010b10f9818080002104420121050b2000200537030020002004370308200341206a2480808080000ba30102017f017e23808080800041206b2203248080808000200341106a200120021091818080000240024020032802100d0020032903182104200341106a2001200241046a10918180800020032802100d00200320032903183703082003200437030020012003410210b081808000210420004200370300200020043703080c010b10f981808000210420004201370300200020043703080b200341206a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200210918180800002400240024020032802200d0020032903282104200341206a2001200241046a10918180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200241086a10918180800002400240024020032802200d0020032903282104200341206a20022001109e8180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd00102017f027e23808080800041306b2203248080808000200341206a2001200241106a10918180800002400240024020032802200d0020032903282104200341206a200120021094818080002003290328210520032802200d01200341206a2001200241146a10918180800020032802200d002003200329032837031820032005370310200320043703082001200341086a410310b081808000210520004200370300200020053703080c020b10f98180800021050b20004201370300200020053703080b200341306a2480808080000bd20202017f067e23808080800041c0006b2203248080808000200341306a2001200241206a10918180800002400240024020032802300d0020032903382104200341306a2001200241246a10918180800020032802300d0020032903382105200341306a200241106a2001109e8180800020032802300d0020032903382106200341306a200241186a2001109e8180800020032802300d0020032903382107200341306a200120021094818080002003290338210820032802300d01200341306a2001200241306a1094818080002003290338210902402003280230450d00200921080c020b20032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410610b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341c0006a2480808080000bbd0302017f087e23808080800041d0006b2203248080808000200341c0006a2001200241386a10918180800002400240024020032802400d0020032903482104200341c0006a20012002413c6a10918180800020032802400d0020032903482105200341c0006a200241206a2001109e8180800020032802400d0020032903482106200341c0006a200241286a2001109e8180800020032802400d0020032903482107200341c0006a200120021094818080002003290348210820032802400d01200341c0006a2001200241106a1094818080002003290348210902402003280240450d00200921080c020b200341c0006a2001200241306a10a4808080002003290348210a02402003280240450d00200a21080c020b200341c0006a2001200241c0006a10a4808080002003290348210b02402003280240450d00200b21080c020b2003200b3703382003200a37033020032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410810b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341d0006a2480808080000b2a00024020022802000d0020004200370300200042023703080f0b2000200241086a2001109e818080000b4001017f23808080800041106b2202248080808000200220003703082001200241086a200110a88180800010ce818080002100200241106a24808080800020000b15002000280200417f6aad4220864283808080107c0b4502017f017e23808080800041106b220224808080800020022000200110c780808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1d00024020012802000d0020012903080f0b200141046a10cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c680808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6902027f017e23808080800041106b2202248080808000200141046a21030240024020012802000d00200220002003109181808000024020022802000d00200229030821040c020b10f9818080001a000b200310cd8080800021040b200241106a24808080800020040b4502017f017e23808080800041106b220224808080800020022000200110d380808000024020022802004101470d00000b20022903082103200241106a24808080800020030bd00302017f097e23808080800041e0006b2203248080808000200341d0006a200120021094818080000240024020032802500d0020032903582104200341d0006a2001200241c8006a10a48080800020032802500d0020032903582105200341d0006a2001200241106a10948180800020032802500d0020032903582106200341d0006a2001200241d0006a10918180800020032802500d0020032903582107200341d0006a2001200241d8006a10938180800020032802500d0020032903582108200341d0006a2001200241206a10948180800020032802500d0020032903582109200341d0006a2001200241c0006a10a48080800020032802500d002003290358210a2002350254210b200341d0006a200241386a2001109e8180800020032802500d002003290358210c200341d0006a200241306a2001109e8180800020032802500d00200320032903583703482003200c3703402003200b4220864204843703382003200a370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200141dc80c08000410a2003410a10ae81808000210420004200370300200020043703080c010b200042013703000b200341e0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110c280808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110b781808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110ca80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1700024020012802000d0042020f0b200110cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c980808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c580808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c880808000024020022802004101470d00000b20022903082103200241106a24808080800020030bf20202017f067e23808080800041d0006b2203248080808000200341c0006a2001200241266a1093818080000240024020032802400d0020032903482104200341c0006a2001200241256a10938180800020032802400d0020032903482105200341c0006a200241086a2001109e8180800020032802400d0020032903482106200341c0006a20022001109e8180800020032802400d0020032903482107200341c0006a2001200241246a10938180800020032802400d0020032903482108200341c0006a200241106a200110a18180800020032802400d0020032903482109200341c0006a2001200241206a10918180800020032802400d0020032003290348370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200320022903183703382001419482c0800041082003410810ae81808000210420004200370300200020043703080c010b200042013703000b200341d0006a2480808080000b6802017f017e23808080800041106b22022480808080000240024020012802000d0020022000200141086a10d381808000024020022802000d00200229030821030c020b10f9818080001a000b200141046a10cd8080800021030b200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110cb80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6502017f017e23808080800041106b22022480808080000240024020012d00264102460d0020022000200110db80808000024020022802000d00200229030821030c020b10f9818080001a000b200110cd8080800021030b200241106a24808080800020030b2501017e20002903002202422088a72200410520004105491b4105200242ff01834204511b0b9e0502027f0b7e23808080800041f0006b22032480808080004100210402400340200441d000460d01200320046a4202370300200441086a21040c000b0b024002400240024002400240024002400240024002402002290300220542ff018342cc00520d002001200541dc80c08000410a2003410a10af818080001a200341d0006a2001200310928180800020032802500d01200341e8006a290300210520032903602106200341d0006a2001200341086a10a68080800020032802500d0220032903582107200341d0006a2001200341106a10928180800020032802500d032003290318220842ff01834204520d04410120032d0020220441004741017420044101461b22044102460d05200341e8006a29030021092003290360210a200341d0006a2001200341286a10928180800020032802500d06200341e8006a290300210b2003290360210c200341d0006a2001200341306a10a68080800020032802500d072003290358210d200341386a200410df8080800022024105460d08200341d0006a200341c0006a2001109c8180800020032802500d092003290358210e200341d0006a200341c8006a2001109c81808000024020032802500d002003290358210f2000200c3703202000200a37031020002006370300200020043a00582000200236025420002008422088a7360250200020073703482000200d3703402000200e3703382000200f3703302000200b37032820002009370318200020053703080c0b0b200041053602540c0a0b200041053602540c090b200041053602540c080b200041053602540c070b200041053602540c060b200041053602540c050b200041053602540c040b200041053602540c030b200041053602540c020b200041053602540c010b200041053602540b200341f0006a2480808080000b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e2808080003602082001200141086a10d7808080002100200141206a24808080800020000be90101027f23808080800041306b2201248080808000200120003703082001412f6a10bd81808000410c210202402001412f6a41d083c0800010be808080000d00200141086a10b2818080002001412f6a10bd818080002001412f6a41d083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ef2eed90b3703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020b200141306a24808080800020020b3d02017f017e23808080800041206b2200248080808000200042003703082000411f6a200041086a10dd808080002101200041206a24808080800020010b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e5808080003602082001200141086a10d7808080002100200141206a24808080800020000bdd0101027f23808080800041306b220124808080800020012000370308200141106a108c818080000240024020012802100d002001412f6a10bd818080002001412f6a41e083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ed4b8bacdbed7013703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020c010b200128021421020b200141306a24808080800020020b3e02017f017e23808080800041106b2200248080808000200010e78080800036020c20002000410c6a10d7808080002101200041106a24808080800020010bad0203017f017e017f23808080800041306b22002480808080002000412f6a10bd81808000200041106a2000412f6a41e083c0800010bd808080000240024020002802104101470d00200020002903182201370308200041086a10b2818080002000412f6a10bd818080002000412f6a41d083c08000200041086a10c0808080002000412f6a10bd818080002000412f6a2000412f6a41e083c0800010ac80808000420210cb818080001a2000412f6a10bd818080002000412f6a418087014180d21f10c181808000200020013703202000428ef2b5958ab5023703182000428ee6aeb9ea043703102000412f6a2000412f6a200041106a10d480808000200041206a2000412f6a10a88180800010c2818080001a410021020c010b411521020b200041306a24808080800020020b4102017f017e23808080800041206b2200248080808000200041086a10e9808080002000411f6a200041086a10dd808080002101200041206a24808080800020010b3e01017f23808080800041106b22012480808080002001410f6a10bd8180800020002001410f6a41d083c0800010bd80808000200141106a2480808080000b5c01027f23808080800041106b2201248080808000410121020240024002402000a741ff01710e020102000b000b410021020b2001200210eb8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bdc0101017f23808080800041206b2201248080808000200120003a0007200141086a108c818080000240024020012802080d002001411f6a10bd818080002001411f6a41f083c08000200141076a10bf808080002001411f6a10bd818080002001411f6a418087014180d21f10c181808000200120012d00073a001e2001428ed2aadceeac033703102001428ee6aeb9ea043703082001411f6a2001411f6a200141086a10d4808080002001411e6a2001411f6a10a68180800010c2818080001a410021000c010b200128020c21000b200141206a24808080800020000b4102017f017e23808080800041106b2200248080808000200010ed808080003a000e2000410e6a2000410f6a10a6818080002101200041106a24808080800020010b4401027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000200141fd01710b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010ef808080003602082001200141086a10d7808080002100200141206a24808080800020000bcd0101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd81808000411621022001411f6a41f083c0800010bc8080800041fd0171450d01200120003703102001428ed4a9f3cdadeb013703082001428ee6aeb9ea043703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a2001411f6a10bd818080002001411f6a200010a880808000410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f1808080003602082001200141086a10d7808080002100200141206a24808080800020000be60101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418084c0800010b5808080002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418087014180f6de0010a980808000200120003703102001428ed8ea1b3703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f3808080003602082001200141086a10d7808080002100200141206a24808080800020000bc20101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001411f6a200110ac80808000420110cb818080001a200120003703102001428ed4b0faaebd033703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6b01017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f5808080003a0008200141086a2001411f6a10a6818080002100200141206a24808080800020000b5101027f23808080800041206b22012480808080002001411f6a10bd8180800020014106360208200120003703102001411f6a200141086a10ab808080002102200141206a248080808000200241fd01710b7a01017f23808080800041206b2202248080808000200220013703000240200042ff01834204520d00200241086a2002411f6a2002109b8180800020022802084101460d0020022000422088a7200229031010f7808080003602082002200241086a10d7808080002100200241206a24808080800020000f0b000b990801087f2380808080004180036b2202248080808000200220013703000240108d8180800022030d00200241ff026a10bd81808000200241013602302002200036023420024190026a200241ff026a200241306a10af80808000024020022d00b60222034102460d002002280290022104200241086a41047220024190026a41047241221093828080001a200220033a002e20022004360208200220022d00b7023a002f200241086a10b2818080002002108e8180800022030d014108210320022d002e0d0141002103200241286a2204200229032010c88180800010ff818080002105024002400340024020052003470d00200220013703180240200228022841016a2203450d00200220033602282002200241ff026a10c5818080002201370340200241c8006a21062004200229032010c88180800010ff818080002107200241e9026a220841036a2109410021030340024020072003470d0020022001370320200241ff026a10bd8180800020024190026a41086a2203200241306a41086a22042903003703002002200229033037039002200241ff026a20024190026a200241086a10b380808000200241ff026a10bd81808000200320042903003703002002200229033037039002200241ff026a20024190026a418087014180f6de0010a980808000200220022802283602b401200220003602b0012002428ed4b9b3cebe03370398022002428ed4b1d4f9a60337039002200241ff026a200241ff026a20024190026a10d480808000200241ff026a200241b0016a10d98080800010c2818080001a410021030c080b4105210502402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e08080800020022802e40222054105460d06200241b0016a20024190026a41d4001093828080001a200220092800003600ab01200220082800003602a8010b200241d0006a200241b0016a41d4001093828080001a200220022800ab0136004b200220022802a801360248024020054105460d0020024190026a200241d0006a41d4001093828080001a2009200228004b36000020082002280248360000200241003a00e802200220053602e402200220062002290340200620024190026a10d28080800010c9818080002201370340200341016a21030c010b0b419884c08000108782808000000b418884c08000108c82808000000b02402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e080808000200341016a210320022802e402417d6a0e03020103010b0b41a884c08000108782808000000b410621030c020b000b410421030b20024180036a24808080800020030be70101017f23808080800041c0006b2204248080808000200420013703182004200037031020042002370320200441286a2004413f6a200441106a10b181808000024020042802284101460d0020042903302101200441286a2004413f6a200441186a10b18180800020042802284101460d0020042903302100200441286a2004413f6a200441206a109b8180800020042802284101460d00200342ff018342cb00520d00200441086a200120002004290330200310f980808000200420042903083702282004413f6a200441286a10d1808080002103200441c0006a24808080800020030f0b000bf01104077f027e037f017e23808080800041e0026b220524808080800020052002370320200520013703182005200337032820052004370330410121060240108d8180800022070d00200541186a10b2818080000240200541186a200541206a10b481808000450d00410f21070c010b0240200541386a2208200529033010c88180800010ff81808000450d0002402008200529033010c88180800010ff8180800041e4004d0d00411321070c020b200541286a108e8180800022070d01410021072008200529033010c88180800010ff81808000210920054188026a210a200541106a210b4200210c4200210d0340024002400240024020092007470d00200541df026a10bd818080002005200541df026a41b884c0800010ad808080004100210a02402005280204410020052802004101711b41016a220e450d002005200e36023c2005200541df026a10aa8180800037034020054188016a21062008200529033010c88180800010ff81808000210f02400340200f200a200f200a4b1b211003400240200a2010470d0041002107200541f3006a41003600002005410036027020052005290330370368200520033703602005200529032037035820052005290318370350200541df026a10bd81808000200541013602b8012005200e3602bc01200541df026a200541b8016a200541d0006a10b380808000200541df026a10bd81808000200541e0016a41086a2206200541b8016a41086a290300370300200520052903b8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541023602c8012005200e3602cc01200541df026a200541c8016a41d884c0800010b780808000200541df026a10bd818080002006200541c8016a41086a290300370300200520052903c8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541df026a41b884c080002005413c6a10b180808000200541df026a10bd81808000200541df026a41b884c08000418087014180f6de0010a9808080002005200d3703f8012005200c3703f0012005200528023c3602e801200520052903183703e0012005428ed2eadca9bda3013703c8022005428ef8f49b8ad7023703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10ce8080800010c2818080001a2008200529033010c88180800010ff81808000210620054188026a21090340024020062007470d00200528023c2107410021060c0d0b02402008200529033010c88180800010ff8180800020074d0d00200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b4024105460d0820052903a002210220052903a80221012005290390022104200529039802210320052903e001210d20052903e801210c2005290380022111200520092903003703f801200520113703f0012005200c3703e8012005200d3703e0012005200528023c3602980220052003370388022005200437038002200520013703a00220052002370390022005200736029c022005428ed2a9133703c8022005428ef2b3d5ecb7d6013703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10d68080800010c2818080001a200741016a21070c010b0b41e084c08000108782808000000b2008200529033010c88180800010ff81808000200a4d0d02200520082005290330200a10fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105460d05200a41016a210b200520052903980237034841002107024003400240200a2007470d00200542003703c802200542003703c002410021072008200529033010c88180800010ff81808000210a024003400240200a2007470d002005200541df026a200541c8006a10d1818080003703e001200541e0016a200541186a200541c0006a200541c0026a10d281808000200b210a0c070b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703d801200541e0016a2008200541d8016a10e08080800020052802b40222094105460d0a200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801024002402006200541c8006a10b481808000450d0020052903c80222022005290358220185427f852002200220017c20052903c002220120052903507c2204200154ad7c220185834200530d01200520043703c002200520013703c8020b200741016a21070c010b0b419085c08000108c82808000000b418085c08000108782808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b40222094105460d07200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801200741016a21072006200541c8006a10b481808000450d000b200b210a0c010b0b0b41a085c08000108782808000000b41f084c08000108782808000000b41c884c08000108c82808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105470d020b000b41b085c08000108782808000000b4101210620052903e00122045020052903e80122024200532002501b0d01200529038002221150200a29030022014200532001501b0d01024020052903a80220052903a002560d00411221070c030b200541086a200420022011200110948280800002402005290308200b290300844200510d00411121070c030b0240200d200285427f85200d200d20027c200c20047c2202200c54ad7c220185834200530d00200741016a21072002210c2001210d0c010b0b41c085c08000108c82808000000b410721070b2000200736020420002006360200200541e0026a2480808080000bfd0101017f23808080800041d0006b22052480808080002005200337031020052002370308200520043703180240200042ff01834204520d00200142ff01834204520d00200541206a200541cf006a200541086a10928180800020052802204101460d00200541386a290300210320052903302102200541206a200541cf006a200541106a10a68080800020052802204101460d0020052903282104200541206a200541cf006a200541186a10c18080800020052802204101460d0020052000422088a72001422088a7200220032004200529032810fb808080003602202005200541206a10d7808080002100200541d0006a24808080800020000f0b000bef0801047f23808080800041d0026b2206248080808000200620053703200240108d8180800022070d00200641cf026a10bd818080002006410136025020062000360254200641d0016a200641cf026a200641d0006a10af808080000240024020062d00f60122074102460d0020062802d0012108200641286a410472200641d0016a41047241221093828080001a20062008360228200620062d00f7013a004f200620073a004e02402007410171450d00410821070c030b4101210720062d004c0d0220062d004d0d02200641c8006a2208200629034010c88180800010ff8180800020014b0d010b410421070c010b024002402008200629034010c88180800010ff8180800020014d0d00200620082006290340200110fe8180800010c7818080003703b002200641d0016a2008200641b0026a10e08080800020062802a40222074105470d01000b41d085c08000108782808000000b200641e0006a200641d0016a41d4001093828080001a200620073602b401200620062903a8023703b8012006410036021c200641086a2002200320062903800120064188016a2903002006411c6a1091828080000240200628021c450d00410721070c010b02402006290308200629036085200641106a290300200629036885844200510d00411121070c010b2006200641cf026a20002001200641e0006a2002200320041090818080003703c801200641cf026a10bd81808000200641cf026a200641386a200641c8016a200641206a10b981808000200641cf026a10bd81808000200641023602b002200620003602b402200641d0016a200641cf026a200641b0026a10ae808080004109210720062903d801420020062802d0011b2004520d0002402004427f520d00410e21070c010b2006200442017c3703c002200641cf026a10bd81808000200641d0016a41086a2207200641b0026a41086a2209290300370300200620062903b0023703d001200641cf026a200641d0016a200641c0026a10b780808000200641cf026a10bd8180800020072009290300370300200620062903b0023703d001200641cf026a200641d0016a418087014180f6de0010a9808080002006200337037820062002370370200641013a00b801200641d0016a200641e0006a41e0001093828080001a200620082006290340200110fe818080002008200641d0016a10d28080800010c681808000370340200641cf026a10bd818080002007200641d0006a41086a2208290300370300200620062903503703d001200641cf026a200641d0016a200641286a10b380808000200641cf026a10bd8180800020072008290300370300200620062903503703d001200641cf026a200641d0016a418087014180f6de0010a980808000200620033703e801200620023703e001200620013602d401200620003602d0012006428ef2aef9a9c7033703b8022006428ef0b79ddd053703b002200641cf026a200641cf026a200641b0026a10d480808000200641cf026a200641d0016a10d08080800010c2818080001a410021070b200641d0026a24808080800020070b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710fd8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbb0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a10b281808000024020012d002c450d00410121020c020b200141013a002c200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428eeeaad6b9b6ca013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710ff8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbe0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a41086a10b281808000024020012d002d450d00410121020c020b200141013a002d200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428ed4e8d9b9f6ae013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b4b01017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a71081818080002001200110cf808080002100200141106a24808080800020000bd20a04047f017e047f057e23808080800041b0026b22022480808080000240024002400240108d8180800022030d00200241af026a10bd818080002002410136023020022001360234200241b0016a200241af026a200241306a10af8080800020022d00d60122034102460d0120022802b0012104200241086a410472200241b0016a41047241221093828080001a20022004360208200220022d00d7013a002f200220033a002e02402003410171450d00410821030c030b200241086a10b2818080000240200241086a200241106a10b481808000450d00410f21030c030b4105210320022d002c4101470d0220022d002d4101470d0241002104200241286a2203200229032010c88180800010ff818080002105024002400340024020052004470d002002200241af026a10aa818080003703402002200241af026a10c5818080002206370348200241d0006a210720024180016a210820024188016a2109410021042003200229032010c88180800010ff818080002105200241e8006a210a4200210b4200210c02400340024020052004470d0020022006370320200241af026a10bd81808000200241b0016a41086a2203200241306a41086a2204290300370300200220022903303703b001200241af026a200241b0016a200241086a10b380808000200241af026a10bd8180800020032004290300370300200220022903303703b001200241af026a200241b0016a418087014180f6de0010a9808080002007200229034810c88180800010ff8180800021032002200c3703b8012002200b3703b001200220033602c401200220013602c0012002428ee2e6d9bb053703582002428ef2b3d5ecb7d601370350200241af026a200241af026a200241d0006a10d480808000200241af026a200241b0016a10da8080800010c2818080001a20002002290348370308200041003602000c0a0b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c78180800037039802200241b0016a200320024198026a10e0808080002002280284024105460d05200241d0006a200241b0016a41d4001093828080001a200241033602a40120022002290388023703a8012002200241af026a200910d1818080003703b001200241b0016a200241c0006a2008200241d0006a10d2818080000240200c2002290358220685427f85200c200c20067c200b2002290350220d7c220e200b54ad7c220f85834200530d00200220022903603703e0012002200d3703b001200220013602d00120022002290388013703c80120022002290380013703c001200220063703b8012002200a2903003703e801200220043602d4012002428ed2aeb30d3703a0022002428ef2b3d5ecb7d60137039802200241af026a200241af026a20024198026a10d480808000200241af026a200241b0016a10d88080800010c2818080001a200241b0016a200241d0006a41e0001093828080001a2002200720022903482007200241b0016a10d28080800010c9818080002206370348200441016a2104200e210b200f210c0c010b0b41f085c08000108c828080000c040b41e085c08000108782808000000b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c781808000370350200241b0016a2003200241d0006a10e08080800020022802840222074105460d02024020074103460d00200441016a210420022d0088024101710d010b0b410d410620074103471b21030c040b418086c08000108782808000000b000b20004101360200200020033602040c020b410421030b20004101360200200020033602040b200241b0026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710838180800036020c20012001410c6a10d7808080002100200141106a24808080800020000b8b0d04087f017e017f027e23808080800041c0026b2201248080808000200141bf026a10bd818080002001410136023020012000360234200141d0016a200141bf026a200141306a10af808080000240024020012d00f60122024102460d0020012802d0012103200141086a410472200141d0016a41047241221093828080001a20012003360208200120012d00f7013a002f200120023a002e4108210320024101710d01200141086a10b28180800041002102200141286a2203200129032010c88180800010ff818080002104024002400340024020042002470d002001200141bf026a10aa8180800037034020014198016a2104410021052003200129032010c88180800010ff8180800021060240034020062005200620054b1b2107034020052108024020082007470d00200141013a002e2001200141bf026a10c58180800022093703c801200141d0016a2104410021022003200129032010c88180800010ff81808000210a03400240200a2002470d0020012009370320200141bf026a10bd81808000200141d0016a41086a200141306a41086a290300370300200120012903303703d001200141bf026a200141d0016a200141086a10b380808000200120003602602001428ee2aaf4ecc4023703d8012001428ef8f49b8ad7023703d001200141bf026a200141bf026a200141d0016a10d480808000200141e0006a200141bf026a10a78180800010c2818080001a410021030c0b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d08200141e0006a200141d0016a41d4001093828080001a20012903a8022109200120003602502001428ee2aaf4ecc4023703d8012001428ef2b3d5ecb7d6013703d00120012002360254200141bf026a200141bf026a200141d0016a10d480808000200141bf026a200141d0006a10d98080800010c2818080001a200141d0016a200141e0006a41d4001093828080001a200120093703a802200141043602a4022001200420012903c8012004200141d0016a10d28080800010c98180800022093703c801200241016a21020c010b0b419086c08000108782808000000b2003200129032010c88180800010ff8180800020084d0d02200120032001290320200810fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d05200841016a21052001200129038802370348410021020340024020082002470d002001420037035820014200370350410021022003200129032010c88180800010ff8180800021080340024020082002470d002001290350420052200129035822094200552009501b450d052001200141bf026a200141c8006a10d1818080003703d001200141d0016a200141c0006a200141086a200141d0006a10d2818080000c050b024002402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c7818080003703c801200141d0016a2003200141c8016a10e08080800020012802a402220a4105470d010c0a0b41b086c08000108782808000000b200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b80102402004200141c8006a10b481808000450d000240200129035822092001290368220b85427f8520092009200b7c2001290350220b20012903607c220c200b54ad7c220b85834200530d002001200c3703502001200b3703580c010b41c086c08000108c82808000000b200241016a21020c000b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370350200141d0016a2003200141d0006a10e08080800020012802a402220a4105460d07200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b801200241016a21022004200141c8006a10b481808000450d010c020b0b0b0b41d086c08000108782808000000b41a086c08000108782808000000b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e080808000200241016a210220012802a402417d6a0e03030102010b0b41e086c08000108782808000000b000b410621030c010b410421030b200141c0026a24808080800020030b4e01017f23808080800041306b22012480808080000240200042ff01834204510d00000b20012000422088a71085818080002001412f6a200110de808080002100200141306a24808080800020000b7a01017f23808080800041c0006b22022480808080002002413f6a10bd81808000200241013602282002200136022c20022002413f6a200241286a10af808080000240024020022d00264102470d00200041023a0026200041043602000c010b2000200241281093828080001a0b200241c0006a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710878180800036020c20012001410c6a10d7808080002100200141106a24808080800020000bd70201027f23808080800041306b22012480808080002001412f6a10bd8180800020014101360200200120003602044104210202402001412f6a200110b080808000450d002001412f6a10be8180800021022001412f6a10bd81808000200141106a41086a200141086a290300370300200120012903003703102001412f6a200141106a2002200210a9808080002001412f6a10bd8180800020014102360210200120003602142001412f6a200141106a2002200210a9808080002001412f6a10bd818080002001412f6a41b884c080002002200210a9808080002001412f6a10bd818080002001412f6a2002200210c18180800020012002360228200120003602242001428ee2f91c3703182001428ef8f49b8ad7023703102001412f6a2001412f6a200141106a10d4808080002001412f6a200141246a10d98080800010c2818080001a410021020b200141306a24808080800020020bcb0101017f23808080800041c0006b220424808080800020042003370308200420023703000240200042ff01834204520d00200142ff01834204520d00200441106a2004413f6a200410928180800020042802104101460d00200441286a290300210320042903202102200441106a2004413f6a200441086a10a68080800020042802104101460d00200441106a2000422088a72001422088a72002200320042903181089818080002004413f6a200441106a10dc808080002100200441c0006a24808080800020000f0b000b970301037f2380808080004180026b2206248080808000200641ff016a10bd81808000200641013602302006200136023420064190016a200641ff016a200641306a10af808080000240024020062d00b60122074102460d002006280290012108200641086a41047220064190016a41047241221093828080001a200620073a002e20062008360208200620062d00b7013a002f0240200641286a2207200629032010c88180800010ff8180800020024d0d00024002402007200629032010c88180800010ff8180800020024d0d00200620072006290320200210fe8180800010c78180800037033020064190016a2007200641306a10e08080800020062802e40122074105470d01000b41f086c08000108782808000000b200641306a20064190016a41d4001093828080001a2006200736028401200620062903e80137038801200641ff016a20012002200641306a200320042005109081808000210420004100360200200020043703080c020b20004281808080c0003703000c010b20004281808080c0003703000b20064180026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a7108b818080003703002001410f6a200110bb808080002100200141106a24808080800020000b6502017f017e23808080800041306b22012480808080002001412f6a10bd81808000200141023602082001200036020c200141186a2001412f6a200141086a10ae808080002001280218210020012903202102200141306a2480808080002002420020001b0b860102027f017e23808080800041206b22012480808080002001411f6a10bd81808000200141086a2001411f6a41d083c0800010bd80808000410121020240024020012802084101470d00200120012903102203370300200110b28180800020002003370308410021020c010b2000410a3602040b20002002360200200141206a2480808080000b4901027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000410b4100200141fd01711b0b7f01027f23808080800041206b22012480808080002001411f6a10bd818080004100210202402001411f6a41d083c0800010be80808000450d002001411f6a10bd818080002001410636020820012000290300370310410041102001411f6a200141086a10ab8080800041fd01711b21020b200141206a24808080800020020b4d02017f017e23808080800041106b2202248080808000200010bd8180800020022001290300200010cc808080003703002002410f6a200210b8818080002103200241106a24808080800020030b8b0f04017f017e087f017e23808080800041e0006b22072480808080002007200010cf818080002208370300200741086a21092007200920082009200810d08180800010ff8180800010fe81808000418184c08000410410ac81808000220837030020074180043b01382007200920082009200810d08180800010ff8180800010fe81808000200741386a410210ac818080003703002007200741df006a10bc81808000370330200741386a41186a220a4200370300200741386a41106a220b4200370300200741386a41086a220c420037030020074200370338200741306a41086a220d200741306a10d4818080004204200741386a412010ad81808000200741106a41186a220e200a290300370300200741106a41106a220f200b290300370300200741106a41086a2210200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac818080003703002007200010aa8180800037033020072000200741306a108f81808000370308200a4200370300200b4200370300200c420037030020074200370338200741086a41086a200741086a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341306a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341386a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800022083703002007200141187420014180fe03714108747220014108764180fe0371200141187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac8180800022083703002007200241187420024180fe03714108747220024108764180fe0371200241187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac81808000221137030020072003290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703402007200341086a290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703382007200920112009201110d08180800010ff8180800010fe81808000200741386a411010ac8180800022083703002007200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703402007200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe038320054238888484843703382007200920082009200810d08180800010ff8180800010fe81808000200741386a411010ac81808000220537030020072003290340220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac81808000220537030020072003290348220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac8180800022043703002007200642388620064280fe0383422886842006428080fc0783421886200642808080f80f834208868484200642088842808080f80f832006421888428080fc07838420064228884280fe03832006423888848484370338200920042009200410d08180800010ff8180800010fe81808000200741386a410810ac818080002104200741e0006a24808080800020040b190020004200370300200020023502004220864204843703080b7c01027e024002400240024020022903002203a741ff0171220241c500460d002002410b470d02200041106a20031080828080000c010b2001200310e58180800021042001200310e481808000210320002004370318200020033703100b420021030c010b200010f981808000370308420121030b200020033703000b130020004200370300200020023100003703080b4602017f017e23808080800041106b2203248080808000200320012002109581808000200329030821042000200329030037030020002004370308200341106a2480808080000b6d02017f027e23808080800041106b2203248080808000200320022903002204200241086a29030022051082828080000240024020032802000d00200329030821040c010b20012005200410e38180800021040b2000420037030020002004370308200341106a2480808080000b4b00200041003602102000200436020c2000200336020820002002360204200020013602002000200220016b410376220236021820002002200420036b410376220420022004491b3602140b3901017f23808080800041106b22032480808080002003200229020037020820002001200341086a109881808000200341106a2480808080000b6a02027f017e23808080800041106b22032480808080002003200228020022042002280204220210fa818080000240024020032802000d00200329030821050c010b20012004200210d78180800021050b2000420037030020002005370308200341106a2480808080000b5202017f017e23808080800041106b2203248080808000200320022903083703082003200229030037030020012003410210da8180800021042000420037030020002004370308200341106a2480808080000b0e00200020012001109b818080000b7d02017f027e23808080800041106b2203248080808000024002402002290300220442ff018342c800520d0020032004370308420121050240200341106a200410f58180800010ff818080004120470d0020002003290308370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b2e01027e4201210302402001290300220442ff018342cd00520d0020002004370308420021030b200020033703000b0e002000200220011099818080000b130020004200370300200020012903003703080b5102017f017e23808080800041106b220324808080800020032001200210978180800042012104024020032802000d0020002003290308370308420021040b20002004370300200341106a2480808080000b130020004200370300200020012903003703080b130020004200370300200020012903003703080b1200200141bb87c08000410f108b828080000b0300000b02000b4502017f017e23808080800041106b2202248080808000200220002001109481808000024020022802004101470d00000b20022903082103200241106a24808080800020030b070020003100000b0d0020003502004220864204840b070020002903000b070020002903000b0a00200010df818080000b6001017f23808080800041106b22042480808080000240200020012903002002290300200310f28180800042ff01834202510d00419087c08000412b2004410f6a418087c0800041b088c08000108682808000000b200441106a2480808080000b12002000200120022003200410d5818080000b12002000200120022003200410d6818080000b12002000200120022003200410d8818080000b140020002001200220032004200510d9818080000b0e0020002001200210da818080000b2e01027e4201210302402002290300220442ff018342cd00520d0020002004370308420021030b200020033703000b1300200041086a200029030010f8818080001a0b5902017f017e23808080800041206b22032480808080002003200236020c20032001360208200341106a2000200341086a109781808000024020032802104101470d00000b20032903182104200341206a24808080800020040b11002000200110b58180800041ff0171450b2601017e417f200041086a2000290300200129030010db81808000220242005220024200531b0b2e01027e4201210302402002290300220442ff018342c800520d0020002004370308420021030b200020033703000b130020004200370300200020022903003703080b0f002000200129030010f6818080000b1a00200020012903002002290300200329030010f7818080001a0b1000200010dd8180800010ff818080000b1000200010e08180800010ff818080000b0a00200010de818080000b02000b6d01037f23808080800041106b22012480808080002001410f6a10ba818080002102024002402001410f6a10bb8180800022032002490d00200320026b41016a22020d0141a889c08000108c82808000000b41a889c08000108d82808000000b200141106a24808080800020020b140020002001200210ec8180800010fd818080000b0e0020002001200210ed818080000b1b002000200110fe81808000200210fe8180800010f1818080001a0b0e0020002001200210dc818080000b0c002000200110e1818080000b0c002000200110e2818080000b0a00200010e6818080000b1000200020012002200310e7818080000b0e0020002001200210e8818080000b0c002000200110e9818080000b0e0020002001200210ea818080000b1000200020012002200310eb818080000b0e0020002001200210ee818080000b0c002000200110ef818080000b12002000200120022003200410f0818080000b0c002000200110f3818080000b0a00200010f4818080000b0c002000200110f5818080000b070020012903000bdf0102027f027e23808080800041c0006b22042480808080002004200041086a220541b889c08000410810b381808000370308200129030021062002290300210720042005200310a5818080003703202004200737031820042006370310410021010340024020014118470d00410021010240034020014118460d01200441286a20016a200441106a20016a290300370300200141086a21010c000b0b20052000200441086a2005200441286a410310da8180800010ab81808000200441c0006a2480808080000f0b200441286a20016a4202370300200141086a21010c000b0b130020004200370300200020022903003703080b070020002903000b1e00200120022003ad4220864204842004ad4220864204841080808080000b1f00200120022003ad4220864204842004ad4220864204841081808080001a0b1a002001ad4220864204842002ad4220864204841082808080000b2e00024020022004460d00000b2001ad4220864204842003ad4220864204842002ad4220864204841083808080000b3000024020032005460d00000b20012002ad4220864204842004ad4220864204842003ad4220864204841084808080000b1a002001ad4220864204842002ad4220864204841085808080000b0c00200120021086808080000b0c00200120021087808080000b08001088808080000b08001089808080000b0800108a808080000b0800108b808080000b0a002001108c808080000b0a002001108d808080000b0c0020012002108e808080000b0a002001108f808080000b0a0020011090808080000b08001091808080000b0e002001200220031092808080000b0c00200120021093808080000b0a0020011094808080000b0c00200120021095808080000b0e002001200220031096808080000b0c00200120021097808080000b0c00200120021098808080000b0c00200120021099808080000b0a002001109a808080000b10002001200220032004109b808080000b0c0020012002109c808080000b0e00200120022003109d808080000b0a002001109e808080000b0800109f808080000b0a00200110a0808080000b0a00200110a1808080000b0e0020012002200310a2808080000b0a00200110a3808080000b0900428390808080010bb50102017f017e23808080800041106b220324808080800002400240200241094b0d00420021040340024020020d002000410036020020002004420886420e843703080c030b200341086a20012d000010fb81808000024020032d00084103460d0020002003290308370204200041013602000c030b200141016a21012002417f6a2102200442068620033100098421040c000b0b20002002360208200041003a0004200041013602000b200341106a2480808080000b820101017f410121020240200141ff017141df00460d000240200141506a41ff0171410a490d000240200141bf7f6a41ff0171411a490d0002402001419f7f6a41ff0171411a490d00200020013a0001200041013a00000f0b200141456a21020c020b2001414b6a21020c010b200141526a21020b200041033a0000200020023a00010b070020004208880b070020004201510b0b002000ad4220864204840b08002000422088a70b160020002001423f87370308200020014208873703000b3201017e420121020240200142ffffffffffffffff00560d0020002001420886420684370308420021020b200020023703000b5001017e42012103024020014280808080808080c0007c42ffffffffffffffff00560d0020012001852001423f87200285844200520d0020002001420886420b84370308420021030b200020033703000ba00601067f0240200028020022032000280208220472450d0002402004410171450d00200120026a210502400240200028020c22060d0041002107200121080c010b41002107200121080340200822042005460d020240024020042c00002208417f4c0d00200441016a21080c010b0240200841604f0d00200441026a21080c010b0240200841704f0d00200441036a21080c010b200441046a21080b200820046b20076a21072006417f6a22060d000b0b20082005460d00024020082c00002204417f4a0d0020044160491a0b024002402007450d00024020072002490d0020072002460d01410021040c020b200120076a2c000041404e0d00410021040c010b200121040b2007200220041b21022004200120041b21010b024020030d00200028021c20012002200028022028020c118080808000000f0b200028020421030240024020024110490d0020012002108a8280800021040c010b024020020d00410021040c010b2002410371210602400240200241044f0d0041002104410021070c010b2002410c712105410021044100210703402004200120076a22082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a21042005200741046a2207470d000b0b2006450d00200120076a21080340200420082c000041bf7f4a6a2104200841016a21082006417f6a22060d000b0b02400240200320044d0d00200320046b2106024002400240410020002d0018220420044103461b22040e03020001020b20062104410021060c010b20064101762104200641016a41017621060b200441016a21042000280210210720002802202108200028021c210003402004417f6a2204450d0220002007200828021011818080800000450d000b41010f0b200028021c20012002200028022028020c118080808000000f0b0240200020012002200828020c11808080800000450d0041010f0b410021040340024020062004470d0020062006490f0b200441016a210420002007200828021011818080800000450d000b2004417f6a2006490f0b200028021c20012002200028022028020c118080808000000b4d01017f23808080800041206b22032480808080002003410036021020034101360204200342043702082003200136021c200320003602182003200341186a36020020032002108582808000000b3601017f23808080800041106b2202248080808000200241013b010c2002200136020820022000360204200241046a10a381808000000b8f0101017f23808080800041c0006b22052480808080002005200136020c2005200036020820052003360214200520023602102005410236021c200541c08ac08000360218200542023702242005418280808000ad422086200541106aad843703382005418380808000ad422086200541086aad843703302005200541306a360220200541186a2004108582808000000b130041908ac08000412b2000108482808000000b14002001200028020020002802041083828080000b180020002802002001200028020428020c118180808000000be90601087f024002402001200041036a417c71220220006b2203490d00200120036b22044104490d002004410371210541002106410021010240200220004622070d004100210102400240200020026b2208417c4d0d00410021090c010b4100210903402001200020096a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2101200941046a22090d000b0b20070d00200020096a21020340200120022c000041bf7f4a6a2101200241016a2102200841016a22080d000b0b200020036a210002402005450d0020002004417c716a22022c000041bf7f4a210620054101460d00200620022c000141bf7f4a6a210620054102460d00200620022c000241bf7f4a6a21060b20044102762108200620016a21030340200021042008450d02200841c001200841c001491b220641037121072006410274210541002102024020084104490d002004200541f007716a210941002102200421010340200128020c2200417f7341077620004106767241818284087120012802082200417f7341077620004106767241818284087120012802042200417f7341077620004106767241818284087120012802002200417f7341077620004106767241818284087120026a6a6a6a2102200141106a22012009470d000b0b200820066b2108200420056a2100200241087641ff81fc0771200241ff81fc07716a418180046c41107620036a21032007450d000b2004200641fc01714102746a22022802002201417f734107762001410676724181828408712101024020074101460d0020022802042200417f7341077620004106767241818284087120016a210120074102460d0020022802082202417f7341077620024106767241818284087120016a21010b200141087641ff811c71200141ff81fc07716a418180046c41107620036a0f0b024020010d0041000f0b2001410371210902400240200141044f0d0041002103410021020c010b2001417c712108410021034100210203402003200020026a22012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a21032008200241046a2202470d000b0b2009450d00200020026a21010340200320012c000041bf7f4a6a2103200141016a21012009417f6a22090d000b0b20030b1a00200028021c20012002200028022028020c118080808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141dc89c0800036020820014204370210200141086a2000108582808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141888ac0800036020820014204370210200141086a2000108582808000000b5701017e02400240200341c000710d002003450d012002410020036b413f71ad8620012003413f71ad220488842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080bf60804017f017e037f047e23808080800041b0016b2205248080808000420021060240024002400240024020047920037942c0007c20044200521ba7220720027920017942c0007c20024200521ba722084d0d002008413f4b0d01200741df004b0d02200720086b4120490d03200541a0016a2003200441e00020076b2209108e8280800020053502a00142017c210a4200210b420021060240024002400240034020054190016a2001200241c00020086b2208108e82808000200529039001210c0240200820094f0d00200541d0006a200320042008108e82808000024002402005290350220a50450d000c010b200c200a80210c0b200541c0006a200c420020032004109282808000024020012005290340220d5422082002200541c8006a290300220a542002200a511b0d002002200a7d2008ad7d21022001200d7d21012006200b200c7c220c200b54ad7c21060c0b0b200220047c200120037c2204200154ad7c200a7d2004200d54ad7d21022004200d7d21012006200c200b7c427f7c220c200b54ad7c21060c0a0b20054180016a200c200a80220c4200200820096b41ff00712208109082808000200541f0006a200c420020032004109282808000200541e0006a2005290370200541f0006a41086a290300200810908280800020054180016a41086a29030020067c2005290380012206200b7c220b200654ad7c210620072002200541e0006a41086a2903007d20012005290360220c54ad7d2202792001200c7d22017942c0007c20024200521ba722084d0d012008413f4d0d000b200350450d010c020b20012003542208200220045420022004511b450d02200b210c0c070b200120038021020b200120038221012006200b20027c220c200b54ad7c2106420021020c050b200220047d2008ad7d2102200120037d21012006200b42017c220c50ad7c21060c040b200220044200200120035a200220045a20022004511b22081b7d20012003420020081b220454ad7d2102200120047d21012008ad210c0c030b20012001200380220c20037e7d210142002106420021020c020b20022002200342ffffffff0f83220480220620037e7d4220862001422088220c842004802202422086200c200220037e7d422086200142ffffffff0f83842201200480220384210c2001200320047e7d210120024220882006842106420021020c010b200541306a2003200441c00020086b2208108e82808000200541206a200120022008108e8280800042002106200541106a200342002005290320200529033080220c4200109282808000200520044200200c42001092828080002005290310210a02400240200541086a290300200541106a41086a290300220d20052903007c220b200d54ad7c4200520d002001200a5422082002200b542002200b511b450d010b200420027c200320017c2201200354ad7c200b7d2001200a54ad7d2102200c427f7c210c2001200a7d21010c010b2002200b7d2008ad7d21022001200a7d2101420021060b200020013703102000200c3703002000200237031820002006370308200541b0016a2480808080000b5701017e02400240200341c000710d002003450d0120022003413f71ad2204862001410020036b413f71ad88842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080bf50303017f027e027f23808080800041e0006b220624808080800042002107420021084100210902402001200284500d002003200484500d00420020037d2003200442005322091b2107420020017d20012002420053220a1b2108420020042003420052ad7c7d200420091b21032004200285210402400240420020022001420052ad7c7d2002200a1b2202500d0002402003500d00200641d0006a2007200320082002109282808000200641d8006a290300210141012109200629035021020c020b200641c0006a2008420020072003109282808000200641306a2002420020072003109282808000200641c0006a41086a290300220220062903307c2201200254200641306a41086a290300420052722109200629034021020c010b02402003500d00200641206a2007420020082002109282808000200641106a2003420020082002109282808000200641206a41086a290300220220062903107c2201200254200641106a41086a290300420052722109200629032021020c010b20062007200320082002109282808000200641086a290300210141002109200629030021020b420020027d20022004420053220a1b2108420020012002420052ad7c7d2001200a1b22072004854200590d00410121090b200520093602002000200737030820002008370300200641e0006a2480808080000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072003422088220820067e22062005200142208822097e7c22054220867c220a3703002000200820097e2005200654ad4220862005422088847c200a200754ad7c200420017e200320027e7c7c3703080ba50501087f02400240200241104f0d00200021030c010b02402000410020006b41037122046a220520004d0d002004417f6a2106200021032001210702402004450d002004210820002103200121070340200320072d00003a0000200741016a2107200341016a21032008417f6a22080d000b0b20064107490d000340200320072d00003a0000200341016a200741016a2d00003a0000200341026a200741026a2d00003a0000200341036a200741036a2d00003a0000200341046a200741046a2d00003a0000200341056a200741056a2d00003a0000200341066a200741066a2d00003a0000200341076a200741076a2d00003a0000200741086a2107200341086a22032005470d000b0b2005200220046b2208417c7122066a210302400240200120046a22074103710d00200520034f0d0120072101034020052001280200360200200141046a2101200541046a22052003490d000c020b0b200520034f0d002007410374220241187121042007417c71220941046a2101410020026b411871210a2009280200210203402005200220047620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20084103712102200720066a21010b02402003200320026a22054f0d002002417f6a2108024020024107712207450d000340200320012d00003a0000200141016a2101200341016a21032007417f6a22070d000b0b20084107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032005470d000b0b20000b4b01017f23808080800041206b220524808080800020052001200220032004108f82808000200529031021042000200541186a29030037030820002004370300200541206a2480808080000b0bda0a0100418080c0000bd00a7372632f6c69622e7273616d6f756e74656e645f64617465686f7572735f6c6f67676564696470726f6f665f7665726966696564726174655f7065725f686f757273746172745f64617465737461747573746f6b656e776f726b65720a001000060000001000100008000000180010000c0000002400100002000000260010000e000000340010000d000000410010000a0000004b001000060000005100100005000000560010000600000063616e63656c6c656466696e616e63655f617070726f76656466696e616e63655f617070726f7665726d616e616765726d616e616765725f617070726f7665646f7261636c655f7075626b65796f7261636c655f726f746174696f6e737061796d656e7473000000ac00100009000000b500100010000000c500100010000000d500100007000000dc00100010000000ec0010000d000000f9001000100000000901100008000000457363726f77436f756e7400540110000b000000457363726f77000068011000060000004e6f6e6365000000780110000500000041646d696e000000880110000500000050656e64696e6741646d696e980110000c0000005061757365640000ac011000060000004f7261636c654b6579000000bc011000090000000300000000000000000000000000000004000000000000000000000000000000050000000000000000000000000000000143465750000000000010000a000000fd01000009000000000010000a0000000302000030000000000010000a000000f70100002700000000000000000000000000000000000000000010000a000000500200001e0000000000000000000000000010000a000000b302000025000000000010000a0000005d0200002b000000000010000a0000006c02000029000000000010000a0000006e02000015000000000010000a0000006102000024000000000010000a0000003c02000025000000000010000a0000004b0200000d000000000010000a000000ea0200003b000000000010000a000000a503000030000000000010000a000000a80300000d000000000010000a000000950300002c000000000010000a0000001104000030000000000010000a000000ee03000032000000000010000a000000fd03000030000000000010000a000000ff03000015000000000010000a000000f20300002b000000000010000a000000e403000027000000000010000a0000008e040000370000000000000000000000010000000100000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c7565436f6e76657273696f6e4572726f722f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f656e762e7273000000ca03100063000000770100000e0000002f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f73746f726167652e72730040041000670000009a000000090000007472616e73666572617474656d707420746f206164642077697468206f766572666c6f77c00410001c000000617474656d707420746f2073756274726163742077697468206f766572666c6f77000000e40410002100000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75653a2000000001000000000000003b05100002000000008f460e636f6e74726163747370656376300000000400000000000000000000000d436f6e74726163744572726f7200000000000016000000000000000f416c7265616479417070726f7665640000000001000000000000000c556e617574686f72697a6564000000020000000000000016496e76616c69644f7261636c655369676e61747572650000000000030000000000000010496e76616c69645061796d656e744964000000040000000000000015496e73756666696369656e74417070726f76616c730000000000000500000000000000175061796d656e74416c726561647946696e616c697a65640000000006000000000000000d496e76616c6964416d6f756e7400000000000007000000000000000f457363726f7743616e63656c6c65640000000008000000000000000c496e76616c69644e6f6e63650000000900000000000000084e6f7441646d696e0000000a000000000000000650617573656400000000000b000000000000000f41646d696e416c7265616479536574000000000c000000000000000c50726f6f664d697373696e670000000d000000000000000d4e6f6e63654f766572666c6f770000000000000e00000000000000125369676e6572734e6f7444697374696e637400000000000f0000003b546865206f7261636c65207075626c6963206b6579206973206e6f74206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000164f7261636c654b65794e6f745265676973746572656400000000001000000042417474657374656420686f757273207820726174655f7065725f686f757220646f6573206e6f7420657175616c2074686520657363726f77656420616d6f756e742e000000000013416d6f756e74486f7572734d69736d6174636800000000110000002a656e645f64617465206973206e6f74207374726963746c792061667465722073746172745f646174652e00000000000d496e76616c6964506572696f64000000000000120000002642617463682065786365656473204d41585f42415443485f53495a45207061796d656e74732e00000000000d4261746368546f6f4c61726765000000000000130000004454686973205741534d2070696e7320616e2065787065637465642061646d696e20616e642074686520737570706c6965642061646472657373206973206e6f742069742e0000000d41646d696e4d69736d6174636800000000000014000000464e6f2061646d696e207472616e736665722069732070656e64696e672c206f72207468652063616c6c6572206973206e6f74207468652070726f706f7365642061646d696e2e00000000000e4e6f50656e64696e6741646d696e000000000015000000336075706772616465602072657175697265732074686520636f6e747261637420746f206265207061757365642066697273742e00000000094e6f74506175736564000000000000160000000300000000000000000000000d5061796d656e7453746174757300000000000005000000000000000750656e64696e670000000000000000000000000f4d616e61676572417070726f7665640000000001000000000000000f46696e616e6365417070726f7665640000000002000000000000000946696e616c697a656400000000000003000000000000000943616e63656c6c6564000000000000040000000100000000000000000000000f5061796d656e745363686564756c65000000000a0000000000000006616d6f756e7400000000000b0000000000000008656e645f6461746500000006000000000000000c686f7572735f6c6f676765640000000b00000000000000026964000000000004000000815365742074727565206f6e6c7920627920607375626d69745f686f7572735f70726f6f666020616674657220612076616c69642045643235353139206f7261636c650a7369676e61747572652e20607061795f626174636860207265667573657320746f20736574746c652061207061796d656e7420776974686f75742069742e0000000000000e70726f6f665f7665726966696564000000000001000000000000000d726174655f7065725f686f75720000000000000b000000000000000a73746172745f6461746500000000000600000000000000067374617475730000000007d00000000d5061796d656e745374617475730000000000008c5065722d7061796565205374656c6c617220417373657420436f6e7472616374202853414329206164647265737320e2809420652e672e2074686520555344432053414320666f720a6f6e6520706179656520616e6420746865206e617469766520584c4d2053414320666f7220616e6f746865722077697468696e207468652073616d652062617463682e00000005746f6b656e000000000000130000000000000006776f726b65720000000000130000000100000000000000000000000e436f7265466c6f77457363726f77000000000008000000000000000963616e63656c6c656400000000000001000000000000001066696e616e63655f617070726f76656400000001000000000000001066696e616e63655f617070726f7665720000001300000000000000076d616e61676572000000001300000000000000106d616e616765725f617070726f76656400000001000000000000000d6f7261636c655f7075626b6579000000000003ee000000200000004354696d657320746865206f7261636c65206b657920686173206265656e20726f7461746564206f6e207468697320657363726f772028617564697420747261696c292e00000000106f7261636c655f726f746174696f6e730000000400000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000002000000000000000000000007446174614b6579000000000700000000000000000000000b457363726f77436f756e7400000000010000000000000006457363726f77000000000001000000040000000100000000000000054e6f6e6365000000000000010000000400000000000000000000000541646d696e000000000000000000003d50726f706f736564206e6578742061646d696e2c206177616974696e6720616363657074616e6365202874776f2d737465702068616e646f766572292e0000000000000c50656e64696e6741646d696e0000000000000000000000065061757365640000000000010000004a52656769737465726564206f7261636c65207369676e696e67206b6579732e2050726573656e6365203d3e20747275737465642062792074686520706c6174666f726d2061646d696e2e0000000000094f7261636c654b657900000000000001000003ee0000002000000000000000c85365742074686520636f6e74726163742061646d696e206f6e63652c20696d6d6564696174656c79206166746572206465706c6f792e204964656d706f74656e742d67756172643a0a6661696c7320696620616e2061646d696e20697320616c726561647920636f6e666967757265642e204966206e657665722063616c6c65642c2074686520636f6e74726163740a73696d706c7920686173206e6f2061646d696e20616e642063616e206e6576657220626520706175736564206f722075706772616465642e0000000a696e69745f61646d696e000000000001000000000000000561646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000f85468652061646d696e20616464726573732062616b656420696e746f2074686973205741534d206174206275696c642074696d652c20696620616e792e0a0a526561642d6f6e6c792c20736f20616e206f70657261746f7220286f7220616e2061756469746f72292063616e20636f6e6669726d206166746572206465706c6f7920746861740a7468652072756e6e696e6720636f64652069732070696e6e656420746f20746865206b65792074686579206578706563742c20726174686572207468616e207472757374696e670a7468617420746865206465706c6f7920736372697074207761732072756e20636f72726563746c792e0000000e65787065637465645f61646d696e00000000000000000001000003e800000013000000000000010d50726f706f73652061206e65772061646d696e202863757272656e742061646d696e206f6e6c79292e20537465702031206f6620322e0a0a48616e646f7665722069732074776f2d73746570206265636175736520612073696e676c652d73746570207472616e7366657220746f2061206d69737479706564206f720a756e636f6e74726f6c6c65642061646472657373207065726d616e656e746c792064657374726f797320746865206162696c69747920746f2070617573652c20757067726164652c0a6f72206d616e61676520746865206f7261636c652072656769737472792e205468652070726f706f736564206b6579206d7573742070726f76652069742063616e207369676e2e0000000000000d70726f706f73655f61646d696e0000000000000100000000000000096e65775f61646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000004341636365707420612070656e64696e672061646d696e2068616e646f766572202870726f706f7365642061646d696e206f6e6c79292e20537465702032206f6620322e000000000c6163636570745f61646d696e0000000000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000345468652063757272656e746c7920636f6e666967757265642061646d696e2c206966206f6e6520686173206265656e207365742e000000096765745f61646d696e0000000000000000000001000003e80000001300000000000000865061757365206f7220756e70617573652073746174652d6368616e67696e67206f7065726174696f6e73202861646d696e206f6e6c79292e206063616e63656c5f657363726f77600a737461797320617661696c61626c65207768696c652070617573656420736f2066756e64732063616e20616c7761797320626520726566756e6465642e00000000000a7365745f706175736564000000000001000000000000000670617573656400000000000100000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000000000000969735f7061757365640000000000000000000001000000010000000000000076557067726164652074686520636f6e7472616374205741534d202861646d696e206f6e6c79292e20456e61626c657320666978657320776974686f7574206368616e67696e670a74686520636f6e74726163742061646472657373206f72206d6967726174696e6720657363726f772066756e64732e000000000007757067726164650000000001000000000000000d6e65775f7761736d5f68617368000000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000001e4526567697374657220616e206f7261636c65207369676e696e67206b657920617320747275737465642062792074686520706c6174666f726d202861646d696e206f6e6c79292e0a0a57485920412052454749535452593a2070726576696f75736c7920746865206d616e616765722070617373656420616e7920606f7261636c655f7075626b65796020746865790a6c696b656420696e746f2060696e697469616c697a655f6d756c74695f7369675f657363726f77602c20736f2061206d616e6167657220636f756c6420696e7374616c6c0a7468656972206f776e206b657920616e64207369676e207468656972206f776e2022766572696669656420776f726b22206174746573746174696f6e732e205468650a70726f6f662d6f662d776f726b206761746520776173207468657265666f7265206d616e616765722d61747465737461626c65202d2d2070726f6365647572616c2c206e6f740a63727970746f677261706869632e20457363726f7773206d6179206e6f77206f6e6c79206e616d652061206b6579207468652061646d696e2068617320726567697374657265642c0a7768696368206d616b657320746865206f7261636c6520616e20696e646570656e64656e7420706172747920627920636f6e737472756374696f6e2e0000001372656769737465725f6f7261636c655f6b6579000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019b5265766f6b6520612070726576696f75736c792072656769737465726564206f7261636c65206b6579202861646d696e206f6e6c79292e0a0a4578697374696e6720657363726f777320616c7265616479206e616d696e672074686973206b6579206b6565702066756e6374696f6e696e67202d2d207265766f6b696e672069730a6e6f7420726574726f6163746976652c20626563617573652073696c656e746c7920696e76616c69646174696e6720696e2d666c69676874206174746573746174696f6e730a776f756c6420737472616e642066756e64656420657363726f77732e2049742073746f707320746865206b6579206265696e67206e616d6564206279204e455720657363726f77730a616e64204e455720726f746174696f6e732e20546f207265746972652061206b65792066726f6d2061206c69766520657363726f772c20746865206d616e616765722063616c6c730a60726f746174655f6f7261636c655f6b6579602c207768696368207265766f6b6573207468617420657363726f7727732076657269666965642070726f6f66732e00000000117265766f6b655f6f7261636c655f6b65790000000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000325472756520696620607075626b657960206973206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000001869735f6f7261636c655f6b65795f726567697374657265640000000100000000000000067075626b65790000000003ee00000020000000010000000100000000000000d3526f7461746520746865206f7261636c65207075626c6963206b657920666f7220616e20657363726f772e205369676e6174757265732070726f6475636564206279207468650a72657469726564206b65792073746f7020766572696679696e6720696d6d6564696174656c792c2073696e636520607665726966795f6f7261636c655f776f726b602072656164730a746869732073746f726564206b65792e204d616e616765722d617574686f72697a65643b2072656675736564206f6e63652066756e64732068617665206d6f7665642e0000000011726f746174655f6f7261636c655f6b6579000000000000020000000000000009657363726f775f696400000000000004000000000000000a6e65775f7075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000a2496e697469616c697a652061206d756c74692d7369676e617475726520657363726f772077697468207061796d656e74207363686564756c657320616e64206f7261636c65207075626c6963206b65792e0a546865206f7261636c655f7075626b657920697320616e2045643235353139207075626c6963206b6579207573656420746f2076657269667920776f726b2070726f6f66207369676e6174757265732e00000000001b696e697469616c697a655f6d756c74695f7369675f657363726f77000000000400000000000000076d616e616765720000000013000000000000001066696e616e63655f617070726f76657200000013000000000000000d6f7261636c655f7075626b6579000000000003ee0000002000000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000001000003e900000004000007d00000000d436f6e74726163744572726f7200000000000000000001595375626d697420686f7572732070726f6f6620766572696669656420627920616e2045643235353139206f7261636c65207369676e61747572652e0a0a546865206f7261636c65207369676e7320746865203139382d6279746520646f6d61696e2d73657061726174656420707265696d61676520646f63756d656e746564206f6e0a606275696c645f70726f6f665f6d657373616765602028736368656d61207632292e2054686520636f6e74726163742072656275696c6473207468617420707265696d6167650a66726f6d2073746f7265642073746174652c20766572696669657320697420616761696e73742074686520657363726f772773206f7261636c65207075626c6963206b65792c0a656e666f726365732060686f75727320782072617465203d3d20616d6f756e74602c20616e6420636f6e73756d657320746865206e657874206578706563746564206e6f6e63652e000000000000127375626d69745f686f7572735f70726f6f660000000000050000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f6964000000000004000000000000000c686f7572735f6c6f676765640000000b00000000000000056e6f6e63650000000000000600000000000000097369676e6174757265000000000003ee0000004000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e4d616e6167657220617070726f76616c206f66207061796d656e7428732900000000000f6d616e616765725f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e46696e616e636520617070726f76616c206f66207061796d656e7428732900000000000f66696e616e63655f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000bb46696e616c697a65207061796d656e74206f6e636520626f746820617070726f76616c7320617265206f627461696e65640a4465707265636174656420616c6961732072657461696e656420736f20746865204d61696e6e65742d6465706c6f7965642041424920616e6420746865206578697374696e670a64617368626f61726420636c69656e74206b65657020776f726b696e672e204e65772063616c6c6572732073686f756c642075736520607061795f6261746368602e000000001066696e616c697a655f7061796d656e74000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f7200000000000000000000b2536574746c65206576657279207061796d656e7420696e2074686520657363726f773a206f6e65207472616e73616374696f6e2c206f6e6520534143207472616e73666572207065720a70617965652c206561636820696e20746861742070617965652773206f776e2061737365742e20526571756972657320626f746820617070726f76616c7320414e4420610a7665726966696564206f7261636c652070726f6f66206f6e20657665727920726f772e0000000000097061795f6261746368000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f72000000000000000000006e43616e63656c20616e20657363726f77202864697370757465207265736f6c7574696f6e20e28094206d616e61676572206f6e6c79292e0a416c6c6f776564206576656e207768696c65207061757365642028656d657267656e6379207769746864726177616c2070617468292e00000000000d63616e63656c5f657363726f77000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f720000000000000000000017526574726965766520657363726f772064657461696c73000000000a6765745f657363726f770000000000010000000000000009657363726f775f69640000000000000400000001000003e9000007d00000000e436f7265466c6f77457363726f770000000007d00000000d436f6e74726163744572726f720000000000000000000121457874656e6420616e20657363726f7727732073746f72616765206c69666574696d652e20416e796f6e65206d61792063616c6c20746869732e0a0a50657273697374656e7420656e747269657320746861742072756e206f7574206f662072656e742061726520617263686976656420746f2074686520457870697265640a537461746520537461636b20616e642063616e20626520726573746f7265643b207468657920617265206e6f742064656c657465642e20546865206661696c75726520746869730a61766f69647320697320612066756e64656420657363726f77206265636f6d696e672074656d706f726172696c7920756e757361626c6520756e74696c20736f6d656f6e650a7061797320746f20726573746f72652069742e00000000000011657874656e645f657363726f775f74746c000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019552657475726e2074686520657861637420627974657320746865206f7261636c65206d757374207369676e20666f722074686973207061796d656e742e0a0a526561642d6f6e6c792e204578706f73696e672074686520707265696d616765206d616b65732074686520434f4e5452414354207468652073696e676c6520736f75726365206f660a747275746820666f7220746865206d65737361676520666f726d61743a20616e206f66662d636861696e207369676e65722063616e2073696d756c61746520746869732063616c6c0a616e64207369676e207468652072657475726e656420627974657320766572626174696d20696e7374656164206f66207265696d706c656d656e74696e6720746865206c61796f75740a616e6420686f70696e67207468652074776f2061677265652e20457665727920686973746f726963616c206d69736d61746368206265747765656e2061207369676e657220616e640a6120766572696669657220697320612062756720746869732072656d6f76657320627920636f6e737472756374696f6e2e0000000000000e70726f6f665f707265696d6167650000000000040000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f69640000000000040000000000000005686f7572730000000000000b00000000000000056e6f6e63650000000000000600000001000003e90000000e000007d00000000d436f6e74726163744572726f7200000000000000000000ac52657475726e20746865206e657874206578706563746564206f7261636c65206e6f6e636520666f7220616e20657363726f772e0a546865206f7261636c65206d757374207369676e20612070726f6f66207573696e6720746869732065786163742076616c756520287265706c61792070726f74656374696f6e292e0a52657475726e73203020666f7220616e20756e6b6e6f776e2f756e696e697469616c697a656420657363726f772e000000096765745f6e6f6e6365000000000000010000000000000009657363726f775f6964000000000000040000000100000006001e11636f6e7472616374656e766d6574617630000000000000001400000000006f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e38352e3000000000000000000008727373646b7665720000002f32302e352e30233965326333303232623433353562323234613761383134653133626135313736316565623134626200"
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "oracle"
+ },
+ {
+ "symbol": "reg"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "register_oracle_key"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ },
+ {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "escrow"
+ },
+ {
+ "symbol": "created"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "add"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ },
+ {
+ "u64": 1000
+ },
+ {
+ "u64": 2000
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize_multi_sig_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "bytes": "bf478bdf94bc5ba3ecaa3cb75154a392a634cba815c16c605d6d1afa56687a4281408c3c06f6c006da673ab7964d1ed613b65d5c2f39f39fd0b59fd012033609"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "hours"
+ },
+ {
+ "symbol": "submit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "submit_hours_proof"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "manager"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "manager_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "system",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "executable_update"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "Wasm"
+ },
+ {
+ "bytes": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ ]
+ },
+ {
+ "vec": [
+ {
+ "symbol": "Wasm"
+ },
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": []
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": false
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": false
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_nonce"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cancelled"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approved"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "finance_approver"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "manager_approved"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_pubkey"
+ },
+ "val": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ },
+ {
+ "key": {
+ "symbol": "oracle_rotations"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "payments"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "is_oracle_key_registered"
+ }
+ ],
+ "data": {
+ "bytes": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "is_oracle_key_registered"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "approve"
+ },
+ {
+ "symbol": "finance"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "finance_approve"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "pay_batch"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "paid"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "payment"
+ },
+ {
+ "symbol": "final"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u32": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "pay_batch"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "end_date"
+ },
+ "val": {
+ "u64": 2000
+ }
+ },
+ {
+ "key": {
+ "symbol": "hours_logged"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "id"
+ },
+ "val": {
+ "u32": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "proof_verified"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "rate_per_hour"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 250
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "start_date"
+ },
+ "val": {
+ "u64": 1000
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "worker"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_upgrade_requires_admin_authorization.1.json b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_requires_admin_authorization.1.json
new file mode 100644
index 0000000..ede2a46
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_requires_admin_authorization.1.json
@@ -0,0 +1,527 @@
+{
+ "generators": {
+ "address": 3,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_paused",
+ "args": [
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "upgrade",
+ "args": [
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ]
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Paused"
+ }
+ ]
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da",
+ "code": "0061736d01000000019b022960037f7f7f017f60027f7f017f60047e7e7e7e017e60027e7e017e60037e7e7e017e6000017e60017e017e60037f7f7f0060027f7e0060047f7f7f7f0060057f7f7e7f7f0060027f7f017e60047f7f7f7e0060027e7f017e60017f017e60017e017f6000017f60017f0060017f017f60027f7e017f60057f7e7e7e7e0060057e7e7e7e7e017e60067f7f7e7e7e7e017f60027f7f0060067f7f7f7e7e7e0060077f7f7f7f7e7e7e017e60057f7f7f7f7f0060000060057f7e7e7f7f017e60057f7e7e7f7f0060057f7f7f7f7f017e60067f7e7f7f7f7f017e60037f7f7f017e60037f7e7e017f60037f7e7e017e60027f7e017e60047f7e7e7e017e60057f7e7e7e7e017e60037f7e7e0060047f7e7e7f0060067f7e7e7e7e7f0002d901240162013200020162013100020162016a0003016d01390004016d016100020176016700030178013000030178013100030178013300050178013600050178013700050178013800050169015f00060169013000060169013600030169013700060169013800060176015f0005017601300004017601310003017601330006017601360003016c015f0004016c01300003016c01310003016c01320003016c01360006016c01370002016c013800030164015f00040162015f00060162013400050162013800060163015f000601630130000401610130000603f301f1010707070708090a010b07070701070c070c070c070c0b0c0b010701070707070b07070707070707070d0e0b0b0b0b0b070b0b0b0b0b0b0b070b0b0b0107060f05060f0510051106120510060f060f060f060f0313021415160612061206170612061706120218060e1110120b1907070707071a070707070707070707070701111b0b0b0b0b0b0e0c1c1d1e1f20071120010107070b0912120e11122122072223230e2422232224222325230e230b09070e1c1d201e1f2022220e0e0e0e23232223230e242223222422222223252224230e23232423050717060f0e0f0808260007171a11010101001111271427281400140405017001040405030100110619037f01418080c0000b7f0041d08ac0000b7f0041d08ac0000b07ba031b066d656d6f727902000a696e69745f61646d696e00610e65787065637465645f61646d696e00630d70726f706f73655f61646d696e00640c6163636570745f61646d696e0066096765745f61646d696e00680a7365745f706175736564006a0969735f706175736564006c0775706772616465006e1372656769737465725f6f7261636c655f6b65790070117265766f6b655f6f7261636c655f6b657900721869735f6f7261636c655f6b65795f72656769737465726564007411726f746174655f6f7261636c655f6b657900761b696e697469616c697a655f6d756c74695f7369675f657363726f770078127375626d69745f686f7572735f70726f6f66007a0f6d616e616765725f617070726f7665007c0f66696e616e63655f617070726f7665007e1066696e616c697a655f7061796d656e740080010d63616e63656c5f657363726f770082010a6765745f657363726f7700840111657874656e645f657363726f775f74746c0086010e70726f6f665f707265696d616765008801096765745f6e6f6e6365008a01097061795f6261746368008001015f00a4010a5f5f646174615f656e6403010b5f5f686561705f626173650302090c010041010b03a201890288020adff901f1014602017f017e23808080800041106b220324808080800020032001200210a580808000200329030821042000200329030037030020002004370308200341106a2480808080000b6102017f017e23808080800041106b22032480808080002003200229030022041081828080000240024020032802000d00200329030821040c010b2001200410c38180800021040b2000420037030020002004370308200341106a2480808080000b6401027e02400240024020022903002203a741ff0171220241c000460d0020024106470d0142002104200310fc8180800021030c020b420021042001200310c48180800021030c010b4201210410f98180800021030b20002004370300200020033703080bf80304027f017e017f047e23808080800041d0006b22032480808080004100210402400340200441c000460d01200320046a4202370300200441086a21040c000b0b0240024002400240024002400240024002402002290300220542ff018342cc00520d0020012005419482c0800041082003410810af818080001a410120032d0000220441004741017420044101461b22044102460d01410120032d0008220241004741017420024101461b22024102460d02200341c0006a200341106a2001109c8180800020032802400d0320032903482105200341c0006a200341186a2001109c8180800020032802400d04410120032d0020220641004741017420064101461b22064102460d0520032903482107200341c0006a200341286a2001109a8180800020032802400d062003290330220842ff01834204520d0702402003290338220942ff018342cb00520d002003290348210a200020043a0026200020023a0025200020063a002420002008422088a7360220200020093703182000200a37031020002005370308200020073703000c090b200041023a00260c080b200041023a00260c070b200041023a00260c060b200041023a00260c050b200041023a00260c040b200041023a00260c030b200041023a00260c020b200041023a00260c010b200041023a00260b200341d0006a2480808080000b3b01017f23808080800041106b2202248080808000200220013703082000200241086a10d48180800010cc818080001a200241106a2480808080000b12002000200142012002200310aa808080000b270020002000200110ac808080002002200310fe81808000200410fe8180800010cd818080001a0b4d02017f017e41022102024020002000200110ac808080002203420110bf81808000450d00410121020240024020002003420110c081808000a741ff01710e020102000b000b410021020b20020bcb0502017f017e23808080800041306b220224808080800002400240024002400240024002400240024020012802000e0700010203040506000b200241206a200041e082c08000109f8180800020022802200d07200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c060b200241206a200041f082c08000109f8180800020022802200d0620022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d062002200229032837031020022003370308200241206a200241086a2000109d818080000c050b200241206a2000418083c08000109f8180800020022802200d0520022002290328370318200241186a10d4818080002103200241206a2000200141046a10918180800020022802200d052002200229032837031020022003370308200241206a200241086a2000109d818080000c040b200241206a2000419083c08000109f8180800020022802200d04200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c030b200241206a200041a483c08000109f8180800020022802200d03200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c020b200241206a200041b483c08000109f8180800020022802200d02200220022903283703082002200241086a10d481808000370318200241206a2000200241186a10c4808080000c010b200241206a200041c883c08000109f8180800020022802200d0120022002290328370318200241186a10d4818080002103200241206a200141086a200010a18180800020022802200d012002200229032837031020022003370308200241206a200241086a2000109d818080000b20022903282103200229032050450d00200241306a24808080800020030f0b000b5e01017e02400240024020012001200210ac808080002203420110bf818080000d00410021010c010b20012003420110c081808000220342ff01834204520d012003422088a72102410121010b20002002360204200020013602000f0b000b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200042003703000c010b200320012004420110c081808000370308200341106a2001200341086a10a68080800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b880102017f017e23808080800041306b220324808080800002400240024020012001200210ac808080002204420110bf818080000d00200041023a00260c010b200320012004420110c081808000370300200341086a2001200310a78080800020032d002e4102460d012000200341086a41281093828080001a0b200341306a2480808080000f0b000b160020002000200110ac80808000420110bf818080000b1000200020012002420110b2808080000b210020002000200110ac808080002002200010a781808000200310ca818080001a0b1000200020012002420110b4808080000b210020002000200110ac808080002000200210b980808000200310ca818080001a0b1000200020012002420110b6808080000b210020002000200110ac808080002002200010a681808000200310ca818080001a0b1000200020012002420110b8808080000b210020002000200110ac808080002000200210bb80808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110db80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b210020002000200110ac808080002002200010a881808000200310ca818080001a0b4502017f017e23808080800041106b220224808080800020022000200110a480808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4d02017f017e41022102024020002000200110ac808080002203420210bf81808000450d00410121020240024020002003420210c081808000a741ff01710e020102000b000b410021020b20020b900102017f017e23808080800041206b220324808080800002400240024020012001200210ac808080002204420210bf818080000d00200042003703000c010b200320012004420210c081808000370308200341106a2001200341086a10b18180800020032802104101460d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b160020002000200110ac80808000420210bf818080000b1000200020012002420210b6808080000b1000200020012002420210ba808080000b850102017f027e23808080800041106b220324808080800020032001200210b6818080000240024020032802000d00200320032903082204370300420121050240200341086a200410d08180800010ff8180800041c000470d0020002003290300370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b950203017f017e027f23808080800041c0006b22032480808080002001200210c380808000210420032001200241086a10c38080800037030820032004370300410021020240034020024110460d01200341106a20026a4202370300200241086a21020c000b0b200341246a200341106a200341106a41106a2003200341106a109681808000410020032802382202200328023422056b2206200620024b1b21022003280224200541037422066a2105200328022c20066a2106024003402002450d0120052006200110a981808000370300200541086a2105200641086a21062002417f6a21020c000b0b2001200341106a410210b08180800021042000420037030020002004370308200341c0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110d381808000024020022802004101470d00000b20022903082103200241106a24808080800020030b7902017f027e23808080800041206b2203248080808000200341106a2002200110a0818080000240024020032802100d00200320032903183703082001200341086a410110b0818080002104420021050c010b10f9818080002104420121050b2000200537030020002004370308200341206a2480808080000ba30102017f017e23808080800041206b2203248080808000200341106a200120021091818080000240024020032802100d0020032903182104200341106a2001200241046a10918180800020032802100d00200320032903183703082003200437030020012003410210b081808000210420004200370300200020043703080c010b10f981808000210420004201370300200020043703080b200341206a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200210918180800002400240024020032802200d0020032903282104200341206a2001200241046a10918180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd40102017f037e23808080800041306b2203248080808000200341206a2001200241086a10918180800002400240024020032802200d0020032903282104200341206a20022001109e8180800020032802200d0020032903282105200341206a2001200241106a1094818080002003290328210620032802200d012003200637031820032005370310200320043703082001200341086a410310b081808000210620004200370300200020063703080c020b10f98180800021060b20004201370300200020063703080b200341306a2480808080000bd00102017f027e23808080800041306b2203248080808000200341206a2001200241106a10918180800002400240024020032802200d0020032903282104200341206a200120021094818080002003290328210520032802200d01200341206a2001200241146a10918180800020032802200d002003200329032837031820032005370310200320043703082001200341086a410310b081808000210520004200370300200020053703080c020b10f98180800021050b20004201370300200020053703080b200341306a2480808080000bd20202017f067e23808080800041c0006b2203248080808000200341306a2001200241206a10918180800002400240024020032802300d0020032903382104200341306a2001200241246a10918180800020032802300d0020032903382105200341306a200241106a2001109e8180800020032802300d0020032903382106200341306a200241186a2001109e8180800020032802300d0020032903382107200341306a200120021094818080002003290338210820032802300d01200341306a2001200241306a1094818080002003290338210902402003280230450d00200921080c020b20032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410610b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341c0006a2480808080000bbd0302017f087e23808080800041d0006b2203248080808000200341c0006a2001200241386a10918180800002400240024020032802400d0020032903482104200341c0006a20012002413c6a10918180800020032802400d0020032903482105200341c0006a200241206a2001109e8180800020032802400d0020032903482106200341c0006a200241286a2001109e8180800020032802400d0020032903482107200341c0006a200120021094818080002003290348210820032802400d01200341c0006a2001200241106a1094818080002003290348210902402003280240450d00200921080c020b200341c0006a2001200241306a10a4808080002003290348210a02402003280240450d00200a21080c020b200341c0006a2001200241c0006a10a4808080002003290348210b02402003280240450d00200b21080c020b2003200b3703382003200a37033020032009370328200320083703202003200737031820032006370310200320053703082003200437030020012003410810b081808000210820004200370300200020083703080c020b10f98180800021080b20004201370300200020083703080b200341d0006a2480808080000b2a00024020022802000d0020004200370300200042023703080f0b2000200241086a2001109e818080000b4001017f23808080800041106b2202248080808000200220003703082001200241086a200110a88180800010ce818080002100200241106a24808080800020000b15002000280200417f6aad4220864283808080107c0b4502017f017e23808080800041106b220224808080800020022000200110c780808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1d00024020012802000d0020012903080f0b200141046a10cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c680808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6902027f017e23808080800041106b2202248080808000200141046a21030240024020012802000d00200220002003109181808000024020022802000d00200229030821040c020b10f9818080001a000b200310cd8080800021040b200241106a24808080800020040b4502017f017e23808080800041106b220224808080800020022000200110d380808000024020022802004101470d00000b20022903082103200241106a24808080800020030bd00302017f097e23808080800041e0006b2203248080808000200341d0006a200120021094818080000240024020032802500d0020032903582104200341d0006a2001200241c8006a10a48080800020032802500d0020032903582105200341d0006a2001200241106a10948180800020032802500d0020032903582106200341d0006a2001200241d0006a10918180800020032802500d0020032903582107200341d0006a2001200241d8006a10938180800020032802500d0020032903582108200341d0006a2001200241206a10948180800020032802500d0020032903582109200341d0006a2001200241c0006a10a48080800020032802500d002003290358210a2002350254210b200341d0006a200241386a2001109e8180800020032802500d002003290358210c200341d0006a200241306a2001109e8180800020032802500d00200320032903583703482003200c3703402003200b4220864204843703382003200a370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200141dc80c08000410a2003410a10ae81808000210420004200370300200020043703080c010b200042013703000b200341e0006a2480808080000b4502017f017e23808080800041106b220224808080800020022000200110c280808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110b781808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110ca80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b1700024020012802000d0042020f0b200110cd808080000b4502017f017e23808080800041106b220224808080800020022000200110c980808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c580808000024020022802004101470d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c880808000024020022802004101470d00000b20022903082103200241106a24808080800020030bf20202017f067e23808080800041d0006b2203248080808000200341c0006a2001200241266a1093818080000240024020032802400d0020032903482104200341c0006a2001200241256a10938180800020032802400d0020032903482105200341c0006a200241086a2001109e8180800020032802400d0020032903482106200341c0006a20022001109e8180800020032802400d0020032903482107200341c0006a2001200241246a10938180800020032802400d0020032903482108200341c0006a200241106a200110a18180800020032802400d0020032903482109200341c0006a2001200241206a10918180800020032802400d0020032003290348370330200320093703282003200837032020032007370318200320063703102003200537030820032004370300200320022903183703382001419482c0800041082003410810ae81808000210420004200370300200020043703080c010b200042013703000b200341d0006a2480808080000b6802017f017e23808080800041106b22022480808080000240024020012802000d0020022000200141086a10d381808000024020022802000d00200229030821030c020b10f9818080001a000b200141046a10cd8080800021030b200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110cb80808000024020022802004101470d00000b20022903082103200241106a24808080800020030b6502017f017e23808080800041106b22022480808080000240024020012d00264102460d0020022000200110db80808000024020022802000d00200229030821030c020b10f9818080001a000b200110cd8080800021030b200241106a24808080800020030b2501017e20002903002202422088a72200410520004105491b4105200242ff01834204511b0b9e0502027f0b7e23808080800041f0006b22032480808080004100210402400340200441d000460d01200320046a4202370300200441086a21040c000b0b024002400240024002400240024002400240024002402002290300220542ff018342cc00520d002001200541dc80c08000410a2003410a10af818080001a200341d0006a2001200310928180800020032802500d01200341e8006a290300210520032903602106200341d0006a2001200341086a10a68080800020032802500d0220032903582107200341d0006a2001200341106a10928180800020032802500d032003290318220842ff01834204520d04410120032d0020220441004741017420044101461b22044102460d05200341e8006a29030021092003290360210a200341d0006a2001200341286a10928180800020032802500d06200341e8006a290300210b2003290360210c200341d0006a2001200341306a10a68080800020032802500d072003290358210d200341386a200410df8080800022024105460d08200341d0006a200341c0006a2001109c8180800020032802500d092003290358210e200341d0006a200341c8006a2001109c81808000024020032802500d002003290358210f2000200c3703202000200a37031020002006370300200020043a00582000200236025420002008422088a7360250200020073703482000200d3703402000200e3703382000200f3703302000200b37032820002009370318200020053703080c0b0b200041053602540c0a0b200041053602540c090b200041053602540c080b200041053602540c070b200041053602540c060b200041053602540c050b200041053602540c040b200041053602540c030b200041053602540c020b200041053602540c010b200041053602540b200341f0006a2480808080000b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e2808080003602082001200141086a10d7808080002100200141206a24808080800020000be90101027f23808080800041306b2201248080808000200120003703082001412f6a10bd81808000410c210202402001412f6a41d083c0800010be808080000d00200141086a10b2818080002001412f6a10bd818080002001412f6a41d083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ef2eed90b3703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020b200141306a24808080800020020b3d02017f017e23808080800041206b2200248080808000200042003703082000411f6a200041086a10dd808080002101200041206a24808080800020010b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a200110b181808000024020012802084101470d00000b2001200129031010e5808080003602082001200141086a10d7808080002100200141206a24808080800020000bdd0101027f23808080800041306b220124808080800020012000370308200141106a108c818080000240024020012802100d002001412f6a10bd818080002001412f6a41e083c08000200141086a10c0808080002001412f6a10bd818080002001412f6a418087014180d21f10c181808000200120012903083703202001428ed4b8bacdbed7013703182001428ee6aeb9ea043703102001412f6a2001412f6a200141106a10d480808000200141206a2001412f6a10a88180800010c2818080001a410021020c010b200128021421020b200141306a24808080800020020b3e02017f017e23808080800041106b2200248080808000200010e78080800036020c20002000410c6a10d7808080002101200041106a24808080800020010bad0203017f017e017f23808080800041306b22002480808080002000412f6a10bd81808000200041106a2000412f6a41e083c0800010bd808080000240024020002802104101470d00200020002903182201370308200041086a10b2818080002000412f6a10bd818080002000412f6a41d083c08000200041086a10c0808080002000412f6a10bd818080002000412f6a2000412f6a41e083c0800010ac80808000420210cb818080001a2000412f6a10bd818080002000412f6a418087014180d21f10c181808000200020013703202000428ef2b5958ab5023703182000428ee6aeb9ea043703102000412f6a2000412f6a200041106a10d480808000200041206a2000412f6a10a88180800010c2818080001a410021020c010b411521020b200041306a24808080800020020b4102017f017e23808080800041206b2200248080808000200041086a10e9808080002000411f6a200041086a10dd808080002101200041206a24808080800020010b3e01017f23808080800041106b22012480808080002001410f6a10bd8180800020002001410f6a41d083c0800010bd80808000200141106a2480808080000b5c01027f23808080800041106b2201248080808000410121020240024002402000a741ff01710e020102000b000b410021020b2001200210eb8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bdc0101017f23808080800041206b2201248080808000200120003a0007200141086a108c818080000240024020012802080d002001411f6a10bd818080002001411f6a41f083c08000200141076a10bf808080002001411f6a10bd818080002001411f6a418087014180d21f10c181808000200120012d00073a001e2001428ed2aadceeac033703102001428ee6aeb9ea043703082001411f6a2001411f6a200141086a10d4808080002001411e6a2001411f6a10a68180800010c2818080001a410021000c010b200128020c21000b200141206a24808080800020000b4102017f017e23808080800041106b2200248080808000200010ed808080003a000e2000410e6a2000410f6a10a6818080002101200041106a24808080800020010b4401027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000200141fd01710b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010ef808080003602082001200141086a10d7808080002100200141206a24808080800020000bcd0101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd81808000411621022001411f6a41f083c0800010bc8080800041fd0171450d01200120003703102001428ed4a9f3cdadeb013703082001428ee6aeb9ea043703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a2001411f6a10bd818080002001411f6a200010a880808000410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f1808080003602082001200141086a10d7808080002100200141206a24808080800020000be60101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418084c0800010b5808080002001411f6a10bd8180800020014106360200200120003703082001411f6a2001418087014180f6de0010a980808000200120003703102001428ed8ea1b3703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6801017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f3808080003602082001200141086a10d7808080002100200141206a24808080800020000bc20101027f23808080800041206b22012480808080002001108c818080000240024020012802000d002001411f6a10bd8180800020014106360200200120003703082001411f6a2001411f6a200110ac80808000420110cb818080001a200120003703102001428ed4b0faaebd033703082001428ed4b1d4f9a6033703002001411f6a2001411f6a200110d4808080002001411f6a200141106a10d58080800010c2818080001a410021020c010b200128020421020b200141206a24808080800020020b6b01017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109b81808000024020012802084101470d00000b2001200129031010f5808080003a0008200141086a2001411f6a10a6818080002100200141206a24808080800020000b5101027f23808080800041206b22012480808080002001411f6a10bd8180800020014106360208200120003703102001411f6a200141086a10ab808080002102200141206a248080808000200241fd01710b7a01017f23808080800041206b2202248080808000200220013703000240200042ff01834204520d00200241086a2002411f6a2002109b8180800020022802084101460d0020022000422088a7200229031010f7808080003602082002200241086a10d7808080002100200241206a24808080800020000f0b000b990801087f2380808080004180036b2202248080808000200220013703000240108d8180800022030d00200241ff026a10bd81808000200241013602302002200036023420024190026a200241ff026a200241306a10af80808000024020022d00b60222034102460d002002280290022104200241086a41047220024190026a41047241221093828080001a200220033a002e20022004360208200220022d00b7023a002f200241086a10b2818080002002108e8180800022030d014108210320022d002e0d0141002103200241286a2204200229032010c88180800010ff818080002105024002400340024020052003470d00200220013703180240200228022841016a2203450d00200220033602282002200241ff026a10c5818080002201370340200241c8006a21062004200229032010c88180800010ff818080002107200241e9026a220841036a2109410021030340024020072003470d0020022001370320200241ff026a10bd8180800020024190026a41086a2203200241306a41086a22042903003703002002200229033037039002200241ff026a20024190026a200241086a10b380808000200241ff026a10bd81808000200320042903003703002002200229033037039002200241ff026a20024190026a418087014180f6de0010a980808000200220022802283602b401200220003602b0012002428ed4b9b3cebe03370398022002428ed4b1d4f9a60337039002200241ff026a200241ff026a20024190026a10d480808000200241ff026a200241b0016a10d98080800010c2818080001a410021030c080b4105210502402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e08080800020022802e40222054105460d06200241b0016a20024190026a41d4001093828080001a200220092800003600ab01200220082800003602a8010b200241d0006a200241b0016a41d4001093828080001a200220022800ab0136004b200220022802a801360248024020054105460d0020024190026a200241d0006a41d4001093828080001a2009200228004b36000020082002280248360000200241003a00e802200220053602e402200220062002290340200620024190026a10d28080800010c9818080002201370340200341016a21030c010b0b419884c08000108782808000000b418884c08000108c82808000000b02402004200229032010c88180800010ff8180800020034d0d00200220042002290320200310fe8180800010c7818080003703b00120024190026a2004200241b0016a10e080808000200341016a210320022802e402417d6a0e03020103010b0b41a884c08000108782808000000b410621030c020b000b410421030b20024180036a24808080800020030be70101017f23808080800041c0006b2204248080808000200420013703182004200037031020042002370320200441286a2004413f6a200441106a10b181808000024020042802284101460d0020042903302101200441286a2004413f6a200441186a10b18180800020042802284101460d0020042903302100200441286a2004413f6a200441206a109b8180800020042802284101460d00200342ff018342cb00520d00200441086a200120002004290330200310f980808000200420042903083702282004413f6a200441286a10d1808080002103200441c0006a24808080800020030f0b000bf01104077f027e037f017e23808080800041e0026b220524808080800020052002370320200520013703182005200337032820052004370330410121060240108d8180800022070d00200541186a10b2818080000240200541186a200541206a10b481808000450d00410f21070c010b0240200541386a2208200529033010c88180800010ff81808000450d0002402008200529033010c88180800010ff8180800041e4004d0d00411321070c020b200541286a108e8180800022070d01410021072008200529033010c88180800010ff81808000210920054188026a210a200541106a210b4200210c4200210d0340024002400240024020092007470d00200541df026a10bd818080002005200541df026a41b884c0800010ad808080004100210a02402005280204410020052802004101711b41016a220e450d002005200e36023c2005200541df026a10aa8180800037034020054188016a21062008200529033010c88180800010ff81808000210f02400340200f200a200f200a4b1b211003400240200a2010470d0041002107200541f3006a41003600002005410036027020052005290330370368200520033703602005200529032037035820052005290318370350200541df026a10bd81808000200541013602b8012005200e3602bc01200541df026a200541b8016a200541d0006a10b380808000200541df026a10bd81808000200541e0016a41086a2206200541b8016a41086a290300370300200520052903b8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541023602c8012005200e3602cc01200541df026a200541c8016a41d884c0800010b780808000200541df026a10bd818080002006200541c8016a41086a290300370300200520052903c8013703e001200541df026a200541e0016a418087014180f6de0010a980808000200541df026a10bd81808000200541df026a41b884c080002005413c6a10b180808000200541df026a10bd81808000200541df026a41b884c08000418087014180f6de0010a9808080002005200d3703f8012005200c3703f0012005200528023c3602e801200520052903183703e0012005428ed2eadca9bda3013703c8022005428ef8f49b8ad7023703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10ce8080800010c2818080001a2008200529033010c88180800010ff81808000210620054188026a21090340024020062007470d00200528023c2107410021060c0d0b02402008200529033010c88180800010ff8180800020074d0d00200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b4024105460d0820052903a002210220052903a80221012005290390022104200529039802210320052903e001210d20052903e801210c2005290380022111200520092903003703f801200520113703f0012005200c3703e8012005200d3703e0012005200528023c3602980220052003370388022005200437038002200520013703a00220052002370390022005200736029c022005428ed2a9133703c8022005428ef2b3d5ecb7d6013703c002200541df026a200541df026a200541c0026a10d480808000200541df026a200541e0016a10d68080800010c2818080001a200741016a21070c010b0b41e084c08000108782808000000b2008200529033010c88180800010ff81808000200a4d0d02200520082005290330200a10fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105460d05200a41016a210b200520052903980237034841002107024003400240200a2007470d00200542003703c802200542003703c002410021072008200529033010c88180800010ff81808000210a024003400240200a2007470d002005200541df026a200541c8006a10d1818080003703e001200541e0016a200541186a200541c0006a200541c0026a10d281808000200b210a0c070b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703d801200541e0016a2008200541d8016a10e08080800020052802b40222094105460d0a200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801024002402006200541c8006a10b481808000450d0020052903c80222022005290358220185427f852002200220017c20052903c002220120052903507c2204200154ad7c220185834200530d01200520043703c002200520013703c8020b200741016a21070c010b0b419085c08000108c82808000000b418085c08000108782808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c7818080003703c002200541e0016a2008200541c0026a10e08080800020052802b40222094105460d07200541d0006a200541e0016a41d4001093828080001a200520093602a401200520052903b8023703a801200741016a21072006200541c8006a10b481808000450d000b200b210a0c010b0b0b41a085c08000108782808000000b41f084c08000108782808000000b41c884c08000108c82808000000b2008200529033010c88180800010ff8180800020074d0d01200520082005290330200710fe8180800010c781808000370350200541e0016a2008200541d0006a10e08080800020052802b4024105470d020b000b41b085c08000108782808000000b4101210620052903e00122045020052903e80122024200532002501b0d01200529038002221150200a29030022014200532001501b0d01024020052903a80220052903a002560d00411221070c030b200541086a200420022011200110948280800002402005290308200b290300844200510d00411121070c030b0240200d200285427f85200d200d20027c200c20047c2202200c54ad7c220185834200530d00200741016a21072002210c2001210d0c010b0b41c085c08000108c82808000000b410721070b2000200736020420002006360200200541e0026a2480808080000bfd0101017f23808080800041d0006b22052480808080002005200337031020052002370308200520043703180240200042ff01834204520d00200142ff01834204520d00200541206a200541cf006a200541086a10928180800020052802204101460d00200541386a290300210320052903302102200541206a200541cf006a200541106a10a68080800020052802204101460d0020052903282104200541206a200541cf006a200541186a10c18080800020052802204101460d0020052000422088a72001422088a7200220032004200529032810fb808080003602202005200541206a10d7808080002100200541d0006a24808080800020000f0b000bef0801047f23808080800041d0026b2206248080808000200620053703200240108d8180800022070d00200641cf026a10bd818080002006410136025020062000360254200641d0016a200641cf026a200641d0006a10af808080000240024020062d00f60122074102460d0020062802d0012108200641286a410472200641d0016a41047241221093828080001a20062008360228200620062d00f7013a004f200620073a004e02402007410171450d00410821070c030b4101210720062d004c0d0220062d004d0d02200641c8006a2208200629034010c88180800010ff8180800020014b0d010b410421070c010b024002402008200629034010c88180800010ff8180800020014d0d00200620082006290340200110fe8180800010c7818080003703b002200641d0016a2008200641b0026a10e08080800020062802a40222074105470d01000b41d085c08000108782808000000b200641e0006a200641d0016a41d4001093828080001a200620073602b401200620062903a8023703b8012006410036021c200641086a2002200320062903800120064188016a2903002006411c6a1091828080000240200628021c450d00410721070c010b02402006290308200629036085200641106a290300200629036885844200510d00411121070c010b2006200641cf026a20002001200641e0006a2002200320041090818080003703c801200641cf026a10bd81808000200641cf026a200641386a200641c8016a200641206a10b981808000200641cf026a10bd81808000200641023602b002200620003602b402200641d0016a200641cf026a200641b0026a10ae808080004109210720062903d801420020062802d0011b2004520d0002402004427f520d00410e21070c010b2006200442017c3703c002200641cf026a10bd81808000200641d0016a41086a2207200641b0026a41086a2209290300370300200620062903b0023703d001200641cf026a200641d0016a200641c0026a10b780808000200641cf026a10bd8180800020072009290300370300200620062903b0023703d001200641cf026a200641d0016a418087014180f6de0010a9808080002006200337037820062002370370200641013a00b801200641d0016a200641e0006a41e0001093828080001a200620082006290340200110fe818080002008200641d0016a10d28080800010c681808000370340200641cf026a10bd818080002007200641d0006a41086a2208290300370300200620062903503703d001200641cf026a200641d0016a200641286a10b380808000200641cf026a10bd8180800020072008290300370300200620062903503703d001200641cf026a200641d0016a418087014180f6de0010a980808000200620033703e801200620023703e001200620013602d401200620003602d0012006428ef2aef9a9c7033703b8022006428ef0b79ddd053703b002200641cf026a200641cf026a200641b0026a10d480808000200641cf026a200641d0016a10d08080800010c2818080001a410021070b200641d0026a24808080800020070b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710fd8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbb0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a10b281808000024020012d002c450d00410121020c020b200141013a002c200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428eeeaad6b9b6ca013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710ff8080800036020c20012001410c6a10d7808080002100200141106a24808080800020000bbe0301037f23808080800041f0006b22012480808080000240108d8180800022020d00200141ef006a10bd81808000200141013602582001200036025c200141306a200141ef006a200141d8006a10af80808000024020012d005622024102460d0020012802302103200141086a410472200141306a41047241221093828080001a20012003360208200120012d00573a002f200120023a002e02402002410171450d00410821020c020b200141086a41086a10b281808000024020012d002d450d00410121020c020b200141013a002d200141ef006a10bd81808000200141306a41086a2202200141d8006a41086a220329030037030020012001290358370330200141ef006a200141306a200141086a10b380808000200141ef006a10bd818080002002200329030037030020012001290358370330200141ef006a200141306a418087014180f6de0010a980808000200120003602682001428ed4e8d9b9f6ae013703382001428ed4bbfaddae9b01370330200141ef006a200141ef006a200141306a10d480808000200141e8006a200141ef006a10a78180800010c2818080001a410021020c010b410421020b200141f0006a24808080800020020b4b01017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a71081818080002001200110cf808080002100200141106a24808080800020000bd20a04047f017e047f057e23808080800041b0026b22022480808080000240024002400240108d8180800022030d00200241af026a10bd818080002002410136023020022001360234200241b0016a200241af026a200241306a10af8080800020022d00d60122034102460d0120022802b0012104200241086a410472200241b0016a41047241221093828080001a20022004360208200220022d00d7013a002f200220033a002e02402003410171450d00410821030c030b200241086a10b2818080000240200241086a200241106a10b481808000450d00410f21030c030b4105210320022d002c4101470d0220022d002d4101470d0241002104200241286a2203200229032010c88180800010ff818080002105024002400340024020052004470d002002200241af026a10aa818080003703402002200241af026a10c5818080002206370348200241d0006a210720024180016a210820024188016a2109410021042003200229032010c88180800010ff818080002105200241e8006a210a4200210b4200210c02400340024020052004470d0020022006370320200241af026a10bd81808000200241b0016a41086a2203200241306a41086a2204290300370300200220022903303703b001200241af026a200241b0016a200241086a10b380808000200241af026a10bd8180800020032004290300370300200220022903303703b001200241af026a200241b0016a418087014180f6de0010a9808080002007200229034810c88180800010ff8180800021032002200c3703b8012002200b3703b001200220033602c401200220013602c0012002428ee2e6d9bb053703582002428ef2b3d5ecb7d601370350200241af026a200241af026a200241d0006a10d480808000200241af026a200241b0016a10da8080800010c2818080001a20002002290348370308200041003602000c0a0b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c78180800037039802200241b0016a200320024198026a10e0808080002002280284024105460d05200241d0006a200241b0016a41d4001093828080001a200241033602a40120022002290388023703a8012002200241af026a200910d1818080003703b001200241b0016a200241c0006a2008200241d0006a10d2818080000240200c2002290358220685427f85200c200c20067c200b2002290350220d7c220e200b54ad7c220f85834200530d00200220022903603703e0012002200d3703b001200220013602d00120022002290388013703c80120022002290380013703c001200220063703b8012002200a2903003703e801200220043602d4012002428ed2aeb30d3703a0022002428ef2b3d5ecb7d60137039802200241af026a200241af026a20024198026a10d480808000200241af026a200241b0016a10d88080800010c2818080001a200241b0016a200241d0006a41e0001093828080001a2002200720022903482007200241b0016a10d28080800010c9818080002206370348200441016a2104200e210b200f210c0c010b0b41f085c08000108c828080000c040b41e085c08000108782808000000b2003200229032010c88180800010ff8180800020044d0d01200220032002290320200410fe8180800010c781808000370350200241b0016a2003200241d0006a10e08080800020022802840222074105460d02024020074103460d00200441016a210420022d0088024101710d010b0b410d410620074103471b21030c040b418086c08000108782808000000b000b20004101360200200020033602040c020b410421030b20004101360200200020033602040b200241b0026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710838180800036020c20012001410c6a10d7808080002100200141106a24808080800020000b8b0d04087f017e017f027e23808080800041c0026b2201248080808000200141bf026a10bd818080002001410136023020012000360234200141d0016a200141bf026a200141306a10af808080000240024020012d00f60122024102460d0020012802d0012103200141086a410472200141d0016a41047241221093828080001a20012003360208200120012d00f7013a002f200120023a002e4108210320024101710d01200141086a10b28180800041002102200141286a2203200129032010c88180800010ff818080002104024002400340024020042002470d002001200141bf026a10aa8180800037034020014198016a2104410021052003200129032010c88180800010ff8180800021060240034020062005200620054b1b2107034020052108024020082007470d00200141013a002e2001200141bf026a10c58180800022093703c801200141d0016a2104410021022003200129032010c88180800010ff81808000210a03400240200a2002470d0020012009370320200141bf026a10bd81808000200141d0016a41086a200141306a41086a290300370300200120012903303703d001200141bf026a200141d0016a200141086a10b380808000200120003602602001428ee2aaf4ecc4023703d8012001428ef8f49b8ad7023703d001200141bf026a200141bf026a200141d0016a10d480808000200141e0006a200141bf026a10a78180800010c2818080001a410021030c0b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d08200141e0006a200141d0016a41d4001093828080001a20012903a8022109200120003602502001428ee2aaf4ecc4023703d8012001428ef2b3d5ecb7d6013703d00120012002360254200141bf026a200141bf026a200141d0016a10d480808000200141bf026a200141d0006a10d98080800010c2818080001a200141d0016a200141e0006a41d4001093828080001a200120093703a802200141043602a4022001200420012903c8012004200141d0016a10d28080800010c98180800022093703c801200241016a21020c010b0b419086c08000108782808000000b2003200129032010c88180800010ff8180800020084d0d02200120032001290320200810fe8180800010c781808000370360200141d0016a2003200141e0006a10e08080800020012802a4024105460d05200841016a21052001200129038802370348410021020340024020082002470d002001420037035820014200370350410021022003200129032010c88180800010ff8180800021080340024020082002470d002001290350420052200129035822094200552009501b450d052001200141bf026a200141c8006a10d1818080003703d001200141d0016a200141c0006a200141086a200141d0006a10d2818080000c050b024002402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c7818080003703c801200141d0016a2003200141c8016a10e08080800020012802a402220a4105470d010c0a0b41b086c08000108782808000000b200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b80102402004200141c8006a10b481808000450d000240200129035822092001290368220b85427f8520092009200b7c2001290350220b20012903607c220c200b54ad7c220b85834200530d002001200c3703502001200b3703580c010b41c086c08000108c82808000000b200241016a21020c000b0b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370350200141d0016a2003200141d0006a10e08080800020012802a402220a4105460d07200141e0006a200141d0016a41d4001093828080001a2001200a3602b401200120012903a8023703b801200241016a21022004200141c8006a10b481808000450d010c020b0b0b0b41d086c08000108782808000000b41a086c08000108782808000000b02402003200129032010c88180800010ff8180800020024d0d00200120032001290320200210fe8180800010c781808000370360200141d0016a2003200141e0006a10e080808000200241016a210220012802a402417d6a0e03030102010b0b41e086c08000108782808000000b000b410621030c010b410421030b200141c0026a24808080800020030b4e01017f23808080800041306b22012480808080000240200042ff01834204510d00000b20012000422088a71085818080002001412f6a200110de808080002100200141306a24808080800020000b7a01017f23808080800041c0006b22022480808080002002413f6a10bd81808000200241013602282002200136022c20022002413f6a200241286a10af808080000240024020022d00264102470d00200041023a0026200041043602000c010b2000200241281093828080001a0b200241c0006a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a710878180800036020c20012001410c6a10d7808080002100200141106a24808080800020000bd70201027f23808080800041306b22012480808080002001412f6a10bd8180800020014101360200200120003602044104210202402001412f6a200110b080808000450d002001412f6a10be8180800021022001412f6a10bd81808000200141106a41086a200141086a290300370300200120012903003703102001412f6a200141106a2002200210a9808080002001412f6a10bd8180800020014102360210200120003602142001412f6a200141106a2002200210a9808080002001412f6a10bd818080002001412f6a41b884c080002002200210a9808080002001412f6a10bd818080002001412f6a2002200210c18180800020012002360228200120003602242001428ee2f91c3703182001428ef8f49b8ad7023703102001412f6a2001412f6a200141106a10d4808080002001412f6a200141246a10d98080800010c2818080001a410021020b200141306a24808080800020020bcb0101017f23808080800041c0006b220424808080800020042003370308200420023703000240200042ff01834204520d00200142ff01834204520d00200441106a2004413f6a200410928180800020042802104101460d00200441286a290300210320042903202102200441106a2004413f6a200441086a10a68080800020042802104101460d00200441106a2000422088a72001422088a72002200320042903181089818080002004413f6a200441106a10dc808080002100200441c0006a24808080800020000f0b000b970301037f2380808080004180026b2206248080808000200641ff016a10bd81808000200641013602302006200136023420064190016a200641ff016a200641306a10af808080000240024020062d00b60122074102460d002006280290012108200641086a41047220064190016a41047241221093828080001a200620073a002e20062008360208200620062d00b7013a002f0240200641286a2207200629032010c88180800010ff8180800020024d0d00024002402007200629032010c88180800010ff8180800020024d0d00200620072006290320200210fe8180800010c78180800037033020064190016a2007200641306a10e08080800020062802e40122074105470d01000b41f086c08000108782808000000b200641306a20064190016a41d4001093828080001a2006200736028401200620062903e80137038801200641ff016a20012002200641306a200320042005109081808000210420004100360200200020043703080c020b20004281808080c0003703000c010b20004281808080c0003703000b20064180026a2480808080000b5101017f23808080800041106b22012480808080000240200042ff01834204510d00000b20012000422088a7108b818080003703002001410f6a200110bb808080002100200141106a24808080800020000b6502017f017e23808080800041306b22012480808080002001412f6a10bd81808000200141023602082001200036020c200141186a2001412f6a200141086a10ae808080002001280218210020012903202102200141306a2480808080002002420020001b0b860102027f017e23808080800041206b22012480808080002001411f6a10bd81808000200141086a2001411f6a41d083c0800010bd80808000410121020240024020012802084101470d00200120012903102203370300200110b28180800020002003370308410021020c010b2000410a3602040b20002002360200200141206a2480808080000b4901027f23808080800041106b22002480808080002000410f6a10bd818080002000410f6a41f083c0800010bc808080002101200041106a248080808000410b4100200141fd01711b0b7f01027f23808080800041206b22012480808080002001411f6a10bd818080004100210202402001411f6a41d083c0800010be80808000450d002001411f6a10bd818080002001410636020820012000290300370310410041102001411f6a200141086a10ab8080800041fd01711b21020b200141206a24808080800020020b4d02017f017e23808080800041106b2202248080808000200010bd8180800020022001290300200010cc808080003703002002410f6a200210b8818080002103200241106a24808080800020030b8b0f04017f017e087f017e23808080800041e0006b22072480808080002007200010cf818080002208370300200741086a21092007200920082009200810d08180800010ff8180800010fe81808000418184c08000410410ac81808000220837030020074180043b01382007200920082009200810d08180800010ff8180800010fe81808000200741386a410210ac818080003703002007200741df006a10bc81808000370330200741386a41186a220a4200370300200741386a41106a220b4200370300200741386a41086a220c420037030020074200370338200741306a41086a220d200741306a10d4818080004204200741386a412010ad81808000200741106a41186a220e200a290300370300200741106a41106a220f200b290300370300200741106a41086a2210200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac818080003703002007200010aa8180800037033020072000200741306a108f81808000370308200a4200370300200b4200370300200c420037030020074200370338200741086a41086a200741086a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341306a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800037030020072000200341386a108f81808000370330200a4200370300200b4200370300200c420037030020074200370338200d200741306a10d4818080004204200741386a412010ad81808000200e200a290300370300200f200b2903003703002010200c29030037030020072007290338370310200729030021082007200920082009200810d08180800010ff8180800010fe81808000200741106a412010ac8180800022083703002007200141187420014180fe03714108747220014108764180fe0371200141187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac8180800022083703002007200241187420024180fe03714108747220024108764180fe0371200241187672723602382007200920082009200810d08180800010ff8180800010fe81808000200741386a410410ac81808000221137030020072003290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703402007200341086a290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843703382007200920112009201110d08180800010ff8180800010fe81808000200741386a411010ac8180800022083703002007200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703402007200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe038320054238888484843703382007200920082009200810d08180800010ff8180800010fe81808000200741386a411010ac81808000220537030020072003290340220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac81808000220537030020072003290348220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843703382007200920052009200510d08180800010ff8180800010fe81808000200741386a410810ac8180800022043703002007200642388620064280fe0383422886842006428080fc0783421886200642808080f80f834208868484200642088842808080f80f832006421888428080fc07838420064228884280fe03832006423888848484370338200920042009200410d08180800010ff8180800010fe81808000200741386a410810ac818080002104200741e0006a24808080800020040b190020004200370300200020023502004220864204843703080b7c01027e024002400240024020022903002203a741ff0171220241c500460d002002410b470d02200041106a20031080828080000c010b2001200310e58180800021042001200310e481808000210320002004370318200020033703100b420021030c010b200010f981808000370308420121030b200020033703000b130020004200370300200020023100003703080b4602017f017e23808080800041106b2203248080808000200320012002109581808000200329030821042000200329030037030020002004370308200341106a2480808080000b6d02017f027e23808080800041106b2203248080808000200320022903002204200241086a29030022051082828080000240024020032802000d00200329030821040c010b20012005200410e38180800021040b2000420037030020002004370308200341106a2480808080000b4b00200041003602102000200436020c2000200336020820002002360204200020013602002000200220016b410376220236021820002002200420036b410376220420022004491b3602140b3901017f23808080800041106b22032480808080002003200229020037020820002001200341086a109881808000200341106a2480808080000b6a02027f017e23808080800041106b22032480808080002003200228020022042002280204220210fa818080000240024020032802000d00200329030821050c010b20012004200210d78180800021050b2000420037030020002005370308200341106a2480808080000b5202017f017e23808080800041106b2203248080808000200320022903083703082003200229030037030020012003410210da8180800021042000420037030020002004370308200341106a2480808080000b0e00200020012001109b818080000b7d02017f027e23808080800041106b2203248080808000024002402002290300220442ff018342c800520d0020032004370308420121050240200341106a200410f58180800010ff818080004120470d0020002003290308370308420021050b200020053703000c010b200042013703000b200341106a2480808080000b2e01027e4201210302402001290300220442ff018342cd00520d0020002004370308420021030b200020033703000b0e002000200220011099818080000b130020004200370300200020012903003703080b5102017f017e23808080800041106b220324808080800020032001200210978180800042012104024020032802000d0020002003290308370308420021040b20002004370300200341106a2480808080000b130020004200370300200020012903003703080b130020004200370300200020012903003703080b1200200141bb87c08000410f108b828080000b0300000b02000b4502017f017e23808080800041106b2202248080808000200220002001109481808000024020022802004101470d00000b20022903082103200241106a24808080800020030b070020003100000b0d0020003502004220864204840b070020002903000b070020002903000b0a00200010df818080000b6001017f23808080800041106b22042480808080000240200020012903002002290300200310f28180800042ff01834202510d00419087c08000412b2004410f6a418087c0800041b088c08000108682808000000b200441106a2480808080000b12002000200120022003200410d5818080000b12002000200120022003200410d6818080000b12002000200120022003200410d8818080000b140020002001200220032004200510d9818080000b0e0020002001200210da818080000b2e01027e4201210302402002290300220442ff018342cd00520d0020002004370308420021030b200020033703000b1300200041086a200029030010f8818080001a0b5902017f017e23808080800041206b22032480808080002003200236020c20032001360208200341106a2000200341086a109781808000024020032802104101470d00000b20032903182104200341206a24808080800020040b11002000200110b58180800041ff0171450b2601017e417f200041086a2000290300200129030010db81808000220242005220024200531b0b2e01027e4201210302402002290300220442ff018342c800520d0020002004370308420021030b200020033703000b130020004200370300200020022903003703080b0f002000200129030010f6818080000b1a00200020012903002002290300200329030010f7818080001a0b1000200010dd8180800010ff818080000b1000200010e08180800010ff818080000b0a00200010de818080000b02000b6d01037f23808080800041106b22012480808080002001410f6a10ba818080002102024002402001410f6a10bb8180800022032002490d00200320026b41016a22020d0141a889c08000108c82808000000b41a889c08000108d82808000000b200141106a24808080800020020b140020002001200210ec8180800010fd818080000b0e0020002001200210ed818080000b1b002000200110fe81808000200210fe8180800010f1818080001a0b0e0020002001200210dc818080000b0c002000200110e1818080000b0c002000200110e2818080000b0a00200010e6818080000b1000200020012002200310e7818080000b0e0020002001200210e8818080000b0c002000200110e9818080000b0e0020002001200210ea818080000b1000200020012002200310eb818080000b0e0020002001200210ee818080000b0c002000200110ef818080000b12002000200120022003200410f0818080000b0c002000200110f3818080000b0a00200010f4818080000b0c002000200110f5818080000b070020012903000bdf0102027f027e23808080800041c0006b22042480808080002004200041086a220541b889c08000410810b381808000370308200129030021062002290300210720042005200310a5818080003703202004200737031820042006370310410021010340024020014118470d00410021010240034020014118460d01200441286a20016a200441106a20016a290300370300200141086a21010c000b0b20052000200441086a2005200441286a410310da8180800010ab81808000200441c0006a2480808080000f0b200441286a20016a4202370300200141086a21010c000b0b130020004200370300200020022903003703080b070020002903000b1e00200120022003ad4220864204842004ad4220864204841080808080000b1f00200120022003ad4220864204842004ad4220864204841081808080001a0b1a002001ad4220864204842002ad4220864204841082808080000b2e00024020022004460d00000b2001ad4220864204842003ad4220864204842002ad4220864204841083808080000b3000024020032005460d00000b20012002ad4220864204842004ad4220864204842003ad4220864204841084808080000b1a002001ad4220864204842002ad4220864204841085808080000b0c00200120021086808080000b0c00200120021087808080000b08001088808080000b08001089808080000b0800108a808080000b0800108b808080000b0a002001108c808080000b0a002001108d808080000b0c0020012002108e808080000b0a002001108f808080000b0a0020011090808080000b08001091808080000b0e002001200220031092808080000b0c00200120021093808080000b0a0020011094808080000b0c00200120021095808080000b0e002001200220031096808080000b0c00200120021097808080000b0c00200120021098808080000b0c00200120021099808080000b0a002001109a808080000b10002001200220032004109b808080000b0c0020012002109c808080000b0e00200120022003109d808080000b0a002001109e808080000b0800109f808080000b0a00200110a0808080000b0a00200110a1808080000b0e0020012002200310a2808080000b0a00200110a3808080000b0900428390808080010bb50102017f017e23808080800041106b220324808080800002400240200241094b0d00420021040340024020020d002000410036020020002004420886420e843703080c030b200341086a20012d000010fb81808000024020032d00084103460d0020002003290308370204200041013602000c030b200141016a21012002417f6a2102200442068620033100098421040c000b0b20002002360208200041003a0004200041013602000b200341106a2480808080000b820101017f410121020240200141ff017141df00460d000240200141506a41ff0171410a490d000240200141bf7f6a41ff0171411a490d0002402001419f7f6a41ff0171411a490d00200020013a0001200041013a00000f0b200141456a21020c020b2001414b6a21020c010b200141526a21020b200041033a0000200020023a00010b070020004208880b070020004201510b0b002000ad4220864204840b08002000422088a70b160020002001423f87370308200020014208873703000b3201017e420121020240200142ffffffffffffffff00560d0020002001420886420684370308420021020b200020023703000b5001017e42012103024020014280808080808080c0007c42ffffffffffffffff00560d0020012001852001423f87200285844200520d0020002001420886420b84370308420021030b200020033703000ba00601067f0240200028020022032000280208220472450d0002402004410171450d00200120026a210502400240200028020c22060d0041002107200121080c010b41002107200121080340200822042005460d020240024020042c00002208417f4c0d00200441016a21080c010b0240200841604f0d00200441026a21080c010b0240200841704f0d00200441036a21080c010b200441046a21080b200820046b20076a21072006417f6a22060d000b0b20082005460d00024020082c00002204417f4a0d0020044160491a0b024002402007450d00024020072002490d0020072002460d01410021040c020b200120076a2c000041404e0d00410021040c010b200121040b2007200220041b21022004200120041b21010b024020030d00200028021c20012002200028022028020c118080808000000f0b200028020421030240024020024110490d0020012002108a8280800021040c010b024020020d00410021040c010b2002410371210602400240200241044f0d0041002104410021070c010b2002410c712105410021044100210703402004200120076a22082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a21042005200741046a2207470d000b0b2006450d00200120076a21080340200420082c000041bf7f4a6a2104200841016a21082006417f6a22060d000b0b02400240200320044d0d00200320046b2106024002400240410020002d0018220420044103461b22040e03020001020b20062104410021060c010b20064101762104200641016a41017621060b200441016a21042000280210210720002802202108200028021c210003402004417f6a2204450d0220002007200828021011818080800000450d000b41010f0b200028021c20012002200028022028020c118080808000000f0b0240200020012002200828020c11808080800000450d0041010f0b410021040340024020062004470d0020062006490f0b200441016a210420002007200828021011818080800000450d000b2004417f6a2006490f0b200028021c20012002200028022028020c118080808000000b4d01017f23808080800041206b22032480808080002003410036021020034101360204200342043702082003200136021c200320003602182003200341186a36020020032002108582808000000b3601017f23808080800041106b2202248080808000200241013b010c2002200136020820022000360204200241046a10a381808000000b8f0101017f23808080800041c0006b22052480808080002005200136020c2005200036020820052003360214200520023602102005410236021c200541c08ac08000360218200542023702242005418280808000ad422086200541106aad843703382005418380808000ad422086200541086aad843703302005200541306a360220200541186a2004108582808000000b130041908ac08000412b2000108482808000000b14002001200028020020002802041083828080000b180020002802002001200028020428020c118180808000000be90601087f024002402001200041036a417c71220220006b2203490d00200120036b22044104490d002004410371210541002106410021010240200220004622070d004100210102400240200020026b2208417c4d0d00410021090c010b4100210903402001200020096a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2101200941046a22090d000b0b20070d00200020096a21020340200120022c000041bf7f4a6a2101200241016a2102200841016a22080d000b0b200020036a210002402005450d0020002004417c716a22022c000041bf7f4a210620054101460d00200620022c000141bf7f4a6a210620054102460d00200620022c000241bf7f4a6a21060b20044102762108200620016a21030340200021042008450d02200841c001200841c001491b220641037121072006410274210541002102024020084104490d002004200541f007716a210941002102200421010340200128020c2200417f7341077620004106767241818284087120012802082200417f7341077620004106767241818284087120012802042200417f7341077620004106767241818284087120012802002200417f7341077620004106767241818284087120026a6a6a6a2102200141106a22012009470d000b0b200820066b2108200420056a2100200241087641ff81fc0771200241ff81fc07716a418180046c41107620036a21032007450d000b2004200641fc01714102746a22022802002201417f734107762001410676724181828408712101024020074101460d0020022802042200417f7341077620004106767241818284087120016a210120074102460d0020022802082202417f7341077620024106767241818284087120016a21010b200141087641ff811c71200141ff81fc07716a418180046c41107620036a0f0b024020010d0041000f0b2001410371210902400240200141044f0d0041002103410021020c010b2001417c712108410021034100210203402003200020026a22012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a21032008200241046a2202470d000b0b2009450d00200020026a21010340200320012c000041bf7f4a6a2103200141016a21012009417f6a22090d000b0b20030b1a00200028021c20012002200028022028020c118080808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141dc89c0800036020820014204370210200141086a2000108582808000000b4301017f23808080800041206b2201248080808000200141003602182001410136020c200141888ac0800036020820014204370210200141086a2000108582808000000b5701017e02400240200341c000710d002003450d012002410020036b413f71ad8620012003413f71ad220488842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080bf60804017f017e037f047e23808080800041b0016b2205248080808000420021060240024002400240024020047920037942c0007c20044200521ba7220720027920017942c0007c20024200521ba722084d0d002008413f4b0d01200741df004b0d02200720086b4120490d03200541a0016a2003200441e00020076b2209108e8280800020053502a00142017c210a4200210b420021060240024002400240034020054190016a2001200241c00020086b2208108e82808000200529039001210c0240200820094f0d00200541d0006a200320042008108e82808000024002402005290350220a50450d000c010b200c200a80210c0b200541c0006a200c420020032004109282808000024020012005290340220d5422082002200541c8006a290300220a542002200a511b0d002002200a7d2008ad7d21022001200d7d21012006200b200c7c220c200b54ad7c21060c0b0b200220047c200120037c2204200154ad7c200a7d2004200d54ad7d21022004200d7d21012006200c200b7c427f7c220c200b54ad7c21060c0a0b20054180016a200c200a80220c4200200820096b41ff00712208109082808000200541f0006a200c420020032004109282808000200541e0006a2005290370200541f0006a41086a290300200810908280800020054180016a41086a29030020067c2005290380012206200b7c220b200654ad7c210620072002200541e0006a41086a2903007d20012005290360220c54ad7d2202792001200c7d22017942c0007c20024200521ba722084d0d012008413f4d0d000b200350450d010c020b20012003542208200220045420022004511b450d02200b210c0c070b200120038021020b200120038221012006200b20027c220c200b54ad7c2106420021020c050b200220047d2008ad7d2102200120037d21012006200b42017c220c50ad7c21060c040b200220044200200120035a200220045a20022004511b22081b7d20012003420020081b220454ad7d2102200120047d21012008ad210c0c030b20012001200380220c20037e7d210142002106420021020c020b20022002200342ffffffff0f83220480220620037e7d4220862001422088220c842004802202422086200c200220037e7d422086200142ffffffff0f83842201200480220384210c2001200320047e7d210120024220882006842106420021020c010b200541306a2003200441c00020086b2208108e82808000200541206a200120022008108e8280800042002106200541106a200342002005290320200529033080220c4200109282808000200520044200200c42001092828080002005290310210a02400240200541086a290300200541106a41086a290300220d20052903007c220b200d54ad7c4200520d002001200a5422082002200b542002200b511b450d010b200420027c200320017c2201200354ad7c200b7d2001200a54ad7d2102200c427f7c210c2001200a7d21010c010b2002200b7d2008ad7d21022001200a7d2101420021060b200020013703102000200c3703002000200237031820002006370308200541b0016a2480808080000b5701017e02400240200341c000710d002003450d0120022003413f71ad2204862001410020036b413f71ad88842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080bf50303017f027e027f23808080800041e0006b220624808080800042002107420021084100210902402001200284500d002003200484500d00420020037d2003200442005322091b2107420020017d20012002420053220a1b2108420020042003420052ad7c7d200420091b21032004200285210402400240420020022001420052ad7c7d2002200a1b2202500d0002402003500d00200641d0006a2007200320082002109282808000200641d8006a290300210141012109200629035021020c020b200641c0006a2008420020072003109282808000200641306a2002420020072003109282808000200641c0006a41086a290300220220062903307c2201200254200641306a41086a290300420052722109200629034021020c010b02402003500d00200641206a2007420020082002109282808000200641106a2003420020082002109282808000200641206a41086a290300220220062903107c2201200254200641106a41086a290300420052722109200629032021020c010b20062007200320082002109282808000200641086a290300210141002109200629030021020b420020027d20022004420053220a1b2108420020012002420052ad7c7d2001200a1b22072004854200590d00410121090b200520093602002000200737030820002008370300200641e0006a2480808080000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072003422088220820067e22062005200142208822097e7c22054220867c220a3703002000200820097e2005200654ad4220862005422088847c200a200754ad7c200420017e200320027e7c7c3703080ba50501087f02400240200241104f0d00200021030c010b02402000410020006b41037122046a220520004d0d002004417f6a2106200021032001210702402004450d002004210820002103200121070340200320072d00003a0000200741016a2107200341016a21032008417f6a22080d000b0b20064107490d000340200320072d00003a0000200341016a200741016a2d00003a0000200341026a200741026a2d00003a0000200341036a200741036a2d00003a0000200341046a200741046a2d00003a0000200341056a200741056a2d00003a0000200341066a200741066a2d00003a0000200341076a200741076a2d00003a0000200741086a2107200341086a22032005470d000b0b2005200220046b2208417c7122066a210302400240200120046a22074103710d00200520034f0d0120072101034020052001280200360200200141046a2101200541046a22052003490d000c020b0b200520034f0d002007410374220241187121042007417c71220941046a2101410020026b411871210a2009280200210203402005200220047620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20084103712102200720066a21010b02402003200320026a22054f0d002002417f6a2108024020024107712207450d000340200320012d00003a0000200141016a2101200341016a21032007417f6a22070d000b0b20084107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032005470d000b0b20000b4b01017f23808080800041206b220524808080800020052001200220032004108f82808000200529031021042000200541186a29030037030820002004370300200541206a2480808080000b0bda0a0100418080c0000bd00a7372632f6c69622e7273616d6f756e74656e645f64617465686f7572735f6c6f67676564696470726f6f665f7665726966696564726174655f7065725f686f757273746172745f64617465737461747573746f6b656e776f726b65720a001000060000001000100008000000180010000c0000002400100002000000260010000e000000340010000d000000410010000a0000004b001000060000005100100005000000560010000600000063616e63656c6c656466696e616e63655f617070726f76656466696e616e63655f617070726f7665726d616e616765726d616e616765725f617070726f7665646f7261636c655f7075626b65796f7261636c655f726f746174696f6e737061796d656e7473000000ac00100009000000b500100010000000c500100010000000d500100007000000dc00100010000000ec0010000d000000f9001000100000000901100008000000457363726f77436f756e7400540110000b000000457363726f77000068011000060000004e6f6e6365000000780110000500000041646d696e000000880110000500000050656e64696e6741646d696e980110000c0000005061757365640000ac011000060000004f7261636c654b6579000000bc011000090000000300000000000000000000000000000004000000000000000000000000000000050000000000000000000000000000000143465750000000000010000a000000fd01000009000000000010000a0000000302000030000000000010000a000000f70100002700000000000000000000000000000000000000000010000a000000500200001e0000000000000000000000000010000a000000b302000025000000000010000a0000005d0200002b000000000010000a0000006c02000029000000000010000a0000006e02000015000000000010000a0000006102000024000000000010000a0000003c02000025000000000010000a0000004b0200000d000000000010000a000000ea0200003b000000000010000a000000a503000030000000000010000a000000a80300000d000000000010000a000000950300002c000000000010000a0000001104000030000000000010000a000000ee03000032000000000010000a000000fd03000030000000000010000a000000ff03000015000000000010000a000000f20300002b000000000010000a000000e403000027000000000010000a0000008e040000370000000000000000000000010000000100000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c7565436f6e76657273696f6e4572726f722f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f656e762e7273000000ca03100063000000770100000e0000002f686f6d652f61726a6179726f73656c2f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736f726f62616e2d73646b2d32302e352e302f7372632f73746f726167652e72730040041000670000009a000000090000007472616e73666572617474656d707420746f206164642077697468206f766572666c6f77c00410001c000000617474656d707420746f2073756274726163742077697468206f766572666c6f77000000e40410002100000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75653a2000000001000000000000003b05100002000000008f460e636f6e74726163747370656376300000000400000000000000000000000d436f6e74726163744572726f7200000000000016000000000000000f416c7265616479417070726f7665640000000001000000000000000c556e617574686f72697a6564000000020000000000000016496e76616c69644f7261636c655369676e61747572650000000000030000000000000010496e76616c69645061796d656e744964000000040000000000000015496e73756666696369656e74417070726f76616c730000000000000500000000000000175061796d656e74416c726561647946696e616c697a65640000000006000000000000000d496e76616c6964416d6f756e7400000000000007000000000000000f457363726f7743616e63656c6c65640000000008000000000000000c496e76616c69644e6f6e63650000000900000000000000084e6f7441646d696e0000000a000000000000000650617573656400000000000b000000000000000f41646d696e416c7265616479536574000000000c000000000000000c50726f6f664d697373696e670000000d000000000000000d4e6f6e63654f766572666c6f770000000000000e00000000000000125369676e6572734e6f7444697374696e637400000000000f0000003b546865206f7261636c65207075626c6963206b6579206973206e6f74206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000164f7261636c654b65794e6f745265676973746572656400000000001000000042417474657374656420686f757273207820726174655f7065725f686f757220646f6573206e6f7420657175616c2074686520657363726f77656420616d6f756e742e000000000013416d6f756e74486f7572734d69736d6174636800000000110000002a656e645f64617465206973206e6f74207374726963746c792061667465722073746172745f646174652e00000000000d496e76616c6964506572696f64000000000000120000002642617463682065786365656473204d41585f42415443485f53495a45207061796d656e74732e00000000000d4261746368546f6f4c61726765000000000000130000004454686973205741534d2070696e7320616e2065787065637465642061646d696e20616e642074686520737570706c6965642061646472657373206973206e6f742069742e0000000d41646d696e4d69736d6174636800000000000014000000464e6f2061646d696e207472616e736665722069732070656e64696e672c206f72207468652063616c6c6572206973206e6f74207468652070726f706f7365642061646d696e2e00000000000e4e6f50656e64696e6741646d696e000000000015000000336075706772616465602072657175697265732074686520636f6e747261637420746f206265207061757365642066697273742e00000000094e6f74506175736564000000000000160000000300000000000000000000000d5061796d656e7453746174757300000000000005000000000000000750656e64696e670000000000000000000000000f4d616e61676572417070726f7665640000000001000000000000000f46696e616e6365417070726f7665640000000002000000000000000946696e616c697a656400000000000003000000000000000943616e63656c6c6564000000000000040000000100000000000000000000000f5061796d656e745363686564756c65000000000a0000000000000006616d6f756e7400000000000b0000000000000008656e645f6461746500000006000000000000000c686f7572735f6c6f676765640000000b00000000000000026964000000000004000000815365742074727565206f6e6c7920627920607375626d69745f686f7572735f70726f6f666020616674657220612076616c69642045643235353139206f7261636c650a7369676e61747572652e20607061795f626174636860207265667573657320746f20736574746c652061207061796d656e7420776974686f75742069742e0000000000000e70726f6f665f7665726966696564000000000001000000000000000d726174655f7065725f686f75720000000000000b000000000000000a73746172745f6461746500000000000600000000000000067374617475730000000007d00000000d5061796d656e745374617475730000000000008c5065722d7061796565205374656c6c617220417373657420436f6e7472616374202853414329206164647265737320e2809420652e672e2074686520555344432053414320666f720a6f6e6520706179656520616e6420746865206e617469766520584c4d2053414320666f7220616e6f746865722077697468696e207468652073616d652062617463682e00000005746f6b656e000000000000130000000000000006776f726b65720000000000130000000100000000000000000000000e436f7265466c6f77457363726f77000000000008000000000000000963616e63656c6c656400000000000001000000000000001066696e616e63655f617070726f76656400000001000000000000001066696e616e63655f617070726f7665720000001300000000000000076d616e61676572000000001300000000000000106d616e616765725f617070726f76656400000001000000000000000d6f7261636c655f7075626b6579000000000003ee000000200000004354696d657320746865206f7261636c65206b657920686173206265656e20726f7461746564206f6e207468697320657363726f772028617564697420747261696c292e00000000106f7261636c655f726f746174696f6e730000000400000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000002000000000000000000000007446174614b6579000000000700000000000000000000000b457363726f77436f756e7400000000010000000000000006457363726f77000000000001000000040000000100000000000000054e6f6e6365000000000000010000000400000000000000000000000541646d696e000000000000000000003d50726f706f736564206e6578742061646d696e2c206177616974696e6720616363657074616e6365202874776f2d737465702068616e646f766572292e0000000000000c50656e64696e6741646d696e0000000000000000000000065061757365640000000000010000004a52656769737465726564206f7261636c65207369676e696e67206b6579732e2050726573656e6365203d3e20747275737465642062792074686520706c6174666f726d2061646d696e2e0000000000094f7261636c654b657900000000000001000003ee0000002000000000000000c85365742074686520636f6e74726163742061646d696e206f6e63652c20696d6d6564696174656c79206166746572206465706c6f792e204964656d706f74656e742d67756172643a0a6661696c7320696620616e2061646d696e20697320616c726561647920636f6e666967757265642e204966206e657665722063616c6c65642c2074686520636f6e74726163740a73696d706c7920686173206e6f2061646d696e20616e642063616e206e6576657220626520706175736564206f722075706772616465642e0000000a696e69745f61646d696e000000000001000000000000000561646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000f85468652061646d696e20616464726573732062616b656420696e746f2074686973205741534d206174206275696c642074696d652c20696620616e792e0a0a526561642d6f6e6c792c20736f20616e206f70657261746f7220286f7220616e2061756469746f72292063616e20636f6e6669726d206166746572206465706c6f7920746861740a7468652072756e6e696e6720636f64652069732070696e6e656420746f20746865206b65792074686579206578706563742c20726174686572207468616e207472757374696e670a7468617420746865206465706c6f7920736372697074207761732072756e20636f72726563746c792e0000000e65787065637465645f61646d696e00000000000000000001000003e800000013000000000000010d50726f706f73652061206e65772061646d696e202863757272656e742061646d696e206f6e6c79292e20537465702031206f6620322e0a0a48616e646f7665722069732074776f2d73746570206265636175736520612073696e676c652d73746570207472616e7366657220746f2061206d69737479706564206f720a756e636f6e74726f6c6c65642061646472657373207065726d616e656e746c792064657374726f797320746865206162696c69747920746f2070617573652c20757067726164652c0a6f72206d616e61676520746865206f7261636c652072656769737472792e205468652070726f706f736564206b6579206d7573742070726f76652069742063616e207369676e2e0000000000000d70726f706f73655f61646d696e0000000000000100000000000000096e65775f61646d696e0000000000001300000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000004341636365707420612070656e64696e672061646d696e2068616e646f766572202870726f706f7365642061646d696e206f6e6c79292e20537465702032206f6620322e000000000c6163636570745f61646d696e0000000000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000345468652063757272656e746c7920636f6e666967757265642061646d696e2c206966206f6e6520686173206265656e207365742e000000096765745f61646d696e0000000000000000000001000003e80000001300000000000000865061757365206f7220756e70617573652073746174652d6368616e67696e67206f7065726174696f6e73202861646d696e206f6e6c79292e206063616e63656c5f657363726f77600a737461797320617661696c61626c65207768696c652070617573656420736f2066756e64732063616e20616c7761797320626520726566756e6465642e00000000000a7365745f706175736564000000000001000000000000000670617573656400000000000100000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000000000000969735f7061757365640000000000000000000001000000010000000000000076557067726164652074686520636f6e7472616374205741534d202861646d696e206f6e6c79292e20456e61626c657320666978657320776974686f7574206368616e67696e670a74686520636f6e74726163742061646472657373206f72206d6967726174696e6720657363726f772066756e64732e000000000007757067726164650000000001000000000000000d6e65775f7761736d5f68617368000000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000001e4526567697374657220616e206f7261636c65207369676e696e67206b657920617320747275737465642062792074686520706c6174666f726d202861646d696e206f6e6c79292e0a0a57485920412052454749535452593a2070726576696f75736c7920746865206d616e616765722070617373656420616e7920606f7261636c655f7075626b65796020746865790a6c696b656420696e746f2060696e697469616c697a655f6d756c74695f7369675f657363726f77602c20736f2061206d616e6167657220636f756c6420696e7374616c6c0a7468656972206f776e206b657920616e64207369676e207468656972206f776e2022766572696669656420776f726b22206174746573746174696f6e732e205468650a70726f6f662d6f662d776f726b206761746520776173207468657265666f7265206d616e616765722d61747465737461626c65202d2d2070726f6365647572616c2c206e6f740a63727970746f677261706869632e20457363726f7773206d6179206e6f77206f6e6c79206e616d652061206b6579207468652061646d696e2068617320726567697374657265642c0a7768696368206d616b657320746865206f7261636c6520616e20696e646570656e64656e7420706172747920627920636f6e737472756374696f6e2e0000001372656769737465725f6f7261636c655f6b6579000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019b5265766f6b6520612070726576696f75736c792072656769737465726564206f7261636c65206b6579202861646d696e206f6e6c79292e0a0a4578697374696e6720657363726f777320616c7265616479206e616d696e672074686973206b6579206b6565702066756e6374696f6e696e67202d2d207265766f6b696e672069730a6e6f7420726574726f6163746976652c20626563617573652073696c656e746c7920696e76616c69646174696e6720696e2d666c69676874206174746573746174696f6e730a776f756c6420737472616e642066756e64656420657363726f77732e2049742073746f707320746865206b6579206265696e67206e616d6564206279204e455720657363726f77730a616e64204e455720726f746174696f6e732e20546f207265746972652061206b65792066726f6d2061206c69766520657363726f772c20746865206d616e616765722063616c6c730a60726f746174655f6f7261636c655f6b6579602c207768696368207265766f6b6573207468617420657363726f7727732076657269666965642070726f6f66732e00000000117265766f6b655f6f7261636c655f6b65790000000000000100000000000000067075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000325472756520696620607075626b657960206973206f6e207468652061646d696e2d6d616e616765642072656769737472792e00000000001869735f6f7261636c655f6b65795f726567697374657265640000000100000000000000067075626b65790000000003ee00000020000000010000000100000000000000d3526f7461746520746865206f7261636c65207075626c6963206b657920666f7220616e20657363726f772e205369676e6174757265732070726f6475636564206279207468650a72657469726564206b65792073746f7020766572696679696e6720696d6d6564696174656c792c2073696e636520607665726966795f6f7261636c655f776f726b602072656164730a746869732073746f726564206b65792e204d616e616765722d617574686f72697a65643b2072656675736564206f6e63652066756e64732068617665206d6f7665642e0000000011726f746174655f6f7261636c655f6b6579000000000000020000000000000009657363726f775f696400000000000004000000000000000a6e65775f7075626b65790000000003ee0000002000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000a2496e697469616c697a652061206d756c74692d7369676e617475726520657363726f772077697468207061796d656e74207363686564756c657320616e64206f7261636c65207075626c6963206b65792e0a546865206f7261636c655f7075626b657920697320616e2045643235353139207075626c6963206b6579207573656420746f2076657269667920776f726b2070726f6f66207369676e6174757265732e00000000001b696e697469616c697a655f6d756c74695f7369675f657363726f77000000000400000000000000076d616e616765720000000013000000000000001066696e616e63655f617070726f76657200000013000000000000000d6f7261636c655f7075626b6579000000000003ee0000002000000000000000087061796d656e7473000003ea000007d00000000f5061796d656e745363686564756c650000000001000003e900000004000007d00000000d436f6e74726163744572726f7200000000000000000001595375626d697420686f7572732070726f6f6620766572696669656420627920616e2045643235353139206f7261636c65207369676e61747572652e0a0a546865206f7261636c65207369676e7320746865203139382d6279746520646f6d61696e2d73657061726174656420707265696d61676520646f63756d656e746564206f6e0a606275696c645f70726f6f665f6d657373616765602028736368656d61207632292e2054686520636f6e74726163742072656275696c6473207468617420707265696d6167650a66726f6d2073746f7265642073746174652c20766572696669657320697420616761696e73742074686520657363726f772773206f7261636c65207075626c6963206b65792c0a656e666f726365732060686f75727320782072617465203d3d20616d6f756e74602c20616e6420636f6e73756d657320746865206e657874206578706563746564206e6f6e63652e000000000000127375626d69745f686f7572735f70726f6f660000000000050000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f6964000000000004000000000000000c686f7572735f6c6f676765640000000b00000000000000056e6f6e63650000000000000600000000000000097369676e6174757265000000000003ee0000004000000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e4d616e6167657220617070726f76616c206f66207061796d656e7428732900000000000f6d616e616765725f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000001e46696e616e636520617070726f76616c206f66207061796d656e7428732900000000000f66696e616e63655f617070726f766500000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f7200000000000000000000bb46696e616c697a65207061796d656e74206f6e636520626f746820617070726f76616c7320617265206f627461696e65640a4465707265636174656420616c6961732072657461696e656420736f20746865204d61696e6e65742d6465706c6f7965642041424920616e6420746865206578697374696e670a64617368626f61726420636c69656e74206b65657020776f726b696e672e204e65772063616c6c6572732073686f756c642075736520607061795f6261746368602e000000001066696e616c697a655f7061796d656e74000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f7200000000000000000000b2536574746c65206576657279207061796d656e7420696e2074686520657363726f773a206f6e65207472616e73616374696f6e2c206f6e6520534143207472616e73666572207065720a70617965652c206561636820696e20746861742070617965652773206f776e2061737365742e20526571756972657320626f746820617070726f76616c7320414e4420610a7665726966696564206f7261636c652070726f6f66206f6e20657665727920726f772e0000000000097061795f6261746368000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ea000007d00000000f5061796d656e745363686564756c6500000007d00000000d436f6e74726163744572726f72000000000000000000006e43616e63656c20616e20657363726f77202864697370757465207265736f6c7574696f6e20e28094206d616e61676572206f6e6c79292e0a416c6c6f776564206576656e207768696c65207061757365642028656d657267656e6379207769746864726177616c2070617468292e00000000000d63616e63656c5f657363726f77000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f720000000000000000000017526574726965766520657363726f772064657461696c73000000000a6765745f657363726f770000000000010000000000000009657363726f775f69640000000000000400000001000003e9000007d00000000e436f7265466c6f77457363726f770000000007d00000000d436f6e74726163744572726f720000000000000000000121457874656e6420616e20657363726f7727732073746f72616765206c69666574696d652e20416e796f6e65206d61792063616c6c20746869732e0a0a50657273697374656e7420656e747269657320746861742072756e206f7574206f662072656e742061726520617263686976656420746f2074686520457870697265640a537461746520537461636b20616e642063616e20626520726573746f7265643b207468657920617265206e6f742064656c657465642e20546865206661696c75726520746869730a61766f69647320697320612066756e64656420657363726f77206265636f6d696e672074656d706f726172696c7920756e757361626c6520756e74696c20736f6d656f6e650a7061797320746f20726573746f72652069742e00000000000011657874656e645f657363726f775f74746c000000000000010000000000000009657363726f775f69640000000000000400000001000003e9000003ed00000000000007d00000000d436f6e74726163744572726f72000000000000000000019552657475726e2074686520657861637420627974657320746865206f7261636c65206d757374207369676e20666f722074686973207061796d656e742e0a0a526561642d6f6e6c792e204578706f73696e672074686520707265696d616765206d616b65732074686520434f4e5452414354207468652073696e676c6520736f75726365206f660a747275746820666f7220746865206d65737361676520666f726d61743a20616e206f66662d636861696e207369676e65722063616e2073696d756c61746520746869732063616c6c0a616e64207369676e207468652072657475726e656420627974657320766572626174696d20696e7374656164206f66207265696d706c656d656e74696e6720746865206c61796f75740a616e6420686f70696e67207468652074776f2061677265652e20457665727920686973746f726963616c206d69736d61746368206265747765656e2061207369676e657220616e640a6120766572696669657220697320612062756720746869732072656d6f76657320627920636f6e737472756374696f6e2e0000000000000e70726f6f665f707265696d6167650000000000040000000000000009657363726f775f696400000000000004000000000000000a7061796d656e745f69640000000000040000000000000005686f7572730000000000000b00000000000000056e6f6e63650000000000000600000001000003e90000000e000007d00000000d436f6e74726163744572726f7200000000000000000000ac52657475726e20746865206e657874206578706563746564206f7261636c65206e6f6e636520666f7220616e20657363726f772e0a546865206f7261636c65206d757374207369676e20612070726f6f66207573696e6720746869732065786163742076616c756520287265706c61792070726f74656374696f6e292e0a52657475726e73203020666f7220616e20756e6b6e6f776e2f756e696e697469616c697a656420657363726f772e000000096765745f6e6f6e6365000000000000010000000000000009657363726f775f6964000000000000040000000100000006001e11636f6e7472616374656e766d6574617630000000000000001400000000006f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e38352e3000000000000000000008727373646b7665720000002f32302e352e30233965326333303232623433353562323234613761383134653133626135313736316565623134626200"
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "paused"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_paused"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "system",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "executable_update"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "Wasm"
+ },
+ {
+ "bytes": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ ]
+ },
+ {
+ "vec": [
+ {
+ "symbol": "Wasm"
+ },
+ {
+ "bytes": "496379c637132afc0c6f07e4da0afc00eeb882c459b36fb20e6e22c3c7a5d6da"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": []
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/core-flow/test_snapshots/test/tests/test_upgrade_requires_pause_first.1.json b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_requires_pause_first.1.json
new file mode 100644
index 0000000..a0fd68c
--- /dev/null
+++ b/contracts/core-flow/test_snapshots/test/tests/test_upgrade_requires_pause_first.1.json
@@ -0,0 +1,326 @@
+{
+ "generators": {
+ "address": 2,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 20,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 15
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "admin"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "bytes": "0707070707070707070707070707070707070707070707070707070707070707"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "upgrade"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 22
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 22
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 22
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract try_call failed"
+ },
+ {
+ "symbol": "upgrade"
+ },
+ {
+ "vec": [
+ {
+ "bytes": "0707070707070707070707070707070707070707070707070707070707070707"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/AUDIT_BASELINE.md b/docs/AUDIT_BASELINE.md
new file mode 100644
index 0000000..eb1e849
--- /dev/null
+++ b/docs/AUDIT_BASELINE.md
@@ -0,0 +1,326 @@
+# CoreFlow β Engineering Baseline Audit
+
+**Date:** 2026-09-10
+**Branch audited:** `instawards/pay-batch-sac` @ `301145a`
+**Method:** direct source inspection + executed test suites + deployed env inspection.
+Documentation claims were *not* taken as evidence.
+
+---
+
+## 0. Executive summary
+
+CoreFlow is in substantially better shape than a typical hackathon repo. The Soroban
+contract is real: `pay_batch` performs genuine per-payee SAC transfers, escrow custody
+is funded on creation, Ed25519 verification is wired to the host function, replay
+protection uses a monotonic nonce watermark, and 40 Rust tests pass. This is not a mock
+contract.
+
+The problem is not the contract. **The problem is that the deployed product cannot reach it,
+and the security model has a gap that makes its central claim untrue.**
+
+Three findings dominate everything else:
+
+1. **The live application performs no on-chain operations at all.** Production is
+ misconfigured such that every contract call is guaranteed to fail (Β§F-1). What the
+ public site demonstrates is the mock path.
+2. **Oracle attestations were mintable by anyone on the internet** (Β§F-2) β fixed in this
+ pass. The proof-of-work gate that `pay_batch` enforces was, until now, unguarded at
+ the only place that issues proofs.
+3. **Amounts are denominated in cents but settled as stroops** (Β§F-4), a silent
+ 100,000Γ under-payment on any batch that does reach the chain.
+
+Test baseline as found: **40 Rust** (1 ignored), **79 TypeScript**, typecheck clean.
+After this pass: **40 Rust**, **86 TypeScript**, typecheck clean.
+
+---
+
+## 1. Category A β Production-ready
+
+| Component | Evidence |
+|---|---|
+| Soroban escrow core | `contracts/core-flow/src/lib.rs`; 40 passing tests incl. multi-asset settlement, custody-sum fuzz invariant, 50-payee E2E |
+| Real SAC token settlement | `pay_batch` / `initialize_multi_sig_escrow` call `TokenClient::transfer`; verified by `test_pay_batch_settles_two_assets_in_one_call` |
+| Ed25519 host verification | `env.crypto().ed25519_verify`; correctly returns `()` and traps rather than a bool that could only ever be `true` |
+| Replay protection (nonce) | Monotonic watermark in persistent storage; O(1), rejects everything at/below watermark |
+| Signature-before-nonce ordering | Prevents burning an escrow's nonce sequence with garbage signatures |
+| Dual-control invariant | `SignersNotDistinct` rejects `manager == finance_approver` at creation *and* at settlement |
+| Wallet auth (challenge/response) | SEP-53 prefix + SHA-256 + Ed25519; challenges are single-use via atomic `updateMany`, 5-min TTL |
+| Session revocation | Role and wallet re-read from DB on every request β a stale JWT role claim is never trusted |
+| Overflow safety (contract) | `overflow-checks = true` in release profile; arithmetic traps rather than wraps |
+| Rust toolchain pin | `rust-toolchain.toml` documents a genuinely load-bearing 1.85.0 window |
+
+## 2. Category B β Functional, needs hardening
+
+- **Rate limiter** is in-memory per-instance (`src/lib/ratelimit.ts`). Correct interface, but
+ on Vercel each lambda has its own Map, so effective limits are ~NΓ the configured value.
+- **Indexer** has cursor + idempotency via `ChainEvent.id` (RPC paging token). Lacks
+ reconciliation *reporting* β it projects chainβDB but never surfaces a mismatch.
+- **Audit log** exists and is written on privileged actions, but nothing enforces
+ append-only; any DB write path can mutate history.
+- **`/api/admin/bootstrap`** has no rate limit and compares the secret with `!==`
+ (non-constant-time). Brute-forcing `BOOTSTRAP_SECRET` grants ADMIN.
+- **Error surfaces** are mostly generic strings, not the what/why/next-step model the
+ product needs.
+
+## 3. Category C β Partially implemented
+
+- **Bulk Pay** (`src/app/bulk-pay/page.tsx`) is a real client against real contract
+ methods, but is hardcoded to `const ESCROW_ID = 1` and its role selector is a
+ cosmetic client-side dropdown. It is a demo harness, not a product workflow.
+ (On-chain `require_auth` still enforces the real authorization, so this is a product
+ gap rather than a security hole.)
+- **Receipts** β `PaymentReceipt.tsx` renders, but takes a hardcoded PHP conversion and
+ is not wired to settled on-chain state.
+- **Observability** β logger + Sentry configs exist; no request IDs, no health-gated
+ readiness signal for the indexer.
+
+## 4. Category D β Documented but not implemented
+
+- **`.env.example`** describes granting "manager/finance/worker" roles via
+ `POST /api/admin/roles`. The Prisma enum has exactly two values: `ADMIN`, `EMPLOYEE`.
+ The five-role RBAC model in the brief does not exist.
+- **Multi-tenancy** β no `Organization` model exists. Every escrow row is global. There is
+ no tenant boundary to test.
+- **README traction claims** β the mainnet contract is genuinely deployed and the
+ evidence TSVs contain real hashes. But those transactions were produced by
+ `scripts/`, **not** by the deployed application, which (per Β§F-1) cannot transact.
+ The README does not draw that distinction, and it needs to.
+
+## 5. Category E β Missing
+
+- Organizations / teams / tenant isolation
+- Explicit payment state machine (`PREPARING β β¦ β CONFIRMED` + failure states)
+- DBβchain reconciliation reporting
+- Idempotency keys on financial mutation endpoints
+- Structured request-ID correlation
+- CSV staged-approval workflow (upload β preview β batch β approvals)
+
+---
+
+## 6. Category F β Dangerous
+
+Ordered by severity. **[FIXED]** items were remediated in this pass; the rest are open.
+
+### F-1 Β· Live production cannot execute any on-chain operation β **[FIXED IN CODE β needs redeploy]**
+Production env has `NEXT_PUBLIC_STELLAR_CONTRACT_ID=""` and `NEXT_PUBLIC_STELLAR_NETWORK=""`.
+Both are empty strings, which are falsy, so `src/lib/config.ts` falls back to:
+- contract ID β hardcoded **mainnet** `CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW`
+- network β `'testnet'` β testnet RPC + testnet passphrase
+
+Every read (`get_escrow`, `get_nonce`) targets a mainnet contract over testnet RPC and
+fails. `NEXT_PUBLIC_STELLAR_TOKEN_ID` is also unset, so escrow creation throws
+*"Settlement token not configured"* before building a transaction.
+
+**Impact:** the public site demonstrates only the mock path. Any claim that the deployed
+app settles on-chain is currently false.
+
+**Fix (code):** `src/lib/config.ts` no longer falls back to a hard-coded mainnet address.
+`requireContractId()` throws a clear error when unset; the network resolves to `testnet`
+for any unrecognised value, so the app never silently selects a chain where funds are
+real. `NetworkBadge` renders the active network persistently, styling Mainnet as a
+warning and calling out an unconfigured contract instead of showing green.
+
+**Still required from the operator:** set `NEXT_PUBLIC_STELLAR_CONTRACT_ID`,
+`NEXT_PUBLIC_STELLAR_NETWORK` and `NEXT_PUBLIC_STELLAR_TOKEN_ID` in the deployment, then
+redeploy. Until then the app correctly refuses on-chain actions rather than failing
+opaquely.
+
+### F-2 Β· Oracle attestations were mintable by anyone β **[FIXED]**
+`POST /api/submit-batch` had **no authentication and no rate limit**, and was absent from
+the middleware matcher. It signs the Ed25519 attestations that set `proof_verified`, which
+is the sole gate `pay_batch` enforces before releasing funds.
+
+Anyone on the internet could mint the proof-of-work half of the security model.
+
+**Fix:** requires a verified session, **and** that the caller equals the escrow's
+**on-chain manager** (read live from the contract, not from request content). Added
+rate limiting and audit events. 7 regression tests in
+`src/app/api/__tests__/submit-batch.route.test.ts`, including a signed-in worker and a
+platform ADMIN who is not the manager β both rejected, with `signHoursProof` asserted
+un-called.
+
+### F-3 Β· Publicly-known JWT signing key fallback β **[FIXED]**
+`src/lib/env.ts` defaulted `AUTH_SECRET` to the literal
+`'default_super_secret_coreflow_jwt_key_32bytes'` β 44 chars, so it satisfied the
+`min(32)` guard. Any deployment missing the variable would sign sessions with a key
+published in the repo, allowing anyone to forge an ADMIN JWT.
+**Fix:** default removed; a missing `AUTH_SECRET` is now a startup failure.
+
+### F-4 Β· Money unit mismatch: cents settled as stroops β **[FIXED]**
+`CreateEscrowModal` collects dollars β `Math.floor(parseFloat(x) * 100)` = **cents**.
+`useDashboard.ts:563` passes that straight through as the on-chain amount:
+`amount: BigInt(amountCents)`. Stellar assets use **7 decimals**.
+
+`$250.50` β `25050` base units β **0.0025050 USDC** actually escrowed and paid, while the
+dashboard renders `amountCents / 100` = "$250.50".
+
+**Impact:** a 100,000Γ under-settlement that the UI reports as success. This is precisely
+the "never show success unless the chain agrees" failure mode.
+
+**Fix:** new `src/lib/money.ts` parses decimal *strings* into `bigint` base units β money
+never touches a JS `number`, because `parseFloat('0.1') * 100` is `10.000000000000002`.
+`CreateEscrowModal` emits base units and previews the exact on-chain figures;
+`useDashboard` passes them through unchanged; the indexer stops casting on-chain `bigint`
+through `Number` (lossy above 2^53β1). 21 tests in `src/lib/__tests__/money.test.ts`.
+
+### F-5 Β· The dual-approval flow cannot execute β **[FIXED]**
+`useDashboard.ts:575` calls
+`submitInitializeEscrow(walletAddress, walletAddress, β¦)` β manager and finance are the
+**same address**. The contract rejects exactly this with `SignersNotDistinct` (#15).
+
+**Impact:** the primary escrow-creation path traps 100% of the time. Separation of duties β
+the product's core value proposition β has no working code path in the app.
+
+**Fix:** `CreateEscrowModal` now collects a distinct finance approver, and refuses one
+equal to the manager (or to the worker being paid) before a transaction is built.
+`useDashboard` passes it through instead of duplicating the manager.
+
+### F-6 Β· Oracle message has no domain separation β **[FIXED]**
+The signed message is 32 bytes: `escrow_id β payment_id β hours β nonce`. It omits the
+network passphrase, contract address, worker address, and amount.
+
+**Consequences:** a signature valid on testnet is valid on **mainnet** for the same
+`(escrow_id, payment_id, hours, nonce)`; a signature for contract A is valid on contract B.
+
+**Fix β schema v2 (`CFWP`, 198 bytes):** magic, version, `network_id`, contract digest,
+worker digest, token digest, escrow id, payment id, amount, hours, period start/end,
+nonce. Every field except hours and nonce is read from **stored escrow state**, so a
+caller cannot retarget a signature. The contract also exposes `proof_preimage`, making it
+the single source of truth for what must be signed. See `docs/ORACLE.md`.
+
+### F-7 Β· The manager controls the oracle key β **[FIXED]**
+`initialize_multi_sig_escrow` accepts `oracle_pubkey` **from the manager**, and
+`rotate_oracle_key` is manager-authorized. A manager can install their own key and sign
+their own "verified work" attestations.
+
+**Impact:** `proof_verified` is manager-attestable, so "funds only move against proof of
+work" is procedural, not cryptographic. Economic damage is bounded (custody is the
+manager's own funds), but the *stated security property* does not hold.
+**Fix:** an admin-managed on-chain registry β `register_oracle_key`, `revoke_oracle_key`,
+`is_oracle_key_registered`. `initialize_multi_sig_escrow` and `rotate_oracle_key` both
+refuse a key that is not registered, so rotation cannot be used as a back door. An
+admin-less deployment keeps the v1 trust model rather than bricking (no registry
+authority exists, so no key could satisfy the check).
+
+### F-8 Β· Attested "hours" are just the payment amount β **[FIXED]**
+`src/app/api/submit-batch/route.ts`: `const hours = Math.max(1, Math.round(Number(payee.amount)))`.
+
+The oracle attests to a number derived from the amount being paid, carrying zero
+information about work performed. Separately, `submit_hours_proof` never validates
+`amount` against `hours Γ rate_per_hour`, so verified hours have **no effect on the amount
+paid**. The attestation is a rubber stamp on both ends.
+
+**Fix:** the contract enforces `hours Γ rate_per_hour == amount` (`AmountHoursMismatch`,
+#17), and rejects at creation any amount that no whole number of hours can reach β so
+custody is never funded into an escrow that cannot settle. Server-side, hours are now
+**derived from the on-chain payment row** rather than taken from the upload, and
+`/api/submit-batch` refuses a CSV whose payees do not match the funded escrow.
+
+**Known limitation:** this makes hours whole numbers. Fractional-hour payroll needs a
+scaled-hours field, which would be a v3 schema change.
+
+### F-9 Β· `init_admin` is front-runnable, and admin can drain everything β **OPEN, high**
+`init_admin` is first-caller-wins. If it is not called in the same operational step as
+deploy, anyone may claim admin, then call `upgrade()` to replace the contract WASM and
+transfer out all escrow custody. Even when correctly claimed, `upgrade()` is an
+unrestricted centralization risk that must be disclosed, not hidden.
+
+### F-10 Β· 32-bit money column β **[FIXED]**
+`Escrow.amountCents` was Prisma `Int` β PG `INTEGER`, overflowing at **$21,474,836.47**.
+
+**Fix:** replaced with `amountBaseUnits BigInt`, `rateBaseUnits BigInt` and
+`assetDecimals Int`, plus a `financeApprover` column. Migration
+`20260910000000_money_base_units` scales existing cent values by 10^5 so displayed
+figures stay stable. BigInt values are serialized as strings at the API boundary β
+`JSON.stringify` throws on bigint outright, so an unconverted value is a 500, not a
+silent rounding bug.
+
+### F-11 Β· `BOOTSTRAP_SECRET` brute-forceable β **OPEN, medium**
+`/api/admin/bootstrap` is deliberately exempt from session auth, has no rate limit, and
+uses a non-constant-time `!==` comparison. Success grants ADMIN.
+
+### F-12 Β· Live production secrets sat one `git add -A` from publication β **[FIXED]**
+`prodenv.txt` (a `vercel env pull` dump containing live `ORACLE_SECRET_KEY`, `AUTH_SECRET`,
+`BOOTSTRAP_SECRET`, and database credentials) was untracked but **not** covered by
+`.gitignore`.
+**Fix:** `.gitignore` now excludes `prodenv.txt` and `*env*.txt`.
+
+> **β These secrets must still be rotated.** Gitignoring the file does not undo the
+> exposure β it has existed in plaintext in a working tree. Rotate `ORACLE_SECRET_KEY`,
+> `AUTH_SECRET`, `BOOTSTRAP_SECRET`, and the database credentials.
+> Note that rotating `ORACLE_SECRET_KEY` invalidates every escrow whose stored
+> `oracle_pubkey` is the old key; those escrows need `rotate_oracle_key` or cancellation.
+
+### F-13 Β· Storage TTL can strand funds β **OPEN, medium**
+Escrow data lives in persistent storage with a 90-day extension applied **on write only**.
+Reads do not extend TTL. An escrow left idle past the TTL loses its data while its custody
+remains in the contract β permanently unrecoverable, since every entry point loads the
+escrow first.
+
+---
+
+## 7. Changes made in this pass
+
+| Change | Where | Verification |
+|---|---|---|
+| Gate oracle signing behind session + on-chain manager check | `src/app/api/submit-batch/route.ts`, `src/middleware.ts` | 10 route tests |
+| Remove publicly-known `AUTH_SECRET` fallback | `src/lib/env.ts` | typecheck |
+| Bulk Pay performs full challenge/verify sign-in | `src/app/bulk-pay/page.tsx` | typecheck, build |
+| Exclude env dumps from git | `.gitignore` | `git check-ignore` |
+| Oracle attestation schema v2 (domain separation) | `contracts/core-flow/src/lib.rs`, `src/lib/oracle/index.ts`, `scripts/oracle-cli.mjs` | cross-language vector, 16 TS + 5 Rust tests |
+| `proof_preimage` β contract as source of truth for the message | `contracts/core-flow/src/lib.rs` | `test_contract_preimage_matches_independent_implementation` |
+| Admin-managed oracle key registry | `contracts/core-flow/src/lib.rs` | 6 Rust tests |
+| `hours Γ rate == amount` invariant | `contracts/core-flow/src/lib.rs` | 2 Rust tests |
+| Batch cap + pay-period validation | `contracts/core-flow/src/lib.rs` | 2 Rust tests |
+| Exact-decimal money module (base units, `bigint`) | `src/lib/money.ts` | 21 tests |
+| Distinct finance approver in escrow creation | `src/components/modals/CreateEscrowModal.tsx`, `src/hooks/useDashboard.ts` | 11 modal tests |
+| DB money β `BigInt` base units + `assetDecimals` | `prisma/schema.prisma`, migration | typecheck, route tests |
+| Fail-closed network/contract config + visible network badge | `src/lib/config.ts`, `src/components/NetworkBadge.tsx` | build |
+
+### Verification after this pass
+
+| Check | Result |
+|---|---|
+| Rust contract tests | **54 passed**, 1 ignored (was 40) |
+| TypeScript tests | **128 passed** (was 79) |
+| `tsc --noEmit` | clean |
+| `next build` | succeeds |
+| `cargo build --target wasm32v1-none --release` | succeeds (38 KB) |
+
+The single ignored Rust test is pre-existing and documented: `ed25519_verify` traps
+non-catchably in native `cargo test`, so a bad-signature rejection cannot be asserted
+with `#[should_panic]`. The same limitation is why oracle-registry authorization is
+asserted via `env.auths()` rather than by calling unauthorized.
+
+---
+
+## 8. Recommended execution order
+
+**P0 β done in this pass, except where noted**
+1. ~~Rotate all exposed secrets (F-12).~~ **STILL REQUIRED β operator action.**
+2. ~~Fail-closed network/contract config (F-1).~~ Code done; **needs env set + redeploy.**
+3. ~~Fix the cents/stroops denomination end-to-end (F-4).~~
+4. ~~Give escrow creation a real distinct finance approver (F-5).~~
+
+**P1 β done in this pass, except where noted**
+5. ~~Domain-separate the oracle payload (F-6).~~ Schema v2, cross-language pinned.
+6. ~~Admin-managed oracle key allowlist (F-7).~~
+7. ~~Bind attested hours to the amount (F-8).~~
+8. Harden `init_admin` / disclose `upgrade` authority (F-9); rate-limit bootstrap (F-11).
+ **Still open.**
+9. Storage TTL can strand funds (F-13). **Still open.**
+
+**P2 β product architecture**
+9. `Organization` model + tenant isolation, with explicit isolation tests.
+10. Five-role RBAC + endpoint permission matrix.
+11. Payment state machine, idempotency keys, DBβchain reconciliation reporting.
+
+**P3 β product surface**
+12. Bulk Pay as a real staged workflow (not `ESCROW_ID = 1`).
+13. Dashboard, landing page, receipts, demo mode.
+14. README rewritten to separate *deployed*, *testnet-validated*, and *script-generated*
+ evidence from what the application itself does.
+
+> Ordering rationale: every P1 item is a statement the product makes to investors about
+> its security. Building UI on top of claims that are not yet true increases the surface
+> that has to be walked back later.
diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md
new file mode 100644
index 0000000..fe7537b
--- /dev/null
+++ b/docs/BACKLOG.md
@@ -0,0 +1,117 @@
+# Engineering backlog
+
+Known gaps that are deliberately **not** being fixed in the current phase, recorded
+so they cannot quietly become permanent.
+
+---
+
+## 1. Test files are not typechecked
+
+**Status:** open. Raised 2026-09-11 during the funding API work.
+
+### What
+
+[`tsconfig.json`](../tsconfig.json) excludes test files from the compiler:
+
+```json
+"exclude": ["node_modules", "test", "e2e", "playwright.config.ts",
+ "**/*.test.ts", "**/*.test.tsx", "**/__tests__/**"]
+```
+
+So `npm run typecheck` checks production code only. A test file can reference a
+function with the wrong arguments, the wrong types, or a parameter that no longer
+exists, and nothing objects until runtime β if then.
+
+### Why it matters, concretely
+
+It silently weakened a security test. A required `batchId` parameter was added to
+three funding service functions to scope an attempt to its batch. The existing test
+call sites were not updated, and:
+
+- **no compile error**, because tests are not typechecked
+- **no test failure**, because Prisma (and the in-memory double) treat
+ `where: { batchId: undefined }` as *"no filter"* rather than *"match null"*
+
+The tests kept passing while no longer exercising the isolation they were written to
+prove. That is worse than a failing test: a green suite asserting nothing.
+
+Found by reading the code, not by any tool. There is no reason to think it is the
+only instance.
+
+### Likely cost of fixing
+
+Unknown, and probably not small. Across ~40 test files the expected classes are:
+
+- fixtures passing partial objects where a full type is required (the fake-db rows
+ are written by hand and omit optional columns)
+- `any`-typed `db` handles hiding argument mismatches
+- mock factories returning narrower shapes than the real module
+- `vi.mock` factories whose return type does not match the mocked module
+
+### Intended migration
+
+1. Add a second config, `tsconfig.test.json`, extending the base and *including*
+ test files. Do not change the main `tsconfig.json`.
+2. Run it and record the error count before changing any test.
+3. Fix by directory, smallest first, so each step is reviewable: `lib/money`,
+ `lib/payroll`, `lib/funding`, `lib/payments`, `lib/tenancy`, routes.
+4. Where a fixture genuinely needs a partial row, introduce an explicit test-only
+ type rather than casting to `any` β a cast reintroduces the blindness.
+5. Add `typecheck:tests` to the npm scripts and to CI only once it is clean, so it
+ cannot regress.
+
+Not started. Scheduled after the funding UI gate.
+
+---
+
+## 2. Reconciliation panel is built but unrouted
+
+`ReconciliationPanel` is implemented and tested and reachable from no page. See
+[RECONCILIATION.md](RECONCILIATION.md). To be routed with the remaining payroll
+workflow UI.
+
+## 3. Transfer verification is bounded by RPC retention
+
+Soroban RPC retains roughly 22 hours of events, so a payment older than that reads
+as `UNREADABLE` rather than absent. Partially mitigated: funding now persists
+verified settlement evidence at confirmation time. The same persistence is still
+needed for `pay_batch` settlement evidence.
+
+## 4. Alerting is in-product only
+
+Findings surface in the UI. There is no email, Slack or pager path, so a critical
+finding raised overnight is seen the next morning. Deliberately out of scope until
+the workflow is complete.
+
+## 5. Approval granularity is per-escrow
+
+The contract's `manager_approve` / `finance_approve` act on the whole escrow, so a
+reviewer cannot approve eleven of twelve payments on-chain. The off-chain approval
+records are per-payment. A v3 contract decision.
+
+## 6. Whole hours only
+
+`hours` is an integer and the contract enforces `hours Γ rate == amount`. Fractional
+hours need a versioned scaled-hours schema. Refused rather than rounded.
+
+## 7. π΄ Secret rotation outstanding β now on the critical path
+
+The oracle half of this is blocking the live Testnet funding run: the contract trusts
+the deployment-time oracle key and not the one in the local environment, so escrow
+creation is refused with `OracleKeyNotRegistered`. Prepared, unexecuted runbook:
+[ORACLE_KEY_TRANSITION.md](ORACLE_KEY_TRANSITION.md). It waits on the owner
+confirming which public key is post-rotation β a fact that cannot be inferred from
+here, and guessing it could re-authorize an exposed credential.
+
+
+Everything exposed by `prodenv.txt`. Scope established by enumerating the dump's
+variable names: the oracle signing key, `AUTH_SECRET`, `BOOTSTRAP_SECRET`, and the
+database credential across all four URL variables. `CRON_SECRET` / `INDEXER_SECRET`
+are **not** in that dump β an earlier revision of this item claimed they were, and
+that was wrong; they are hygiene, not breach response. Runbook and executor:
+[SECRET_ROTATION.md](SECRET_ROTATION.md), `scripts/rotate-secrets.mjs`, which
+refuses `ORACLE_SECRET_KEY` because its public half is registered on chain.
+Owner-operated;
+not something to be solved by reading the secrets. Until each is rotated and the old
+value proven unable to authenticate or sign, this environment is not
+production-grade regardless of what the test suite reports.
diff --git a/docs/BULK_PAY.md b/docs/BULK_PAY.md
new file mode 100644
index 0000000..dce75c3
--- /dev/null
+++ b/docs/BULK_PAY.md
@@ -0,0 +1,269 @@
+# Bulk Pay β API Layer
+
+> **Status: API layer implemented, unit-tested, and validated against real PostgreSQL.**
+>
+> All 10 migrations apply from zero against a local PostgreSQL 18.6 database with
+> **zero schema drift**. 71 integration tests exercise these routes and the payment
+> state machine against that database. Two real defects were found in the process β
+> see [REVIEWER_EVIDENCE](evidence/REVIEWER_EVIDENCE.md).
+>
+> **Still BLOCKED:** the live Testnet golden path (chain settlement, indexing,
+> reconciliation) and the product UI. See [Blocked](#what-is-blocked).
+
+Verified work β approved payment β programmable escrow β on-chain settlement. This
+document covers the first two links: turning a payroll file into individual,
+reviewable, approvable payment records.
+
+---
+
+## Endpoints
+
+| Method | Path | Permission | Writes? |
+|---|---|---|---|
+| POST | `/api/payroll/batches` | `payroll:create` | Yes β one batch, N payments, 1 audit event |
+| GET | `/api/payroll/batches` | `payroll:read` | No |
+| POST | `/api/payroll/batches/validate` | `payroll:create` | **No β nothing at all** |
+| GET | `/api/payroll/batches/:id` | `payroll:read` | No |
+| POST | `/api/payroll/batches/:id/validate` | `payroll:read` | **No β nothing at all** |
+| POST | `/api/payroll/batches/:id/approve` | `payment:approve:manager` **or** `payment:approve:finance` | Yes β approvals + audit events |
+
+Per-payment business actions already exist and are unchanged:
+`POST /api/payments/:id/{approve,reject,cancel,submit,retry,reconcile}`.
+
+There is deliberately **no** `PATCH /api/payments/:id`. No endpoint anywhere accepts
+a destination `PaymentState`. The state machine owns state; the one state a caller
+would most like to name is `PAID`.
+
+### Two different `/validate` endpoints
+
+- **`POST /batches/validate`** β stateless. Checks an uploaded file before any record
+ exists. Returns **200** with `valid: false` for a bad file: the *call* succeeded,
+ the *file* is wrong, and a reviewer iterating on a preview is not making failing
+ requests.
+- **`POST /batches/:id/validate`** β re-checks an **existing draft** against *current*
+ configuration. A payroll drafted on Monday and funded on Wednesday may be
+ denominated in an asset the deployment no longer settles.
+
+Creation, by contrast, returns **422** for an invalid file β there, bad content does
+mean the request cannot be honoured.
+
+---
+
+## Request schemas
+
+Declared in [`src/lib/payroll/schemas.ts`](../src/lib/payroll/schemas.ts) with Zod,
+every object `.strict()`.
+
+### What a client may send
+
+| Field | Constraint |
+|---|---|
+| `csv` | string, 1 byte β 1 MB |
+| `filename` | β€ 255 chars, no control characters |
+| `reference` | β€ 64 chars, no control characters, trimmed |
+| `projectId` | β€ 64 chars, `[A-Za-z0-9_-]`, resolved **within the tenant** |
+| `idempotencyKey` | 8β128 chars, `[A-Za-z0-9._:-]` (header `Idempotency-Key` wins) |
+| `rejectDuplicateRecipients` | boolean, default `true` |
+| `paymentIds` | 1β100 ids, approval only |
+| `reason` | β€ 500 chars, no control characters |
+| `orgId` | names which organization to act in β **never** a claim of membership |
+
+Unknown fields are **rejected**, not ignored. Silently dropping `{"state":"PAID"}`
+teaches a client it was honoured, and the next reader of that code assumes it is.
+
+### What a client can never send
+
+`role` Β· `state` / `status` Β· `settlementTxHash` Β· `settledAt` Β· `approvalRole` Β·
+`actorAddress` Β· `amountBaseUnits` Β· `orgId` as an authorization claim.
+
+All derived from the authenticated session, from membership, and from server-side
+state. **A field that cannot be sent cannot be forged.**
+
+Monetary values enter the system through exactly one path: the CSV parser, as decimal
+**strings** converted to `bigint` base units. No endpoint accepts an amount as a
+number.
+
+---
+
+## Authorization
+
+Every route passes through `withTenant()`
+([`src/lib/tenancy/http.ts`](../src/lib/tenancy/http.ts)) β authenticate β resolve
+membership from the database β check permission. No route implements its own tenant
+check.
+
+Approval is the one route without a single `permission`, because either half of the
+dual-approval gate is a legitimate approver and gating on one would reject the other.
+It uses `requireAnyPermission(ctx, ['payment:approve:manager', 'payment:approve:finance'])`
+β still the central helper, in the central module.
+
+### Dual approval
+
+The approver's role is derived from membership by `approvePayment`, never from the
+request. A manager sending `{"role":"FINANCE"}` is rejected at the schema β the field
+does not exist.
+
+Separation of duties is enforced even for roles holding **both** permissions: an
+`ADMIN` who approves twice finds their own role already recorded on the second
+attempt and adds nothing. `Approval` is `@@unique([paymentId, role])`, so a second
+manager approval is a duplicate, not a new fact.
+
+Recording an approval **does not settle anything**. It is the workflow record of who
+decided what; the authoritative approval is the on-chain signature the indexer
+observes.
+
+### Tenant isolation
+
+`orgId` is part of every **query**, not a check afterwards. A batch belonging to
+another organization returns the identical 404 as one that never existed β verified by
+a test that asserts the two responses are byte-equal, so an id cannot be probed for
+existence.
+
+---
+
+## Idempotency
+
+| Scenario | Result |
+|---|---|
+| Same request twice (double-click) | 200, `created: false`, the original batch |
+| Retry after timeout | 200, `created: false`, the original batch |
+| Two tabs, same key | One batch; one response says `created: true` |
+| N concurrent identical requests | One batch, N payments β not NΓrows |
+| Same key, **different** payload | **409 `IDEMPOTENCY_KEY_REUSED`** |
+| No key, two deliberate uploads | Two batches (NULLs are distinct) |
+| Same key, different organization | Two batches (the key is tenant-scoped) |
+| Byte-identical file within an hour | Created, plus `possibleDuplicateOf` |
+
+The guarantee is a **unique index** on `(orgId, idempotencyKey)`, not a read-then-write:
+check-then-insert loses exactly the race it is meant to cover. The pre-check is an
+optimization; the index is the correctness argument, and the collision path is tested
+by blinding the pre-check so only the index can stop the second write.
+
+A reused key with a different payload is **refused rather than replayed**. Returning
+the original batch would hand back a payroll that is not the one the caller just
+described. The comparison uses `idempotencyFingerprint` β a hash of the CSV checksum,
+reference, project, asset and duplicate-handling option. The **filename is excluded**:
+re-uploading identical rows as `september-final.csv` is the same payroll.
+
+`possibleDuplicateOf` only **warns**. Running the same figures next period is
+legitimate payroll, so it is surfaced for a human rather than blocked.
+
+---
+
+## Error model
+
+[`src/lib/api/errors.ts`](../src/lib/api/errors.ts). Envelope:
+`{ error, code, details? }`.
+
+| Status | Meaning |
+|---|---|
+| 400 | Malformed request β bad JSON, wrong content type, unknown field, oversized body |
+| 401 | Not authenticated |
+| 403 | Authenticated, organization known, role insufficient |
+| 404 | Absent **or** not visible to this tenant β deliberately identical |
+| 409 | Conflicts with current state, or an idempotency key reused |
+| 422 | Well-formed request whose **content** fails domain validation |
+| 429 | Rate limited (`Retry-After` set) |
+| 500 | Unexpected. Opaque, always |
+| 503 | A dependency is unavailable |
+
+`details` carries only **the caller's own input echoed back** β field paths, row
+numbers, and messages derived from the schema. Never server state.
+
+A 500 never carries detail, and there is deliberately **no** "include the stack in
+development" switch: a conditional that reveals internals is one misconfigured
+environment variable away from revealing them in production. A test asserts the 500
+body contains no model name, no `prisma`, and no stack frames.
+
+### Row-level CSV errors
+
+```json
+{
+ "error": "The payroll file has 3 problems that must be fixed before a batch can be created.",
+ "code": "CSV_INVALID",
+ "details": {
+ "errors": [
+ { "row": 3, "field": "recipient", "code": "INVALID_ADDRESS",
+ "message": "\"NOTANADDRESS\" is not a valid Stellar address. Expected 56 characters beginning with G." },
+ { "row": 4, "field": "amount", "code": "AMBIGUOUS_NUMBER",
+ "message": "amount \"1e3\" uses scientific notation, which is ambiguous. Write the number out in full." },
+ { "row": 5, "field": "hours", "code": "FRACTIONAL_HOURS",
+ "message": "hours \"7.5\" is fractional. CoreFlow v2 records whole hours and will not round a payroll figure." }
+ ]
+ }
+}
+```
+
+Every problem in the file is reported at once. A finance user fixing a 40-row file one
+error per upload cannot work.
+
+---
+
+## Financial safety
+
+- One `Payment` per CSV row. A multi-payee payroll is never one aggregate record β
+ "11 paid, 1 needs attention" has to be representable, because it is the normal
+ outcome of a real batch.
+- `bigint` base units throughout. No JS `number` touches money.
+- Excess precision is **refused**, not truncated. Scientific notation is refused as
+ ambiguous. Accounting negatives `(500)` are refused.
+- Whole hours only, and `hours Γ rate == amount` is checked before anything is funded
+ β the contract enforces it on-chain (error #17), so a drifted row would fund custody
+ that can never be released. **Nothing is rounded to make a demo work.**
+- One settlement asset per escrow. A row naming an asset this deployment cannot settle
+ is refused at validation, never allowed into a state that can never settle. SAC
+ addresses are read from configuration, never inferred from a symbol.
+- Batch creation is atomic: if any payment fails to write, the batch, every payment
+ and the audit event are rolled back. A partially created payroll would look complete
+ and quietly underpay someone.
+- No endpoint can set `PAID`, write a settlement hash, alter an amount or recipient,
+ bypass the oracle requirement, or bypass manager/finance separation.
+
+---
+
+## What is blocked
+
+> These are **not** done, and no mock stands in for them.
+
+| Item | State | Prerequisite |
+|---|---|---|
+| Migrations apply from zero | β
**10/10, verified** | β |
+| Schema matches the Prisma model | β
**zero drift** | β |
+| Composite FKs reject cross-tenant rows | β
**verified (P2003)** | β |
+| `(orgId, idempotencyKey)` under real concurrency | β
**verified** | β |
+| Transactional rollback, real PostgreSQL | β
**verified** | β |
+| Exact bigint money through the column | β
**verified** | β |
+| Route integration tests | β
**56 passing** | β |
+| State machine against real records | β
**15 passing** | β |
+| Escrow funding from an approved draft | β **not built** | UI + wallet signing |
+| Chain settlement, indexing, reconciliation E2E | β **blocked** | a funded v2 Testnet escrow |
+| A fresh Testnet golden-path run | β **blocked** | the above |
+| Production `migrate diff` | β **not run** | an authorized production operation |
+
+Setup: [ENVIRONMENTS.md](ENVIRONMENTS.md#setting-up-the-development-database).
+
+### What each test layer proves
+
+| Layer | Command | Proves |
+|---|---|---|
+| **Unit** (761) | `npm run test:ci` | authorization decisions, query scoping, schema rejection, the idempotency contract, exact arithmetic |
+| **Integration** (71) | `npm run test:integration` | what PostgreSQL itself enforces: composite FKs, unique and partial indexes, bigint columns, cascades, transaction isolation, real concurrency |
+| **Rust** (70) | `cargo test` | contract invariants, CFWP-v2 attestation, dual approval, upgrade authority |
+| **Live Testnet** (opt-in) | `COREFLOW_LIVE_TESTNET=1` | the chain actually behaves as the indexer and reconciler assume |
+
+The unit suite deliberately **excludes** `*.integration.test.ts`, so its total can
+never be presented as database validation. The in-memory double's limitations are
+enumerated at the top of [`fake-db.ts`](../src/lib/payments/__tests__/fake-db.ts).
+
+## Not yet built
+
+The API layer is complete; the product workflow is not. Still to come:
+
+- Upload / preview / draft UI, and the batch detail page
+- Freighter pre-signing disclosure (network, asset, total, recipient count, org, role,
+ batch id, with TESTNET shown plainly)
+- Escrow funding from an approved draft
+- Batch and per-payment receipts
+- Audit-trail timeline rendering
+
+The `ReconciliationPanel` component remains built, tested, and **not routed to a page**.
diff --git a/docs/DEPLOYMENTS.md b/docs/DEPLOYMENTS.md
new file mode 100644
index 0000000..b74b9ca
--- /dev/null
+++ b/docs/DEPLOYMENTS.md
@@ -0,0 +1,110 @@
+# CoreFlow Deployments
+
+CoreFlow has **two distinct on-chain deployments**. They are different contracts
+with different security properties, and this document exists so that distinction
+is never blurred.
+
+> **v2's security improvements are deployed on Testnet only.**
+> They are **not** on Mainnet. Nothing in this repository should be read as
+> claiming otherwise.
+
+---
+
+## CoreFlow v2 β Stellar **Testnet** (active, hardened)
+
+| Field | Value |
+|---|---|
+| Network | **Stellar Testnet** |
+| Network passphrase | `Test SDF Network ; September 2015` |
+| Contract ID | `CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4` |
+| WASM SHA-256 | `d9f2d849d69b56aebcbdf585e8b2e0e8d81d9e5bf13f51534f27bf479d0e56da` |
+| WASM size | 42,425 bytes |
+| Attestation schema | `CFWP-v2` (198-byte domain-separated preimage) |
+| Admin | `GAELEFW56FPEVOO57SJATCGEHX4ROQHULSUHEFMMPLEMACTA5A7PO2J2` |
+| Admin pinned in WASM | **yes** β `COREFLOW_ADMIN` baked at build time |
+| Oracle public key | `f42a48839e48d58e6628f5d096ee859e635b056be580bdcc68d620e2a2badae0` |
+| Oracle key registered | yes |
+| Paused | no |
+| Explorer | https://stellar.expert/explorer/testnet/contract/CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4 |
+
+### Settlement asset (Testnet)
+
+| Field | Value |
+|---|---|
+| Asset | Test `USDC` (**not** Circle USDC) |
+| SAC contract | `CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M` |
+| Decimals | 7 |
+| Explorer | https://stellar.expert/explorer/testnet/contract/CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M |
+
+### What v2 adds over v1
+
+| Hardening | Effect |
+|---|---|
+| Domain-separated attestations (`CFWP-v2`) | A Testnet proof cannot be replayed on Mainnet, on another deployment, for another payee, asset, amount or period |
+| `proof_preimage` read-only entry point | The contract is the single source of truth for what must be signed |
+| Admin-managed oracle registry | A manager can no longer install their own oracle and attest to their own work |
+| `hours Γ rate == amount` invariant | Verified work determines payment; `hours_logged` is no longer decorative |
+| Build-time admin pin | `init_admin` front-running gains an attacker nothing |
+| Two-step admin handover | A mistyped transfer cannot destroy admin control |
+| `upgrade` requires pause first | No silent one-transaction replacement of the code holding custody |
+| Permissionless `extend_escrow_ttl` | Anyone β including the worker awaiting payment β can keep a funded escrow's storage alive |
+| Batch cap + pay-period validation | Bounds a DoS vector and a meaningless attested period |
+
+---
+
+## CoreFlow v1 β Stellar **Mainnet** (historical)
+
+| Field | Value |
+|---|---|
+| Network | Stellar Mainnet (Public) |
+| Contract ID | `CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW` |
+| Attestation schema | v1 (32-byte, **no domain separation**) |
+| Explorer | https://stellar.expert/explorer/public/contract/CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW |
+
+**Status:** deployed and untouched. This pass did not modify, repoint, pause or
+upgrade it. It does **not** carry any of the v2 hardening above.
+
+Known limitations of v1, retained here for accuracy:
+
+- Attestations lack domain separation β a proof is not bound to network,
+ contract, payee, asset, amount or period.
+- The manager supplies and may rotate the oracle key, so the proof-of-work gate
+ is manager-attestable.
+- `hours_logged` does not constrain the amount paid.
+- `init_admin` is not pinned and is therefore front-runnable.
+
+A controlled v1 β v2 Mainnet migration is future work and has not been scheduled.
+
+---
+
+## Reproducing the v2 deployment
+
+```bash
+# 1. Oracle keypair (server-side only; never commit the seed)
+openssl rand -hex 32 > /dev/null # generate, then store in your secret manager
+ORACLE_SECRET_KEY= node scripts/oracle-cli.mjs pubkey
+
+# 2. Deploy. Refuses to proceed unless the admin pin is present in the WASM.
+ADMIN_IDENTITY=coreflow-v2-admin \
+ORACLE_PUBKEY=<64 hex> \
+ ./scripts/deploy-testnet.sh
+```
+
+The script builds with `COREFLOW_ADMIN` set, **greps the resulting binary to
+confirm the pin is physically present** (building with the variable set is not
+evidence the compiler used it β a cached unpinned artifact would look identical),
+deploys, initializes, registers the oracle key, and then verifies every one of
+those facts by reading them back from the chain.
+
+## Environment
+
+```
+NEXT_PUBLIC_STELLAR_NETWORK=testnet
+NEXT_PUBLIC_STELLAR_CONTRACT_ID=CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4
+NEXT_PUBLIC_STELLAR_TOKEN_ID=CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M
+NEXT_PUBLIC_STELLAR_READ_ADDRESS=GAELEFW56FPEVOO57SJATCGEHX4ROQHULSUHEFMMPLEMACTA5A7PO2J2
+ORACLE_SECRET_KEY=<32-byte hex seed, server-side only>
+```
+
+An unset `NEXT_PUBLIC_STELLAR_CONTRACT_ID` is a hard error, not a fallback β
+see `src/lib/config.ts`.
diff --git a/docs/ENVIRONMENTS.md b/docs/ENVIRONMENTS.md
new file mode 100644
index 0000000..b9663b4
--- /dev/null
+++ b/docs/ENVIRONMENTS.md
@@ -0,0 +1,196 @@
+# Environments
+
+CoreFlow runs in three environments. They differ in **which database** and
+**which chain** they touch, and those two facts decide whether a mistake is
+recoverable.
+
+A development command must never silently inherit production configuration. On
+2026-09-11 one did: a `vercel env pull` overwrote `.env` / `.env.local` with the
+deployment's variables, repointing local development at the production database
+and Mainnet v1. Every individual value was valid; only the combination was wrong.
+[`scripts/check-env.mjs`](../scripts/check-env.mjs) now refuses that combination.
+
+---
+
+## The three environments
+
+| | DEVELOPMENT | TESTNET VALIDATION | PRODUCTION |
+|---|---|---|---|
+| **Database** | Private local cluster, port 5440 | Dedicated hosted Postgres, disposable | Managed Postgres (`db.prisma.io`) |
+| **Chain** | Stellar **Testnet** | Stellar **Testnet** | Stellar **Mainnet** |
+| **Contract** | v2 `CDN4FIKLβ¦VAQRG5F4` | v2 `CDN4FIKLβ¦VAQRG5F4` | v1 `CCTF5WBOβ¦J2XPRFFW` |
+| **Settlement asset** | v2 testnet SAC `CBW2ZKFBβ¦JS743Q5M` | same | v1 mainnet SAC |
+| **Funds at risk** | None | None | **Real** |
+| **Schema version** | v2 (10 migrations, applied & verified) | v2 (10 migrations) | **v1** β see below |
+| **Who may reset it** | Anyone, freely | Anyone, deliberately | Nobody, ever, from a dev workflow |
+| **Preflight verdict** | must pass | `COREFLOW_ALLOW_REMOTE_DB=1` | `COREFLOW_ALLOW_MAINNET=1` + out-of-band authorization |
+
+### Production is still v1
+
+No part of the v2 hardening is deployed. Production holds the 11-table v1 schema,
+and its migration history diverges from this repository's. See
+[PRODUCTION_DATABASE_REMEDIATION.md](PRODUCTION_DATABASE_REMEDIATION.md).
+
+Do not describe v2's security properties as live on Mainnet. They are not.
+
+### Which is the default
+
+**DEVELOPMENT: local database + Testnet v2.** Every `npm` task that can write
+runs the preflight first and refuses anything else:
+
+```
+predev predev:http predb:migrate predb:deploy predb:seed β npm run check:env
+```
+
+`build` and `vercel-build` deliberately do **not** run it. The production
+deployment legitimately is Mainnet v1, and failing its build would take the live
+site down.
+
+---
+
+## Setting up the development database
+
+One command:
+
+```bash
+./scripts/dev-db.sh init
+```
+
+That creates a **private PostgreSQL cluster owned by your user**, in your home
+directory, on a non-default port, and writes the connection URLs into `.env`.
+
+### Why a separate cluster rather than a database in the system one
+
+Creating a role in the system instance needs an existing superuser. On the machine
+this was set up on, neither `postgres` peer authentication nor the old `coreflow`
+password was available β the password was lost with the `.env.local` that a
+`vercel env pull` overwrote.
+
+`initdb` does not need root. A cluster you create is one you are legitimately the
+superuser of, so no authentication is circumvented and the system instance is left
+alone. It has a useful side effect: development cannot reach anything but its own
+data.
+
+| | |
+|---|---|
+| Data directory | `~/.local/share/coreflow/pgdata` (override with `COREFLOW_PGDATA`) |
+| Port | `5440` (override with `COREFLOW_PGPORT`) |
+| Listens on | `127.0.0.1` only |
+| Databases | `coreflow_dev`, `coreflow_shadow` |
+| Role | `coreflow`, no `CREATEDB`, no `SUPERUSER` |
+| Password | generated locally, written only to `.env`, never printed |
+
+Port 5440 rather than 5433: on this machine 5432 is the system PostgreSQL and 5433
+was held by podman's `pasta` networking.
+
+The **shadow** database is separate because Prisma **resets** it. Pointing
+`SHADOW_DATABASE_URL` at a database holding anything you want to keep destroys it β
+which is exactly how the original dev database was lost once already.
+
+```bash
+./scripts/dev-db.sh start # after a reboot
+./scripts/dev-db.sh stop
+./scripts/dev-db.sh status
+./scripts/dev-db.sh psql # a shell on coreflow_dev
+./scripts/dev-db.sh destroy # delete the cluster and all its data
+```
+
+### Then migrate
+
+```bash
+npm run check:env # must print "OK: local database + Testnet v2."
+npm run db:deploy # applies all 10 migrations from zero
+npx prisma migrate status
+npm run test:integration
+```
+
+---
+
+## Which file holds what
+
+This is the part that went wrong on 2026-09-11, so it is worth being exact.
+
+| File | Written by | Read by | Holds |
+|---|---|---|---|
+| `.env` | **you**, and `scripts/dev-db.sh` | Next.js **and** Prisma CLI | local development configuration, including the database URLs |
+| `.env.local` | **you** | Next.js only | personal overrides; **no database URLs** |
+| `.env.vercel` | `vercel env pull --env=production` | nothing automatically | the deployment's configuration, for reference |
+| `.env.example` | **you** | nobody | placeholders, committed |
+
+**Database configuration lives in `.env`, not `.env.local`.** This is not a
+preference: the **Prisma CLI reads only `.env`**, while Next.js reads both. Putting
+the URLs in `.env.local` makes the app work and every `prisma migrate` fail with
+*Environment variable not found: DIRECT_URL*.
+
+### After a `vercel env pull`
+
+**Never pull into `.env` or `.env.local`.** Pull into `.env.vercel`:
+
+```bash
+vercel env pull .env.vercel --env=production
+```
+
+A bare `vercel env pull` writes `.env.local` and will silently replace your local
+database URLs and network settings with the deployment's. If it has already
+happened, the production database URLs are still commented out in `.env` with a
+note; the preflight will refuse to run until they are gone or local:
+
+```bash
+npm run check:env
+```
+
+Neither `.env`, `.env.local` nor `.env.vercel` is ever committed β `.gitignore`
+denies every `.env` variant and re-admits only `.env.example`.
+
+## Preflight reference
+
+[`scripts/check-env.mjs`](../scripts/check-env.mjs) is fail-closed and judges
+against explicit allowlists, not string patterns. It refuses when:
+
+- `NEXT_PUBLIC_STELLAR_NETWORK` is `public` / `mainnet`
+- `NEXT_PUBLIC_STELLAR_CONTRACT_ID` is the Mainnet v1 contract
+- `NEXT_PUBLIC_STELLAR_CONTRACT_ID` is **absent from the deployment registry** β
+ an unrecognized address is refused rather than assumed
+- `NEXT_PUBLIC_STELLAR_TOKEN_ID` is not the SAC the v2 Testnet deployment was
+ configured with (an escrow holds exactly one asset)
+- any of `DATABASE_URL`, `DIRECT_URL`, `PRISMA_DATABASE_URL`, `POSTGRES_URL`
+ resolves to a host outside the local allowlist
+
+It prints hostnames and contract addresses only. It never reads a secret for its
+value and never prints one.
+
+### Overrides
+
+Per-run and deliberate. Never set these as defaults, and never commit them:
+
+| Variable | Meaning |
+|---|---|
+| `COREFLOW_ALLOW_MAINNET=1` | A deliberate Mainnet action |
+| `COREFLOW_ALLOW_REMOTE_DB=1` | A deliberate action against a non-local database |
+| `COREFLOW_ALLOW_UNKNOWN_CONTRACT=1` | A contract not in the registry, e.g. a scratch deployment |
+
+Adding a deployment is meant to require editing `KNOWN_CONTRACTS` in the script
+and [DEPLOYMENTS.md](DEPLOYMENTS.md). That friction is the feature.
+
+---
+
+## Secrets
+
+Never committed: `.env`, `.env.local`, any `.env.*`, `*.pem`, `*.key`,
+`prodenv.txt`, any `*env*.txt`. `.gitignore` denies every `.env` variant and
+re-admits only `.env.example`, which holds placeholders and local-only values.
+
+Never logged: oracle secret keys, `AUTH_SECRET`, `BOOTSTRAP_SECRET`,
+`CRON_SECRET`, `INDEXER_SECRET`, database passwords, `VERCEL_OIDC_TOKEN`, session
+tokens, wallet secrets.
+
+A `vercel env pull` writes **live production secrets** to disk. Those files are
+git-ignored, but they are still real credentials sitting in the working tree.
+
+### Outstanding
+
+π΄ **Secret rotation is still outstanding** for everything exposed by
+`prodenv.txt`: the oracle signing key, `AUTH_SECRET`, `BOOTSTRAP_SECRET`, cron /
+indexer secrets, and the database credential. Until each is rotated and the old
+value proven unable to authenticate or sign, this environment is not
+production-grade, regardless of what the test suite reports.
diff --git a/docs/FUNDING.md b/docs/FUNDING.md
new file mode 100644
index 0000000..f0144aa
--- /dev/null
+++ b/docs/FUNDING.md
@@ -0,0 +1,252 @@
+# Funding β an approved draft becomes a funded escrow
+
+> **Status: domain and API complete and unit-tested. UI and live Testnet run outstanding.**
+
+## The architecture, as the contract actually is
+
+**Creating the escrow *is* funding the escrow.**
+
+`initialize_multi_sig_escrow(manager, finance_approver, oracle_pubkey, payments)`
+transfers custody β one `TokenClient::transfer(manager β contract)` per distinct
+asset β and *then* stores the escrow. There is no `fund()` entry point, and
+`CoreFlowEscrow` has no `funded` field.
+
+So:
+
+- **One wallet interaction, not two.** "Created but not funded" is not a state the
+ product can display, because it is not a state the contract can be in. The UI
+ must not present creation and funding as separate steps.
+- **An escrow exists if and only if its custody moved.** Existence is the funding
+ evidence.
+
+| Question | Answer |
+|---|---|
+| Custody destination | the contract's own address (`env.current_contract_address()`) |
+| Asset | per-payment `token`, a SAC address β never inferred from a symbol |
+| Amount | sum per distinct token, moved during creation |
+| Creation proof | `escrow/created` + one `payment/add` per payee |
+| Funding proof | the **SAC's own** `transfer` event |
+| Read state | `get_escrow(id)` |
+| Preconditions | `manager != finance_approver`, registered oracle key, `end_date > start_date`, `amount % rate_per_hour == 0`, β€100 payments |
+
+## The contract is not idempotent β this is the central safety problem
+
+A second `initialize_multi_sig_escrow` creates a **second escrow** and moves the
+money **again**. Nothing on-chain prevents it.
+
+Every control against double-funding is therefore off-chain, and the enforcement is
+a **database constraint**, not a disabled button:
+
+```
+BlockchainTransaction.idempotencyKey UNIQUE = fund:batch:
+```
+
+The attempt is opened **before the wallet is shown**. A second call while an
+attempt is open returns *that* attempt. Double-click, refresh, two tabs and a
+client retry all converge on one escrow.
+
+A retry after a genuinely finished attempt gets a new key
+(`fund:batch::retry:`), so a failed attempt does not block the batch forever
+while a confirmed one can never be repeated.
+
+## The plan is frozen, and is what the chain is compared against
+
+When the intent opens, the exact plan is persisted to
+`BlockchainTransaction.plan` with a SHA-256 `planDigest`: batch, organization,
+project, contract, custody destination, network, manager, finance approver, oracle
+key, asset code + SAC + decimals, total, and every row's payment id, recipient,
+token, amount, rate and period. Money is stored as **decimal strings** β JSON has
+no bigint.
+
+Confirmation compares the chain against **that**, never against a recomputed plan.
+Configuration can move under a pending transaction β the settlement asset switched,
+a different finance approver becoming the first candidate, a payment edited β and a
+recomputed plan would quietly agree with whatever the chain happened to contain.
+That is the agreement that must not be manufactured.
+
+A plan whose digest does not match its content is refused outright.
+
+## Lifecycle
+
+```
+READY βββΆ AWAITING_SIGNATURE βββΆ SUBMITTED βββΆ CONFIRMED (funded)
+ β β
+ β βββΆ FAILED chain says it failed
+ β βββΆ UNVERIFIABLE chain unreadable β retry
+ β βββΆ MISMATCH chain β plan; not adopted
+ βββΆ CANCELLED signature declined, nothing submitted
+```
+
+Every transition writes an audit event: `funding.intent.opened`,
+`funding.submitted`, `funding.confirmed`, `funding.failed`, `funding.declined`,
+`funding.mismatch`.
+
+## Confirmation: what has to be true
+
+`CONFIRMED` requires **all** of:
+
+1. `readTransactionSucceeded(hash)` is true
+2. the escrow reads back, is not cancelled, and its manager and finance approver are
+ the planned ones β and are not the same key
+3. its payment count matches, and every row's recipient, amount and token match the
+ plan **in order**
+4. the payments in the database still match the plan (nothing edited or removed
+ since it was frozen)
+5. a transfer of the **exact** total, from the plan's manager to the custody
+ address, is observable **in that transaction**
+
+Freighter returning is not evidence. The client builds and signs, so it could
+submit something other than the plan.
+
+### The three non-success outcomes are never collapsed
+
+| Outcome | Meaning | Effect |
+|---|---|---|
+| `FAILED` | the chain says the transaction failed | payments return to DRAFT; nothing moved |
+| `UNVERIFIABLE` | the chain could not be read | **nothing recorded**; retry later |
+| `MISMATCH` | we read the chain and it disagrees | escrow **not adopted**; CRITICAL finding opened |
+
+`UNVERIFIABLE β FAILED`. An RPC outage proves nothing about the transaction, and
+marking a funded escrow failed would be worse than waiting.
+
+`MISMATCH` preserves the evidence as a `ReconciliationFinding` (CRITICAL) and
+attaches nothing to the batch. Someone funded an escrow this batch did not
+describe; adopting it would make the product assert something untrue about money.
+
+## Recovery: the transaction hash is the anchor
+
+A client can submit `initialize_multi_sig_escrow` and then fail to learn which
+escrow it created β a dropped connection, an RPC hiccup, a reload, an unparseable
+return value. That must never require signing again, because signing again funds a
+**second** escrow with the same money.
+
+So the escrow id is **resolved server-side from the transaction hash**, in order of
+durability:
+
+1. **`ChainEvent`** β the indexer'''s own record of the `escrow/created` event,
+ scoped to the attempt'''s contract and network. Survives RPC event retention.
+2. **Soroban RPC** β authoritative, bounded by retention, used while the indexer has
+ not caught up.
+
+| Resolution | Outcome |
+|---|---|
+| exactly one escrow | verification proceeds |
+| none visible yet | `UNVERIFIABLE` β pending, not failed |
+| more than one | `MISMATCH` β ambiguity is refused, never resolved by choosing |
+
+`onChainEscrowId` in the confirm request is **optional and advisory**. The server
+uses what it resolved; a supplied value is only cross-checked, so transaction A
+cannot adopt the escrow created by transaction B. A disagreement is a `MISMATCH`
+with both ids recorded.
+
+Recovery is repeatable: confirming twice yields one escrow, one attempt, one audit
+event. It never creates a new funding attempt.
+
+## Uncertain transactions β the retry policy
+
+| Situation | Behaviour |
+|---|---|
+| Wallet declined, nothing submitted | safe. Attempt `CANCELLED`, payments return to DRAFT, a fresh attempt may be opened |
+| Submitted, then the client died | the attempt persists with its hash. **Do not submit again** β call confirm |
+| Submitted, RPC unreadable | `UNVERIFIABLE`. The attempt stays `SUBMITTED` and keeps blocking a new one |
+| Confirmed | a new attempt can never be opened |
+| Mismatch | stop. A human resolves the finding |
+
+Abandon is narrow by design: payments return to DRAFT **only when no hash exists**.
+Once a transaction was submitted the money may have moved, so the record is not
+rewound β manufacturing a "not funded" state is how a second escrow gets funded.
+
+The UI must say so plainly while verification is pending:
+
+> We're verifying whether your funding transaction completed. **Do not fund again.**
+
+## The pay period is required
+
+`period_start` and `period_end` are **required CSV columns**.
+
+The period is a signed field of the CFWP-v2 attestation and the contract refuses
+`end_date <= start_date`. A row without one can be drafted but can never be funded.
+CoreFlow will not supply it β defaulting to today, last month or the upload date
+means attesting to a pay period nobody stated.
+
+This is enforced at **upload**, not at funding. Discovering it at the wallet prompt,
+after a payroll has been prepared and approved, is far worse than being told at
+row 8.
+
+## Eligibility
+
+Every blocker is reported at once β 13 codes: `ROLE_NOT_PERMITTED`,
+`ALREADY_FUNDED`, `FUNDING_IN_FLIGHT`, `NO_PAYMENTS`, `TOO_MANY_PAYMENTS`,
+`PAYMENT_NOT_FUNDABLE`, `PAYMENT_ALREADY_ON_CHAIN`,
+`SETTLEMENT_ASSET_UNCONFIGURED`, `ASSET_MISMATCH`, `MIXED_ASSETS`,
+`AMOUNT_NOT_POSITIVE`, `HOURS_RATE_MISMATCH`, `PERIOD_REQUIRED`,
+`PERIOD_INVALID`, `NO_DISTINCT_FINANCE_APPROVER`, `ORACLE_KEY_UNAVAILABLE`.
+
+Funding is permitted to `OWNER`, `ADMIN`, `MANAGER` β mirroring `escrow:create`, and
+matching the contract, where the signer **is** the escrow's manager. The finance
+approver is chosen **server-side** and never taken from the request: letting a
+caller nominate it would let them nominate themselves, which is what the contract
+refuses with `SignersNotDistinct`.
+
+## API
+
+| Method | Path | Permission |
+|---|---|---|
+| GET | `/api/payroll/batches/:id/funding` | `escrow:read` |
+| POST | `/api/payroll/batches/:id/funding/intent` | `escrow:create` |
+| POST | `/api/payroll/batches/:id/funding/submitted` | `escrow:create` |
+| POST | `/api/payroll/batches/:id/funding/confirm` | `escrow:create` |
+| POST | `/api/payroll/batches/:id/funding/abandon` | `escrow:create` |
+
+Every attempt id is scoped to the batch in the URL, so an attempt belonging to
+another batch cannot be acted on by naming it. No request body carries an amount,
+recipient, asset, manager or finance approver β all of that comes from the frozen
+plan.
+
+Confirm returns **200 for every outcome**: the verification request succeeded, and
+the body says what the chain showed. A 4xx would conflate "we could not check" with
+"your request was wrong".
+
+## Division of labour with the indexer
+
+| Component | Owns |
+|---|---|
+| **Funding** | the intent, the frozen plan, chain verification, creating/linking the `Escrow`, and setting each payment's `onChainPaymentIndex` |
+| **Indexer** | state from chain events. On `payment/add` it recognises the linked payment and advances `VALIDATING β AWAITING_ORACLE` |
+
+Linking payments to their on-chain slot is what stops the indexer creating a second
+set of rows: it looks up `(escrowId, onChainPaymentIndex)` and finds ours. It also
+cross-checks recipient and amount, opening an `AMOUNT_MISMATCH` finding if they
+disagree.
+
+## The batch detail page
+
+`/dashboard/payroll/[id]` is the workspace: header with the mapped domain status,
+summary figures formatted server-side, the funding card (the same `FundingPanel`, so
+the three funding states and recovery behave identically wherever they appear), one
+table row per payment with a drill-down to exact base units, approvals read from
+`Approval` records β including the half that is **missing**, since "waiting for
+finance" is the fact a reviewer needs β an activity timeline from real `AuditEvent`
+rows, collapsed technical details, and any open reconciliation findings.
+
+The timeline is sparse early in a batch's life, and is left that way. Padding it with
+plausible entries nobody recorded would make the one screen whose job is to show what
+happened the least trustworthy thing in the product.
+
+On arrival, a submitted attempt with a known hash and no escrow id is recovered
+**automatically, once** β no user action, no second signature. Repeated verification
+of a genuinely pending transaction would be noise, so it is not retried on a loop and
+`Check status` stays available.
+
+## Still blocked
+
+| | Prerequisite |
+|---|---|
+| Funding review UI + Freighter disclosure | β
built |
+| Batch detail page | β
built |
+| Live Testnet funding run | the UI, plus a Freighter signature in a browser |
+
+Test USDC **can** be obtained through the project's existing setup: the Stellar CLI
+holds `coreflow-v2-usdc-issuer`, `coreflow-v2-manager` and `coreflow-v2-finance`
+identities, and the previous golden path funded escrow #8 with 2,860 test USDC that
+way. The browser wallet interaction cannot be automated and needs the operator.
diff --git a/docs/IMPLEMENTATION_MAP.md b/docs/IMPLEMENTATION_MAP.md
new file mode 100644
index 0000000..ea07a7e
--- /dev/null
+++ b/docs/IMPLEMENTATION_MAP.md
@@ -0,0 +1,235 @@
+# Implementation Map β the contract the UI must implement
+
+Every step of Bulk Pay, from the screen to the chain and back. Written before the UI
+so the UI is built against a workflow that exists, rather than the workflow being
+bent to fit screens.
+
+Legend: β
built and verified Β· π‘ built, not verified end-to-end Β· β not built
+
+---
+
+## The nine stages
+
+### 1. Upload β choose a file
+
+| | |
+|---|---|
+| **UI** | Drop zone; filename, size, row count. Client-side size check only as courtesy |
+| **API** | none yet β the file is not sent until stage 2 |
+| **State** | none |
+| **Status** | β UI |
+
+The file is never trusted client-side. The browser's row count is a convenience; the
+server re-derives everything.
+
+### 2. Validate β see every problem at once
+
+| | |
+|---|---|
+| **UI** | Row-level error table: line number, column, message. Re-validate on edit |
+| **API** | `POST /api/payroll/batches/validate` β `{ valid, errors[], warnings[], summary, asset }` |
+| **Domain** | `validateCsv` β `parsePayrollCsv` + `settleableAssetCodes` |
+| **Database** | **none β writes nothing** |
+| **State** | none |
+| **Status** | β
API Β· β UI |
+
+Returns **200** with `valid: false` for a bad file. Safe to call on every keystroke.
+Errors carry `row` (1-based, as the uploader sees it), `field`, `code`, `message`.
+
+Refused here, never silently fixed: invalid addresses Β· scientific notation Β·
+excess precision Β· zero/negative amounts Β· accounting negatives Β· fractional hours Β·
+`hours Γ rate β amount` Β· assets this deployment cannot settle Β· duplicate
+recipients (unless opted out) Β· >100 rows Β· >1 MB Β· control characters.
+
+### 3. Draft β create the batch
+
+| | |
+|---|---|
+| **UI** | Preview table, total, recipient count, period; "Create draft" |
+| **API** | `POST /api/payroll/batches` + `Idempotency-Key` β 201 `{created:true}` / 200 `{created:false}` / 409 / 422 |
+| **Domain** | `createBatch` β `createDraftBatch` |
+| **Database** | 1 `PayrollBatch` + **N `Payment`** + 1 `AuditEvent`, one transaction |
+| **State** | every payment `DRAFT` |
+| **Status** | β
API, DB-verified Β· β UI |
+
+**One payment per row.** Never an aggregate. Rollback is all-or-nothing β verified
+against PostgreSQL by injecting a failure on row 3.
+
+The UI **must** send `Idempotency-Key` and keep it stable across retries of the same
+file. Reusing it with a different payload returns 409 `IDEMPOTENCY_KEY_REUSED`.
+
+### 4. Fund β put custody on-chain
+
+| | |
+|---|---|
+| **UI** | Pre-signing disclosure, then Freighter |
+| **API** | β not built |
+| **Domain** | needs `requireSettlementContractId()`; escrow creation exists at `POST /api/escrows` for the single-escrow path |
+| **Chain** | `create_escrow` + token transfer into custody |
+| **Indexer** | `escrow/created` β `Escrow` row, `resolveEscrowTenant` |
+| **State** | `DRAFT β VALIDATING β AWAITING_ORACLE` |
+| **Status** | β
domain + API + UI, DB-verified Β· β live Testnet run |
+
+The disclosure must show, before the wallet opens: **network (TESTNET, plainly)** Β·
+contract id Β· settlement asset + SAC address Β· exact total Β· recipient count Β·
+organization Β· the caller's role Β· batch reference. A signature request that does not
+say what is being signed is the problem CFWP-v2 exists to solve at the protocol
+level; the UI must not reintroduce it at the human level.
+
+### 5. Verify work β the oracle attestation
+
+| | |
+|---|---|
+| **UI** | "Work verified" with hours and period. **Not** "CFWP-v2 signature validated" |
+| **API** | `POST /api/oracle/attest` (session + on-chain-manager gated) |
+| **Domain** | `buildProofMessage` β 198-byte domain-separated preimage |
+| **Chain** | `submit_hours_proof`; contract enforces `hours Γ rate == amount` (#17) and a monotonic nonce |
+| **Indexer** | `oracle/verified` β `ORACLE_VERIFIED` |
+| **State** | `AWAITING_ORACLE β ORACLE_VERIFIED` |
+| **Status** | β
API + contract Β· β UI |
+
+### 6. Approve β two distinct people
+
+| | |
+|---|---|
+| **UI** | Two separate affordances, each labelled with the role it satisfies and who filled it |
+| **API** | `POST /api/payroll/batches/:id/approve` (batch) Β· `POST /api/payments/:id/approve` (one) |
+| **Domain** | `approveBatch` β `approvePayment`; role from **membership**, never the body |
+| **Database** | `Approval` `@@unique([paymentId, role])`; `AuditEvent` per decision |
+| **Chain** | `approve_manager` / `approve_finance`, two distinct keys |
+| **Indexer** | `approve/*` β `AWAITING_FINANCE` β `READY_TO_SETTLE` |
+| **State** | `ORACLE_VERIFIED β AWAITING_MANAGER β AWAITING_FINANCE β READY_TO_SETTLE` |
+| **Status** | β
off-chain API, DB-verified Β· π‘ on-chain signing Β· β UI |
+
+The UI must **never** imply one wallet satisfied both halves. An `ADMIN` holds both
+permissions, and the second attempt records nothing β the screen must say *"waiting
+for a second approver"*, not *"approved"*.
+
+Off-chain approval is a **workflow record**. The authoritative approval is the
+on-chain signature the indexer observes. The UI must distinguish "decision recorded"
+from "approval observed on-chain".
+
+### 7. Settle β submit, and wait for the chain
+
+| | |
+|---|---|
+| **UI** | "Submittingβ¦" β "Confirmingβ¦" β per-payment outcome. **Never "Paid" on submission** |
+| **API** | `POST /api/payments/:id/submit` (+ `Idempotency-Key`) |
+| **Domain** | `submitPaymentForSettlement`; `BlockchainTransaction.idempotencyKey` unique |
+| **Chain** | `pay_batch` β one transaction, one SAC transfer per payee |
+| **State** | `READY_TO_SETTLE β SUBMITTING β CONFIRMING` |
+| **Status** | π‘ API exists Β· β UI |
+
+`SUBMITTING` is not `PAID`. Verified against PostgreSQL: **no user actor of any
+role β OWNER, ADMIN, MANAGER, FINANCE β can persist `PAID`.**
+
+### 8. Confirm β PAID, from chain evidence only
+
+| | |
+|---|---|
+| **UI** | "11 paid / 1 requires attention", per-payment, with explorer links |
+| **API** | `GET /api/payroll/batches/:id` (standing derived on read) |
+| **Indexer** | `payment/paid` β `PAID` + `settlementTxHash` + `settledAt` |
+| **State** | `CONFIRMING β PAID`, actor `indexer` **only** |
+| **Status** | β
indexer + state machine, DB-verified Β· β UI |
+
+A transaction link is rendered **only** where `mayHaveTransaction` is true. Showing an
+explorer URL for an unsubmitted payment invites a reader to believe it settled.
+
+Partial failure is the normal case. The UI must make one failed payment among eleven
+prominent without implying the eleven failed.
+
+### 9. Reconcile β independent verification
+
+| | |
+|---|---|
+| **UI** | `ReconciliationPanel` β **built, tested, not routed to any page** |
+| **API** | `POST /api/organizations/:id/reconciliation` |
+| **Domain** | reads **SAC transfer events**, not CoreFlow's own projection |
+| **State** | may open `RECONCILIATION_REQUIRED`; **never moves `PAID` backwards** |
+| **Status** | β
engine Β· π‘ panel built, unrouted |
+
+Transaction-scoped matching: the same contract paying the same contractor the same
+rate every period is **not** unique on `(contract, recipient, asset, amount)` β the
+live-caught bug that produced seven false `DUPLICATE_PAYMENT_EVENT` findings.
+
+---
+
+## What the UI may never do
+
+| Never | Because |
+|---|---|
+| Send `organizationId`, `role`, `state`, `status`, `settlementTxHash` or an approval identity as trusted input | All server-derived. The schemas **reject** these fields, they are not ignored |
+| Show "Paid" before `state === 'PAID'` | `PAID` comes only from observed chain evidence |
+| Show a transaction link where `mayHaveTransaction` is false | It implies settlement that has not happened |
+| Imply one wallet satisfied both approvals | The contract refuses it (`SignersNotDistinct`); the UI must not suggest otherwise |
+| Parse a formatted amount back into money | Use `*BaseUnits` strings; never `parseFloat` |
+| Round or reformat hours | v2 records whole hours; fractional input is refused upstream |
+| Retry an already-settled payment | Terminal financial state |
+| Invent a field when evidence is absent | Render "not yet available", not a placeholder value |
+| Call an endpoint that sets state directly | None exists, deliberately |
+
+---
+
+## Response shapes the UI binds to
+
+Money always arrives twice: a display string **and** an exact base-unit string.
+
+```ts
+// POST /api/payroll/batches β 201
+{ created: true,
+ batch: { id, reference, paymentCount, periodStart, periodEnd,
+ total: "2,860.00", totalBaseUnits: "28600000000",
+ asset: "USDC", unlinkedRecipients: 2 },
+ warnings: [{ row?, field?, code, message }],
+ possibleDuplicateOf?: { id, reference, createdAt } }
+
+// GET /api/payroll/batches/:id
+{ batch: { id, reference, source: {...},
+ total, totalBaseUnits, paymentCount,
+ standing: { headline, byState, needsAttention,
+ totalAmountBaseUnits, paidAmountBaseUnits, paid },
+ payments: [{ id, recipient, amount, amountBaseUnits,
+ rateBaseUnits, hours, state, stateLabel, tone,
+ needsAttention, stateReason, reference,
+ transactionHash, // null unless the state allows one
+ settledAt, onChainPaymentIndex,
+ approvals: [{ role, decision, actorAddress, createdAt }] }] } }
+
+// POST /api/payroll/batches/:id/approve β 200
+{ batchId, approvalRole: "MANAGER",
+ recorded: 3, alreadyRecorded: 0, failed: 0,
+ results: [{ paymentId, ok, recorded, state, stateLabel, message?, code? }],
+ completeForRole: true }
+```
+
+Errors are always `{ error, code, details? }`; `details` only ever echoes the
+caller's own input.
+
+---
+
+## Pages to build
+
+| Page | Stages | Needs |
+|---|---|---|
+| Bulk Pay upload | 1β3 | validate + create |
+| Batch detail (built) | 3β9 | header, summary, funding card, per-payment table with drill-down, approvals, activity timeline, technical details, findings |
+| Batch list | β | list |
+| Reconciliation | 9 | **route the existing panel** |
+
+Every page carries the persistent **Testnet** badge. Every page derives state from
+the API; none computes a state of its own.
+
+---
+
+## The acceptance scenario
+
+One realistic run, against real PostgreSQL **and** real v2 Testnet:
+
+> Organization A β 3 contractors β CSV upload β exactly 3 `Payment` rows β exact
+> amounts β manager approval β finance approval (distinct wallet) β Testnet
+> settlement β 3 indexed payments β independent reconciliation β 3 receipts β
+> complete audit trail. **And Organization B cannot see any of it.**
+
+Stages 1β3, 6 (off-chain) and the isolation requirement are verified against
+PostgreSQL today. Stages 4, 7, 8 and the receipts are not yet end-to-end.
diff --git a/docs/MULTI_TENANCY.md b/docs/MULTI_TENANCY.md
new file mode 100644
index 0000000..6fe732b
--- /dev/null
+++ b/docs/MULTI_TENANCY.md
@@ -0,0 +1,258 @@
+# CoreFlow Multi-Tenancy
+
+Tenant isolation is treated as a **security boundary**, not a UI filter. This
+document states the model, where it is enforced, and what it does not yet cover.
+
+---
+
+## 1. The ownership graph
+
+```
+Organization
+βββ OrgMember ββββββββ User (role + lifecycle status)
+βββ Project
+βββ Worker
+βββ Escrow βββββββββββ Project?
+βββ PayrollBatch βββββ Project?
+βββ Payment ββββββββββ PayrollBatch, Escrow?, Project?, Worker?
+β βββ Approval
+β βββ OracleAttestation
+β βββ BlockchainTransaction
+β βββ ReconciliationFinding
+βββ AuditEvent
+```
+
+**Every tenant-owned record carries `orgId` directly.** Nothing relies on the
+application "remembering" which tenant a record belongs to by walking a parent
+chain. `Approval` and `OracleAttestation` gained an explicit `orgId` in this phase
+precisely because they were previously reachable only by joining through `Payment`.
+
+Records that are deliberately **not** tenant-owned:
+
+| Model | Why |
+|---|---|
+| `User`, `Session`, `AuthChallenge` | Identity is global; a wallet may belong to several organizations |
+| `ChainEvent`, `IndexerCursor` | Raw chain data, scoped by `(contractId, network)` rather than tenant |
+| `AuditLog` (legacy) | Predates organizations; **not** exposed through any tenant-scoped endpoint |
+| `TimeLog` (legacy) | Superseded by `Payment.hours` + `OracleAttestation` |
+
+---
+
+## 2. The database enforces the boundary
+
+Every parent relation on a tenant-owned record is a **composite foreign key** on
+`(orgId, id)`, not on `id` alone.
+
+```prisma
+batch PayrollBatch @relation(fields: [orgId, batchId], references: [orgId, id])
+```
+
+A plain `batchId` foreign key guarantees only that the batch *exists*. It says
+nothing about whose batch it is, so a bug or a crafted request could produce a
+payment in org A attached to a batch, escrow, project or worker in org B β with no
+constraint objecting. Isolation would then rest entirely on every query
+remembering to filter.
+
+Verified directly against PostgreSQL:
+
+```
+org A payment β org A batch INSERT 0 1 ALLOWED
+org A payment β org B batch Payment_orgId_batchId_fkey BLOCKED
+org A payment β org B project Payment_orgId_projectId_fkey BLOCKED
+org A payment β org B worker Payment_orgId_workerId_fkey BLOCKED
+org B approval β org A payment Approval_orgId_paymentId_fkey BLOCKED
+org B audit β org A payment AuditEvent_orgId_paymentId_fkey BLOCKED
+org B escrow β org A project Escrow_orgId_projectId_fkey BLOCKED
+```
+
+Note the MATCH SIMPLE semantics: when the optional id is NULL the constraint is
+satisfied, which is the intended behaviour for optional parents.
+
+`@@unique([orgId, id])` on `Project`, `Worker`, `Escrow`, `PayrollBatch` and
+`Payment` exists to make them valid composite-FK targets.
+
+---
+
+## 3. The application boundary
+
+One module: `src/lib/tenancy/`.
+
+| File | Responsibility |
+|---|---|
+| `rbac.ts` | Permission and delegation tables β see [`RBAC.md`](RBAC.md) |
+| `resolve.ts` | Membership resolution and every scoped resource lookup |
+| `membership.ts` | Membership lifecycle, invitations, escalation guards |
+| `http.ts` | `withTenant()` β the wrapper every tenant-scoped route uses |
+
+### Nothing from the client is trusted
+
+A client may **name** which of its organizations to act in (`X-Organization-Id`,
+`?orgId`, or a body field). It may never assert that it belongs to one, nor what it
+may do there. Both come from `OrgMember`, read on every request.
+
+Specifically untrusted: `organizationId` as a bearer of authority, role claims,
+project ownership, hidden form fields, client-side route protection.
+
+When the caller belongs to exactly one organization, that one is used. When they
+belong to several, the request **must** say which β guessing could perform an
+action in the wrong tenant's name, and a payment approved in the wrong
+organization is not a recoverable mistake.
+
+### Scoping lives in the WHERE clause
+
+Resources are loaded with `orgId` as part of the query, never fetched by global id
+and checked afterwards. A post-fetch check still performs the read, and any
+logging, error path or timing difference around it can disclose existence.
+
+### 404, not 403, for anything out of scope
+
+A 403 on a foreign resource confirms it exists. Repeated across a range of ids that
+becomes an enumeration oracle: an attacker learns how many payments another tenant
+has, and roughly what they are worth, without reading one. Every cross-tenant miss
+is therefore **byte-identical** to a genuine miss β same status, same message.
+
+403 is reserved for resources the caller *can* see but may not act on.
+
+The same applies to membership: `INVITED`, `SUSPENDED` and `REMOVED` are all
+indistinguishable from non-membership, so suspending someone does not tell them
+they were ever a member.
+
+### On-chain ids are not tenant-safe
+
+Escrow ids are assigned by the contract, so org A and org B can both hold an
+"escrow 3" on different deployments. `findEscrowByOnChainId` always filters by
+organization; resolving an on-chain id globally would hand one tenant another's
+escrow.
+
+---
+
+## 4. Membership lifecycle
+
+```
+INVITED βββΆ ACTIVE βββΆ SUSPENDED βββΆ ACTIVE
+ β β β
+ ββββββββββββΆβββββββββββββΆββββββββΆ REMOVED (terminal)
+```
+
+Only **ACTIVE** grants authority. `SUSPENDED` is kept distinct from `REMOVED` so
+access can be revoked without destroying the record of who held what β an audit
+trail that says a role "never existed" after an incident is worse than none.
+
+`REMOVED` is terminal. Re-admitting someone creates a **new** membership, so the
+previous one's history stays attributable.
+
+Guards, each tested: no self-targeting, no granting above your level, no removing
+or suspending or demoting the last active administrator.
+
+---
+
+## 5. Invitations
+
+| Property | Implementation |
+|---|---|
+| Unpredictable | 32 bytes of CSPRNG output, base64url |
+| Stored hashed | Only `sha256(token)` is persisted β a database dump must not yield working invitations |
+| Single-use | Conditional update on `usedAt IS NULL` inside a transaction, so two racing requests cannot mint two memberships |
+| Expiring | 7 days |
+| Org-scoped | `orgId` is **required**; an invitation that cannot name its organization is not acceptable |
+| Role-scoped | `orgRole` validated against the inviter's delegation |
+| Revocable | `revokedAt`, kept distinct from `usedAt` so "withdrawn" is never read as "accepted" |
+| Returned once | The plaintext token appears only in the creation response |
+
+**Email uniqueness is per organization**, not global. A global constraint meant
+that once org A invited `alice@example.com`, org B could never invite her β and the
+failure disclosed that some other tenant already had her. Contractors working for
+several agencies is the normal case.
+
+**Every rejection looks the same to the caller.** Expired, revoked, already-used
+and never-existed all return one 404 body. Distinguishing them tells someone
+probing tokens which of their guesses were real.
+
+**Acceptance does not change an existing member's role**, in either direction β an
+invitation must not be a promotion channel for someone who already belongs. A
+`REMOVED` member cannot be re-admitted by an old invitation.
+
+---
+
+## 6. Indexer tenancy mapping
+
+**The chain knows nothing about CoreFlow organizations.** The only authoritative
+mapping is an `Escrow` row the application itself wrote β created when a member
+submitted the creation transaction, or when an operator explicitly claimed the
+escrow.
+
+```
+chain event (escrow N, contract C, network W)
+ β
+ βΌ
+ Escrow WHERE onChainId=N AND contractId=C AND network=W
+ β
+ ββββββ΄ββββββ
+found not found
+ β β
+ βΌ βΌ
+project record with attributed=false, project NOTHING
+under
+that org
+```
+
+The indexer **never invents a tenant.** It previously auto-created one
+organization per deployment and attached every discovered escrow to it; that is a
+guess, and it would place one party's payroll, recipients and amounts inside
+another's workspace. A data breach produced by a convenience default.
+
+Consequences, stated plainly:
+
+- Escrows created outside the app (CLI, validation scripts, another client) are
+ **invisible until claimed**. That is the intended trade.
+- `POST /api/organizations/:id/escrows/claim` attributes one, and requires the
+ caller to prove against **live contract state** that their wallet is the escrow's
+ on-chain manager. Without that, any organization could claim any escrow by naming
+ its id.
+- An escrow already claimed by another organization returns a deliberately vague
+ 409: confirming that another tenant holds it would disclose that tenant's
+ existence.
+- Unattributed events are **recorded, not dropped** (`ChainEvent.attributed =
+ false`, with the decoded payload). After a claim, `replayUnattributed()` applies
+ the backlog β the cursor has advanced past those ledgers, so without replay a
+ claimed escrow would silently be missing all history predating its claim.
+
+Protections: duplicate events are keyed by RPC paging token; duplicate payments are
+impossible via `@@unique([escrowId, onChainPaymentIndex])`; conflicting mappings
+are refused rather than reassigned; orphan and conflicting chain state becomes a
+`ReconciliationFinding`.
+
+---
+
+## 7. Threat model
+
+| Attack | Mitigation | Residual risk |
+|---|---|---|
+| Substitute another tenant's resource id | Scoped queries + composite FKs; 404 response | β |
+| Enumerate ids to infer another tenant's volume | Identical response for foreign and nonexistent | Timing differences not measured |
+| Claim another tenant's on-chain escrow | On-chain manager proof against live state | A compromised manager key can claim its own escrows into an attacker's org |
+| Escalate via invitation | `orgRole` validated against inviter's delegation | β |
+| Escalate via self-promotion | `checkNotSelf` | β |
+| MANAGER manufactures the finance approval | Cannot grant FINANCE; cannot hold both halves; contract enforces `SignersNotDistinct` | β |
+| Strand an organization with no admin | `checkNotLastAdministrator` on remove/suspend/demote | A single owner losing their key is unrecoverable without operator action |
+| Steal an invitation from the database | Only the hash is stored | A leaked creation **response** yields a live token until expiry |
+| Replay an invitation | Single-use conditional update | β |
+| Platform admin reads every tenant's payroll | Legacy platform `Role` grants no payment authority; `/api/escrows` and audit logs are org-scoped | β |
+| Indexer mis-assigns chain data | No tenant is invented; unattributed by default | β |
+| Stale client shows org A data after switching | Server always re-resolves; client must refetch | **Frontend switcher not yet built** β see Β§8 |
+
+---
+
+## 8. What is NOT done
+
+Stated explicitly rather than implied by omission.
+
+| Gap | Status |
+|---|---|
+| **Organization UX** | No switcher, no onboarding wizard, no members/projects screens. The API exists and is enforced; the interface does not. Stale-client-state invalidation is therefore untested in a real UI. |
+| **Project-level scoping** | Projects are tenant-scoped entities, but permissions are **organization-wide**: a role grants the same access to every project in the organization. Per-project membership is not implemented. This is deliberate β the simplest model that is secure β and is recorded as a product decision, not a completed feature. |
+| **Worker identity across organizations** | The same wallet **may** be a worker in multiple organizations (`@@unique([orgId, walletAddress])`), and each is a separate `Worker` record with its own payment history. Whether that should be linkable to one human is undecided. |
+| **Treasury** | `treasury:read` exists in the matrix; no treasury endpoint or view is implemented. |
+| **Query performance under scoping** | Indexes exist on `(orgId, state)`, `(orgId, role)`, `(orgId, status)`, `(orgId, resolvedAt)` and the composite-FK targets. Not load-tested; no N+1 audit beyond the route handlers changed here. |
+| **Reconciliation scheduling** | `reconcileOrganization` is implemented and tested but nothing invokes it on a timer. Reconciliation logic, not reconciliation operations. |
+| **Approval granularity** | Per-escrow, not per-payment β a contract-level constraint. See `PAYMENT_STATE_MACHINE.md` Β§12. |
diff --git a/docs/ORACLE.md b/docs/ORACLE.md
new file mode 100644
index 0000000..57fa811
--- /dev/null
+++ b/docs/ORACLE.md
@@ -0,0 +1,232 @@
+# CoreFlow Oracle Protocol
+
+**Schema:** `CFWP-v2` Β· **Preimage:** 198 bytes, fixed width Β· **Signature:** Ed25519
+
+The oracle is the component that turns "a payment row exists" into "the contract will
+release funds for it". `pay_batch` refuses to settle any payment whose `proof_verified`
+flag is false, so an oracle signature is the only thing standing between a funded escrow
+and a paid worker. This document is the specification of that signature.
+
+---
+
+## 1. What the oracle attests to
+
+> *This worker performed these hours in this period, and is owed exactly this amount,
+> in this asset, under this escrow, on this contract, on this network β once.*
+
+Every clause in that sentence is a field in the signed preimage. That is the whole design.
+
+---
+
+## 2. The preimage (198 bytes)
+
+| Offset | Size | Field | Source |
+|-------:|-----:|-------|--------|
+| 0 | 4 | magic `"CFWP"` | constant |
+| 4 | 2 | version `u16 BE` (= 2) | constant |
+| 6 | 32 | `network_id` β sha256(network passphrase) | `env.ledger().network_id()` |
+| 38 | 32 | contract digest | sha256(ScVal XDR of `current_contract_address`) |
+| 70 | 32 | worker digest | sha256(ScVal XDR of the **stored** payment's worker) |
+| 102 | 32 | token digest | sha256(ScVal XDR of the **stored** payment's asset) |
+| 134 | 4 | `escrow_id` `u32 BE` | call argument |
+| 138 | 4 | `payment_id` `u32 BE` | call argument |
+| 142 | 16 | `amount` `i128 BE` | **stored** payment row |
+| 158 | 16 | `hours` `i128 BE` | call argument |
+| 174 | 8 | `start_date` `u64 BE` | **stored** payment row |
+| 182 | 8 | `end_date` `u64 BE` | **stored** payment row |
+| 190 | 8 | `nonce` `u64 BE` | call argument |
+
+**Addresses are hashed, not embedded.** An account `ScAddress` and a contract `ScAddress`
+serialize to different lengths, so hashing each to a fixed 32 bytes keeps the preimage
+fixed-width and trivially reproducible off-chain.
+
+**Fields marked *stored* are read from escrow state, never from call arguments.** This is
+what stops a caller retargeting a signature onto a different payee, asset, amount or
+period than the one the oracle actually saw.
+
+---
+
+## 3. What v1 got wrong
+
+v1 signed 32 bytes: `escrow_id β payment_id β hours β nonce`.
+
+That message named no chain, no contract, no payee, no asset and no amount. The
+consequences were concrete:
+
+| Substitution | Possible under v1? | Closed by |
+|---|---|---|
+| Replay a Testnet attestation against Mainnet | **Yes** | `network_id` |
+| Reuse a signature on a different deployment of the same contract | **Yes** | contract digest |
+| Redirect a payment to a different worker | **Yes** | worker digest |
+| Settle in a different asset than attested | **Yes** | token digest |
+| Change the amount paid after attestation | **Yes** | `amount` |
+| Reuse an attestation for a different pay period | **Yes** | period |
+| Replay the same attestation twice | No β nonce watermark | `nonce` |
+
+The TestnetβMainnet case is the sharpest one: the same escrow id and payment id on two
+networks is not a hypothetical, it is the *expected* outcome of testing before launch.
+
+---
+
+## 4. Replay protection
+
+The contract keeps a **monotonic nonce watermark** per escrow, in persistent storage.
+`submit_hours_proof` accepts a nonce only if it equals the current watermark, then
+increments it.
+
+This is stronger than a set of spent nonces, and cheaper: a `Vec` of consumed values grows
+without bound, costs more rent on every call, and eventually makes its own escrow
+unusable β while only ever rejecting *exact* duplicates. A watermark is O(1) forever and
+rejects every nonce at or below it.
+
+**Ordering matters.** The signature is verified **before** the nonce is consumed. Consuming
+first would let an attacker burn an escrow's nonce sequence by submitting garbage
+signatures.
+
+---
+
+## 5. Who may hold an oracle key
+
+Oracle keys are held in an **admin-managed on-chain registry**:
+
+```
+register_oracle_key(pubkey) // contract admin only
+revoke_oracle_key(pubkey) // contract admin only
+is_oracle_key_registered(pubkey) // read-only
+```
+
+`initialize_multi_sig_escrow` and `rotate_oracle_key` both refuse a key that is not
+registered β so rotation cannot be used as a back door around the registry.
+
+**Why this exists.** Previously the *manager* supplied the `oracle_pubkey` at escrow
+creation and could rotate it at will. A manager could therefore install their own key and
+sign their own "verified work" attestations, which made the proof-of-work gate procedural
+rather than cryptographic. Economic damage was bounded β custody is the manager's own
+funds β but the security property the product advertises did not hold.
+
+**Revocation is deliberately not retroactive.** It stops a key being named by *new*
+escrows and *new* rotations; it does not invalidate in-flight attestations, because doing
+so would strand escrows that are already funded. To retire a key from a live escrow, the
+manager calls `rotate_oracle_key`, which revokes that escrow's verified proofs and forces
+re-attestation under the new key.
+
+**Bootstrap exception.** A contract with no admin has no registry authority, so no key
+could ever satisfy the check. Rather than bricking such a deployment, an admin-less
+contract accepts any key β exactly the v1 trust model, and no weaker. The registry is
+enforced from the moment `init_admin` runs.
+
+---
+
+## 6. Work must justify payment
+
+The contract enforces:
+
+```
+hours Γ rate_per_hour == amount
+```
+
+Without it, `hours_logged` was decorative: the oracle could attest to any number of hours
+while `amount` β fixed at creation and already funded into custody β paid out regardless.
+
+Two corollaries:
+
+- `initialize_multi_sig_escrow` rejects an `amount` that is not a whole multiple of
+ `rate_per_hour`, so custody is never funded into an escrow that can never settle.
+- `/api/submit-batch` **derives** hours from the on-chain payment row rather than trusting
+ the upload, and refuses a CSV whose payees do not match the funded escrow.
+
+**Known limitation.** This makes hours whole numbers. Fractional-hour payroll (e.g. 40.04 h)
+needs a scaled-hours representation, which would be a v3 schema change. This is a real
+product constraint, not an oversight β it is recorded here rather than hidden.
+
+---
+
+## 7. Keeping signer and verifier in agreement
+
+Three implementations build this preimage:
+
+| Implementation | File |
+|---|---|
+| Contract (the verifier) | `contracts/core-flow/src/lib.rs` β `build_proof_message` |
+| Server signer | `src/lib/oracle/index.ts` β `buildProofMessage` |
+| CLI | `scripts/oracle-cli.mjs` β `buildProofMessage` |
+
+They are pinned to **one shared vector**, `docs/evidence/proof-vector-v2.json`, by a chain
+of three assertions:
+
+1. `test_proof_preimage_matches_cross_language_vector` (Rust) β the Rust layout equals the
+ vector produced by the JS CLI.
+2. `builds the exact preimage pinned by the cross-language vector` (vitest) β the TS
+ signer equals the same vector.
+3. `test_contract_preimage_matches_independent_implementation` (Rust) β the **contract's
+ own** builder equals an independent reimplementation written out longhand in the test
+ file.
+
+Step 3 matters: the test-side builder is deliberately a *second* implementation rather
+than a call into the contract's. Sharing the builder would make every signature test
+tautological β it would prove only that one function agrees with itself, and a field
+silently dropped from the preimage would still pass.
+
+**Better still: don't reimplement it.** The contract exposes
+
+```
+proof_preimage(escrow_id, payment_id, hours, nonce) -> Bytes
+```
+
+as a read-only call. A signer can simulate it and sign the returned bytes verbatim,
+eliminating drift by construction. `CoreFlowClient.getProofPreimage()` wraps it.
+
+---
+
+## 8. Using the CLI
+
+```bash
+# Print the oracle public key (hex) β this is what gets registered on-chain
+ORACLE_SECRET_KEY=<64 hex chars> node scripts/oracle-cli.mjs pubkey
+
+# Sign a batch
+ORACLE_SECRET_KEY=... node scripts/oracle-cli.mjs sign batch.json
+
+# Verify locally, and demonstrate replay + domain binding
+ORACLE_SECRET_KEY=... node scripts/oracle-cli.mjs verify batch.json signed.json
+```
+
+`batch.json`:
+
+```json
+{
+ "networkPassphrase": "Test SDF Network ; September 2015",
+ "contractId": "C...",
+ "escrowId": 1,
+ "startNonce": 0,
+ "payees": [
+ { "paymentId": 0, "worker": "G...", "token": "C...",
+ "amount": "10000", "hours": 40, "startDate": 1000, "endDate": 2000 }
+ ]
+}
+```
+
+`verify` prints, for the operator to see before broadcasting:
+
+```
+payment 0 nonce 0 VALID
+replay protection: nonce IS bound into the signature
+domain separation: network IS bound into the signature
+```
+
+The CLI requires `networkPassphrase` and `contractId` explicitly and refuses to default
+them β guessing which chain an attestation is for is exactly the failure v2 exists to
+prevent.
+
+---
+
+## 9. Key handling
+
+- `ORACLE_SECRET_KEY` is a 32-byte hex seed. Generate with `openssl rand -hex 32`.
+- It lives **only** on the server. It is never sent to the browser and never logged.
+- Only the *public* half reaches clients, via `GET /api/oracle/pubkey`.
+- Requesting an attestation requires a verified session **and** that the caller is the
+ escrow's **on-chain manager**, read live from the contract rather than from the request.
+- Rotating `ORACLE_SECRET_KEY` invalidates every escrow whose stored `oracle_pubkey` is
+ the old key. Those escrows need `rotate_oracle_key` (to a registered replacement) or
+ cancellation. Plan rotation accordingly.
diff --git a/docs/ORACLE_KEY_TRANSITION.md b/docs/ORACLE_KEY_TRANSITION.md
new file mode 100644
index 0000000..326e50c
--- /dev/null
+++ b/docs/ORACLE_KEY_TRANSITION.md
@@ -0,0 +1,203 @@
+# Oracle registry transition β runbook
+
+> **Status: PREPARED, NOT EXECUTED.** Awaiting the owner's confirmation of which
+> public key is the post-rotation one. No `register_oracle_key` or
+> `revoke_oracle_key` transaction has been sent.
+
+## Why this is blocked on a human
+
+The live funding run stopped at simulation with `Error(Contract, #16)`
+`OracleKeyNotRegistered`. The read-only facts:
+
+| Key | Registered on `CDN4FIKLβ¦VAQRG5F4` |
+|---|---|
+| `3b9d395a725ba0be4c476a0504540fb8dd70a278fac140a20e0d74cd7f41ae44` β in the local environment | **false** |
+| `f42a48839e48d58e6628f5d096ee859e635b056be580bdcc68d620e2a2badae0` β recorded at deployment | **true** |
+
+The contract trusts the deployment-time key and not the current environment's. That
+is consistent with the oracle secret having been rotated locally without the new
+public key being registered.
+
+**Which key is the post-rotation one cannot be determined from the registry
+alone.** The naming suggests an answer and the naming is not evidence. A cheaper
+question may be decidable from evidence on disk β see the next section β but it
+does not change who authorizes the transaction. If `f42a4883β¦` is the key
+`prodenv.txt` exposed, then registering `3b9d395aβ¦` is correct and revoking
+`f42a4883β¦` is urgent. If the mapping is the other way round, registering
+`3b9d395aβ¦` would authorize a credential an attacker may hold to sign work
+attestations β precisely the attack the admin-managed registry exists to prevent.
+
+So this waits. A manager cannot install their own oracle; neither can an agent.
+
+## A determination that may not need anyone's memory
+
+The section above asks the wrong question. "Which key is *newer*" is a fact about
+history, recoverable only from whoever performed the rotation. But the action does
+not depend on age β it depends on **which key is exposed**, and that is a fact
+about a file still sitting on disk.
+
+`prodenv.txt` contains exactly one `ORACLE_SECRET_KEY` line, and the public half
+is derived from it deterministically
+([`src/lib/oracle/index.ts:74`](../src/lib/oracle/index.ts)). Deriving that public
+key names the exposed key from evidence rather than from naming.
+
+**The owner runs this, not an agent** β the secret would otherwise pass through an
+agent's process, and the standing rule is that it does not. Load the
+`ORACLE_SECRET_KEY` value from `prodenv.txt` into a shell variable, then derive
+and print only the **public** key with `Keypair.fromRawEd25519Seed`, exactly as
+`getOraclePublicKeyHex()` does. Nothing secret is displayed.
+
+Read the single line it prints:
+
+| Output | Meaning | Action |
+|---|---|---|
+| `f42a4883β¦` | The **registered** key is the exposed one. The local environment holds a different secret β a replacement was generated and never registered. | Register `3b9d395aβ¦`, then revoke `f42a4883β¦`. The urgency is real: an exposed key is currently trusted. |
+| `3b9d395aβ¦` | The **local environment's** key is the exposed one. | Do **not** register `3b9d395aβ¦`. Generate a fresh oracle secret, register its public key, revoke both. |
+| neither | A third key is in production; this file settles nothing about the two candidates. | Still owner-gated. Treat both as suspect and prefer a fresh key. |
+
+Note which way the risk falls. `prodenv.txt` is a **production** dump, and
+production is Mainnet v1 while this blocker concerns the v2 Testnet contract, so
+"neither" is a realistic outcome β the two deployments need not share an oracle.
+That makes this a cheap check rather than a guaranteed answer: one command either
+decides it or eliminates the file from consideration.
+
+In every branch the decision stays the owner's, and in none of them does guessing
+from key names become acceptable.
+
+## Order, and why
+
+```
+1. register(new) β first
+2. verify(new) == true
+3. revoke(old) β only after 2 succeeds
+4. verify(old) == false
+```
+
+Registering first means there is never a window in which **no** key is registered.
+Revoking first would leave the contract unable to accept any attestation, and would
+strand every escrow awaiting one.
+
+## Steps
+
+Each step prints only public values: network, contract, admin address, the oracle
+**public** key, and the operation. No secret is read or printed at any point.
+
+### 0. Preflight
+
+```bash
+npm run check:env # must report profile: LOCAL
+stellar keys address coreflow-v2-admin
+stellar contract invoke --id "$CONTRACT" --source coreflow-v2-admin \
+ --network testnet --send=no -- get_admin
+```
+
+`get_admin` must equal the `coreflow-v2-admin` address. If it does not, stop: the
+identity cannot perform this transition.
+
+### 1. Register the new key
+
+```bash
+stellar contract invoke --id "$CONTRACT" --source coreflow-v2-admin \
+ --network testnet -- register_oracle_key --pubkey "$NEW_PUBKEY"
+```
+
+Record the transaction hash.
+
+### 2. Verify registration from chain state, not from the exit code
+
+```bash
+stellar contract invoke --id "$CONTRACT" --source coreflow-v2-admin \
+ --network testnet --send=no -- is_oracle_key_registered --pubkey "$NEW_PUBKEY"
+# must print: true
+```
+
+**If this is not `true`, STOP. Do not revoke the old key.** A failed registration
+followed by a revocation leaves the contract with no usable oracle.
+
+### 3. Revoke the old key
+
+```bash
+stellar contract invoke --id "$CONTRACT" --source coreflow-v2-admin \
+ --network testnet -- revoke_oracle_key --pubkey "$OLD_PUBKEY"
+```
+
+Record the transaction hash.
+
+### 4. Verify the final registry state
+
+```bash
+is_oracle_key_registered(NEW) == true
+is_oracle_key_registered(OLD) == false
+```
+
+**If the post-state does not match, STOP and report the exact chain state.** Do not
+attempt a corrective transaction without review.
+
+### 5. Re-run the read-only preflight
+
+```bash
+npm run check:env
+node scripts/validate-testnet-v2.mjs
+```
+
+## Out of scope for this transition
+
+Not to be touched: the contract **admin**, the **pause** state, the **upgrade**
+state, escrow data, and anything outside the oracle registry. Two invocations only.
+
+## What this does and does not accomplish
+
+It makes the contract trust the current oracle key and stop trusting the previous
+one. It does **not** complete the π΄ outstanding secret rotation: `AUTH_SECRET`,
+`BOOTSTRAP_SECRET`, the cron/indexer secrets and the database credential are
+separate, and remain the owner's to rotate. See [BACKLOG.md](BACKLOG.md).
+
+## Execution
+
+One reproducible pass, which emits the evidence record itself rather than relying on
+a narrated summary afterwards:
+
+```bash
+# read-only checks only
+node scripts/oracle-key-transition.mjs --new --old --confirm-mapping --dry-run
+
+# execute
+node scripts/oracle-key-transition.mjs --new --old --confirm-mapping
+```
+
+[`scripts/oracle-key-transition.mjs`](../scripts/oracle-key-transition.mjs) refuses
+unless both keys are named AND `--confirm-mapping` is passed, so it cannot run by
+accident. It verifies `get_admin` matches the signing identity, registers before
+revoking, reads chain state after each step rather than trusting the CLI exit code,
+and stops β writing the record β if the new key is not registered after registration
+or if the final state is not `new=registered, old=not registered`.
+
+**Verified:** it refuses without `--confirm-mapping` (exit 1) and refuses a
+malformed key. The dry-run path is deliberately unexercised, because running it would
+mean asserting a key mapping that has not been confirmed.
+
+## Evidence to record on completion
+
+Written to `docs/evidence/oracle-key-transition.json` by the script:
+
+```
+Network: Stellar Testnet
+Contract: CDN4FIKLβ¦VAQRG5F4
+Admin:
+
+Old oracle: f42aβ¦
+New oracle: 3b9dβ¦
+
+Registration TX:
+Post-registration: new = registered
+ old = registered
+
+Revocation TX:
+Post-revocation: new = registered
+ old = not registered
+```
+
+Both post-states are read from the contract, so the record states what the chain
+says rather than what the commands were asked to do. The intermediate
+post-registration state is captured deliberately: it is the evidence that there was
+never a window in which no oracle key was registered.
diff --git a/docs/PAYMENT_STATE_MACHINE.md b/docs/PAYMENT_STATE_MACHINE.md
new file mode 100644
index 0000000..1193d22
--- /dev/null
+++ b/docs/PAYMENT_STATE_MACHINE.md
@@ -0,0 +1,333 @@
+# CoreFlow Payment State Machine
+
+**16 states Β· 38 declared transitions.** The tables below are generated from
+`src/lib/payments/state-machine.ts`, which is the single source of truth. If they
+disagree with the code, the code is right and this document is stale.
+
+---
+
+## 1. The one rule that matters
+
+> **Only a chain observer may move a payment to `PAID`.**
+
+There is no user-initiated path to `PAID`, and no system-initiated one. The only
+actors that can assert settlement are the **indexer** (reading the contract's
+event log) and the **reconciler** (reading live contract state). Everything else
+β a route handler, an optimistic UI update, a retry β is structurally incapable
+of it.
+
+Two corollaries that are easy to get wrong, so they are named explicitly:
+
+- **`SUBMITTING` is not paid.** A transaction has been built and signed. It may
+ never reach the network.
+- **`CONFIRMING` is not paid.** The network accepted it. It may still fail at
+ ledger close.
+
+A payroll product that lets the frontend manufacture "settled" is worse than one
+with no status at all, because it is confidently wrong about money.
+
+---
+
+## 2. Chain vs. database authority
+
+| Concern | Authority |
+|---|---|
+| Token movement, settlement, final transaction result | **Chain** |
+| Contract authorization, approvals, oracle verification | **Chain** |
+| Organizations, projects, workers, CSV provenance | Database |
+| Workflow metadata, search, filtering, UX state | Database |
+| Audit projection, reconciliation state | Database |
+
+The database is a **projection**. Where the two disagree, the disagreement is
+recorded as a `ReconciliationFinding` and surfaced β the losing side is not
+quietly rewritten, because overwriting it destroys the only evidence the two ever
+diverged.
+
+---
+
+## 3. States
+
+| State | Label | Meaning | Exits | Tx may exist | Needs attention |
+|---|---|---|---|---|---|
+| `DRAFT` | **Draft** | Not yet submitted. Still editable. | 2 exit(s) | no | no |
+| `VALIDATING` | **Validating** | Checking recipient, amount, asset and hours. | 4 exit(s) | no | no |
+| `AWAITING_ORACLE` | **Awaiting oracle verification** | Funded on-chain. Waiting for a signed work attestation. | 3 exit(s) | no | no |
+| `ORACLE_VERIFIED` | **Work verified** | The contract accepted the oracle attestation for this payment. | 2 exit(s) | yes | no |
+| `AWAITING_MANAGER` | **Awaiting manager approval** | Needs the managerβs on-chain signature. | 4 exit(s) | yes | yes |
+| `AWAITING_FINANCE` | **Awaiting finance approval** | Manager approved. Needs the separate finance signature. | 4 exit(s) | yes | yes |
+| `READY_TO_SETTLE` | **Ready to settle** | Both approvals are on-chain. Settlement can be submitted. | 3 exit(s) | yes | yes |
+| `SUBMITTING` | **Submitting to Stellar** | Building and signing the settlement transaction. Not yet paid. | 3 exit(s) | yes | no |
+| `CONFIRMING` | **Confirming on Stellar** | Submitted to the network. Awaiting ledger confirmation β not yet paid. | 3 exit(s) | yes | no |
+| `PAID` | **Paid** | Settled on-chain and confirmed. Funds reached the recipient. | terminal | yes | no |
+| `REJECTED` | **Rejected** | An approver declined this payment. | terminal | no | no |
+| `CANCELLED` | **Cancelled** | Cancelled before settlement. Escrowed funds were refunded. | terminal | yes | no |
+| `EXPIRED` | **Expired** | The approval or attestation window lapsed before settlement. | terminal | no | yes |
+| `SUBMISSION_FAILED` | **Submission failed** | The transaction never reached Stellar. Safe to retry. | 3 exit(s) | no | yes |
+| `SETTLEMENT_FAILED` | **Settlement failed** | The transaction reached Stellar and failed. Needs reconciliation before retry. | 3 exit(s) | yes | yes |
+| `RECONCILIATION_REQUIRED` | **Reconciliation required** | CoreFlowβs records and the chain disagree. An operator must resolve it. | 4 exit(s) | yes | yes |
+
+**Terminal states:** `PAID`, `REJECTED`, `CANCELLED`, `EXPIRED`. No transition
+out of these is declared, and `checkTransition` refuses any attempt with
+`TERMINAL`.
+
+**"Tx may exist"** gates transaction display. The UI shows an explorer link only
+where this is `yes` AND a hash is actually present β a link on a payment that was
+never submitted invites a reader to believe something settled.
+
+---
+
+## 4. Failure states are distinct on purpose
+
+A single generic `FAILED` cannot answer the only question that matters after a
+failure: *is it safe to retry?*
+
+| State | What happened | Retry safe? |
+|---|---|---|
+| `SUBMISSION_FAILED` | Never reached the network β build, simulate, sign or RPC failure | **Yes.** Nothing was submitted, and the on-chain approvals still stand. A user may retry. |
+| `SETTLEMENT_FAILED` | Reached the chain and failed there | **Not until reconciled.** What it did on-chain must be established first. Deliberately *not* a user transition. |
+| `RECONCILIATION_REQUIRED` | Database and chain disagree | **No.** Requires operator resolution; never cleared automatically. |
+| `EXPIRED` | The attestation or approval window lapsed | N/A β terminal. |
+| `REJECTED` | An approver declined | N/A β terminal. |
+| `CANCELLED` | Cancelled before settlement, custody refunded | N/A β terminal. |
+
+`POST /api/payments/:id/retry` enforces this: called on a `SETTLEMENT_FAILED`
+payment it returns **409** with code `RECONCILIATION_FIRST` rather than doing
+something riskier than the caller asked for.
+
+---
+
+## 5. Transition diagram
+
+```mermaid
+stateDiagram-v2
+ DRAFT -->|user| VALIDATING
+ DRAFT -->|user| CANCELLED
+ VALIDATING -->|system| DRAFT
+ VALIDATING -->|indexer/reconciler| AWAITING_ORACLE
+ VALIDATING -->|user| REJECTED
+ VALIDATING -->|user| CANCELLED
+ AWAITING_ORACLE -->|indexer/reconciler| ORACLE_VERIFIED
+ AWAITING_ORACLE -->|indexer/reconciler| CANCELLED
+ AWAITING_ORACLE -->|system| EXPIRED
+ ORACLE_VERIFIED -->|system/indexer| AWAITING_MANAGER
+ ORACLE_VERIFIED -->|indexer/reconciler| CANCELLED
+ AWAITING_MANAGER -->|indexer/reconciler| AWAITING_FINANCE
+ AWAITING_MANAGER -->|user| REJECTED
+ AWAITING_MANAGER -->|indexer/reconciler| CANCELLED
+ AWAITING_MANAGER -->|system| EXPIRED
+ AWAITING_FINANCE -->|indexer/reconciler| READY_TO_SETTLE
+ AWAITING_FINANCE -->|user| REJECTED
+ AWAITING_FINANCE -->|indexer/reconciler| CANCELLED
+ AWAITING_FINANCE -->|system| EXPIRED
+ READY_TO_SETTLE -->|user| SUBMITTING
+ READY_TO_SETTLE -->|indexer/reconciler| CANCELLED
+ SUBMITTING -->|system| CONFIRMING
+ SUBMITTING -->|system| SUBMISSION_FAILED
+ CONFIRMING -->|indexer/reconciler| PAID
+ READY_TO_SETTLE -->|indexer/reconciler| PAID
+ SUBMITTING -->|indexer/reconciler| PAID
+ CONFIRMING -->|indexer/system| SETTLEMENT_FAILED
+ CONFIRMING -->|reconciler/system| RECONCILIATION_REQUIRED
+ SUBMISSION_FAILED -->|user| READY_TO_SETTLE
+ SUBMISSION_FAILED -->|user| CANCELLED
+ SUBMISSION_FAILED -->|reconciler| RECONCILIATION_REQUIRED
+ SETTLEMENT_FAILED -->|reconciler/system| RECONCILIATION_REQUIRED
+ SETTLEMENT_FAILED -->|indexer/reconciler| PAID
+ SETTLEMENT_FAILED -->|reconciler| READY_TO_SETTLE
+ RECONCILIATION_REQUIRED -->|reconciler/indexer| PAID
+ RECONCILIATION_REQUIRED -->|reconciler| READY_TO_SETTLE
+ RECONCILIATION_REQUIRED -->|reconciler| SETTLEMENT_FAILED
+ RECONCILIATION_REQUIRED -->|user| CANCELLED
+```
+
+---
+
+## 6. Complete transition table
+
+Anything absent from this table is invalid. The test suite enumerates every
+undeclared `(from, to)` pair for every actor kind and asserts rejection β a state
+machine tested only on its happy paths will happily accept `DRAFT β PAID`.
+
+| From | To | Who may | Why |
+|---|---|---|---|
+| `DRAFT` | `VALIDATING` | user (OWNER, ADMIN, MANAGER) | Submitted for validation by whoever is preparing the batch. |
+| `DRAFT` | `CANCELLED` | user (OWNER, ADMIN, MANAGER) | A draft row is discarded before anything is funded. |
+| `VALIDATING` | `DRAFT` | system | Validation failed; the row returns to editable rather than stalling. |
+| `VALIDATING` | `AWAITING_ORACLE` | indexer Β· reconciler | The escrow is funded on-chain. Only the indexer asserts this, because it means custody actually moved. |
+| `VALIDATING` | `REJECTED` | user (OWNER, ADMIN, MANAGER, FINANCE) | Declined during review, before funding. |
+| `VALIDATING` | `CANCELLED` | user (OWNER, ADMIN, MANAGER) | Withdrawn during review. |
+| `AWAITING_ORACLE` | `ORACLE_VERIFIED` | indexer Β· reconciler | A `hours/submit` event was observed, meaning the contract ACCEPTED an Ed25519 attestation for this payment. Requesting an attestation is not the same as the chain verifying one. |
+| `AWAITING_ORACLE` | `CANCELLED` | indexer Β· reconciler | The escrow was cancelled on-chain; custody refunded. |
+| `AWAITING_ORACLE` | `EXPIRED` | system | The attestation window lapsed without a proof. |
+| `ORACLE_VERIFIED` | `AWAITING_MANAGER` | system Β· indexer | Proof in hand; the payment enters the approval chain. |
+| `ORACLE_VERIFIED` | `CANCELLED` | indexer Β· reconciler | The escrow was cancelled on-chain. |
+| `AWAITING_MANAGER` | `AWAITING_FINANCE` | indexer Β· reconciler | An `approve/manager` event was observed. The approval is the on-chain signature, not the API call that prompted it. |
+| `AWAITING_MANAGER` | `REJECTED` | user (OWNER, ADMIN, MANAGER) | The manager declined. |
+| `AWAITING_MANAGER` | `CANCELLED` | indexer Β· reconciler | The escrow was cancelled on-chain. |
+| `AWAITING_MANAGER` | `EXPIRED` | system | The approval window lapsed. |
+| `AWAITING_FINANCE` | `READY_TO_SETTLE` | indexer Β· reconciler | An `approve/finance` event was observed from the distinct finance key. |
+| `AWAITING_FINANCE` | `REJECTED` | user (OWNER, ADMIN, FINANCE) | Finance declined. MANAGER is absent here on purpose: a manager who could exercise the finance decision would collapse the separation of duties. |
+| `AWAITING_FINANCE` | `CANCELLED` | indexer Β· reconciler | The escrow was cancelled on-chain. |
+| `AWAITING_FINANCE` | `EXPIRED` | system | The approval window lapsed. |
+| `READY_TO_SETTLE` | `SUBMITTING` | user (OWNER, ADMIN, MANAGER, FINANCE) | A settlement transaction is being built and signed. |
+| `READY_TO_SETTLE` | `CANCELLED` | indexer Β· reconciler | The escrow was cancelled before settlement. |
+| `SUBMITTING` | `CONFIRMING` | system | The network accepted the transaction; it awaits ledger close. |
+| `SUBMITTING` | `SUBMISSION_FAILED` | system | The transaction never reached the network (build, simulate, sign or RPC failure). Nothing was submitted, so a retry cannot double-pay. |
+| `CONFIRMING` | `PAID` | indexer Β· reconciler | A confirmed `payment/paid` event was observed in the contract log, which the contract emits only after the SAC transfer for that payee succeeded. |
+| `READY_TO_SETTLE` | `PAID` | indexer Β· reconciler | Settled without this application driving the submission β by the CLI, a validation script, or another client. The chain is authoritative for settlement, so a `payment/paid` event is accepted from an approved payment even though we never recorded a SUBMITTING step. Refusing would strand every externally-settled payment in RECONCILIATION_REQUIRED, which is noise rather than safety. |
+| `SUBMITTING` | `PAID` | indexer Β· reconciler | Confirmation arrived before our own SUBMITTING β CONFIRMING update landed. A real race, and the log is the side that knows. |
+| `CONFIRMING` | `SETTLEMENT_FAILED` | indexer Β· system | The transaction reached the chain and failed there. |
+| `CONFIRMING` | `RECONCILIATION_REQUIRED` | reconciler Β· system | Confirmation timed out or the result was ambiguous. The outcome is genuinely unknown, and saying so beats guessing either way. |
+| `SUBMISSION_FAILED` | `READY_TO_SETTLE` | user (OWNER, ADMIN, MANAGER, FINANCE) | Retry. Safe without reconciliation precisely because nothing reached the chain; the approvals that authorized it are still on-chain and intact. |
+| `SUBMISSION_FAILED` | `CANCELLED` | user (OWNER, ADMIN, MANAGER) | Abandoned after a failed submission. |
+| `SUBMISSION_FAILED` | `RECONCILIATION_REQUIRED` | reconciler | Reconciliation found chain activity for a submission we recorded as never sent β our record of "never submitted" was wrong. |
+| `SETTLEMENT_FAILED` | `RECONCILIATION_REQUIRED` | reconciler Β· system | Establish what the chain actually did before anything is retried. |
+| `SETTLEMENT_FAILED` | `PAID` | indexer Β· reconciler | A `payment/paid` event arrived for a payment we had recorded as failed. The log wins: our failure record was wrong. |
+| `SETTLEMENT_FAILED` | `READY_TO_SETTLE` | reconciler | Reconciliation confirmed the chain did NOT settle. Deliberately not a user transition: retrying a transaction that reached the chain requires first establishing what it did, and a human clicking retry has not. |
+| `RECONCILIATION_REQUIRED` | `PAID` | reconciler Β· indexer | Chain evidence confirms settlement. |
+| `RECONCILIATION_REQUIRED` | `READY_TO_SETTLE` | reconciler | Chain evidence confirms no settlement occurred; approvals still stand. |
+| `RECONCILIATION_REQUIRED` | `SETTLEMENT_FAILED` | reconciler | Chain evidence confirms the settlement attempt failed. |
+| `RECONCILIATION_REQUIRED` | `CANCELLED` | user (OWNER, ADMIN) Β· reconciler | An administrator closes out an unrecoverable payment. |
+
+---
+
+## 7. Actors
+
+| Actor | Authority | Examples |
+|---|---|---|
+| `user` | An organization role, resolved from `OrgMember` on every request | approve, reject, cancel a draft, submit, retry |
+| `indexer` | The contract's **event log** | funding observed, oracle proof accepted, approvals observed, settlement confirmed |
+| `reconciler` | **Live contract state** | catching the database up, recording disagreements |
+| `system` | Internal process with no chain evidence | validation outcome, submission accepted/failed, window expiry |
+
+`indexer` and `reconciler` are separate even though both are machines: the
+indexer reports what the log says, while the reconciler *adjudicates* a
+disagreement. Collapsing them would let routine ingestion silently resolve
+discrepancies a human should see.
+
+### Role permissions
+
+| Role | May |
+|---|---|
+| `OWNER`, `ADMIN` | Everything a manager or finance approver may, plus flagging for reconciliation and closing out unrecoverable payments |
+| `MANAGER` | Submit for validation, record the manager approval, reject pre-funding, cancel a draft, submit settlement, retry |
+| `FINANCE` | Record the finance approval, reject at the finance stage, submit settlement, retry |
+| `VIEWER` | Read only β no transition permits a VIEWER |
+| `WORKER` | No payment reads, no transitions. A payee cannot advance their own payment. |
+
+**Separation of duties.** `AWAITING_FINANCE β REJECTED` excludes `MANAGER`
+deliberately: a manager able to exercise the finance decision would collapse the
+dual-approval gate, which is the product's central claim. `approvePayment`
+derives the approval role from **membership, never from the request body** β a
+`{role: 'FINANCE'}` field would let a manager satisfy both halves alone. An
+`OWNER` acting for whichever approval is outstanding cannot supply both: the
+second attempt is refused with 409 once the same wallet holds one.
+
+---
+
+## 8. Idempotency and retries
+
+| Scenario | Behaviour |
+|---|---|
+| Repeated API action | A transition to the state a payment already holds returns `changed: false`, not an error |
+| Repeated settlement submission | Keyed by `Idempotency-Key`. A repeat returns the **original attempt**; it does not submit again |
+| Same key, different payment | 409 β a key is bound to one payment |
+| Duplicate chain event | Keyed by RPC paging token; re-seen tokens are skipped |
+| Event replayed under a new token | `Payment(escrowId, onChainPaymentIndex)` is unique, so no second payment can be created |
+| Indexer restart | Cursor is per `(contract, network)` and advances only past committed events |
+| RPC timeout, transaction actually landed | `reconcileFailedTransactions` detects it, opens a `FAILED_TX_ACTUALLY_SUCCEEDED` finding, and the finding text says **do not retry** |
+| Browser refresh during confirmation | State lives in the database; `CONFIRMING` is shown until the indexer observes the result |
+
+**Concurrency.** Every transition is a compare-and-swap on the current state
+(`where: { id, state: from }`). Two approvals racing, or an indexer running while
+a user acts, would otherwise both read the same prior state and both write β
+losing one transition and its audit entry. A zero-row update returns 409
+`CONCURRENT_MODIFICATION` rather than overwriting someone else's work.
+
+---
+
+## 9. Reconciliation
+
+Two disagreements are acted on automatically, because in both the chain's answer
+is unambiguous:
+
+| Finding | Action |
+|---|---|
+| Chain settled, database behind | Database advanced to `PAID` β the money moved regardless of our record |
+| Database claims `PAID`, chain disagrees | `DB_PAID_CHAIN_NOT` finding opened. `PAID` is terminal, so the state is **not** rewritten; the table is not weakened to permit an exit |
+
+Everything else is recorded and left for an operator:
+
+`AMOUNT_MISMATCH` Β· `RECIPIENT_MISMATCH` Β· `MISSING_ON_CHAIN` Β·
+`ORPHAN_ON_CHAIN` Β· `CHAIN_PAID_DB_NOT` Β· `FAILED_TX_ACTUALLY_SUCCEEDED`
+
+An **unreadable** escrow is explicitly not recorded as agreement β assuming "all
+fine" when the chain cannot be read is how silent drift accumulates. Re-running
+reconciliation does not multiply findings for one unchanged discrepancy; a noisy
+queue gets ignored.
+
+---
+
+## 10. Audit
+
+Every transition writes an `AuditEvent` carrying: event type, actor (address for
+a person, `actorSystem` for a machine), organization, payment/batch/escrow
+references, **previous and new state**, transaction hash where applicable, and
+metadata including the transition's declared reason.
+
+Nothing in the application updates or deletes these rows. A "current status only"
+column cannot answer how a payment reached that status β which is the question
+asked whenever something has gone wrong.
+
+---
+
+## 11. Why a batch has no stored status
+
+`PayrollBatch` deliberately has **no** aggregate status column. A stored rollup is
+a second copy of mutable truth and will eventually disagree with the payments it
+claims to summarize β and when it does, it is the copy people have already acted
+on.
+
+`rollupBatch()` derives it, and reports a batch containing **any** broken payment
+as broken rather than by majority. The one failed payment inside an
+otherwise-paid batch is exactly the one a finance team needs to see.
+
+---
+
+## 12. Known limitation: approval granularity is per-escrow
+
+On-chain, `manager_approve` and `finance_approve` take an **escrow id**, not a
+payment id. One approval therefore advances **every payment in that escrow**.
+
+The projection mirrors this faithfully rather than pretending otherwise: the
+indexer moves all payments in the escrow that are waiting on that specific
+approver, and `Approval` rows are written per payment so the audit trail records
+who approved what β but the *decision* was made once, at escrow granularity.
+
+**What this means in practice.** A payroll batch is approved as a batch. A
+reviewer cannot approve eleven contractors and hold one back; they would have to
+cancel the escrow and create a new one without that payee.
+
+**Why it is not being changed now.** Per-payment approval requires a contract
+change β new entry points, per-payment approval state, and a reworked
+`pay_batch` gate. That is a v3 decision driven by the product model, not a bug to
+patch. Changing the settlement authorization path casually, on a contract holding
+custody, would be a worse trade than living with batch-level granularity and
+saying so.
+
+**When it will matter.** Larger batches. At twelve payees the blast radius of
+"approve all or none" is tolerable; at two hundred it is not. The likely shape is
+batch approval *and* an optional per-payment hold, so the common case stays one
+signature.
+
+Tracked as an open product decision, not as completed work.
+
+---
+
+## 13. Known limitation: whole hours
+
+v2 requires `hours Γ rate == amount` with integer hours. `$1,001` at `$25/h` is
+40.04 hours and is **rejected at escrow creation** rather than rounded.
+Fractional-hour payroll needs a versioned scaled-hours schema (v3) β e.g.
+`hours_scaled = 4004, scale = 100`. Hours and amounts are never silently rounded
+to make a figure fit.
diff --git a/docs/PRODUCTION_DATABASE_REMEDIATION.md b/docs/PRODUCTION_DATABASE_REMEDIATION.md
new file mode 100644
index 0000000..cc1ab25
--- /dev/null
+++ b/docs/PRODUCTION_DATABASE_REMEDIATION.md
@@ -0,0 +1,329 @@
+# Production Database Remediation β Proposal Only
+
+**Status: PROPOSED. NOT EXECUTED.**
+**Nothing in this document has been run against the production database.**
+
+Discovered 2026-09-11 during a local environment audit. The only commands run
+against production were read-only `SELECT`s against `information_schema` and
+`_prisma_migrations`, described in [Evidence](#evidence-how-this-was-observed).
+
+This document exists to be reviewed *before* anyone acts. Do not treat the
+production database as repaired until an authorized production deployment has
+actually done so and its output has been recorded here.
+
+---
+
+## 1. Database state discovered
+
+| | |
+|---|---|
+| Host | `db.prisma.io` (managed Prisma Postgres) |
+| Database | `postgres` |
+| Reached via | `DATABASE_URL` as it appeared in the local `.env` / `.env.local` after a `vercel env pull` |
+| Schema | `public` |
+| Tables | 11 |
+
+Tables present:
+
+```
+AuditLog, AuthChallenge, ChainEvent, Escrow, IndexerCursor,
+Invitation, OracleAttestation, Session, TimeLog, User,
+_prisma_migrations
+```
+
+This is the **CoreFlow v1** schema. None of the v2 tables exist β
+no `Organization`, `OrgMember`, `PayrollBatch`, `Payment`, `Approval`,
+`BlockchainTransaction`, `AuditEvent`, `ReconciliationFinding`,
+`ReconciliationRun`, `Project`, `Worker`.
+
+### Consequence, stated plainly
+
+**No part of the v2 hardening is deployed.** Multi-tenancy, the payment state
+machine, reconciliation, per-payment indexing and dual approval all depend on
+tables that do not exist in production. The live site runs v1 against v1 tables.
+
+---
+
+## 2. Migration history in production
+
+| # | Migration | State |
+|---|---|---|
+| 1 | `20260616142115_init` | applied |
+| 2 | `20260616143739_add_escrow_token` | applied |
+| 3 | `20260616144425_add_oracle_attestation` | applied |
+| 4 | `20260616145906_add_indexer_tables` | applied |
+| 5 | `20260616150704_add_audit_log` | applied |
+| 6 | `20260801000000_initial_schema` | **FAILED** |
+
+### The failed migration
+
+| Field | Value |
+|---|---|
+| `migration_name` | `20260801000000_initial_schema` |
+| `started_at` | `2026-07-31T19:06:34.072Z` |
+| `finished_at` | `null` |
+| `rolled_back_at` | `null` |
+| `applied_steps_count` | `0` |
+
+`finished_at` null with `rolled_back_at` null is Prisma's representation of a
+**failed migration**. Any subsequent `prisma migrate deploy` against this
+database aborts with **P3009** without attempting anything further, so the
+deployment pipeline's migrate step is currently broken.
+
+`applied_steps_count: 0` is load-bearing: **not one statement was applied.** The
+production schema was not partially modified. There is no half-built table and
+nothing to clean up.
+
+---
+
+## 3. Why it failed, and why the obvious fix is the wrong one
+
+The repository's migration history does **not** continue production's history.
+It is a **squashed baseline** that recreates the same v1 schema from zero:
+
+```
+$ grep -oE 'CREATE TABLE "[A-Za-z]+"' \
+ prisma/migrations/20260801000000_initial_schema/migration.sql | sort -u
+
+CREATE TABLE "AuditLog" CREATE TABLE "IndexerCursor"
+CREATE TABLE "AuthChallenge" CREATE TABLE "Invitation"
+CREATE TABLE "ChainEvent" CREATE TABLE "OracleAttestation"
+CREATE TABLE "Escrow" CREATE TABLE "Session"
+CREATE TABLE "IndexerCursor" CREATE TABLE "TimeLog"
+ CREATE TABLE "User"
+```
+
+Those are **exactly the ten tables production already has**, built there by
+migrations 1β5. So the migration failed on its first statement with
+`relation "..." already exists`, which is precisely what `applied_steps_count: 0`
+records.
+
+### `migrate resolve --rolled-back` would not fix this
+
+It is the natural reading of a failed migration, and it is safe here β with zero
+applied steps there is genuinely nothing to roll back, so the marker would be
+accurate. But it resolves nothing:
+
+1. `migrate resolve --rolled-back 20260801000000_initial_schema` clears the
+ failure flag.
+2. The next `migrate deploy` sees the migration as pending, **runs it again**,
+ and it fails **identically** on the same first `CREATE TABLE`.
+
+The failure is not a transient error that rollback-and-retry clears. It is a
+**history mismatch**: two different migration histories describing the same
+schema. Retrying cannot resolve that.
+
+### The appropriate action is baselining
+
+`20260801000000_initial_schema` describes a schema state production **is already
+in**. That is the textbook definition of a baseline migration, and Prisma's
+mechanism for it is `migrate resolve --applied`:
+
+1. `migrate resolve --applied 20260801000000_initial_schema` records it as
+ present **without executing it** β true, because migrations 1β5 already built
+ that schema.
+2. `migrate deploy` then proceeds to migrations 2β8, which are the real v1 β v2
+ changes and whose statements have never run in production.
+
+This is only correct if production's schema genuinely matches what the baseline
+would have created. **That equivalence must be verified, not assumed** β see
+step 4.3. A baseline asserted over a schema that has drifted will make later
+migrations fail in harder-to-diagnose ways.
+
+---
+
+## 4. Proposed remediation
+
+Every step is to be performed by an authorized operator against production,
+deliberately. Nothing here is wired into any script, and no `npm` task reaches
+production.
+
+### 4.1 Freeze
+
+Stop writes for the duration: pause Vercel Cron (the indexer hits
+`GET /api/indexer/run`) and avoid deploys. Migrations 2β8 retype columns and add
+constraints; concurrent writes during that window produce partial states that
+are significantly harder to reason about than a short maintenance pause.
+
+### 4.2 Snapshot β mandatory, verified before proceeding
+
+Take a full backup and **confirm it is restorable**. An unverified backup is not
+a backup.
+
+```bash
+# Structure + data, custom format.
+pg_dump --format=custom --no-owner --no-privileges \
+ --file=coreflow-prod-$(date -u +%Y%m%dT%H%M%SZ).dump \
+ "$PRODUCTION_DATABASE_URL"
+
+# Prove it is readable and contains the expected objects.
+pg_restore --list coreflow-prod-*.dump | grep -c 'TABLE DATA'
+```
+
+Also capture the managed provider's own point-in-time snapshot if available, and
+**record the row counts** migrations 2β8 will touch, so the verification in 4.5
+has something to compare against:
+
+```sql
+SELECT 'User' AS t, count(*) FROM "User"
+UNION ALL SELECT 'Escrow', count(*) FROM "Escrow"
+UNION ALL SELECT 'TimeLog', count(*) FROM "TimeLog"
+UNION ALL SELECT 'OracleAttestation', count(*) FROM "OracleAttestation"
+UNION ALL SELECT 'ChainEvent', count(*) FROM "ChainEvent"
+UNION ALL SELECT 'AuditLog', count(*) FROM "AuditLog";
+```
+
+### 4.3 Verify the baseline claim β BLOCKING
+
+Do not run step 4.4 until this produces an empty diff. This needs a shadow
+database, so it is **currently blocked on local Postgres** (see
+[ENVIRONMENTS.md](ENVIRONMENTS.md)).
+
+```bash
+# Does production's live schema match the state the baseline migration describes?
+npx prisma migrate diff \
+ --from-url "$PRODUCTION_DATABASE_URL" \
+ --to-migrations ./prisma/migrations/20260801000000_initial_schema \
+ --shadow-database-url "$LOCAL_SHADOW_DATABASE_URL" \
+ --script
+```
+
+- **Empty output** β production is in the baseline state. Baselining is sound;
+ continue.
+- **Any output** β production has drifted from the squashed baseline. **Stop.**
+ The drift must be understood and reconciled first; asserting the baseline
+ anyway would make migrations 2β8 run against a schema they were not written
+ for. Attach the diff to this document and re-review.
+
+Note: `--from-url` is read-only with respect to production. The shadow database
+is written to and reset, which is why it **must never be a production URL** β
+Prisma resets shadow databases.
+
+### 4.4 Record the baseline
+
+```bash
+npx prisma migrate resolve --applied 20260801000000_initial_schema
+```
+
+Expected: one row in `_prisma_migrations` with `finished_at` set and
+`applied_steps_count` 0. No DDL is executed by this command.
+
+### 4.5 Apply the real v1 β v2 migrations
+
+```bash
+npx prisma migrate deploy
+```
+
+This applies migrations 2β8:
+
+| Migration | What it does |
+|---|---|
+| `20260910000000_money_base_units` | money β integer base units |
+| `20260910120000_payment_state_machine` | `PaymentState`, transitions, audit |
+| `20260911000000_multi_tenancy` | organizations, members, composite FKs |
+| `20260911010000_chain_event_attribution` | tenant attribution for chain events |
+| `20260911020000_reconciliation_reliability` | findings, runs |
+| `20260911030000_reconciliation_run_lock` | partial unique index on `RUNNING` |
+| `20260911040000_payroll_batch_idempotency` | batch idempotency key, `sourceReference` |
+
+These are **not** additive-only. The money and multi-tenancy migrations retype
+columns and introduce NOT NULL constraints with backfills, and were hand-ordered
+(widen β backfill β constrain β drop). They have only ever been applied to
+databases built from this same history. **Rehearse them against a restored copy
+of the production dump before production**, not only against a from-zero local
+database:
+
+```bash
+# On a scratch database restored from the 4.2 dump:
+pg_restore --dbname "$REHEARSAL_DATABASE_URL" --no-owner coreflow-prod-*.dump
+DATABASE_URL="$REHEARSAL_DATABASE_URL" npx prisma migrate deploy
+```
+
+A from-zero run proves the SQL is valid. Only a restored-copy run proves it is
+valid **against production's actual data**.
+
+### 4.6 Verification
+
+```bash
+npx prisma migrate status # all 8 applied, none failed
+```
+
+```sql
+-- 28+ tables, v2 tables present
+SELECT count(*) FROM information_schema.tables WHERE table_schema='public';
+SELECT table_name FROM information_schema.tables
+ WHERE table_schema='public'
+ AND table_name IN ('Organization','OrgMember','PayrollBatch','Payment',
+ 'Approval','ReconciliationRun');
+
+-- No failed or unfinished rows remain
+SELECT migration_name FROM _prisma_migrations
+ WHERE finished_at IS NULL OR rolled_back_at IS NOT NULL;
+
+-- Row counts from 4.2 are unchanged (no migration should delete v1 data)
+```
+
+Then, against production, confirm the application actually works rather than
+assuming a green migration means a working product:
+
+- `GET /api/health/ready`
+- sign in with a wallet
+- load a page that reads `Escrow`
+- confirm the indexer cursor advances after Cron resumes
+
+### 4.7 Unfreeze
+
+Resume Vercel Cron. Record in this document: who ran it, when, the
+`migrate status` output, and the verification results.
+
+---
+
+## 5. Rollback plan
+
+| Failure point | Action |
+|---|---|
+| 4.3 diff is non-empty | Stop. Nothing was changed. Re-review. |
+| 4.4 resolve is wrong | `migrate resolve --rolled-back 20260801000000_initial_schema` returns the row to its prior state. No DDL ran. |
+| 4.5 fails partway | **Restore from the 4.2 dump.** Do not hand-patch. These migrations retype columns and backfill; a partially applied money or multi-tenancy migration leaves data in an ambiguous state, and "fixing forward" on financial records without knowing which rows converted is how silent corruption happens. |
+| Application broken after 4.5 | Restore from the 4.2 dump, redeploy the previous application build, then diagnose off production. |
+
+Restore:
+
+```bash
+pg_restore --clean --if-exists --no-owner \
+ --dbname "$PRODUCTION_DATABASE_URL" coreflow-prod-.dump
+```
+
+---
+
+## 6. Evidence β how this was observed
+
+Read-only. Two queries, both against catalog tables:
+
+```sql
+SELECT table_name FROM information_schema.tables
+ WHERE table_schema='public' ORDER BY table_name;
+
+SELECT migration_name, started_at, finished_at,
+ rolled_back_at, applied_steps_count
+ FROM _prisma_migrations
+ WHERE finished_at IS NULL OR rolled_back_at IS NOT NULL;
+```
+
+No write, DDL, seed, reset or `migrate` command has been run against this
+database from the development workflow. The local environment has since been
+repointed away from it, and `scripts/check-env.mjs` now refuses to run
+development tasks against a non-local database.
+
+## 7. Open questions for the operator
+
+1. Is `db.prisma.io/postgres` the database serving `coreflow-psi.vercel.app`, or
+ a preview/branch database? The remediation path is the same; the blast radius
+ is not.
+2. Who attempted `20260801000000_initial_schema` on 2026-07-31, and was the
+ squashed baseline intended to replace the `20260616*` history in production?
+ If the squash was meant to be local-only, the cleaner fix may be to restore
+ the original five migration directories instead of baselining.
+3. Does production hold real user data, or only test records? This determines
+ whether 4.5's rehearsal-on-a-restored-copy is mandatory or merely advisable.
+ It is recommended either way.
diff --git a/docs/RBAC.md b/docs/RBAC.md
new file mode 100644
index 0000000..b41207f
--- /dev/null
+++ b/docs/RBAC.md
@@ -0,0 +1,179 @@
+# CoreFlow RBAC
+
+**6 roles Β· 35 permissions.** Generated from `src/lib/tenancy/rbac.ts`, which is
+the single source of truth. If this document disagrees with the code, the code is
+right and this is stale.
+
+---
+
+## 1. Where roles sit in the security boundary
+
+```
+AUTHENTICATION who are you wallet signature, session
+MEMBERSHIP which organizations OrgMember, status = ACTIVE
+ROLE what may you do β this document
+RESOURCE OWNERSHIP is this record in scope tenancy/resolve.ts + composite FKs
+BUSINESS RULE is the action valid now payments/state-machine.ts
+BLOCKCHAIN did it actually happen contract + indexer
+```
+
+These do not collapse into each other. Holding a role does not imply owning a
+record; owning a record does not imply the action is valid right now; and none of
+them imply money moved.
+
+**Permissions are organization-scoped.** A role is held *within* one organization
+and grants nothing anywhere else. There is no cross-tenant or platform-wide
+authority over payment data β the legacy platform `Role` (ADMIN/EMPLOYEE) governs
+only sign-in and the admin bootstrap path.
+
+---
+
+## 2. The roles
+
+| Role | Purpose |
+|---|---|
+| **OWNER** | Full authority, including deleting the organization. |
+| **ADMIN** | Operational authority. Cannot delete the organization or mint an OWNER. |
+| **MANAGER** | Prepares payroll and holds the MANAGER half of the approval gate. |
+| **FINANCE** | Holds the FINANCE half. Cannot create the payroll it approves. |
+| **WORKER** | A payee, not an operator. Holds **no** permissions. |
+| **VIEWER** | Read-only. |
+
+### Separation of duties
+
+MANAGER and FINANCE are separate and neither implies the other. This is the
+product's central claim, and the contract enforces the same property on-chain with
+`SignersNotDistinct`.
+
+Three consequences, each tested:
+
+- A MANAGER cannot hold `payment:approve:finance`, and vice versa.
+- FINANCE cannot hold `payroll:create`, `worker:create` or `escrow:create` β an
+ approver who can also create what they approve is not an independent check.
+- Even an OWNER cannot supply both halves of one payment: `approvePayment` refuses
+ a second approval from a wallet that already recorded the first.
+
+### WORKER holds nothing
+
+A worker sees their own payments through a self-scoped query
+(`paymentReadScope`) that filters on their wallet address β not through
+`payment:read`. Granting organization-wide read would let any contractor enumerate
+the entire payroll, including colleagues' rates.
+
+---
+
+## 3. Permission matrix
+
+| Permission | OWNER | ADMIN | MANAGER | FINANCE | WORKER | VIEWER |
+|---|---|---|---|---|---|---|
+| `audit:read` | β
| β
| β
| β
| β | β
|
+| `escrow:cancel` | β
| β
| β | β | β | β |
+| `escrow:create` | β
| β
| β
| β | β | β |
+| `escrow:read` | β
| β
| β
| β
| β | β
|
+| `member:invite` | β
| β
| β | β | β | β |
+| `member:read` | β
| β
| β
| β
| β | β
|
+| `member:remove` | β
| β
| β | β | β | β |
+| `member:role:assign` | β
| β
| β | β | β | β |
+| `member:suspend` | β
| β
| β | β | β | β |
+| `oracle:attest:request` | β
| β
| β
| β | β | β |
+| `org:delete` | β
| β | β | β | β | β |
+| `org:read` | β
| β
| β
| β
| β | β
|
+| `org:update` | β
| β
| β | β | β | β |
+| `payment:approve:finance` | β
| β
| β | β
| β | β |
+| `payment:approve:manager` | β
| β
| β
| β | β | β |
+| `payment:cancel` | β
| β
| β
| β
| β | β |
+| `payment:read` | β
| β
| β
| β
| β | β
|
+| `payment:reject` | β
| β
| β
| β
| β | β |
+| `payment:retry` | β
| β
| β
| β
| β | β |
+| `payment:submit` | β
| β
| β
| β
| β | β |
+| `payroll:create` | β
| β
| β
| β | β | β |
+| `payroll:delete` | β
| β
| β | β | β | β |
+| `payroll:read` | β
| β
| β
| β
| β | β
|
+| `payroll:update` | β
| β
| β
| β | β | β |
+| `project:archive` | β
| β
| β | β | β | β |
+| `project:create` | β
| β
| β | β | β | β |
+| `project:read` | β
| β
| β
| β
| β | β
|
+| `project:update` | β
| β
| β | β | β | β |
+| `reconciliation:read` | β
| β
| β
| β
| β | β
|
+| `reconciliation:resolve` | β
| β
| β | β | β | β |
+| `treasury:read` | β
| β
| β
| β
| β | β
|
+| `worker:archive` | β
| β
| β | β | β | β |
+| `worker:create` | β
| β
| β
| β | β | β |
+| `worker:read` | β
| β
| β
| β
| β | β
|
+| `worker:update` | β
| β
| β
| β | β | β |
+
+---
+
+## 4. Role delegation
+
+Who may grant which role. Strictly at or below the granter's own level, with one
+deliberate exception: an OWNER may create another OWNER, because an organization
+with exactly one owner has no recovery path if that key is lost.
+
+| Role | May grant |
+|---|---|
+| OWNER | OWNER, ADMIN, MANAGER, FINANCE, WORKER, VIEWER |
+| ADMIN | ADMIN, MANAGER, FINANCE, WORKER, VIEWER |
+| MANAGER | *(none)* |
+| FINANCE | *(none)* |
+| WORKER | *(none)* |
+| VIEWER | *(none)* |
+
+Two refusals worth naming, because both are plausible mistakes rather than exotic
+attacks:
+
+- **An ADMIN cannot mint an OWNER.** Otherwise an admin can take the organization.
+- **A MANAGER cannot mint a FINANCE approver.** Otherwise a manager manufactures
+ the second approval they are forbidden from giving.
+
+Delegation is checked as a pair: the actor needs `member:role:assign` *and* the
+specific target role must be within their delegation. Holding the permission does
+not imply every role is in reach.
+
+### Self-targeting
+
+Nobody may change their own role or membership status β self-assignment is how a
+limited role becomes an unlimited one. `checkNotSelf` returns 409.
+
+### Last administrator
+
+An action that would leave an organization with no ACTIVE administrator is refused
+with 409 `LAST_ADMINISTRATOR`. This covers removal, suspension **and** demotion. A
+SUSPENDED administrator does not count as cover: an organization whose only other
+admin is suspended has nobody who can unsuspend them.
+
+---
+
+## 5. HTTP semantics
+
+| Situation | Status | Why |
+|---|---|---|
+| Not signed in | **401** | |
+| Resource outside the caller's organizations | **404** | A 403 confirms existence, turning id substitution into an enumeration oracle |
+| Nonexistent resource | **404** | Identical response to the above, by design |
+| Member, but role lacks the permission | **403** | The caller demonstrably belongs here, so there is nothing to conceal |
+| Conflicts with organization state | **409** | e.g. last administrator, invalid membership transition |
+| Caller belongs to several organizations, none named | **400** | Guessing could act in the wrong tenant's name |
+
+---
+
+## 6. Enforcement
+
+Backend authorization is **authoritative**. UI visibility is a convenience, never a
+control: `GET /api/organizations` returns each membership's permission list so the
+client renders from the same data the server enforces, rather than re-deriving the
+rules and drifting.
+
+Every tenant-scoped route passes through `withTenant()`, which resolves
+authentication β membership β permission before the handler runs. No route can
+forget a layer because no route performs these checks itself.
+
+---
+
+## 7. Tests
+
+`src/lib/tenancy/__tests__/rbac.test.ts` enumerates the whole matrix, including
+the cells that must be **empty**: every permission is asserted against every role,
+every non-read permission is refused for VIEWER, and all 35 are refused for
+WORKER. A table tested only on what it allows would happily let a MANAGER approve
+finance.
diff --git a/docs/RECONCILIATION.md b/docs/RECONCILIATION.md
new file mode 100644
index 0000000..4b00dbd
--- /dev/null
+++ b/docs/RECONCILIATION.md
@@ -0,0 +1,274 @@
+# CoreFlow Reconciliation
+
+Reconciliation is an **independent correctness check** on the payment projection,
+not a background tidy-up. This document states what it verifies, how independently,
+what it will and will not change, and how an operator works with it.
+
+> **Scope claim.** Reconciliation runs on a schedule, records every run, detects
+> the discrepancy classes below, and surfaces them with remediation. It is not
+> described here as production-grade: see Β§11 for what is missing.
+
+---
+
+## 1. Authority
+
+| Authoritative for | Source |
+|---|---|
+| Token movement, settlement, custody | **Chain** |
+| Contract state and authorization | **Chain** |
+| Transaction outcome | **Chain** |
+| Application projections, workflow metadata | PostgreSQL |
+| Organization/project relationships, tenancy | PostgreSQL |
+| Audit presentation, search, reconciliation findings | PostgreSQL |
+
+The database never silently overrides chain evidence. Where they disagree, the
+disagreement is **recorded**.
+
+---
+
+## 2. Independence: what is actually verified
+
+A reconciler that re-read CoreFlow's own events, through the same parser, into the
+same projection would verify nothing β a bug in how CoreFlow emits or decodes its
+events would validate itself.
+
+Verification therefore comes from sources CoreFlow did not author:
+
+| Source | Why it is independent |
+|---|---|
+| **SAC `transfer` events** | Emitted by the TOKEN contract: `transfer / from / to / asset β amount`. This is the actual movement of value. If CoreFlow claims a payment settled and no transfer from the escrow contract to that recipient for that amount exists, the claim is false regardless of CoreFlow's own log. |
+| **Contract storage (`get_escrow`)** | A read of current state, not of the event stream β a different derivation of the same truth. |
+| **Transaction results** | Whether a specific hash actually succeeded. |
+
+The indexer trusts `payment/paid`. The reconciler does not. That asymmetry is the
+point.
+
+### Transaction-scoped matching
+
+A transfer is matched on `(from = escrow contract, to = recipient, asset, exact
+amount)` **within one transaction**.
+
+The transaction scope is load-bearing, and live validation is what proved it: the
+tuple without a transaction is **not unique**, because the same escrow contract
+pays the same contractor the same rate every pay period. Seven identical payroll
+runs produced seven identical transfers, and treating those as seven matches for
+one payment reported a duplicate payment that never happened.
+
+- When the payment records a settlement transaction, the match is confined to it.
+- Otherwise the settling transaction is inferred as the most recent one whose
+ transfers cover **every** expected payment of the escrow β a `pay_batch`
+ transaction contains one transfer per payee.
+- `DUPLICATE_PAYMENT_EVENT` is raised only for two transfers to one payee **inside
+ a single transaction**. Across transactions that is normal recurring payroll.
+
+---
+
+## 3. Outcomes
+
+| Outcome | Meaning |
+|---|---|
+| `AGREED` | Projection, contract state and observed transfer all match |
+| `CHAIN_AHEAD` | Chain settled; projection behind. **Corrected.** |
+| `DATABASE_AHEAD` | Database claims PAID; chain does not support it. **Never reverted.** |
+| `CHAIN_UNREADABLE` | Could not check. Not agreement, not a mismatch. |
+| `MISMATCHED` | Identity or amount disagrees |
+| `UNKNOWN_ON_CHAIN_OBJECT` | On-chain escrow belongs to no organization |
+| `ORPHANED_DATABASE_OBJECT` | Recorded payment with no on-chain slot |
+
+### Only two automatic corrections
+
+`CHAIN_AHEAD β PAID` and *escrow cancelled on-chain* `β CANCELLED`.
+
+Both require independent confirmation. A `CHAIN_AHEAD` payment is advanced **only**
+when an observed SAC transfer corroborates it: if the contract reports `FINALIZED`
+but no transfer is visible, the projection is **not** advanced and a
+`MISSING_PAYMENT_EVENT` finding is opened. Advancing on contract state alone would
+defeat the independent check.
+
+### `DATABASE_AHEAD` is never reverted
+
+`PAID` is terminal in the payment state machine and stays so. The finding is the
+durable record, and the state machine is not weakened to permit an exit.
+
+A system that silently un-pays a payment to look consistent has destroyed the
+evidence of its own worst bug. The operator workflow is in Β§8.
+
+---
+
+## 4. Finding taxonomy
+
+| Kind | Severity | Meaning |
+|---|---|---|
+| `DB_PAID_CHAIN_NOT` | **CRITICAL** | Shown as settled; chain disagrees |
+| `FAILED_TX_ACTUALLY_SUCCEEDED` | **CRITICAL** | Recorded failed, actually succeeded β retry would double-pay |
+| `AMOUNT_MISMATCH` | HIGH | Settled amount β recorded amount |
+| `RECIPIENT_MISMATCH` | HIGH | Funds reached a different address |
+| `ASSET_MISMATCH` | HIGH | Settled in a different asset |
+| `DUPLICATE_PAYMENT_EVENT` | HIGH | Two transfers for one payee in one transaction |
+| `MISSING_PAYMENT_EVENT` | HIGH | Contract says settled, no transfer observed |
+| `CHAIN_PAID_DB_NOT` | MEDIUM | Projection lagging |
+| `MISSING_ON_CHAIN` | MEDIUM | Recorded payment with no on-chain slot |
+| `ORPHAN_ON_CHAIN` | MEDIUM | On-chain payment with no database row |
+| `UNKNOWN_ON_CHAIN_OBJECT` | LOW | Escrow belongs to no organization |
+| `CHAIN_UNREADABLE` | LOW | Could not check |
+| `OTHER` | MEDIUM | Unclassified β taxonomy needs an entry |
+
+**CRITICAL is reserved for findings where the product may be making a false
+statement about money.** Everything else, however annoying, is a lag or an
+operational issue. Every kind carries operator-facing `remediation`; a finding
+without it is a puzzle.
+
+---
+
+## 5. Scheduling and concurrency
+
+Triggered by **Vercel Cron** (`vercel.json`, hourly at :17) against
+`POST /api/reconciliation/run`, protected by `CRON_SECRET`. An operator can also
+run one organization via `POST /api/organizations/:id/reconciliation`.
+
+**No job framework.** CoreFlow deploys on Vercel, where there are no long-lived
+workers. Redis or a queue purely to own a cron tick would be infrastructure with no
+other purpose and one more thing that can be down. The lock lives in PostgreSQL,
+which the application already depends on absolutely.
+
+### The lock
+
+```sql
+CREATE UNIQUE INDEX "ReconciliationRun_one_running_per_org"
+ ON "ReconciliationRun" ("orgId") WHERE "status" = 'RUNNING';
+```
+
+A check-then-insert is a race: two workers on the same tick both pass the check and
+both insert. The partial unique index makes PostgreSQL refuse the second, so the
+lock does not depend on the application noticing. Verified directly against the
+database β see the evidence package.
+
+### Heartbeats
+
+A run refreshes `heartbeatAt` every 30s. A run whose heartbeat is older than
+**10 minutes** is marked `STALE` and its lock reclaimed. Stale runs are marked, not
+deleted: that a run died is evidence, and silently reusing the lock would erase it.
+
+### Bounded scope
+
+`maxEscrows` caps one pass. The platform sweep processes at most 50 organizations
+per invocation; the rest are picked up next tick rather than making one invocation
+unbounded. One tenant's RPC failure does not abort the sweep.
+
+---
+
+## 6. Run records
+
+Every run records scope, correlation id, status, timings, and counters
+(`escrowsExamined`, `paymentsExamined`, `agreed`, `mismatched`, `unreadable`,
+`chainAhead`, `databaseAhead`, `findingsOpened`, `correctionsApplied`).
+
+A failure still **completes** the record, marked `FAILED` with the error. A run that
+simply stops existing is indistinguishable from one that never started β and then
+"no findings" reads as health.
+
+`reconciliationHealth()` reports **DEGRADED** when the last run failed, went stale,
+stopped responding, or never happened. The UI refuses to show "all clear" in that
+state: an empty findings list after a failed run means nothing was checked.
+
+---
+
+## 7. Retry behaviour
+
+| Condition | Behaviour |
+|---|---|
+| RPC timeout reading an escrow | `CHAIN_UNREADABLE` finding; nothing downgraded; retried next run |
+| RPC timeout reading transfers | Payment **not** advanced; `CHAIN_UNREADABLE` |
+| Escrow genuinely absent on-chain | `MISSING_ON_CHAIN` β distinct from unreadable |
+| Transaction not found (beyond retention) | Left alone; absence of a record is not failure |
+| Finding still present next run | Re-observed: `lastObservedAt` and `observationCount` updated, no duplicate row |
+| Finding resolved, then recurs | A **new** finding opens |
+
+A duplicated queue becomes noise, and a noisy queue gets ignored β the same as
+having none.
+
+---
+
+## 8. Operator workflow
+
+```
+OPEN β ACKNOWLEDGED β INVESTIGATING β RESOLVED
+```
+
+`PATCH /api/organizations/:id/findings/:findingId`, requiring
+`reconciliation:resolve` (OWNER/ADMIN). Resolution requires a substantive
+explanation β a "mark resolved" button with no reason turns the queue into a
+dismiss button, and the next reader during an incident learns nothing. Actor,
+timestamp and reason are recorded, and an `AuditEvent` is written.
+
+**What resolution cannot do:** change a payment's state, amount, recipient or
+transaction hash. It records a human judgement *about* a discrepancy. Only
+lifecycle fields are written; a test asserts exactly which.
+
+### Resolving a `DB_PAID_CHAIN_NOT`
+
+1. Open the transaction on the explorer (link is on the finding).
+2. If the transfer exists, the database was right and the verifier's window missed
+ it β resolve, noting the transaction.
+3. If it does not, the payment did not settle. The payment record stays `PAID`
+ (terminal), so re-issuing requires a **new** payment; note the original finding
+ id in the new batch's reference.
+4. Either way the resolution text must say which was established.
+
+### Investigating an orphaned escrow
+
+`UNKNOWN_ON_CHAIN_OBJECT` names the escrow id. CoreFlow will not guess an owner. If
+it is yours, claim it via `POST /api/organizations/:id/escrows/claim` with the
+wallet that created it β the claim verifies on-chain manager against live state.
+Events recorded before the claim are replayed, not lost.
+
+---
+
+## 9. Observability
+
+Every run has a correlation id (`rec_`) threaded through its logs, stored on
+the run and on every finding it observed. The trace is:
+
+```
+run correlationId β organization β escrow (onChainId) β payment β transaction hash β finding id
+```
+
+Never logged: private keys, wallet secrets, session secrets, authentication
+payloads. Findings carry addresses and amounts, which are tenant data and are
+served only through tenant-scoped endpoints.
+
+### Metrics available from run records
+
+Runs (total/succeeded/failed), findings opened and resolved, chain-ahead
+corrections, unreadable cases, orphaned objects, run duration
+(`completedAt - startedAt`), and oldest unresolved finding age.
+
+---
+
+## 10. Security
+
+| Control | Implementation |
+|---|---|
+| Cron trigger not user-reachable | `CRON_SECRET`, constant-time compare, minimum 16 chars, rate limited, 404 on every failure |
+| Findings are tenant-scoped | `withTenant` + `orgId` in every query; cross-tenant finding id β 404 |
+| Resolution is authorized | `reconciliation:resolve` (OWNER/ADMIN only) |
+| Cannot forge PAID | Only `applyTransition` changes state, and only on observed transfer evidence |
+| Cannot inject a transaction hash | Hashes come from observed transfers, never from a request |
+| Cannot mutate an amount | Reconciliation has no amount-write path at all |
+| No user-supplied chain confirmation | The verifier reads RPC; request content is never evidence |
+| Organization spoofing | Organization comes from membership, never from the request |
+
+---
+
+## 11. What is NOT done
+
+| Gap | Status |
+|---|---|
+| **Alerting is in-product only** | Critical findings surface in the API and the operator panel. There is **no** email, Slack or pager integration β nobody is woken up. An unattended deployment would not notice a CRITICAL finding until someone looked. |
+| **Operator panel is not routed** | `ReconciliationPanel` is built and tested but not yet mounted on a dashboard page. |
+| **Transfer history is bounded by RPC retention** | The default lookback is ~16,000 ledgers (~22h). A payment older than the node's retained event history reads as `CHAIN_UNREADABLE`, not as verified. Long-horizon verification needs an archive or stored per-payment transfer evidence. |
+| **No per-payment transfer cache** | Every run re-reads the token's events. Fine at current volume; at scale this needs the verified transfer recorded against the payment on first confirmation. |
+| **Batch aggregate check is implicit** | Payment-level verification is exhaustive, and a batch is verified by verifying each of its payments. There is no separate stored batch total assertion β deliberately, since a stored aggregate is a second copy of mutable truth. |
+| **No automated retry/backoff schedule** | Unreadable findings clear on the next scheduled run; there is no escalating retry for a persistently unreachable RPC. |
+| **Not load-tested** | Behaviour with thousands of payments per organization is unmeasured. |
+| **Live test suites cannot run in parallel** | The three opt-in live suites share one database and each resets the chain-event table, so they must be invoked sequentially (one `vitest run` per file). Running them together produces spurious failures. Not a product defect, but a real constraint on the validation procedure. |
diff --git a/docs/SECRET_ROTATION.md b/docs/SECRET_ROTATION.md
new file mode 100644
index 0000000..380ba53
--- /dev/null
+++ b/docs/SECRET_ROTATION.md
@@ -0,0 +1,224 @@
+# Secret rotation β runbook
+
+> **Status: PREPARED, NOT EXECUTED.** No secret has been rotated. No Vercel
+> environment variable has been changed. `docs/evidence/secret-rotation.json`
+> does not exist, which is the check for whether any of this has run.
+
+Executor: [`scripts/rotate-secrets.mjs`](../scripts/rotate-secrets.mjs). It emits
+its own evidence, because a rotation you cannot demonstrate is a rotation you
+have not finished.
+
+## What was exposed, and how far
+
+`prodenv.txt` β a `vercel env pull` dump β sits in the working directory holding
+live production values. Its contents were enumerated by variable **name** to
+establish the real scope, because acting on an assumed scope is how a rotation
+misses something or wastes effort on something it never touched:
+
+| Variable in the dump | Classification |
+|---|---|
+| `ORACLE_SECRET_KEY` | secret β **on-chain coupled**, excluded below |
+| `AUTH_SECRET` | secret β rotate |
+| `BOOTSTRAP_SECRET` | secret β prefer removal |
+| `DATABASE_URL`, `DIRECT_URL`, `PRISMA_DATABASE_URL`, `POSTGRES_URL` | credential β provider-side rotation |
+| `VERCEL_OIDC_TOKEN` | short-lived, self-expiring β no action |
+| `ADMIN_WALLETS`, `VERCEL_URL`, `NEXT_PUBLIC_*` | not secret |
+
+**`CRON_SECRET` and `INDEXER_SECRET` are not in this dump** β `grep -ci
+'cron|indexer'` returns 0. Earlier notes, including `BACKLOG.md` item 7, listed
+them among the exposed values; that was wrong and is corrected here. They are
+still worth rotating as hygiene, and the procedure below covers them, but they
+are **not** part of this exposure and should not be treated as urgent on its
+account. Overstating a breach misdirects the response as surely as understating
+it does.
+
+Containment, verified:
+
+| Check | Result |
+|---|---|
+| Tracked in `HEAD` | no |
+| Added in any reachable commit (`--all`) | no |
+| Matched by `.gitignore` | yes β `.gitignore:73`, `*env*.txt` |
+
+So the exposure is **local disk only**; it was never published through git. That
+lowers the urgency but does not remove the requirement: a credential that has sat
+in a plaintext file of unclear handling is a credential of unknown disclosure.
+
+**Do not delete `prodenv.txt` yet.** It is the record of the values being
+replaced, and you need it to confirm the old values are dead. Dispose of it in
+the last step.
+
+## What is NOT rotated here, and why
+
+### `ORACLE_SECRET_KEY` β excluded, deliberately
+
+The oracle public key is *derived* from this secret
+([`src/lib/oracle/index.ts:74`](../src/lib/oracle/index.ts)) and stored as each
+escrow's `oracle_pubkey`. The contract accepts attestations only from a key its
+admin has registered. Rotating the secret is therefore **not an environment
+change β it is an on-chain change**, and that registration is the action
+currently blocked on the owner confirming the key mapping.
+
+Rotating it now would be actively harmful. The open question is which of two
+existing keys is post-rotation; minting a third candidate destroys the ability to
+answer it. `scripts/rotate-secrets.mjs` refuses this secret outright.
+
+See [ORACLE_KEY_TRANSITION.md](ORACLE_KEY_TRANSITION.md).
+
+### The database credential β provider-side, not scriptable
+
+It exists in the Postgres provider *and* in four environment variables. Changing
+either half alone breaks the deployment. Procedure is at the end of this file.
+
+## Order of operations
+
+A Vercel environment change **does not affect the running deployment.** Nothing
+cuts over until the next deployment. This is the single most useful fact here:
+you can stage every change calmly, and the redeploy is the atomic moment.
+
+```
+1. rotate the env vars β no user-visible effect yet
+2. redeploy β the cutover
+3. prove each OLD value dead β the step that makes it real
+4. dispose of prodenv.txt β only after 3 passes
+```
+
+## 1. Cron and indexer secrets β hygiene, and rotate BOTH or neither
+
+Not part of the `prodenv.txt` exposure (see above). Sequenced first only because
+it is the lowest-risk change β no sessions break and no user notices.
+
+Both guarded endpoints resolve the secret with a fallback:
+
+```ts
+// src/app/api/indexer/run/route.ts:16
+const secret = process.env.INDEXER_SECRET || process.env.CRON_SECRET;
+// src/app/api/reconciliation/run/route.ts:37
+const expected = process.env.CRON_SECRET || process.env.INDEXER_SECRET || '';
+```
+
+Rotating one leaves the other accepted. **Rotating only `CRON_SECRET` rotates
+nothing** β the exposed `INDEXER_SECRET` still authenticates.
+
+```bash
+node scripts/rotate-secrets.mjs --rotate CRON_SECRET
+node scripts/rotate-secrets.mjs --rotate INDEXER_SECRET
+```
+
+Update the Vercel Cron configuration to the new `CRON_SECRET`, or scheduled
+indexing and reconciliation stop silently at the next run.
+
+## 2. `AUTH_SECRET` β a hard cutover
+
+`src/lib/auth/jwt.ts` signs HS256 with a single secret and has no overlap
+window, so rotation invalidates every issued session at redeploy. Every user is
+logged out and signs in again with their wallet. With the current user count that
+is acceptable; it is not a graceful rotation, and it should not be presented as
+one.
+
+```bash
+node scripts/rotate-secrets.mjs --rotate AUTH_SECRET
+```
+
+## 3. `BOOTSTRAP_SECRET` β prefer removal
+
+This guards `POST /api/admin/bootstrap`, which claims the **first** admin. Unset,
+the endpoint answers 404 and no secret reaches it at all. If an admin already
+exists in production, removal is strictly better than rotation β rotation keeps a
+live door for a one-time operation that is already complete.
+
+```bash
+node scripts/rotate-secrets.mjs --remove BOOTSTRAP_SECRET
+```
+
+**This one cannot be verified by probing**, and the script refuses to try:
+
+- On a secret match the route proceeds to `prisma.user.upsert`, defaulting the
+ wallet to `ADMIN_WALLETS[0]`. A probe that *succeeded* would grant admin in
+ production β the check would cause the thing it checks for.
+- The endpoint returns 404 whether the secret is unset **or** merely wrong, so a
+ 404 proves nothing.
+
+Verify from configuration instead:
+
+```bash
+vercel env ls production | grep BOOTSTRAP_SECRET # expect no row
+```
+
+β¦then confirm a deployment was created after the removal.
+
+## 4. Redeploy
+
+Until this happens, nothing above has taken effect.
+
+## 5. Prove the old values are dead
+
+This is the step that distinguishes a rotation from an intention. The old secret
+goes in on **stdin, never argv** β argv is world-readable via `ps`.
+
+```bash
+node scripts/rotate-secrets.mjs --verify-dead CRON_SECRET \
+ --url https://coreflow-psi.vercel.app < old-cron-secret.txt
+
+node scripts/rotate-secrets.mjs --verify-dead AUTH_SECRET \
+ --url https://coreflow-psi.vercel.app < old-auth-secret.txt
+```
+
+- `CRON_SECRET` / `INDEXER_SECRET`: presents the old bearer to both guarded
+ endpoints; expects rejection from each.
+- `AUTH_SECRET`: mints an HS256 JWT signed with the **old** secret and presents
+ it as a `cf_session` cookie to `/api/auth/me`. Acceptance would mean the old
+ secret still validates sessions.
+
+The script exits non-zero and records `old_value_rejected_everywhere: false` if
+any old credential still works. Two guards keep that record honest: it refuses a
+path with no `route.ts` in source (a mistyped path 404s, which would otherwise
+read as a rejection), and it refuses a stdin value under 32 characters (so a
+placeholder cannot manufacture a passing record).
+
+Shred the temporary files afterwards: `shred -u old-*.txt`.
+
+## 6. The database credential
+
+Ordered, because the halves must not drift:
+
+1. Change the password in the Postgres provider's console. Keep the old user
+ alive for the moment if the provider allows it.
+2. Update all four variables to the new credential β `DATABASE_URL`,
+ `DIRECT_URL`, `PRISMA_DATABASE_URL`, `POSTGRES_URL`. `check-env.mjs` already
+ knows all four; missing one leaves a path authenticating with the old value.
+3. Redeploy, then confirm the app reads and writes.
+4. Revoke the old credential provider-side, and confirm it can no longer connect.
+
+Do **not** point local development at the rotated production database while
+doing this. `npm run check:env` enforces that and should stay enforcing it.
+
+## 7. Dispose of `prodenv.txt`
+
+Only once every old value above is proven dead:
+
+```bash
+shred -u prodenv.txt
+```
+
+Then re-run `npm run check:env` to confirm the local environment is still
+`profile: LOCAL`.
+
+## Open finding β unequal guards on the same secret
+
+`CRON_SECRET`/`INDEXER_SECRET` protect two endpoints, and the two do not defend
+equally:
+
+| | `reconciliation/run` | `indexer/run` |
+|---|---|---|
+| Comparison | `timingSafeEqual` over SHA-256 | `header === \`Bearer ${secret}\`` |
+| Minimum length enforced | yes | no |
+| Rate limited | yes | no |
+| Response on failure | 404 | 401 |
+
+An attacker attacks the weaker of the two. The timing channel is not practically
+exploitable across a network against a 256-bit secret, so this is low severity β
+but the missing minimum-length check means a short or placeholder secret would be
+**accepted** by `indexer/run` while `reconciliation/run` correctly refuses to
+expose itself at all. Not changed here: this runbook rotates secrets and does not
+alter authentication code mid-rotation. Logged for a separate, reviewed change.
diff --git a/docs/UPGRADE_AUTHORITY.md b/docs/UPGRADE_AUTHORITY.md
new file mode 100644
index 0000000..33c6da3
--- /dev/null
+++ b/docs/UPGRADE_AUTHORITY.md
@@ -0,0 +1,118 @@
+# Upgrade, Admin and Pause Authority
+
+`upgrade` replaces the code that holds every escrow's custody. It is the most
+consequential entry point in the contract, so its conditions are specified and
+tested here rather than demonstrated once by hand.
+
+> **This document does not claim the mechanism is safe in the abstract.** An
+> upgradeable contract is a trusted-admin contract. What follows is an exact
+> statement of who is trusted, with what, and what that trust cannot be stopped
+> from doing.
+
+---
+
+## 1. Answers to the direct questions
+
+| Question | Answer |
+|---|---|
+| **Who can upgrade?** | Only the address stored as `Admin`, proven by `require_auth()`. |
+| **Who can become admin?** | Only the address baked into the WASM at build time (`COREFLOW_ADMIN`). `init_admin` rejects any other with `AdminMismatch` (#20). |
+| **What conditions are required?** | An admin signature **and** the contract already paused. Both, every time. |
+| **Can an unauthorized actor upgrade?** | No. The call requires the admin's signature; a non-admin cannot produce it. |
+| **Is pause mandatory?** | Yes. `upgrade` returns `NotPaused` (#22) otherwise, checked before anything is replaced. |
+| **Is the upgrade observable?** | Yes. `admin/upgrade` carries the WASM hash, and the mandatory `admin/paused` precedes it β the full sequence is reconstructable from the event log. |
+| **Can an admin brick the contract?** | Not by naming a wrong hash: the host refuses an unuploaded one and the transaction fails. An admin **can** upgrade to code that is itself broken β see Β§4. |
+| **What happens to escrow state?** | Nothing. Custody, approvals, verified proofs, nonce watermarks, the admin and the oracle registry all survive. Verified in tests and on live Testnet. |
+| **Can an admin-less contract be upgraded?** | No. With no `Admin` set there is no authority to satisfy, and `upgrade` returns `NotAdmin` (#10). Such a deployment is immutable. |
+
+---
+
+## 2. The required sequence
+
+```
+admin signs βββΆ set_paused(true) ββ emits admin/paused βββ
+ β observable gap
+admin signs βββΆ upgrade(wasm_hash) ββ emits admin/upgrade βββ€
+ β
+admin signs βββΆ set_paused(false) ββ emits admin/paused βββ
+```
+
+The pause requirement does not stop a malicious admin β nothing at this layer
+can. What it removes is the **silent** path: code holding custody cannot be
+replaced in one transaction while the system still looks healthy. Monitoring has
+a pause event to alert on, and the gap between pause and upgrade is visible to
+anyone reading the ledger.
+
+**`cancel_escrow` stays callable while paused.** If an operator pauses and walks
+away, managers can still recover their own custody. A pause window therefore
+cannot trap funds.
+
+---
+
+## 3. Tests
+
+`contracts/core-flow/src/test.rs`:
+
+| Test | Asserts |
+|---|---|
+| `test_upgrade_requires_admin_authorization` | Exactly one signer, and it is the admin |
+| `test_upgrade_impossible_without_an_admin` | `NotAdmin` when no admin is configured |
+| `test_upgrade_requires_pause_first` | `NotPaused` when live |
+| `test_upgrade_pause_is_mandatory_and_checked_first` | Still `NotPaused` after a pause/unpause cycle β no latent permission |
+| `test_upgrade_emits_an_event_carrying_the_wasm_hash` | Upgrade and the preceding pause are both observable |
+| `test_upgrade_preserves_escrow_state_and_custody` | Custody, approvals, proofs, nonce, admin and registry survive; the escrow still settles afterwards |
+| `test_pause_for_upgrade_does_not_trap_funds` | `cancel_escrow` refunds while paused |
+| `test_upgrade_to_an_unknown_wasm_hash_is_refused` | **Ignored** β the host's refusal is a non-unwinding trap that `#[should_panic]` cannot catch natively. Verified on live Testnet instead (below). |
+
+Authorization is asserted via `env.auths()` rather than by calling unauthorized,
+because a failed `require_auth` is a non-unwinding host trap in native
+`cargo test`. Checking which signature the contract **demanded** proves the same
+property and is catchable.
+
+---
+
+## 4. Live Testnet verification
+
+Contract `CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4`.
+
+```
+# Real upgrade, performed in place (this is how per-payment events shipped)
+upgrade without pausing β Error(Contract, #22) NotPaused REFUSED
+set_paused(true) β upgrade β set_paused(false) SUCCEEDED
+get_admin / expected_admin / oracle registry ALL SURVIVED
+escrow 2: 3 payments, manager_approved=true STATE INTACT
+extend_escrow_ttl (new entry point) LIVE
+
+# Non-admin attempting an admin-only action
+source=coreflow-v2-manager, set_paused(true)
+ β "Missing signing key for account GAELEFW56FPEβ¦" REFUSED
+ β is_paused still false NO EFFECT
+
+# Admin naming a WASM hash that was never uploaded
+upgrade(0xababβ¦ab) β HostError: Error(Storage, MissingValue) REFUSED
+ β get_admin intact, escrow 5: 3 payments intact NO DAMAGE
+```
+
+The non-admin refusal is worth reading carefully: the CLI reports a *missing
+signing key for the admin's address*, because the contract demands that specific
+signature. The manager is not refused for lacking a role β they are refused
+because they cannot produce the key the contract requires.
+
+---
+
+## 5. Residual risk, stated plainly
+
+| Risk | Status |
+|---|---|
+| A compromised admin key can upgrade to code that drains all custody | **Not mitigated.** This is inherent to an upgradeable contract. The pause requirement makes it observable, not impossible. |
+| An admin can upgrade to WASM that is valid but broken | **Not mitigated** by the contract. Mitigated operationally: CI builds and tests the WASM, and the deploy script verifies the admin pin is physically present in the binary. |
+| The admin key is a single point of failure | **Not mitigated.** It is one Stellar account. A multisig account or a threshold scheme would reduce this and is not implemented. |
+| No timelock between announcing and performing an upgrade | **Not implemented.** Pause-then-upgrade forces two transactions but provides no waiting period for anyone to react. |
+
+Two-step admin handover (`propose_admin` / `accept_admin`) protects against
+losing control to a mistyped address, but does nothing about a compromised one.
+
+**Before any Mainnet migration**, these paths β upgrade, admin, oracle registry,
+settlement β warrant independent external review. Strong internal testing is not
+equivalent to an audited financial system, and this document should not be read
+as claiming otherwise.
diff --git a/docs/evidence/REVIEWER_EVIDENCE.md b/docs/evidence/REVIEWER_EVIDENCE.md
new file mode 100644
index 0000000..8ec75a7
--- /dev/null
+++ b/docs/evidence/REVIEWER_EVIDENCE.md
@@ -0,0 +1,556 @@
+# CoreFlow β Reviewer Evidence
+
+Everything below is reproducible from this repository. Where a claim is about
+on-chain state, the verification command is given so it can be checked
+independently rather than taken on trust.
+
+> **Scope note.** CoreFlow **v2** β the hardened contract described here β is
+> deployed on **Stellar Testnet only**. CoreFlow **v1** remains on Mainnet and
+> carries none of v2's hardening. See [`../DEPLOYMENTS.md`](../DEPLOYMENTS.md).
+
+---
+
+## 1. Test suites
+
+| Suite | Command | Result |
+|---|---|---|
+| Soroban contract (Rust) | `cd contracts/core-flow && cargo test` | **70 passed**, 2 ignored |
+| Application unit (TypeScript) | `npm run test:ci` | **761 passed**, 9 skipped (opt-in live) |
+| Application integration (real PostgreSQL) | `npm run test:integration` | **71 passed** |
+| Type check | `npm run typecheck` | clean |
+| Production build | `npm run build` | succeeds |
+| Deployable WASM | `cargo build --release --target wasm32v1-none` | 42,425 bytes |
+
+The single ignored Rust test is documented in place: `ed25519_verify` traps
+non-catchably in native `cargo test`, so a bad-signature rejection cannot be
+asserted with `#[should_panic]`. It is covered by the live Testnet run below.
+
+---
+
+## 2. v2 Testnet deployment
+
+Machine-readable: [`testnet-v2-deployment.json`](testnet-v2-deployment.json)
+
+| Field | Value |
+|---|---|
+| Contract | `CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4` |
+| Network | Stellar **Testnet** |
+| WASM SHA-256 | `d9f2d849d69b56aebcbdf585e8b2e0e8d81d9e5bf13f51534f27bf479d0e56da` |
+| Admin pinned in WASM | yes |
+| Oracle key registered | yes |
+| Explorer | https://stellar.expert/explorer/testnet/contract/CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4 |
+
+Verify the deployed state yourself:
+
+```bash
+stellar contract invoke --id CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4 --network testnet -- expected_admin
+stellar contract invoke --id CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4 --network testnet -- get_admin
+stellar contract invoke --id CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4 --network testnet -- is_paused
+stellar contract invoke --id CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4 --network testnet -- \
+ is_oracle_key_registered --pubkey f42a48839e48d58e6628f5d096ee859e635b056be580bdcc68d620e2a2badae0
+```
+
+---
+
+## 3. Live golden-path validation
+
+Machine-readable: [`testnet-v2-golden-path.json`](testnet-v2-golden-path.json)
+Reproduce: `ORACLE_SECRET_KEY= node scripts/validate-testnet-v2.mjs`
+
+Escrow **#2**, three contractors, **2,860 test USDC** settled by real SAC
+transfers. Each assertion below was checked against on-chain state, not inferred
+from a non-erroring CLI call:
+
+| # | Step | Verified |
+|---|---|---|
+| 1 | Balances recorded before settlement | manager 100,000 USDC; all workers 0 |
+| 2 | Escrow created, custody funded | contract holds exactly 2,860; manager debited exactly 2,860 |
+| 3 | Oracle attestation (`CFWP-v2`) | locally built preimage is **byte-identical** to the contract's `proof_preimage` for all 3 payments |
+| 3 | Proofs submitted on-chain | 40 h, 32 h, 45 h accepted at nonces 0, 1, 2 |
+| 4 | **Replay rejected** | resubmitting a consumed attestation fails (`InvalidNonce`) |
+| 5 | **Dual approval enforced** | `pay_batch` refused with 0 approvals, and again with only the manager's |
+| 5 | Distinct finance signer | finance approval signed by a **different key** than the manager |
+| 6 | `pay_batch` executed | real SAC transfers |
+| 7 | Settlement measured | worker payouts of exactly 1,000 / 960 / 900 USDC; custody drained to **0** |
+| 8 | **Double settlement rejected** | second `pay_batch` fails (`PaymentAlreadyFinalized`) |
+| 9 | Final state | both approvals true; every payment `proof_verified`; every payment `Finalized` |
+
+### Reconciliation reliability (P2 #4)
+
+**Verification is independent of the indexer.** The indexer trusts CoreFlow's own
+`payment/paid` events; the reconciler reads the **token contract's own `transfer`
+events** β `transfer / from / to / asset β amount` β plus contract storage. A bug in
+how CoreFlow emits or parses its events therefore cannot validate itself. Live
+sample from the SAC's event stream:
+
+```
+transfer GCQR4PEWRAKHβ¦ β CDN4FIKLJ72Wβ¦ 28600000000 (custody funded)
+transfer CDN4FIKLJ72Wβ¦ β GDHMEB2U2XQHβ¦ 10000000000 (worker 1)
+transfer CDN4FIKLJ72Wβ¦ β GA7Q23T4I2CAβ¦ 9600000000 (worker 2)
+transfer CDN4FIKLJ72Wβ¦ β GCFTJIXCBQR6β¦ 9000000000 (worker 3)
+```
+
+| Claim | Evidence |
+|---|---|
+| Verification refuses contract state alone | `reconciler.test.ts` β "refuses to confirm settlement the contract claims but no transfer supports" |
+| CHAIN_AHEAD corrected only on observed transfer | "advances the projection when a transfer independently confirms settlement" |
+| DATABASE_AHEAD is **never** reverted | "records a CRITICAL finding and leaves PAID in place" |
+| No fabricated transaction hash | "does not fabricate a transaction hash" |
+| CHAIN_UNREADABLE β agreement, β failure | 4 tests under "CHAIN_UNREADABLE is not agreement" |
+| Batch totals cannot hide payment errors | "catches individual mismatches even when the batch total matches" (1000/960/900 recorded vs 1000/860/1000 settled β totals equal, two mismatches found) |
+| A mismatched payment is not also counted agreed | same test: `agreed` is 1, not 3 |
+| Recurring payroll is not a double payment | "does not flag a repeat of an identical pay period as a double payment" |
+| Duplicate only within one transaction | "flags duplicate transfers as possible double payment" |
+| Recorded hash with no transfer is caught | "flags a payment whose recorded hash has no corresponding transfer" |
+| Findings deduplicate, acknowledgement survives | 3 tests under "finding deduplication" |
+| CRITICAL reserved for false money statements | "reserves CRITICAL for false statements about money" |
+| Every finding kind has remediation | "gives every finding kind actionable remediation" |
+| Falsely-failed tx says DO NOT RETRY | "detects a false failure and warns against retrying" |
+| Unattributed escrow reported, never attached | "reports unattributed escrows without attaching them to a tenant" |
+| Cron trigger unreachable without the secret | `routes.test.ts` β 5 tests incl. short-secret refusal |
+| Resolution requires an explanation | "refuses to resolve without a substantive explanation" |
+| Resolution cannot alter financial state | "cannot alter payment state, amount or transaction hash" β asserts exactly which fields are written |
+| Findings are tenant-scoped | "404s a finding belonging to another organization" |
+| "No findings" never reads as healthy after a failed run | `ReconciliationPanel.test.tsx` β 4 summary tests |
+
+#### The run lock, verified against PostgreSQL
+
+```
+first RUNNING run INSERT 0 1 ALLOWED
+second concurrent RUNNING run ReconciliationRun_one_running_per_org BLOCKED
+after the first completes INSERT 0 1 ALLOWED
+historical runs retained 2 runs PRESERVED
+```
+
+A check-then-insert is a race; the partial unique index means the lock does not
+depend on the application noticing.
+
+#### Live Testnet validation
+
+`COREFLOW_LIVE_TESTNET=1 npx vitest run src/lib/reconciliation/__tests__/live-reconciliation.test.ts`
+
+```
+1. settled batch reconciles AGREED
+ RECONCILE: paymentsExamined=3 agreed=3 mismatched=0 databaseAhead=0
+2. repeated run is idempotent
+ correctionsApplied=0, findings unchanged, both runs COMPLETED
+3. interrupted indexer recovered
+ RECOVERY: chainAhead=1 correctionsApplied=1
+ β payment returned to PAID from an observed SAC transfer, audit actorSystem=reconciler,
+ metadata.verifiedBy=sac-transfer-event
+4. unattributed escrow reported, not attached
+ UNKNOWN_ON_CHAIN_OBJECT (LOW), 0 escrow rows created for it
+5. synthetic DATABASE_AHEAD mismatch detected, NOT reverted
+ MISSING_ON_CHAIN β "Payment references escrow 7 slot 97, which does not exist on-chain."
+ β payment stayed PAID; real payments unaffected
+```
+
+Case 5 used a synthetic payment inside a throwaway test organization, written
+directly rather than through any settlement path and deleted afterwards. No fake
+PAID state was created in a production path.
+
+#### A bug found by live validation
+
+The first live run reported three duplicate payments on a batch that agreed. Cause:
+transfers were matched on `(escrow contract, recipient, asset, amount)`, which is
+**not unique** β the same contract pays the same contractor the same rate every
+period, so seven identical payroll runs produced seven matches for one payment.
+Matching is now scoped to a single transaction, and the regression is pinned by
+"does not flag a repeat of an identical pay period as a double payment". The
+hermetic tests had passed because their fixture gave each transfer its own
+transaction hash, which `pay_batch` never does.
+
+### Multi-tenancy (P2 #2)
+
+**The boundary is enforced by PostgreSQL, not only by application code.** Every
+parent relation on a tenant-owned record is a composite foreign key on
+`(orgId, id)`. Verified directly against the database:
+
+```
+org A payment β org A batch INSERT 0 1 ALLOWED
+org A payment β org B batch Payment_orgId_batchId_fkey BLOCKED
+org A payment β org B project Payment_orgId_projectId_fkey BLOCKED
+org A payment β org B worker Payment_orgId_workerId_fkey BLOCKED
+org B approval β org A payment Approval_orgId_paymentId_fkey BLOCKED
+org B audit β org A payment AuditEvent_orgId_paymentId_fkey BLOCKED
+org B escrow β org A project Escrow_orgId_projectId_fkey BLOCKED
+```
+
+| Claim | Evidence |
+|---|---|
+| 6 roles Γ 35 permissions, enumerated including empty cells | `tenancy/__tests__/rbac.test.ts` (81 tests); [`../RBAC.md`](../RBAC.md) |
+| WORKER holds **no** permissions; all 35 refused | "grants WORKER nothing" |
+| VIEWER refused every non-read permission | "VIEWER is read-only" |
+| MANAGER cannot exercise the finance approval | "does not let a MANAGER exercise the finance rejection" |
+| FINANCE cannot create the payroll it approves | "does not let FINANCE create the payroll it approves" |
+| ADMIN cannot mint an OWNER | "does NOT let an ADMIN mint an OWNER" |
+| MANAGER cannot mint a FINANCE approver | "does NOT let a MANAGER mint a FINANCE approver" |
+| Cross-tenant reads return **404, not 403** | `tenancy/__tests__/isolation.test.ts` β 9 resource types |
+| Foreign and nonexistent ids are byte-identical | "returns an identical response for foreign and nonexistent ids" |
+| Id enumeration over 25 foreign payments leaks nothing | "leaks nothing when enumerating a range of ids" |
+| Same on-chain id in two tenants does not cross over | "does not return another tenant's escrow for the same onChainId" |
+| Suspended/invited/removed members are indistinguishable from non-members | "refuses a %s membership, indistinguishably from non-membership" |
+| Invitation tokens stored hashed only | `membership.test.ts` β "are stored hashed, never in plaintext" |
+| Invitation single-use under concurrency | "cannot mint two memberships when two requests race" |
+| Every invitation rejection reads identically | "reports every rejection with an identical caller-visible message" |
+| Invitation cannot change an existing member's role | "does not change the role of someone who already belongs" |
+| Last administrator cannot be removed, suspended or demoted | "last administrator protection" (5 tests) |
+| Self-promotion refused | "refuses changing your own membership" |
+| Cross-tenant invitation revocation refused | `organizations/__tests__/invitations.route.test.ts` |
+
+### Indexer tenant mapping β verified on live Testnet
+
+Run: `COREFLOW_LIVE_TESTNET=1 npx vitest run src/lib/indexer/__tests__/live-tenancy.test.ts`
+
+```
+PASS 1 (no mapping): {"processed":13, "paymentsCreated":0, "unattributed":13}
+ β 0 payments projected, 0 organizations invented, 13 events recorded
+[indexer] replayed 13 previously unattributed event(s) (+3 payments, +3 settled)
+PASS 2 (after org A claims the escrow):
+ org A idx=0 GDHMEB2U2X⦠amount=10000000000 state=PAID
+ org A idx=1 GA7Q23T4I2β¦ amount=9600000000 state=PAID
+ org A idx=2 GCFTJIXCBQ⦠amount=9000000000 state=PAID
+PASS 3: org B sees 0 payments; every org A payment id β 404; on-chain id β 404
+```
+
+The indexer **never invents a tenant**. It previously auto-created one organization
+per deployment and attached every discovered escrow to it β a guess that would place
+one party's payroll inside another's workspace. Unattributable events are recorded
+with `attributed = false` and replayed once an operator claims the escrow, so a
+claim does not lose the history that predates it.
+
+### Payment state machine (P2 #1)
+
+| Claim | Evidence |
+|---|---|
+| 16 states, 38 transitions, each with a declared actor | `src/lib/payments/state-machine.ts`; [`../PAYMENT_STATE_MACHINE.md`](../PAYMENT_STATE_MACHINE.md) |
+| Every **undeclared** (from, to) pair is rejected, for every actor kind | `state-machine.test.ts` β "every undeclared pair is rejected" (>500 pairs asserted) |
+| **Only a chain observer can reach `PAID`** β no user or system path | `state-machine.test.ts` β "PAID is reachable only by the indexer" |
+| A MANAGER cannot exercise the FINANCE decision | "does not let a MANAGER exercise the finance rejection" |
+| One wallet cannot supply both halves of the dual-approval gate | `actions.test.ts` β "refuses one wallet supplying both halves of the gate" |
+| `SETTLEMENT_FAILED` cannot be retried by a user | "refuses retry after a settlement that DID reach the chain" (409 `RECONCILIATION_FIRST`) |
+| Retried settlement does not double-pay | "replays the original attempt for a repeated key" |
+| Cross-tenant access returns 404, not 403 | `actions.test.ts` β "tenant isolation" (6 actions Γ cross-tenant) |
+| Racing transitions: exactly one wins | "lets only one of two racing transitions win" |
+| Reconciliation records disagreements instead of overwriting | `reconcile.test.ts` (21 tests) |
+| A false "failed" transaction is detected and flagged do-not-retry | "detects a false failure and warns against retrying" |
+| No generic "Processing" anywhere in the UI | `PaymentStateBadge.test.tsx` β all 16 states |
+| Transaction links only where a transaction can exist | `PaymentTransactionRef` tests |
+
+### Multi-payment indexing β the defect this phase fixed
+
+**Before:** the `Escrow` model held one `workerPubKey` and one `amountBaseUnits`, so
+a three-payee settlement collapsed into a single row carrying the FIRST payee's
+figures. Two of the three payments did not exist in the product.
+
+**Root cause found during this work:** the contract's `payment/final` event emits
+only `(escrow_id, total_amount, count)` β **no per-payment data**. The event stream
+was insufficient to reconstruct per-payment state, so any projection would have had
+to read `get_escrow` at index time, returning CURRENT state rather than state at
+that ledger. That makes re-indexing non-deterministic. Per-payment events
+(`payment/add`, `payment/paid`, `payment/cancel`) were added to the contract. No
+change to authority or validation β the security model is identical.
+
+**Verified against live Testnet data** (escrow #3, `COREFLOW_LIVE_TESTNET=1`):
+
+```
+escrow 3: 3 payment(s)
+ idx=0 GDHMEB2U2X⦠amount=10000000000 hours=40 state=PAID
+ idx=1 GA7Q23T4I2β¦ amount=9600000000 hours=32 state=PAID
+ idx=2 GCFTJIXCBQ⦠amount=9000000000 hours=45 state=PAID
+```
+
+Per-payment audit history, all attributed to the indexer (not a person):
+
+| Event | previous β new | count |
+|---|---|---|
+| `payment.indexed` | β `AWAITING_ORACLE` | 3 |
+| `payment.oracle.verified` | `AWAITING_ORACLE` β `ORACLE_VERIFIED` | 3 |
+| `approval.manager.observed` | `AWAITING_MANAGER` β `AWAITING_FINANCE` | 3 |
+| `approval.finance.observed` | `AWAITING_FINANCE` β `READY_TO_SETTLE` | 3 |
+| `payment.state.changed` | `READY_TO_SETTLE` β `PAID` | 3 |
+
+One batch, three payments, 17 chain events, **0 reconciliation findings**.
+
+### Restartability, demonstrated accidentally
+
+During this work an indexer run crashed partway through (a genuine bug: Prisma's
+interactive transaction client has no `$transaction`, so nested transaction code
+threw). The crashed run left a **committed prefix** β escrow and three payment rows
+β with ChainEvent markers proving exactly which events had applied. The next run
+skipped those, processed the remaining four, and completed. That is the
+partial-ingestion property working on real data rather than in a test.
+
+### Pause-gated contract upgrade
+
+The per-payment events were deployed by **upgrading the existing v2 contract in
+place**, which preserved its address and all existing escrows:
+
+```
+upgrade without pausing first β Error(Contract, #22) NotPaused (refused)
+set_paused(true) β upgrade β set_paused(false) (succeeded)
+get_admin, expected_admin, oracle registry (all survived)
+escrow 2: 3 payments, manager_approved=true (state intact)
+extend_escrow_ttl (new entry point live)
+```
+
+### Indexing (chain β database)
+
+Verified against a live Postgres with the real indexer
+(`src/lib/indexer/__tests__/live-testnet.test.ts`, opt-in via
+`COREFLOW_LIVE_TESTNET=1`):
+
+- 14 contract events read from Testnet RPC and projected
+- escrow rows written with `status = paid`
+- amounts stored as **base units** with `assetDecimals = 7` (not cents)
+- re-running the indexer adds no duplicate `ChainEvent` rows (idempotent by RPC
+ paging token)
+
+**Caveat, stated plainly:** the current off-chain `Escrow` model carries a single
+worker and amount, so a 3-payee batch is projected as one row holding the first
+payment's figures. The on-chain settlement is complete and correct; the database
+view of it is lossy. See Known limitations.
+
+### Live front-running test (F-9)
+
+A second contract was deployed from the same pinned WASM and an attacker
+identity attempted to claim admin:
+
+```
+victim contract : CCXRQYROEXDTTS77HNEZNLQLNSU35W6BKUPMN27HCV4JLB3VLHXDQQHT
+attacker : GCQR4PEWRAKH4IB4NUDU77WOU326UUQORNVBIHOZ5XD3ZK2FN5SJKSSY
+result : Error(Contract, #20) AdminMismatch
+get_admin after : null
+```
+
+The attacker won the race and gained nothing.
+
+---
+
+### Bulk Pay API layer (P2 #5, in progress)
+
+See [`../BULK_PAY.md`](../BULK_PAY.md). **Database-backed validation is BLOCKED** β the
+local development database is unavailable, so migration 8 is unapplied and no query
+below has run against real PostgreSQL.
+
+| Property | Evidence |
+|---|---|
+| One Payment per CSV row, never an aggregate | `payroll/__tests__/batches.test.ts`; `payroll/__tests__/csv.test.ts` (102 tests) |
+| Exact decimals; scientific notation, excess precision and fractional hours refused | `csv.test.ts` β 74 tests incl. `0.0000001` preserved as `1n` |
+| Spreadsheet formula injection neutralized at the storage boundary | `csv.test.ts` "hostile input"; asserted on the stored `sourceReference` |
+| Unknown request fields rejected, not ignored | `batches.route.test.ts` β `{state:'PAID', role:'FINANCE'}` β 400 `UNKNOWN_FIELD` |
+| Approver role derived from membership, never the body | `batches.route.test.ts` β `{"role":"FINANCE"}` refused at the schema |
+| Separation of duties holds for roles with BOTH permissions | `batches.route.test.ts` β ADMIN approving twice records 3, then 0 |
+| Cross-tenant batch returns a byte-identical 404 to a non-existent one | `batches.route.test.ts` β responses compared with `toEqual` |
+| Idempotent creation under double-click, retry and N concurrent requests | `batches.route.test.ts` β 1 batch, 3 payments, not 9 |
+| Same key + different payload refused rather than replayed | `batches.route.test.ts` β 409 `IDEMPOTENCY_KEY_REUSED` |
+| Lost-race path relies on the unique index, not the pre-check | `batches.test.ts` β pre-check blinded so only the index can stop the write |
+| Batch creation is atomic | `batches.test.ts` β injected failure leaves no batch, payment or audit event |
+| Approval changes no state, hash, amount or recipient | `batches.route.test.ts` β before/after snapshot equality |
+| 500 leaks no model name, `prisma`, or stack frames | `batches.route.test.ts` "error sanitization" |
+
+#### Two real bugs found while building this
+
+**`approval.create` omitted `orgId`.** `Approval`'s parent relation is a composite
+foreign key on `(orgId, paymentId)`, so `orgId` is a required scalar β the generated
+`ApprovalUncheckedCreateInput` lists it without `?`. The call passed only `paymentId`,
+and would have failed against real PostgreSQL with *Argument `orgId` is missing* on the
+**dual-approval path**. It survived because `db` is typed `any` and the in-memory
+double did not enforce required columns.
+
+Fixed in `payments/actions.ts`, and the double now enforces required columns for all
+twelve tenant-scoped tables. Switching that on immediately caught a **second** instance
+in `rejectPayment`'s `approval.upsert`, which a `.create`-only static audit had missed.
+
+**`any * any` is typed `number` by TypeScript.** The draft re-validation read payments
+as `any`, so `p.hours * p.rateBaseUnits` β the exactness check itself β would have been
+evaluated as floating-point arithmetic. Caught by `tsc` only once the operands were
+given explicit `bigint` types, which is why `RevalidationPayment` is declared rather
+than inferred.
+
+#### A fake-db defect that would have weakened a test
+
+The in-memory double's `$transaction` snapshotted **every** table and restored the whole
+snapshot on failure. Under concurrency that is wrong in the worst direction: when two
+transactions interleave at an `await` and the second fails, restoring its snapshot also
+discards the **first** one's committed writes.
+
+The concurrent-idempotency test therefore saw one batch with **one** payment instead of
+one batch with **three** β a result that invites weakening the assertion. Real Postgres
+isolates transactions per connection, so the double now records a per-transaction undo
+log and replays only its own writes.
+
+### Database validation gate (real PostgreSQL)
+
+`npm run test:integration` β 71 tests against PostgreSQL 18.6 on a private local
+cluster. A separate vitest config from the unit suite, so the two totals can never be
+conflated. Setup: [`../ENVIRONMENTS.md`](../ENVIRONMENTS.md#setting-up-the-development-database).
+
+| Property | Evidence |
+|---|---|
+| 10 migrations apply from zero | `prisma migrate deploy` on an empty database |
+| Schema matches the Prisma model | `prisma migrate diff --exit-code` β 0 (no drift) |
+| 14 composite tenant FKs exist | enumerated from `information_schema` |
+| Cross-tenant payment β batch rejected | `constraints.integration.test.ts` β P2003 |
+| Cross-tenant approval, project, worker, audit event rejected | 4 further P2003 tests |
+| Same wallet may be a worker in two orgs | uniqueness is per tenant, not global |
+| `(orgId, idempotencyKey)` unique; NULLs distinct | 3 tests |
+| One payment per on-chain slot | `(escrowId, onChainPaymentIndex)` β P2002 |
+| One RUNNING reconciliation run per org | partial unique index, incl. release-and-restart |
+| Money exact through the column | `250.50`, `1000`, `1n`, int8 max: client value, re-read, and `::text` from SQL all agree |
+| int8 overflow refused, not wrapped | max + 1 rejected |
+| Organization delete cascades; other tenant untouched | cascade test |
+| Rollback leaves zero partial records | real transaction, failure injected on row 3 |
+| One failing transaction cannot undo another | the defect the in-memory double had |
+| 3 concurrent identical creates β 1 batch, 3 payments | 1 response `created:true`, 2 `created:false` |
+| Same key + different payload β 409 | `IDEMPOTENCY_KEY_REUSED` |
+| 3 concurrent unkeyed creates β 3 distinct references | reference-collision retry under contention |
+| No user actor of any role can persist PAID | OWNER, ADMIN, MANAGER, FINANCE each refused |
+| PAID never moves backwards | 6 destinations Γ 3 actor kinds, all refused |
+| Audit trail is continuous | each row's `previousState` equals the prior row's `newState` |
+| Tenant isolation through the API | cross-tenant read/approve/re-validate β byte-identical 404 |
+
+#### Two more real defects, found only by real PostgreSQL
+
+**A migration that could never have applied.** `20260911020000_reconciliation_reliability`
+added six values to the existing `FindingKind` enum and then used them in `UPDATE`
+statements in the same file. PostgreSQL refuses that:
+
+```
+ERROR: unsafe use of new value "ASSET_MISMATCH" of enum type "FindingKind"
+HINT: New enum values must be committed before they can be used. (55P04)
+```
+
+`prisma migrate deploy` wraps each migration in one transaction, so add-and-use in a
+single file can never work β regardless of PostgreSQL version, and despite the
+generated comment in that file claiming it is only a PG-11-and-earlier concern. The
+earlier claim that "7 migrations apply from zero" was **wrong**: this migration had
+been applied by hand and then marked applied with `migrate resolve`, so the from-zero
+path had never actually been exercised. The ADD VALUE statements are now their own
+migration, `20260911015000_finding_kind_values`, and the full history applies from
+zero.
+
+**`onDelete: SetNull` on a composite FK whose `orgId` is NOT NULL.** Twelve relations
+declared it. SET NULL nulls **every** column of the foreign key, so deleting an
+Escrow, Project or Worker that any row referenced failed with:
+
+```
+Null constraint violation on the fields: (`orgId`)
+```
+
+Deleting an escrow was therefore impossible. `prisma validate` had been emitting a
+warning about exactly this, which had been noted as pre-existing and not
+investigated β the integration test is what forced it. Changed to `NoAction` in
+`20260911044540_composite_fk_no_action`: NO ACTION is checked at the end of the
+statement, so a cascading delete from Organization still succeeds, while a direct
+delete is refused while dependent rows exist. That refusal is the correct behaviour
+for financial data β detaching a payment from its escrow destroys the record of what
+the money was for.
+
+#### Three tests that were wrong, and were corrected rather than deleted
+
+Recorded because each looked like a product bug and was not:
+
+- A test asserted the planner would choose an index over a sequential scan on 200
+ rows. Postgres is right to prefer a seq scan at that size. Rewritten to prove a
+ usable index **exists** (`SET LOCAL enable_seqscan = off`) β which also exposed
+ that `SET LOCAL` outside a transaction is silently discarded.
+- A concurrency test raced `READY_TO_SETTLE β SUBMITTING` against
+ `READY_TO_SETTLE β PAID` and expected one winner. Both succeeded, correctly: the
+ table allows `SUBMITTING β PAID`, because a confirmation can arrive before our own
+ update lands. Re-aimed at a genuinely incompatible pair.
+- A concurrency assertion listed only two of the three legitimate refusal codes and
+ failed about **half the time**. The missing one was `TERMINAL`: when the CANCELLED
+ side won, the other transition was refused because nothing leaves a terminal state.
+ Found by running the suite ten times rather than accepting eight green runs. The
+ flake was the test's, not the product's β and a flaky financial test is exactly the
+ kind that gets silenced instead of understood.
+- A test expected `Argument \`orgId\` is missing`. Prisma reports the missing
+ **relation**: `Argument \`org\` is missing`. Worth recording, since grepping logs
+ for the column name would never surface that failure.
+
+### Live Testnet funding validation β ATTEMPTED, BLOCKED
+
+**No transaction was submitted. No funds moved.** Recorded in
+[`testnet-v2-live-funding.json`](testnet-v2-live-funding.json).
+
+This is a live-infrastructure attempt, separate from the unit and integration suites
+and separate from the historical v1 Mainnet activity. It is **not** evidence of
+adoption or of anything settling.
+
+The run stopped at transaction **simulation** with `Error(Contract, #16)` β
+`OracleKeyNotRegistered`. The v2 contract refused to create the escrow because the
+oracle public key supplied is not in its admin-managed registry. Because simulation
+failed, nothing reached the network.
+
+| Read-only check | Result |
+|---|---|
+| `is_oracle_key_registered(3b9d395aβ¦)` β the key in the local environment | **false** |
+| `is_oracle_key_registered(f42a4883β¦)` β the key recorded at deployment | **true** |
+
+The contract trusts the key from deployment time and does not trust the one now in
+the local environment β consistent with the oracle secret having been rotated
+locally without the new public key being registered on-chain.
+
+**No key was registered or revoked.** Which key is the post-rotation one is a fact
+only the operator holds, and registering the wrong one would re-authorize a
+credential that may be compromised β exactly what the admin registry exists to
+prevent. This is therefore an operator action, and the π΄ outstanding secret rotation
+is now on the critical path rather than deferred.
+
+What the run did establish before stopping:
+
+| Stage | Result |
+|---|---|
+| Environment preflight | local PostgreSQL + CoreFlow v2 Testnet |
+| Payroll from a real CSV through the real parser and batch service | 1 batch, 3 payments |
+| Exact base units persisted | 10000000 + 15000000 + 5000000 = 30000000 (3.00 test USDC) |
+| Dual approval as real `Approval` rows, two distinct wallets | 6 rows |
+| Funding intent opened, plan frozen, digest verified against its content | β
|
+| Manager Testnet balance | 77,120 test USDC β funds were not the blocker |
+
+The contract refusing an unregistered oracle is the security control working. A
+manager cannot install their own oracle, which is the defect this phase's
+attestation registry was built to close β and it held against a real transaction.
+
+## 4. Instawards SOW deliverables
+
+| # | Deliverable | Implementation | Test | Live evidence |
+|---|---|---|---|---|
+| 1 | Token transfer integration | `pay_batch` / `initialize_multi_sig_escrow` (`contracts/core-flow/src/lib.rs`) | `test_pay_batch_settles_two_assets_in_one_call`, `test_custody_sum_invariant_fuzz` | Golden path Β§3 step 6β7 |
+| 2 | Ed25519 oracle verification | `build_proof_message`, `verify_oracle_work`, `proof_preimage`; `src/lib/oracle/index.ts`; `scripts/oracle-cli.mjs` | `test_proof_preimage_matches_cross_language_vector`, `test_contract_preimage_matches_independent_implementation`, 16 TS oracle tests | Golden path Β§3 step 3β4 |
+| 3 | Bulk Pay + Freighter dual approval | `src/app/bulk-pay/page.tsx`, `manager_approve` / `finance_approve` | `test_finalize_without_finance_approval_fails`, `test_escrow_rejects_identical_manager_and_finance` | Golden path Β§3 step 5 |
+| 4 | Testing, docs, validation evidence | 62 Rust + 135 TS | this document | `testnet-v2-golden-path.json` |
+
+---
+
+## 5. Cross-language proof vector
+
+[`proof-vector-v2.json`](proof-vector-v2.json) pins the 198-byte `CFWP-v2`
+preimage across three independent implementations:
+
+1. **Rust (contract)** β `test_proof_preimage_matches_cross_language_vector`
+2. **TypeScript (server signer)** β `builds the exact preimage pinned by the cross-language vector`
+3. **Contract vs. independent Rust** β `test_contract_preimage_matches_independent_implementation`
+
+The Rust test's builder is deliberately a *second* implementation rather than a
+call into the contract's. Sharing the builder would prove only that one function
+agrees with itself, and a field silently dropped from the preimage would pass.
+
+---
+
+## 6. Known limitations
+
+Stated plainly rather than omitted.
+
+| Limitation | Detail |
+|---|---|
+| **Whole hours only** | The contract enforces `hours Γ rate == amount` with integer hours. `,001` at `5/h` is 40.04 h and is **rejected at creation**. Fractional-hour payroll requires a versioned scaled-hours schema (v3). Hours and amounts are never silently rounded. |
+| **v2 is Testnet only** | Mainnet runs v1, which has none of v2's hardening. |
+| **Storage archival** | Persistent entries that run out of rent are archived to the Expired State Stack and require a `RestoreFootprint` operation before the escrow can be used again. This is recoverable, not fund loss. `extend_escrow_ttl` is permissionless so anyone can keep an escrow alive. |
+| **Rate limiter is per-instance** | In-memory; on a multi-instance deployment effective limits scale with instance count. Needs a shared store for production. |
+| **`upgrade` remains a centralization risk** | Requiring a pause first makes it observable and deliberate; it does not constrain a malicious admin. |
+| **Test USDC** | The Testnet settlement asset is a locally issued `USDC`, not Circle USDC. |
+| ~~Indexer projects one payee per escrow~~ | **FIXED in P2 #1.** One `Payment` row per on-chain payment slot, verified against live Testnet data above. |
+| **Batch-level approval granularity** | Manager and finance approval are per-ESCROW on-chain, so approving advances every payment in that escrow. Per-payment approval would need a contract change and is not claimed. |
+| **`PAID` is terminal** | When reconciliation finds a payment recorded as `PAID` that the chain disputes, it opens a finding but cannot move the payment, because no transition leaves `PAID`. The finding is the durable record; the state machine was not weakened to allow an exit. |
diff --git a/docs/evidence/proof-vector-v2.json b/docs/evidence/proof-vector-v2.json
new file mode 100644
index 0000000..2e3db21
--- /dev/null
+++ b/docs/evidence/proof-vector-v2.json
@@ -0,0 +1,18 @@
+{
+ "schema": "CFWP-v2",
+ "escrowId": 1,
+ "networkPassphrase": "Test SDF Network ; September 2015",
+ "contractId": "CCQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2CNSG",
+ "oraclePublicKey": "79b5562e8fe654f94078b112e8a98ba7901f853ae695bed7e0e3910bad049664",
+ "signatures": [
+ {
+ "paymentId": 0,
+ "worker": "GB43KVROR7TFJ6KAPCYRF2FJROTZAH4FHLTJLPWX4DRZCC5NASLGITR6",
+ "hours": 40,
+ "nonce": 0,
+ "messageSha256": "0534a51a5c8811b88f69d500bb7bb5c3e188f6ece125bbac489f756d68155a11",
+ "message": "434657500002cee0302d59844d32bdca915c8203dd44b33fbb7edc19051ea37abedf28ecd4725b0c63242683ea58b14aff3c6a455fa6dbf3573ddedc1e4fa218e0406711ba422cbbd006041eea71603dacf22e8af1a8cbf2f3b0083caa8b8bf333ab565ce2e0511957404a7b60b722a939858e47fa9205c5f7c71de7941f15d2f489c8c53ceb0000000100000000000000000000000000000000000027100000000000000000000000000000002800000000000003e800000000000007d00000000000000000",
+ "signature": "TdKHLe52uA6PSuj70Lkkkopd5gTgmzLic2ZT3HmOZ6e4U6DoKanImbyjUT40bA8uRxzWhbFo8Alfl2HYfKs+Cg=="
+ }
+ ]
+}
diff --git a/docs/evidence/testnet-v2-deployment.json b/docs/evidence/testnet-v2-deployment.json
new file mode 100644
index 0000000..54385e5
--- /dev/null
+++ b/docs/evidence/testnet-v2-deployment.json
@@ -0,0 +1,25 @@
+{
+ "version": "v2",
+ "network": "testnet",
+ "networkPassphrase": "Test SDF Network ; September 2015",
+ "contractId": "CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4",
+ "wasmSha256": "d9f2d849d69b56aebcbdf585e8b2e0e8d81d9e5bf13f51534f27bf479d0e56da",
+ "wasmBytes": 42425,
+ "proofSchema": "CFWP-v2",
+ "adminAddress": "GAELEFW56FPEVOO57SJATCGEHX4ROQHULSUHEFMMPLEMACTA5A7PO2J2",
+ "adminPinnedInWasm": true,
+ "oraclePublicKey": "f42a48839e48d58e6628f5d096ee859e635b056be580bdcc68d620e2a2badae0",
+ "oracleKeyRegistered": true,
+ "paused": false,
+ "deployedAt": "2026-09-09T21:51:06Z",
+ "explorer": "https://stellar.expert/explorer/testnet/contract/CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4",
+ "note": "CoreFlow v2, Testnet only. v1 remains deployed separately on Mainnet and is not affected by this deployment.",
+ "settlementAsset": {
+ "code": "USDC",
+ "issuer": "GBGO2HQVLFR3G5MYUJQMBZAQQRYU2MITGICHPJXH2MDGWT3BBA6GDQUL",
+ "sacContractId": "CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M",
+ "decimals": 7,
+ "note": "Test USDC issued on Testnet for validation. Not Circle USDC."
+ },
+ "explorerAsset": "https://stellar.expert/explorer/testnet/contract/CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M"
+}
diff --git a/docs/evidence/testnet-v2-golden-path.json b/docs/evidence/testnet-v2-golden-path.json
new file mode 100644
index 0000000..6ec7624
--- /dev/null
+++ b/docs/evidence/testnet-v2-golden-path.json
@@ -0,0 +1,153 @@
+{
+ "version": "v2",
+ "network": "testnet",
+ "contractId": "CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4",
+ "steps": [
+ {
+ "name": "balances_before",
+ "at": "2026-09-10T19:58:38.331Z",
+ "manager": "799800000000",
+ "workers": [
+ "70000000000",
+ "67200000000",
+ "63000000000"
+ ]
+ },
+ {
+ "name": "escrow_created",
+ "at": "2026-09-10T19:58:51.520Z",
+ "escrowId": 8,
+ "custodyBaseUnits": "28600000000"
+ },
+ {
+ "name": "oracle_attestations",
+ "at": "2026-09-10T19:59:19.235Z",
+ "schema": "CFWP-v2",
+ "attestations": [
+ {
+ "paymentId": 0,
+ "hours": "40",
+ "nonce": "0",
+ "preimageSha256": "d496f441702fc3b0c37928a039f8d43395a53ac884c2ab7f68ec4e7c774672f5",
+ "signature": "5fRedsKW5IPJq9Xtz4XV1Y30yQZGDTH0zLQCMMUAR/DXTdyfPyehcGLK8ypKqJoC/Ro3sD3i0OPVT8ZxSN5jAw=="
+ },
+ {
+ "paymentId": 1,
+ "hours": "32",
+ "nonce": "1",
+ "preimageSha256": "ab18ef15eb13c82b745e0266730d5854b754b178cae492e7cc22cea86d1c3940",
+ "signature": "WIsjqLx6coqhddyJ2uh26WYt+BXokIjgEoqQXhhoBMJYyeNgq8wfjLbjBggC1jIo6r79aAgj4yfObmX7NUEFCA=="
+ },
+ {
+ "paymentId": 2,
+ "hours": "45",
+ "nonce": "2",
+ "preimageSha256": "a3509223a4d036851e7afce73d45e3d41747605060b6bf42768973abd8321978",
+ "signature": "Maj7+i/L14DJbRk79iozY5ENCIez55OAc8b2UIOUGqmjBPEVDJc5c08PpYj89VX4qwyiYVA/HGEYJpEWKPMXBw=="
+ }
+ ]
+ },
+ {
+ "name": "replay_rejected",
+ "at": "2026-09-10T19:59:20.332Z",
+ "paymentId": 0,
+ "nonce": "0",
+ "rejected": true
+ },
+ {
+ "name": "dual_approval",
+ "at": "2026-09-10T19:59:45.473Z",
+ "blockedNoApprovals": true,
+ "blockedOneApproval": true,
+ "manager": "GCQR4PEWRAKH4IB4NUDU77WOU326UUQORNVBIHOZ5XD3ZK2FN5SJKSSY",
+ "finance": "GAW6IYXANCROLFIO6TAN5SZJBUTBGTLRYH2GEZUBGRC3HHPAJ5O3GMAI"
+ },
+ {
+ "name": "settlement",
+ "at": "2026-09-10T19:59:58.350Z",
+ "custodyAfter": "0",
+ "paid": [
+ {
+ "paymentId": 0,
+ "worker": "GDHMEB2U2XQHSEB5JFYOOZDH7FHB7SUPCYLXFWVP5U5IRKKJKBCBRBQQ",
+ "receivedBaseUnits": "10000000000"
+ },
+ {
+ "paymentId": 1,
+ "worker": "GA7Q23T4I2CAQXCMVN3EQ7VSI7ZVGIGDDKBZQU65MUK66YL7OPPG5YMH",
+ "receivedBaseUnits": "9600000000"
+ },
+ {
+ "paymentId": 2,
+ "worker": "GCFTJIXCBQR6LVSD5EL27JPIN24OJSNJRQDCZCDH6EDZHW3GHTMHGN67",
+ "receivedBaseUnits": "9000000000"
+ }
+ ]
+ },
+ {
+ "name": "double_settlement_rejected",
+ "at": "2026-09-10T19:59:59.105Z",
+ "rejected": true
+ },
+ {
+ "name": "final_state",
+ "at": "2026-09-10T19:59:59.992Z",
+ "escrowId": 8,
+ "escrow": {
+ "cancelled": false,
+ "finance_approved": true,
+ "finance_approver": "GAW6IYXANCROLFIO6TAN5SZJBUTBGTLRYH2GEZUBGRC3HHPAJ5O3GMAI",
+ "manager": "GCQR4PEWRAKH4IB4NUDU77WOU326UUQORNVBIHOZ5XD3ZK2FN5SJKSSY",
+ "manager_approved": true,
+ "oracle_pubkey": "f42a48839e48d58e6628f5d096ee859e635b056be580bdcc68d620e2a2badae0",
+ "oracle_rotations": 0,
+ "payments": [
+ {
+ "amount": "10000000000",
+ "end_date": 1789070312,
+ "hours_logged": "40",
+ "id": 1,
+ "proof_verified": true,
+ "rate_per_hour": "250000000",
+ "start_date": 1787860712,
+ "status": 3,
+ "token": "CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M",
+ "worker": "GDHMEB2U2XQHSEB5JFYOOZDH7FHB7SUPCYLXFWVP5U5IRKKJKBCBRBQQ"
+ },
+ {
+ "amount": "9600000000",
+ "end_date": 1789070312,
+ "hours_logged": "32",
+ "id": 2,
+ "proof_verified": true,
+ "rate_per_hour": "300000000",
+ "start_date": 1787860712,
+ "status": 3,
+ "token": "CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M",
+ "worker": "GA7Q23T4I2CAQXCMVN3EQ7VSI7ZVGIGDDKBZQU65MUK66YL7OPPG5YMH"
+ },
+ {
+ "amount": "9000000000",
+ "end_date": 1789070312,
+ "hours_logged": "45",
+ "id": 3,
+ "proof_verified": true,
+ "rate_per_hour": "200000000",
+ "start_date": 1787860712,
+ "status": 3,
+ "token": "CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M",
+ "worker": "GCFTJIXCBQR6LVSD5EL27JPIN24OJSNJRQDCZCDH6EDZHW3GHTMHGN67"
+ }
+ ]
+ }
+ }
+ ],
+ "escrowId": 8,
+ "assetContract": "CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M",
+ "totalSettledBaseUnits": "28600000000",
+ "completedAt": "2026-09-10T19:59:59.992Z",
+ "explorer": {
+ "contract": "https://stellar.expert/explorer/testnet/contract/CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4",
+ "asset": "https://stellar.expert/explorer/testnet/contract/CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M"
+ }
+}
\ No newline at end of file
diff --git a/docs/evidence/testnet-v2-live-funding.json b/docs/evidence/testnet-v2-live-funding.json
new file mode 100644
index 0000000..d9c5ca4
--- /dev/null
+++ b/docs/evidence/testnet-v2-live-funding.json
@@ -0,0 +1,53 @@
+{
+ "title": "Live Testnet funding validation \u2014 ATTEMPTED, BLOCKED",
+ "version": "v2",
+ "network": "testnet",
+ "attemptedAt": "2026-09-11",
+ "outcome": "BLOCKED_BEFORE_SUBMISSION",
+ "transactionSubmitted": false,
+ "fundsMoved": false,
+ "blocker": {
+ "contractError": "Error(Contract, #16)",
+ "name": "OracleKeyNotRegistered",
+ "stage": "transaction simulation",
+ "meaning": "The v2 contract refused to create the escrow because the oracle public key supplied is not in its admin-managed registry. Simulation failed, so nothing was submitted and no custody moved.",
+ "oracleKeyInLocalEnv": "3b9d395a725ba0be4c476a0504540fb8dd70a278fac140a20e0d74cd7f41ae44",
+ "oracleKeyInLocalEnvRegistered": false,
+ "oracleKeyRegisteredOnContract": "f42a48839e48d58e6628f5d096ee859e635b056be580bdcc68d620e2a2badae0",
+ "oracleKeyRegisteredOnContractIsFromDeployment": true
+ },
+ "interpretation": [
+ "The contract trusts the oracle key recorded at deployment time, and does not trust the key now in the local environment.",
+ "This is consistent with the oracle secret having been rotated locally without the new public key being registered on the contract.",
+ "Registering a key is an admin action, and which key is the post-rotation one is a fact only the operator holds. Registering the wrong one would re-authorize a credential that may be compromised, which is precisely what the admin registry exists to prevent. No key was registered or revoked."
+ ],
+ "verifiedReadOnly": [
+ {
+ "call": "is_oracle_key_registered(3b9d395a...)",
+ "result": false
+ },
+ {
+ "call": "is_oracle_key_registered(f42a4883...)",
+ "result": true
+ }
+ ],
+ "whatDidWork": [
+ "Environment preflight: local PostgreSQL + CoreFlow v2 Testnet",
+ "Organization, members, project and a 3-payment payroll created from a real CSV through the real parser and batch service",
+ "Exact base units persisted: 10000000 + 15000000 + 5000000 = 30000000 (3.00 test USDC)",
+ "Both halves of the approval gate recorded as real Approval rows by two distinct wallets",
+ "Funding intent opened; plan frozen and its SHA-256 digest verified to match its content",
+ "Manager Testnet balance confirmed sufficient: 77120 test USDC"
+ ],
+ "prerequisiteForRetry": [
+ "Operator confirms which oracle keypair is current (post-rotation).",
+ "Admin calls register_oracle_key() on CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4.",
+ "Admin calls revoke_oracle_key(f42a4883...) if that key is the exposed one.",
+ "Re-run: COREFLOW_LIVE_TESTNET=1 npx vitest run src/lib/funding/__tests__/live-funding.test.ts"
+ ],
+ "contract": "CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4",
+ "settlementAsset": "CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M",
+ "explorer": {
+ "contract": "https://stellar.expert/explorer/testnet/contract/CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4"
+ }
+}
diff --git a/package.json b/package.json
index 2cc4bb7..a785b1c 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,9 @@
"version": "0.1.0",
"private": true,
"scripts": {
+ "predev": "npm run check:env",
"dev": "next dev --experimental-https --experimental-https-key ./certs/localhost-key.pem --experimental-https-cert ./certs/localhost.pem",
+ "predev:http": "npm run check:env",
"dev:http": "next dev",
"build": "export DIRECT_URL=\"${DIRECT_URL:-$DATABASE_URL}\" && prisma generate && next build",
"vercel-build": "export DIRECT_URL=\"${DIRECT_URL:-$DATABASE_URL}\" && prisma generate && next build",
@@ -16,12 +18,20 @@
"typecheck": "tsc --noEmit",
"e2e": "playwright test",
"postinstall": "export DIRECT_URL=\"${DIRECT_URL:-$DATABASE_URL}\" && prisma generate",
+ "predb:migrate": "npm run check:env",
"db:migrate": "prisma migrate dev",
+ "predb:deploy": "npm run check:env",
"db:deploy": "prisma migrate deploy",
"db:studio": "prisma studio",
"contract:build": "cd contracts/core-flow && cargo build --target wasm32v1-none --release",
"contract:test": "cd contracts/core-flow && cargo test",
- "db:seed": "prisma db seed"
+ "predb:seed": "npm run check:env",
+ "db:seed": "prisma db seed",
+ "check:env": "node scripts/check-env.mjs",
+ "pretest:integration": "npm run check:env",
+ "test:integration": "vitest run --config vitest.integration.config.ts",
+ "predb:reset": "npm run check:env",
+ "db:reset": "prisma migrate reset --force --skip-seed"
},
"dependencies": {
"@prisma/client": "^5.22.0",
@@ -62,4 +72,4 @@
"typescript": "^5.2.0",
"vitest": "^4.1.8"
}
-}
\ No newline at end of file
+}
diff --git a/prisma/migrations/20260910000000_money_base_units/migration.sql b/prisma/migrations/20260910000000_money_base_units/migration.sql
new file mode 100644
index 0000000..671499c
--- /dev/null
+++ b/prisma/migrations/20260910000000_money_base_units/migration.sql
@@ -0,0 +1,27 @@
+-- Money is stored in the settlement asset's BASE UNITS, not cents.
+--
+-- WHY: the dashboard collected dollars, multiplied by 100, and passed the
+-- result to the contract as the on-chain amount. Stellar assets carry SEVEN
+-- decimals, so every escrow funded 100,000x less than the UI displayed. The
+-- column was also INTEGER, which overflows at $21,474,836.47.
+--
+-- CONVERSION: existing rows hold cents. One cent is 10^5 base units on a
+-- 7-decimal asset (10^7 / 10^2), so the historical values are scaled up rather
+-- than dropped. Those rows predate any real settlement at this scale; the
+-- multiply keeps the DISPLAYED figure stable, which is what they recorded.
+
+ALTER TABLE "Escrow" ADD COLUMN "financeApprover" TEXT;
+ALTER TABLE "Escrow" ADD COLUMN "assetDecimals" INTEGER NOT NULL DEFAULT 7;
+
+ALTER TABLE "Escrow" ADD COLUMN "amountBaseUnits" BIGINT;
+ALTER TABLE "Escrow" ADD COLUMN "rateBaseUnits" BIGINT;
+
+UPDATE "Escrow" SET
+ "amountBaseUnits" = "amountCents"::BIGINT * 100000,
+ "rateBaseUnits" = "rateCents"::BIGINT * 100000;
+
+ALTER TABLE "Escrow" ALTER COLUMN "amountBaseUnits" SET NOT NULL;
+ALTER TABLE "Escrow" ALTER COLUMN "rateBaseUnits" SET NOT NULL;
+
+ALTER TABLE "Escrow" DROP COLUMN "amountCents";
+ALTER TABLE "Escrow" DROP COLUMN "rateCents";
diff --git a/prisma/migrations/20260910120000_payment_state_machine/migration.sql b/prisma/migrations/20260910120000_payment_state_machine/migration.sql
new file mode 100644
index 0000000..fc02363
--- /dev/null
+++ b/prisma/migrations/20260910120000_payment_state_machine/migration.sql
@@ -0,0 +1,464 @@
+-- CoreFlow payment state machine (P2 #1).
+--
+-- Introduces the payment domain model: Organization / Project / Worker /
+-- PayrollBatch / Payment / Approval / BlockchainTransaction / AuditEvent /
+-- ReconciliationFinding, and makes Payment the atomic financial record.
+--
+-- ββ Why this migration is hand-ordered ββββββββββββββββββββββββββββββββββββββ
+-- The generated diff adds NOT NULL columns to `Escrow` with no default and
+-- retypes `OracleAttestation.paymentId` from the payment INDEX to a Payment FK.
+-- Applied verbatim, both destroy existing rows: the first fails outright on a
+-- non-empty table, the second silently loses the index it used to hold.
+--
+-- So the order here is: create the new world, BACKFILL from the old one, and
+-- only then tighten constraints and drop columns. The prior schema's single
+-- worker/amount per Escrow is expanded into one Payment row, which is the
+-- defect this phase exists to fix.
+
+-- ββ 1. Enums ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+CREATE TYPE "OrgRole" AS ENUM ('OWNER', 'ADMIN', 'MANAGER', 'FINANCE', 'WORKER', 'VIEWER');
+CREATE TYPE "PaymentState" AS ENUM ('DRAFT', 'VALIDATING', 'AWAITING_ORACLE', 'ORACLE_VERIFIED', 'AWAITING_MANAGER', 'AWAITING_FINANCE', 'READY_TO_SETTLE', 'SUBMITTING', 'CONFIRMING', 'PAID', 'REJECTED', 'CANCELLED', 'EXPIRED', 'SUBMISSION_FAILED', 'SETTLEMENT_FAILED', 'RECONCILIATION_REQUIRED');
+CREATE TYPE "ApprovalDecision" AS ENUM ('APPROVED', 'REJECTED');
+CREATE TYPE "TxKind" AS ENUM ('INITIALIZE_ESCROW', 'SUBMIT_HOURS_PROOF', 'MANAGER_APPROVE', 'FINANCE_APPROVE', 'PAY_BATCH', 'CANCEL_ESCROW', 'ROTATE_ORACLE_KEY', 'EXTEND_ESCROW_TTL');
+CREATE TYPE "TxStatus" AS ENUM ('PREPARING', 'SIMULATING', 'AWAITING_SIGNATURE', 'SUBMITTED', 'CONFIRMED', 'FAILED', 'EXPIRED', 'CANCELLED');
+CREATE TYPE "FindingKind" AS ENUM ('DB_PAID_CHAIN_NOT', 'CHAIN_PAID_DB_NOT', 'AMOUNT_MISMATCH', 'RECIPIENT_MISMATCH', 'MISSING_ON_CHAIN', 'ORPHAN_ON_CHAIN', 'FAILED_TX_ACTUALLY_SUCCEEDED');
+
+-- ββ 2. New tables βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+CREATE TABLE "Organization" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "slug" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Organization_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "OrgMember" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "userId" TEXT NOT NULL,
+ "role" "OrgRole" NOT NULL DEFAULT 'VIEWER',
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "OrgMember_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "Project" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "code" TEXT NOT NULL,
+ "archivedAt" TIMESTAMP(3),
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Project_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "Worker" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "userId" TEXT,
+ "walletAddress" TEXT NOT NULL,
+ "displayName" TEXT,
+ "email" TEXT,
+ "archivedAt" TIMESTAMP(3),
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Worker_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "PayrollBatch" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "projectId" TEXT,
+ "reference" TEXT NOT NULL,
+ "periodStart" TIMESTAMP(3),
+ "periodEnd" TIMESTAMP(3),
+ "sourceFilename" TEXT,
+ "sourceRowCount" INTEGER,
+ "uploadedBy" TEXT,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "PayrollBatch_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "Payment" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "batchId" TEXT NOT NULL,
+ "escrowId" TEXT,
+ "projectId" TEXT,
+ "workerId" TEXT,
+ "recipientAddress" TEXT NOT NULL,
+ "onChainPaymentIndex" INTEGER,
+ "assetContractId" TEXT,
+ "assetCode" TEXT NOT NULL DEFAULT 'USDC',
+ "assetDecimals" INTEGER NOT NULL DEFAULT 7,
+ "amountBaseUnits" BIGINT NOT NULL,
+ "rateBaseUnits" BIGINT NOT NULL,
+ "hours" BIGINT NOT NULL,
+ "periodStart" TIMESTAMP(3),
+ "periodEnd" TIMESTAMP(3),
+ "state" "PaymentState" NOT NULL DEFAULT 'DRAFT',
+ "stateUpdatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "stateReason" TEXT,
+ "settledAt" TIMESTAMP(3),
+ "settlementTxHash" TEXT,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Payment_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "Approval" (
+ "id" TEXT NOT NULL,
+ "paymentId" TEXT NOT NULL,
+ "role" "OrgRole" NOT NULL,
+ "decision" "ApprovalDecision" NOT NULL,
+ "actorAddress" TEXT NOT NULL,
+ "reason" TEXT,
+ "txHash" TEXT,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "Approval_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "BlockchainTransaction" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "paymentId" TEXT,
+ "escrowId" TEXT,
+ "kind" "TxKind" NOT NULL,
+ "status" "TxStatus" NOT NULL DEFAULT 'PREPARING',
+ "idempotencyKey" TEXT NOT NULL,
+ "attempt" INTEGER NOT NULL DEFAULT 1,
+ "hash" TEXT,
+ "ledger" INTEGER,
+ "resultCode" TEXT,
+ "errorMessage" TEXT,
+ "contractId" TEXT,
+ "network" TEXT NOT NULL DEFAULT 'testnet',
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "submittedAt" TIMESTAMP(3),
+ "confirmedAt" TIMESTAMP(3),
+
+ CONSTRAINT "BlockchainTransaction_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "AuditEvent" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT,
+ "type" TEXT NOT NULL,
+ "actorAddress" TEXT,
+ "actorUserId" TEXT,
+ "actorSystem" TEXT,
+ "paymentId" TEXT,
+ "batchId" TEXT,
+ "escrowId" TEXT,
+ "previousState" TEXT,
+ "newState" TEXT,
+ "txHash" TEXT,
+ "metadata" JSONB,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "AuditEvent_pkey" PRIMARY KEY ("id")
+);
+
+CREATE TABLE "ReconciliationFinding" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "paymentId" TEXT,
+ "kind" "FindingKind" NOT NULL,
+ "dbState" TEXT,
+ "chainState" TEXT,
+ "detail" TEXT,
+ "metadata" JSONB,
+ "detectedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "resolvedAt" TIMESTAMP(3),
+ "resolvedBy" TEXT,
+ "resolution" TEXT,
+
+ CONSTRAINT "ReconciliationFinding_pkey" PRIMARY KEY ("id")
+);
+
+-- ββ 2b. Indexes and unique constraints on the new tables βββββββββββββββββββ
+-- Created BEFORE the backfill below, because the inserts rely on ON CONFLICT
+-- targets that do not exist until their unique indexes do.
+CREATE UNIQUE INDEX "Organization_slug_key" ON "Organization"("slug");
+CREATE INDEX "OrgMember_userId_idx" ON "OrgMember"("userId");
+CREATE INDEX "OrgMember_orgId_role_idx" ON "OrgMember"("orgId", "role");
+CREATE UNIQUE INDEX "OrgMember_orgId_userId_key" ON "OrgMember"("orgId", "userId");
+CREATE INDEX "Project_orgId_idx" ON "Project"("orgId");
+CREATE UNIQUE INDEX "Project_orgId_code_key" ON "Project"("orgId", "code");
+CREATE INDEX "Worker_orgId_idx" ON "Worker"("orgId");
+CREATE UNIQUE INDEX "Worker_orgId_walletAddress_key" ON "Worker"("orgId", "walletAddress");
+CREATE INDEX "PayrollBatch_orgId_idx" ON "PayrollBatch"("orgId");
+CREATE INDEX "PayrollBatch_createdAt_idx" ON "PayrollBatch"("createdAt");
+CREATE UNIQUE INDEX "PayrollBatch_orgId_reference_key" ON "PayrollBatch"("orgId", "reference");
+CREATE INDEX "Payment_orgId_state_idx" ON "Payment"("orgId", "state");
+CREATE INDEX "Payment_batchId_idx" ON "Payment"("batchId");
+CREATE INDEX "Payment_escrowId_idx" ON "Payment"("escrowId");
+CREATE INDEX "Payment_recipientAddress_idx" ON "Payment"("recipientAddress");
+CREATE INDEX "Payment_createdAt_idx" ON "Payment"("createdAt");
+CREATE UNIQUE INDEX "Payment_escrowId_onChainPaymentIndex_key" ON "Payment"("escrowId", "onChainPaymentIndex");
+CREATE INDEX "Approval_paymentId_idx" ON "Approval"("paymentId");
+CREATE UNIQUE INDEX "Approval_paymentId_role_key" ON "Approval"("paymentId", "role");
+CREATE UNIQUE INDEX "BlockchainTransaction_idempotencyKey_key" ON "BlockchainTransaction"("idempotencyKey");
+CREATE UNIQUE INDEX "BlockchainTransaction_hash_key" ON "BlockchainTransaction"("hash");
+CREATE INDEX "BlockchainTransaction_orgId_status_idx" ON "BlockchainTransaction"("orgId", "status");
+CREATE INDEX "BlockchainTransaction_paymentId_idx" ON "BlockchainTransaction"("paymentId");
+CREATE INDEX "BlockchainTransaction_escrowId_idx" ON "BlockchainTransaction"("escrowId");
+CREATE INDEX "BlockchainTransaction_hash_idx" ON "BlockchainTransaction"("hash");
+CREATE INDEX "AuditEvent_orgId_createdAt_idx" ON "AuditEvent"("orgId", "createdAt");
+CREATE INDEX "AuditEvent_paymentId_idx" ON "AuditEvent"("paymentId");
+CREATE INDEX "AuditEvent_batchId_idx" ON "AuditEvent"("batchId");
+CREATE INDEX "AuditEvent_escrowId_idx" ON "AuditEvent"("escrowId");
+CREATE INDEX "AuditEvent_type_idx" ON "AuditEvent"("type");
+CREATE INDEX "ReconciliationFinding_orgId_resolvedAt_idx" ON "ReconciliationFinding"("orgId", "resolvedAt");
+CREATE INDEX "ReconciliationFinding_paymentId_idx" ON "ReconciliationFinding"("paymentId");
+
+-- ββ 3. Additive column changes (safe on non-empty tables) ββββββββββββββββββ
+ALTER TABLE "ChainEvent" ADD COLUMN "contractId" TEXT,
+ADD COLUMN "network" TEXT NOT NULL DEFAULT 'testnet',
+ADD COLUMN "payload" JSONB,
+ADD COLUMN "paymentIndex" INTEGER,
+ADD COLUMN "txHash" TEXT;
+
+ALTER TABLE "Invitation" ADD COLUMN "orgId" TEXT,
+ADD COLUMN "orgRole" "OrgRole";
+
+-- ββ 4. A home for pre-existing records ββββββββββββββββββββββββββββββββββββββ
+-- Rows written before organizations existed have to belong to one. A single
+-- explicitly-named tenant is created to hold them, rather than inventing a
+-- plausible-looking company name that would read as real customer data.
+INSERT INTO "Organization" ("id", "name", "slug", "createdAt", "updatedAt")
+VALUES ('org_legacy_default', 'Legacy (pre-organization records)', 'legacy', NOW(), NOW())
+ON CONFLICT ("slug") DO NOTHING;
+
+-- Every existing user becomes an ADMIN of that tenant, preserving the access
+-- they already had. Narrowing it would lock people out of their own records.
+INSERT INTO "OrgMember" ("id", "orgId", "userId", "role", "createdAt", "updatedAt")
+SELECT 'ogm_' || "User"."id", 'org_legacy_default', "User"."id",
+ CASE WHEN "User"."role" = 'ADMIN' THEN 'OWNER'::"OrgRole" ELSE 'ADMIN'::"OrgRole" END,
+ NOW(), NOW()
+FROM "User"
+ON CONFLICT ("orgId", "userId") DO NOTHING;
+
+-- ββ 5. Escrow: widen before tightening ββββββββββββββββββββββββββββββββββββββ
+-- Added nullable, backfilled, then constrained. `id` casts Int -> TEXT in place,
+-- so escrow rows and their onChainId survive.
+ALTER TABLE "Escrow"
+ ADD COLUMN "orgId" TEXT,
+ ADD COLUMN "projectId" TEXT,
+ ADD COLUMN "contractId" TEXT,
+ ADD COLUMN "network" TEXT NOT NULL DEFAULT 'testnet',
+ ADD COLUMN "managerAddress" TEXT,
+ ADD COLUMN "financeApproverAddress" TEXT,
+ ADD COLUMN "oraclePublicKey" TEXT,
+ ADD COLUMN "oracleRotations" INTEGER NOT NULL DEFAULT 0,
+ ADD COLUMN "cancelled" BOOLEAN NOT NULL DEFAULT false,
+ ADD COLUMN "totalAmountBaseUnits" BIGINT NOT NULL DEFAULT 0;
+
+UPDATE "Escrow" SET
+ "orgId" = 'org_legacy_default',
+ -- Legacy rows predate per-escrow contract tracking. They belong to the v1
+ -- Mainnet deployment, which is the only contract that existed when they were
+ -- written; recording that is more honest than leaving it blank.
+ "contractId" = COALESCE("contractId", 'CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW'),
+ "managerAddress" = COALESCE("managerAddress", ''),
+ "financeApproverAddress" = COALESCE("financeApproverAddress", COALESCE("financeApprover", '')),
+ "cancelled" = ("status" = 'cancelled'),
+ "totalAmountBaseUnits" = COALESCE("amountBaseUnits", 0);
+
+ALTER TABLE "Escrow"
+ ALTER COLUMN "orgId" SET NOT NULL,
+ ALTER COLUMN "contractId" SET NOT NULL,
+ ALTER COLUMN "managerAddress" SET NOT NULL,
+ ALTER COLUMN "financeApproverAddress" SET NOT NULL;
+
+-- ββ 6. Expand each legacy Escrow into a batch + ONE Payment ββββββββββββββββ
+-- This is the lossy-projection fix applied backwards over history: the old
+-- schema could only express one payee per escrow, so each legacy escrow yields
+-- exactly one Payment carrying the figures it actually held.
+INSERT INTO "PayrollBatch"
+ ("id", "orgId", "reference", "sourceFilename", "sourceRowCount", "createdAt", "updatedAt")
+SELECT 'bat_legacy_' || "Escrow"."id",
+ 'org_legacy_default',
+ 'LEGACY-' || LPAD("Escrow"."id"::text, 5, '0'),
+ NULL, 1, "Escrow"."createdAt", NOW()
+FROM "Escrow"
+ON CONFLICT ("orgId", "reference") DO NOTHING;
+
+INSERT INTO "Payment" (
+ "id", "orgId", "batchId", "escrowId", "recipientAddress", "onChainPaymentIndex",
+ "assetContractId", "assetCode", "assetDecimals",
+ "amountBaseUnits", "rateBaseUnits", "hours",
+ "state", "stateUpdatedAt", "settledAt", "createdAt", "updatedAt"
+)
+SELECT
+ 'pay_legacy_' || "Escrow"."id",
+ 'org_legacy_default',
+ 'bat_legacy_' || "Escrow"."id",
+ "Escrow"."id"::text,
+ COALESCE("Escrow"."workerPubKey", ''),
+ 0,
+ "Escrow"."tokenAddress",
+ COALESCE("Escrow"."currency", 'USDC'),
+ COALESCE("Escrow"."assetDecimals", 7),
+ COALESCE("Escrow"."amountBaseUnits", 0),
+ COALESCE("Escrow"."rateBaseUnits", 1),
+ -- Whole hours implied by amount / rate. Zero when the rate is unusable,
+ -- rather than a rounded guess at work nobody attested to.
+ CASE WHEN COALESCE("Escrow"."rateBaseUnits", 0) > 0
+ THEN COALESCE("Escrow"."amountBaseUnits", 0) / "Escrow"."rateBaseUnits"
+ ELSE 0 END,
+ -- Legacy status strings map onto the new lifecycle. Anything unrecognised
+ -- becomes RECONCILIATION_REQUIRED so it surfaces for a human instead of
+ -- being quietly assumed healthy.
+ CASE "Escrow"."status"
+ WHEN 'paid' THEN 'PAID'::"PaymentState"
+ WHEN 'cancelled' THEN 'CANCELLED'::"PaymentState"
+ WHEN 'rejected' THEN 'REJECTED'::"PaymentState"
+ WHEN 'ready' THEN 'READY_TO_SETTLE'::"PaymentState"
+ WHEN 'pending_finance' THEN 'AWAITING_FINANCE'::"PaymentState"
+ WHEN 'pending_manager' THEN 'AWAITING_MANAGER'::"PaymentState"
+ WHEN 'pending_hours' THEN 'AWAITING_ORACLE'::"PaymentState"
+ ELSE 'RECONCILIATION_REQUIRED'::"PaymentState"
+ END,
+ NOW(),
+ CASE WHEN "Escrow"."status" = 'paid' THEN "Escrow"."updatedAt" ELSE NULL END,
+ "Escrow"."createdAt",
+ NOW()
+FROM "Escrow"
+ON CONFLICT ("escrowId", "onChainPaymentIndex") DO NOTHING;
+
+-- Record the migration itself in the audit history, so the provenance of these
+-- rows is visible rather than something a reader has to deduce.
+INSERT INTO "AuditEvent"
+ ("id", "orgId", "type", "actorSystem", "paymentId", "escrowId", "newState", "metadata", "createdAt")
+SELECT 'aud_mig_' || "Payment"."id", "Payment"."orgId", 'payment.migrated', 'migration',
+ "Payment"."id", "Payment"."escrowId", "Payment"."state"::text,
+ jsonb_build_object('migration', '20260910120000_payment_state_machine',
+ 'note', 'Expanded from the single-payee Escrow schema'),
+ NOW()
+FROM "Payment"
+WHERE "Payment"."id" LIKE 'pay_legacy_%';
+
+-- ββ 6b. Detach TimeLog before the Escrow key is retyped ββββββββββββββββββββ
+-- Escrow's primary key cannot be dropped while a foreign key depends on it, and
+-- TimeLog.escrowId must change type alongside it.
+ALTER TABLE "TimeLog" DROP CONSTRAINT "TimeLog_escrowId_fkey";
+ALTER TABLE "TimeLog" ALTER COLUMN "escrowId" DROP NOT NULL,
+ALTER COLUMN "escrowId" SET DATA TYPE TEXT;
+
+-- ββ 7. Escrow: retype the key and drop superseded columns βββββββββββββββββββ
+ALTER TABLE "Escrow" DROP CONSTRAINT "Escrow_pkey",
+DROP COLUMN "amountBaseUnits",
+DROP COLUMN "currency",
+DROP COLUMN "financeApprover",
+DROP COLUMN "rateBaseUnits",
+DROP COLUMN "rejectionReason",
+DROP COLUMN "status",
+DROP COLUMN "workerPubKey",
+ALTER COLUMN "id" DROP DEFAULT,
+ALTER COLUMN "id" SET DATA TYPE TEXT,
+ADD CONSTRAINT "Escrow_pkey" PRIMARY KEY ("id");
+DROP SEQUENCE "Escrow_id_seq";
+
+-- ββ 8. OracleAttestation: preserve the payment index before retyping βββββββ
+DROP INDEX "OracleAttestation_escrowOnChainId_paymentId_nonce_key";
+
+ALTER TABLE "OracleAttestation"
+ ADD COLUMN "onChainPaymentIndex" INTEGER,
+ ADD COLUMN "hours" BIGINT,
+ ADD COLUMN "contractId" TEXT,
+ ADD COLUMN "preimageSha256" TEXT,
+ ADD COLUMN "schema" TEXT NOT NULL DEFAULT 'CFWP-v2';
+
+-- The old `paymentId` column held the on-chain payment INDEX, not a Payment FK.
+-- Copy it across BEFORE the type change, or the index is lost silently.
+UPDATE "OracleAttestation" SET
+ "onChainPaymentIndex" = "paymentId",
+ "hours" = COALESCE("hoursLogged", 0),
+ -- Pre-existing attestations were produced under the v1 32-byte message, which
+ -- bound no network, contract, payee, asset, amount or period. Labelling them
+ -- CFWP-v2 would overstate their guarantees.
+ "schema" = 'v1-legacy';
+
+ALTER TABLE "OracleAttestation"
+ ALTER COLUMN "onChainPaymentIndex" SET NOT NULL,
+ ALTER COLUMN "hours" SET NOT NULL;
+
+ALTER TABLE "OracleAttestation" DROP COLUMN "hoursLogged";
+ALTER TABLE "OracleAttestation" DROP COLUMN "paymentId";
+ALTER TABLE "OracleAttestation" ADD COLUMN "paymentId" TEXT;
+ALTER TABLE "OracleAttestation" ALTER COLUMN "nonce" SET DATA TYPE BIGINT;
+
+-- Re-link attestations to the Payment rows created above.
+UPDATE "OracleAttestation" oa SET "paymentId" = p."id"
+FROM "Payment" p
+JOIN "Escrow" e ON e."id" = p."escrowId"
+WHERE e."onChainId" = oa."escrowOnChainId"
+ AND p."onChainPaymentIndex" = oa."onChainPaymentIndex";
+
+-- ββ 9. IndexerCursor: per (contract, network) ββββββββββββββββββββββββββββββ
+-- A single global cursor conflates deployments, and v1/v2 escrow ids overlap.
+ALTER TABLE "IndexerCursor"
+ ADD COLUMN "contractId" TEXT,
+ ADD COLUMN "network" TEXT;
+
+UPDATE "IndexerCursor" SET
+ "contractId" = COALESCE("contractId", 'CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW'),
+ "network" = COALESCE("network", 'public');
+
+ALTER TABLE "IndexerCursor"
+ ALTER COLUMN "contractId" SET NOT NULL,
+ ALTER COLUMN "network" SET NOT NULL;
+
+ALTER TABLE "IndexerCursor" DROP CONSTRAINT "IndexerCursor_pkey",
+ALTER COLUMN "id" DROP DEFAULT,
+ALTER COLUMN "id" SET DATA TYPE TEXT,
+ADD CONSTRAINT "IndexerCursor_pkey" PRIMARY KEY ("id");
+
+-- ββ 11. Indexes on altered tables ββββββββββββββββββββββββββββββββββββββββ
+CREATE INDEX "ChainEvent_escrowOnChainId_idx" ON "ChainEvent"("escrowOnChainId");
+CREATE INDEX "ChainEvent_contractId_network_idx" ON "ChainEvent"("contractId", "network");
+CREATE INDEX "Escrow_orgId_idx" ON "Escrow"("orgId");
+CREATE INDEX "Escrow_contractId_network_idx" ON "Escrow"("contractId", "network");
+CREATE UNIQUE INDEX "IndexerCursor_contractId_network_key" ON "IndexerCursor"("contractId", "network");
+CREATE INDEX "OracleAttestation_paymentId_idx" ON "OracleAttestation"("paymentId");
+CREATE UNIQUE INDEX "OracleAttestation_escrowOnChainId_onChainPaymentIndex_nonce_key" ON "OracleAttestation"("escrowOnChainId", "onChainPaymentIndex", "nonce");
+CREATE INDEX "TimeLog_escrowId_idx" ON "TimeLog"("escrowId");
+
+-- ββ 12. Foreign keys βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ALTER TABLE "OrgMember" ADD CONSTRAINT "OrgMember_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "OrgMember" ADD CONSTRAINT "OrgMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Project" ADD CONSTRAINT "Project_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Worker" ADD CONSTRAINT "Worker_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Worker" ADD CONSTRAINT "Worker_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Escrow" ADD CONSTRAINT "Escrow_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Escrow" ADD CONSTRAINT "Escrow_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "PayrollBatch" ADD CONSTRAINT "PayrollBatch_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "PayrollBatch" ADD CONSTRAINT "PayrollBatch_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_batchId_fkey" FOREIGN KEY ("batchId") REFERENCES "PayrollBatch"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_escrowId_fkey" FOREIGN KEY ("escrowId") REFERENCES "Escrow"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_workerId_fkey" FOREIGN KEY ("workerId") REFERENCES "Worker"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Approval" ADD CONSTRAINT "Approval_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "OracleAttestation" ADD CONSTRAINT "OracleAttestation_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_escrowId_fkey" FOREIGN KEY ("escrowId") REFERENCES "Escrow"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_batchId_fkey" FOREIGN KEY ("batchId") REFERENCES "PayrollBatch"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_escrowId_fkey" FOREIGN KEY ("escrowId") REFERENCES "Escrow"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "ReconciliationFinding" ADD CONSTRAINT "ReconciliationFinding_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "ReconciliationFinding" ADD CONSTRAINT "ReconciliationFinding_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20260911000000_multi_tenancy/migration.sql b/prisma/migrations/20260911000000_multi_tenancy/migration.sql
new file mode 100644
index 0000000..76d9ac6
--- /dev/null
+++ b/prisma/migrations/20260911000000_multi_tenancy/migration.sql
@@ -0,0 +1,186 @@
+-- CoreFlow multi-tenancy (P2 #2).
+--
+-- Makes the organization boundary a DATABASE constraint rather than an
+-- application convention.
+--
+-- ββ What this migration is for ββββββββββββββββββββββββββββββββββββββββββββββ
+-- Before it, `Payment.batchId` was a plain foreign key: it guaranteed the batch
+-- existed, not that the batch belonged to the payment's organization. A bug or a
+-- crafted request could attach a payment in org A to a batch, escrow, project or
+-- worker in org B, and no constraint would object. Tenant isolation rested
+-- entirely on every query remembering to filter β which is exactly the thing a
+-- security boundary must not depend on.
+--
+-- Every parent relation on tenant-owned records becomes a COMPOSITE foreign key
+-- on (orgId, id). Cross-tenant attachment is now rejected by PostgreSQL.
+--
+-- Also: `Approval` and `OracleAttestation` gain an explicit owner (they were
+-- reachable only by joining through Payment); `AuditEvent.orgId` becomes
+-- REQUIRED (a null-org audit row is invisible to every scoped query, i.e. to
+-- everyone); `Invitation` becomes org-scoped with a hashed token and per-org
+-- email uniqueness.
+--
+-- Hand-ordered: the generated diff adds NOT NULL columns to populated tables and
+-- drops Invitation.token before anything can be derived from it.
+
+-- ββ 1. Membership lifecycle βββββββββββββββββββββββββββββββββββββββββββββββββ
+CREATE TYPE "MembershipStatus" AS ENUM ('INVITED', 'ACTIVE', 'SUSPENDED', 'REMOVED');
+
+ALTER TABLE "OrgMember"
+ ADD COLUMN "status" "MembershipStatus" NOT NULL DEFAULT 'ACTIVE',
+ ADD COLUMN "invitedBy" TEXT,
+ ADD COLUMN "invitedAt" TIMESTAMP(3),
+ ADD COLUMN "activatedAt" TIMESTAMP(3),
+ ADD COLUMN "suspendedAt" TIMESTAMP(3),
+ ADD COLUMN "removedAt" TIMESTAMP(3);
+
+-- Pre-existing memberships were created by the legacy migration and are in use,
+-- so they are ACTIVE from their creation date rather than retroactively INVITED.
+UPDATE "OrgMember" SET "activatedAt" = "createdAt" WHERE "activatedAt" IS NULL;
+
+-- ββ 2. Approval: add its owner, derived from the payment ββββββββββββββββββββ
+ALTER TABLE "Approval" ADD COLUMN "orgId" TEXT;
+
+UPDATE "Approval" a SET "orgId" = p."orgId"
+FROM "Payment" p WHERE p."id" = a."paymentId";
+
+-- An approval whose payment vanished cannot be attributed to a tenant. Deleting
+-- it would destroy an approval record; there is nowhere safe to put it, so the
+-- migration fails loudly rather than inventing an owner.
+DO $$
+DECLARE orphans INT;
+BEGIN
+ SELECT count(*) INTO orphans FROM "Approval" WHERE "orgId" IS NULL;
+ IF orphans > 0 THEN
+ RAISE EXCEPTION 'Cannot migrate: % Approval row(s) have no resolvable organization. Resolve these manually before migrating.', orphans;
+ END IF;
+END $$;
+
+ALTER TABLE "Approval" ALTER COLUMN "orgId" SET NOT NULL;
+
+-- ββ 3. OracleAttestation: add its owner ββββββββββββββββββββββββββββββββββββ
+ALTER TABLE "OracleAttestation" ADD COLUMN "orgId" TEXT;
+
+UPDATE "OracleAttestation" oa SET "orgId" = p."orgId"
+FROM "Payment" p WHERE p."id" = oa."paymentId";
+
+-- Attestations predating the payment model have no link. They belong to the
+-- legacy tenant created by the previous migration, which is where every other
+-- pre-organization record already lives.
+UPDATE "OracleAttestation" SET "orgId" = 'org_legacy_default'
+WHERE "orgId" IS NULL
+ AND EXISTS (SELECT 1 FROM "Organization" WHERE "id" = 'org_legacy_default');
+
+DELETE FROM "OracleAttestation" WHERE "orgId" IS NULL;
+
+ALTER TABLE "OracleAttestation" ALTER COLUMN "orgId" SET NOT NULL;
+
+-- ββ 4. AuditEvent.orgId becomes required βββββββββββββββββββββββββββββββββββ
+UPDATE "AuditEvent" SET "orgId" = 'org_legacy_default'
+WHERE "orgId" IS NULL
+ AND EXISTS (SELECT 1 FROM "Organization" WHERE "id" = 'org_legacy_default');
+
+-- An audit row with no tenant is unreadable by any scoped query. Rather than
+-- keep invisible history, unattributable rows are removed and the count is
+-- reported so the loss is not silent.
+DO $$
+DECLARE orphans INT;
+BEGIN
+ SELECT count(*) INTO orphans FROM "AuditEvent" WHERE "orgId" IS NULL;
+ IF orphans > 0 THEN
+ RAISE NOTICE 'Removing % AuditEvent row(s) with no resolvable organization.', orphans;
+ DELETE FROM "AuditEvent" WHERE "orgId" IS NULL;
+ END IF;
+END $$;
+
+ALTER TABLE "AuditEvent" ALTER COLUMN "orgId" SET NOT NULL;
+
+-- ββ 5. Invitation: org-scoped, hashed token, per-org email βββββββββββββββββ
+DROP INDEX "Invitation_email_key";
+DROP INDEX "Invitation_token_idx";
+DROP INDEX "Invitation_token_key";
+
+ALTER TABLE "Invitation"
+ ADD COLUMN "tokenHash" TEXT,
+ ADD COLUMN "revokedAt" TIMESTAMP(3),
+ ADD COLUMN "revokedBy" TEXT,
+ ADD COLUMN "invitedBy" TEXT;
+
+-- Derive the hash from the existing plaintext token BEFORE dropping it, so live
+-- invitation links keep working. sha256 matches what the application computes.
+-- Built-in sha256() (PostgreSQL 11+), NOT pgcrypto's digest(). A migration that
+-- requires an extension fails on any managed Postgres where the role cannot
+-- CREATE EXTENSION β which is most of them.
+UPDATE "Invitation" SET "tokenHash" = encode(sha256(convert_to("token", 'UTF8')), 'hex')
+WHERE "tokenHash" IS NULL AND "token" IS NOT NULL;
+
+UPDATE "Invitation" SET "orgId" = 'org_legacy_default'
+WHERE "orgId" IS NULL
+ AND EXISTS (SELECT 1 FROM "Organization" WHERE "id" = 'org_legacy_default');
+UPDATE "Invitation" SET "orgRole" = 'VIEWER' WHERE "orgRole" IS NULL;
+
+-- Any invitation still unattributable is revoked rather than carried forward: an
+-- invitation that cannot name its organization must not be acceptable.
+DELETE FROM "Invitation" WHERE "orgId" IS NULL OR "tokenHash" IS NULL;
+
+ALTER TABLE "Invitation" DROP COLUMN "token";
+ALTER TABLE "Invitation"
+ ALTER COLUMN "tokenHash" SET NOT NULL,
+ ALTER COLUMN "orgId" SET NOT NULL,
+ ALTER COLUMN "orgRole" SET NOT NULL;
+
+-- ββ 6. Composite-key targets, before any FK references them ββββββββββββββββ
+CREATE UNIQUE INDEX "Escrow_orgId_id_key" ON "Escrow"("orgId", "id");
+CREATE UNIQUE INDEX "Payment_orgId_id_key" ON "Payment"("orgId", "id");
+CREATE UNIQUE INDEX "PayrollBatch_orgId_id_key" ON "PayrollBatch"("orgId", "id");
+CREATE UNIQUE INDEX "Project_orgId_id_key" ON "Project"("orgId", "id");
+CREATE UNIQUE INDEX "Worker_orgId_id_key" ON "Worker"("orgId", "id");
+
+-- ββ 7. Remaining indexes βββββββββββββββββββββββββββββββββββββββββββββββββββ
+CREATE UNIQUE INDEX "Invitation_tokenHash_key" ON "Invitation"("tokenHash");
+CREATE UNIQUE INDEX "Invitation_orgId_email_key" ON "Invitation"("orgId", "email");
+CREATE INDEX "Approval_orgId_idx" ON "Approval"("orgId");
+CREATE INDEX "Invitation_tokenHash_idx" ON "Invitation"("tokenHash");
+CREATE INDEX "Invitation_orgId_idx" ON "Invitation"("orgId");
+CREATE INDEX "OracleAttestation_orgId_idx" ON "OracleAttestation"("orgId");
+CREATE INDEX "OrgMember_orgId_status_idx" ON "OrgMember"("orgId", "status");
+
+-- ββ 8. Replace single-column FKs with composite ones βββββββββββββββββββββββ
+-- From here, PostgreSQL itself rejects a child row pointing at a parent in a
+-- different organization. Note MATCH SIMPLE semantics: when the optional id is
+-- NULL the constraint is satisfied, which is the intended behaviour for optional
+-- parents.
+ALTER TABLE "Approval" DROP CONSTRAINT "Approval_paymentId_fkey";
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_batchId_fkey";
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_escrowId_fkey";
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_orgId_fkey";
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_paymentId_fkey";
+ALTER TABLE "BlockchainTransaction" DROP CONSTRAINT "BlockchainTransaction_escrowId_fkey";
+ALTER TABLE "BlockchainTransaction" DROP CONSTRAINT "BlockchainTransaction_paymentId_fkey";
+ALTER TABLE "Escrow" DROP CONSTRAINT "Escrow_projectId_fkey";
+ALTER TABLE "OracleAttestation" DROP CONSTRAINT "OracleAttestation_paymentId_fkey";
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_batchId_fkey";
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_escrowId_fkey";
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_projectId_fkey";
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_workerId_fkey";
+ALTER TABLE "PayrollBatch" DROP CONSTRAINT "PayrollBatch_projectId_fkey";
+ALTER TABLE "ReconciliationFinding" DROP CONSTRAINT "ReconciliationFinding_paymentId_fkey";
+
+ALTER TABLE "Escrow" ADD CONSTRAINT "Escrow_orgId_projectId_fkey" FOREIGN KEY ("orgId", "projectId") REFERENCES "Project"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "PayrollBatch" ADD CONSTRAINT "PayrollBatch_orgId_projectId_fkey" FOREIGN KEY ("orgId", "projectId") REFERENCES "Project"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_batchId_fkey" FOREIGN KEY ("orgId", "batchId") REFERENCES "PayrollBatch"("orgId", "id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_escrowId_fkey" FOREIGN KEY ("orgId", "escrowId") REFERENCES "Escrow"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_projectId_fkey" FOREIGN KEY ("orgId", "projectId") REFERENCES "Project"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_workerId_fkey" FOREIGN KEY ("orgId", "workerId") REFERENCES "Worker"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Approval" ADD CONSTRAINT "Approval_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "Approval" ADD CONSTRAINT "Approval_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "OracleAttestation" ADD CONSTRAINT "OracleAttestation_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "OracleAttestation" ADD CONSTRAINT "OracleAttestation_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_orgId_escrowId_fkey" FOREIGN KEY ("orgId", "escrowId") REFERENCES "Escrow"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_batchId_fkey" FOREIGN KEY ("orgId", "batchId") REFERENCES "PayrollBatch"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_escrowId_fkey" FOREIGN KEY ("orgId", "escrowId") REFERENCES "Escrow"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "ReconciliationFinding" ADD CONSTRAINT "ReconciliationFinding_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE SET NULL ON UPDATE CASCADE;
+ALTER TABLE "Invitation" ADD CONSTRAINT "Invitation_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/20260911010000_chain_event_attribution/migration.sql b/prisma/migrations/20260911010000_chain_event_attribution/migration.sql
new file mode 100644
index 0000000..184d55e
--- /dev/null
+++ b/prisma/migrations/20260911010000_chain_event_attribution/migration.sql
@@ -0,0 +1,14 @@
+-- Records whether a chain event could be attributed to an organization.
+--
+-- The chain knows nothing about CoreFlow organizations. An escrow created outside
+-- the app β by the CLI, a validation script, or another client β has no tenant
+-- mapping, and guessing one would silently place another party's payroll inside a
+-- customer's workspace. Unattributable events are now recorded rather than either
+-- dropped or mis-assigned, and surfaced for an operator to claim.
+--
+-- Existing rows default to true: they were ingested under the previous model,
+-- which only ever projected escrows it had already attributed.
+
+ALTER TABLE "ChainEvent" ADD COLUMN "attributed" BOOLEAN NOT NULL DEFAULT true;
+
+CREATE INDEX "ChainEvent_attributed_idx" ON "ChainEvent"("attributed");
diff --git a/prisma/migrations/20260911015000_finding_kind_values/migration.sql b/prisma/migrations/20260911015000_finding_kind_values/migration.sql
new file mode 100644
index 0000000..96d7711
--- /dev/null
+++ b/prisma/migrations/20260911015000_finding_kind_values/migration.sql
@@ -0,0 +1,26 @@
+-- New FindingKind values, committed BEFORE anything uses them.
+--
+-- These were originally in 20260911020000_reconciliation_reliability, alongside
+-- the UPDATE statements that assign severities by kind. Real PostgreSQL refuses
+-- that: a value added to an existing enum cannot be USED until the transaction
+-- that added it commits.
+--
+-- ERROR: unsafe use of new value "ASSET_MISMATCH" of enum type "FindingKind"
+-- HINT: New enum values must be committed before they can be used. (55P04)
+--
+-- `prisma migrate deploy` wraps each migration in one transaction, so add-and-use
+-- in a single file can never work β regardless of PostgreSQL version, and despite
+-- the generated comment in that file suggesting it is only a PG-11-and-earlier
+-- concern. Splitting the ADD VALUE statements into their own migration makes the
+-- commit boundary explicit.
+--
+-- IF NOT EXISTS so this is safe to apply to a database that already has some of
+-- these values, which is the situation any database migrated by hand is in.
+
+-- AlterEnum
+ALTER TYPE "FindingKind" ADD VALUE IF NOT EXISTS 'ASSET_MISMATCH';
+ALTER TYPE "FindingKind" ADD VALUE IF NOT EXISTS 'UNKNOWN_ON_CHAIN_OBJECT';
+ALTER TYPE "FindingKind" ADD VALUE IF NOT EXISTS 'MISSING_PAYMENT_EVENT';
+ALTER TYPE "FindingKind" ADD VALUE IF NOT EXISTS 'DUPLICATE_PAYMENT_EVENT';
+ALTER TYPE "FindingKind" ADD VALUE IF NOT EXISTS 'CHAIN_UNREADABLE';
+ALTER TYPE "FindingKind" ADD VALUE IF NOT EXISTS 'OTHER';
diff --git a/prisma/migrations/20260911020000_reconciliation_reliability/migration.sql b/prisma/migrations/20260911020000_reconciliation_reliability/migration.sql
new file mode 100644
index 0000000..dca4ea9
--- /dev/null
+++ b/prisma/migrations/20260911020000_reconciliation_reliability/migration.sql
@@ -0,0 +1,126 @@
+-- Reconciliation reliability (P2 #4).
+--
+-- Turns reconciliation from a function into an operated system: runs with
+-- heartbeats and locking, a granular finding taxonomy, severity, and an auditable
+-- finding lifecycle.
+--
+-- ββ Why the taxonomy is granular ββββββββββββββββββββββββββββββββββββββββββββ
+-- A single "MISMATCH" value is useless. An unreadable RPC, a settled-but-
+-- unrecorded payment, and a database claiming a payment that never settled demand
+-- completely different responses β retry, catch up, and stop trusting the record.
+-- Collapsing them forces an operator to re-derive the distinction from free text.
+--
+-- ββ Why runs are recorded βββββββββββββββββββββββββββββββββββββββββββββββββββ
+-- So an operator can answer "when did CoreFlow last reconcile this organization,
+-- and did that run finish?". A reconciler whose last run silently died is worse
+-- than none, because the absence of findings reads as health.
+
+-- CreateEnum
+CREATE TYPE "FindingStatus" AS ENUM ('OPEN', 'ACKNOWLEDGED', 'INVESTIGATING', 'RESOLVED');
+
+-- CreateEnum
+CREATE TYPE "FindingSeverity" AS ENUM ('CRITICAL', 'HIGH', 'MEDIUM', 'LOW');
+
+-- CreateEnum
+CREATE TYPE "ReconcileOutcome" AS ENUM ('AGREED', 'CHAIN_AHEAD', 'DATABASE_AHEAD', 'CHAIN_UNREADABLE', 'MISMATCHED', 'UNKNOWN_ON_CHAIN_OBJECT', 'ORPHANED_DATABASE_OBJECT');
+
+-- CreateEnum
+CREATE TYPE "RunStatus" AS ENUM ('RUNNING', 'COMPLETED', 'FAILED', 'STALE');
+
+-- AlterEnum
+-- The new FindingKind values are added by the PRECEDING migration,
+-- 20260911015000_finding_kind_values, and deliberately not here.
+--
+-- PostgreSQL refuses to let a value added to an existing enum be used until the
+-- adding transaction commits (55P04), and `migrate deploy` runs each migration in
+-- one transaction. Since the statements below assign severities BY KIND, the
+-- values must already be committed by the time this migration runs.
+
+-- DropIndex
+DROP INDEX "ReconciliationFinding_orgId_resolvedAt_idx";
+
+-- AlterTable
+ALTER TABLE "Invitation" ALTER COLUMN "orgRole" SET DEFAULT 'VIEWER';
+
+-- AlterTable
+ALTER TABLE "ReconciliationFinding" ADD COLUMN "acknowledgedAt" TIMESTAMP(3),
+ADD COLUMN "acknowledgedBy" TEXT,
+ADD COLUMN "escrowOnChainId" INTEGER,
+ADD COLUMN "lastObservedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ADD COLUMN "observationCount" INTEGER NOT NULL DEFAULT 1,
+ADD COLUMN "paymentIndex" INTEGER,
+ADD COLUMN "remediation" TEXT,
+ADD COLUMN "runId" TEXT,
+ADD COLUMN "severity" "FindingSeverity" NOT NULL DEFAULT 'MEDIUM',
+ADD COLUMN "status" "FindingStatus" NOT NULL DEFAULT 'OPEN',
+ADD COLUMN "txHash" TEXT;
+
+-- CreateTable
+CREATE TABLE "ReconciliationRun" (
+ "id" TEXT NOT NULL,
+ "orgId" TEXT NOT NULL,
+ "correlationId" TEXT NOT NULL,
+ "scope" TEXT NOT NULL,
+ "contractId" TEXT,
+ "network" TEXT,
+ "status" "RunStatus" NOT NULL DEFAULT 'RUNNING',
+ "startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "completedAt" TIMESTAMP(3),
+ "heartbeatAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "escrowsExamined" INTEGER NOT NULL DEFAULT 0,
+ "paymentsExamined" INTEGER NOT NULL DEFAULT 0,
+ "agreed" INTEGER NOT NULL DEFAULT 0,
+ "mismatched" INTEGER NOT NULL DEFAULT 0,
+ "unreadable" INTEGER NOT NULL DEFAULT 0,
+ "chainAhead" INTEGER NOT NULL DEFAULT 0,
+ "databaseAhead" INTEGER NOT NULL DEFAULT 0,
+ "findingsOpened" INTEGER NOT NULL DEFAULT 0,
+ "correctionsApplied" INTEGER NOT NULL DEFAULT 0,
+ "errorMessage" TEXT,
+
+ CONSTRAINT "ReconciliationRun_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "ReconciliationRun_correlationId_key" ON "ReconciliationRun"("correlationId");
+
+-- CreateIndex
+CREATE INDEX "ReconciliationRun_orgId_startedAt_idx" ON "ReconciliationRun"("orgId", "startedAt");
+
+-- CreateIndex
+CREATE INDEX "ReconciliationRun_status_idx" ON "ReconciliationRun"("status");
+
+-- CreateIndex
+CREATE INDEX "ReconciliationFinding_orgId_status_idx" ON "ReconciliationFinding"("orgId", "status");
+
+-- CreateIndex
+CREATE INDEX "ReconciliationFinding_orgId_severity_status_idx" ON "ReconciliationFinding"("orgId", "severity", "status");
+
+-- CreateIndex
+CREATE INDEX "ReconciliationFinding_runId_idx" ON "ReconciliationFinding"("runId");
+
+-- AddForeignKey
+ALTER TABLE "ReconciliationRun" ADD CONSTRAINT "ReconciliationRun_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "ReconciliationFinding" ADD CONSTRAINT "ReconciliationFinding_runId_fkey" FOREIGN KEY ("runId") REFERENCES "ReconciliationRun"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+
+-- ββ Backfill: a finding that was already resolved is RESOLVED, not OPEN βββββ
+-- The new `status` column defaults to OPEN. Applied blindly that would reopen
+-- every historical finding, burying genuine problems in noise on the first run.
+UPDATE "ReconciliationFinding"
+SET "status" = 'RESOLVED'
+WHERE "resolvedAt" IS NOT NULL;
+
+-- Existing findings were observed once, when they were detected.
+UPDATE "ReconciliationFinding"
+SET "lastObservedAt" = "detectedAt"
+WHERE "lastObservedAt" IS NULL OR "lastObservedAt" < "detectedAt";
+
+-- Severity for pre-existing findings, by kind. DB_PAID_CHAIN_NOT is CRITICAL
+-- because it means the product may be making a false statement about money.
+UPDATE "ReconciliationFinding" SET "severity" = 'CRITICAL'
+WHERE "kind" IN ('DB_PAID_CHAIN_NOT', 'FAILED_TX_ACTUALLY_SUCCEEDED');
+UPDATE "ReconciliationFinding" SET "severity" = 'HIGH'
+WHERE "kind" IN ('AMOUNT_MISMATCH', 'RECIPIENT_MISMATCH', 'ASSET_MISMATCH', 'DUPLICATE_PAYMENT_EVENT');
diff --git a/prisma/migrations/20260911030000_reconciliation_run_lock/migration.sql b/prisma/migrations/20260911030000_reconciliation_run_lock/migration.sql
new file mode 100644
index 0000000..982dc50
--- /dev/null
+++ b/prisma/migrations/20260911030000_reconciliation_run_lock/migration.sql
@@ -0,0 +1,19 @@
+-- One RUNNING reconciliation run per organization, enforced by the database.
+--
+-- ββ Why a partial unique index ββββββββββββββββββββββββββββββββββββββββββββββ
+-- The application checks for an active run before starting one, but a check
+-- followed by an insert is a race: two workers triggered by the same cron tick can
+-- both pass the check and both insert. The consequence is not a double payment β
+-- corrections are compare-and-swap β but duplicated findings, doubled RPC cost, and
+-- two runs reporting contradictory summaries for the same moment.
+--
+-- A partial unique index makes PostgreSQL refuse the second insert outright, so the
+-- lock does not depend on the application noticing. Prisma's schema language cannot
+-- express a WHERE clause on a unique index, hence raw SQL.
+--
+-- COMPLETED, FAILED and STALE rows are deliberately excluded: historical runs must
+-- accumulate, and only the live one is exclusive.
+
+CREATE UNIQUE INDEX "ReconciliationRun_one_running_per_org"
+ ON "ReconciliationRun" ("orgId")
+ WHERE "status" = 'RUNNING';
diff --git a/prisma/migrations/20260911040000_payroll_batch_idempotency/migration.sql b/prisma/migrations/20260911040000_payroll_batch_idempotency/migration.sql
new file mode 100644
index 0000000..acf3e40
--- /dev/null
+++ b/prisma/migrations/20260911040000_payroll_batch_idempotency/migration.sql
@@ -0,0 +1,30 @@
+-- Batch-creation idempotency, enforced by the database.
+--
+-- Both columns are nullable and added to a table that may already hold rows, so
+-- this is additive only: no backfill, no NOT NULL, nothing to order carefully.
+--
+-- The unique index relies on Postgres treating NULLs as DISTINCT, so any number
+-- of batches created WITHOUT an idempotency key coexist, while two requests
+-- carrying the same key can only ever produce one row.
+
+ALTER TABLE "PayrollBatch" ADD COLUMN "idempotencyKey" TEXT;
+ALTER TABLE "PayrollBatch" ADD COLUMN "sourceChecksum" TEXT;
+
+-- Distinguishes a genuine retry (same key, same payload) from a key collision
+-- (same key, different payload). The latter is refused: returning the original
+-- batch would hand back something other than what the caller just described.
+ALTER TABLE "PayrollBatch" ADD COLUMN "idempotencyFingerprint" TEXT;
+
+CREATE UNIQUE INDEX "PayrollBatch_orgId_idempotencyKey_key"
+ ON "PayrollBatch"("orgId", "idempotencyKey");
+
+-- Supports "have I uploaded this exact file already?" without scanning a tenant's
+-- whole payroll history.
+CREATE INDEX "PayrollBatch_orgId_sourceChecksum_idx"
+ ON "PayrollBatch"("orgId", "sourceChecksum");
+
+-- Per-row free text from the uploaded CSV. Nullable and additive.
+--
+-- Stored already neutralized against spreadsheet formula injection, so every
+-- read path inherits the protection instead of each having to reapply it.
+ALTER TABLE "Payment" ADD COLUMN "sourceReference" TEXT;
diff --git a/prisma/migrations/20260911044540_composite_fk_no_action/migration.sql b/prisma/migrations/20260911044540_composite_fk_no_action/migration.sql
new file mode 100644
index 0000000..be0277c
--- /dev/null
+++ b/prisma/migrations/20260911044540_composite_fk_no_action/migration.sql
@@ -0,0 +1,96 @@
+-- Composite tenant foreign keys: ON DELETE SET NULL -> NO ACTION.
+--
+-- SET NULL was unusable on these relations and had never been exercised. It nulls
+-- EVERY column of the foreign key, and the first column is `orgId`, which is
+-- NOT NULL. So deleting an Escrow, Project or Worker that any row referenced
+-- failed with:
+--
+-- Null constraint violation on the fields: (`orgId`)
+--
+-- Found by an integration test against real PostgreSQL (`prisma validate` had been
+-- warning about it; the unit suite, using an in-memory double, could not see it).
+--
+-- NO ACTION rather than RESTRICT: NO ACTION is checked at the END of the
+-- statement, so a cascading delete from Organization β which removes parent and
+-- child in the same statement β still succeeds. RESTRICT is checked immediately
+-- and would reject it depending on evaluation order.
+--
+-- The resulting behaviour for a DIRECT delete is to refuse it while dependent rows
+-- exist. That is correct for financial data: detaching a payment from its escrow,
+-- project or worker destroys the record of what was paid for, and the payment must
+-- outlive an attempt to tidy up around it.
+--
+-- Every statement below only re-declares a referential action. No data is touched,
+-- no column is added or dropped, and the constraint columns are unchanged.
+
+-- DropForeignKey
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_orgId_batchId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_orgId_escrowId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "AuditEvent" DROP CONSTRAINT "AuditEvent_orgId_paymentId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "BlockchainTransaction" DROP CONSTRAINT "BlockchainTransaction_orgId_escrowId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "BlockchainTransaction" DROP CONSTRAINT "BlockchainTransaction_orgId_paymentId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "Escrow" DROP CONSTRAINT "Escrow_orgId_projectId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "OracleAttestation" DROP CONSTRAINT "OracleAttestation_orgId_paymentId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_orgId_escrowId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_orgId_projectId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "Payment" DROP CONSTRAINT "Payment_orgId_workerId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "PayrollBatch" DROP CONSTRAINT "PayrollBatch_orgId_projectId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "ReconciliationFinding" DROP CONSTRAINT "ReconciliationFinding_orgId_paymentId_fkey";
+
+-- AddForeignKey
+ALTER TABLE "Escrow" ADD CONSTRAINT "Escrow_orgId_projectId_fkey" FOREIGN KEY ("orgId", "projectId") REFERENCES "Project"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "PayrollBatch" ADD CONSTRAINT "PayrollBatch_orgId_projectId_fkey" FOREIGN KEY ("orgId", "projectId") REFERENCES "Project"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_escrowId_fkey" FOREIGN KEY ("orgId", "escrowId") REFERENCES "Escrow"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_projectId_fkey" FOREIGN KEY ("orgId", "projectId") REFERENCES "Project"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_orgId_workerId_fkey" FOREIGN KEY ("orgId", "workerId") REFERENCES "Worker"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "OracleAttestation" ADD CONSTRAINT "OracleAttestation_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_orgId_escrowId_fkey" FOREIGN KEY ("orgId", "escrowId") REFERENCES "Escrow"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_batchId_fkey" FOREIGN KEY ("orgId", "batchId") REFERENCES "PayrollBatch"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "AuditEvent" ADD CONSTRAINT "AuditEvent_orgId_escrowId_fkey" FOREIGN KEY ("orgId", "escrowId") REFERENCES "Escrow"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "ReconciliationFinding" ADD CONSTRAINT "ReconciliationFinding_orgId_paymentId_fkey" FOREIGN KEY ("orgId", "paymentId") REFERENCES "Payment"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
diff --git a/prisma/migrations/20260911052247_funding_transaction_batch_link/migration.sql b/prisma/migrations/20260911052247_funding_transaction_batch_link/migration.sql
new file mode 100644
index 0000000..3b0524f
--- /dev/null
+++ b/prisma/migrations/20260911052247_funding_transaction_batch_link/migration.sql
@@ -0,0 +1,19 @@
+-- Link a blockchain transaction to the batch it acts for.
+--
+-- Needed for funding idempotency. initialize_multi_sig_escrow creates the escrow
+-- AND pulls custody in ONE atomic invocation, so submitting it twice produces two
+-- funded escrows and charges the manager twice. The contract has no idempotency of
+-- its own, so the question "has this batch already been funded, or is an attempt in
+-- flight?" must be answered off-chain -- and escrowId cannot answer it, because it
+-- is null until the escrow the attempt is creating exists.
+--
+-- Nullable and additive: a payment-level transaction has no batch of its own.
+
+-- AlterTable
+ALTER TABLE "BlockchainTransaction" ADD COLUMN "batchId" TEXT;
+
+-- CreateIndex
+CREATE INDEX "BlockchainTransaction_batchId_idx" ON "BlockchainTransaction"("batchId");
+
+-- AddForeignKey
+ALTER TABLE "BlockchainTransaction" ADD CONSTRAINT "BlockchainTransaction_orgId_batchId_fkey" FOREIGN KEY ("orgId", "batchId") REFERENCES "PayrollBatch"("orgId", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
diff --git a/prisma/migrations/20260911121635_funding_plan_immutable/migration.sql b/prisma/migrations/20260911121635_funding_plan_immutable/migration.sql
new file mode 100644
index 0000000..13d5744
--- /dev/null
+++ b/prisma/migrations/20260911121635_funding_plan_immutable/migration.sql
@@ -0,0 +1,16 @@
+-- Persist the funding plan a transaction was prepared for, immutably.
+--
+-- Confirmation must compare chain evidence against the plan as it stood WHEN THE
+-- WALLET WAS OPENED, not against a freshly recomputed one. Configuration can move
+-- under a pending transaction -- a changed settlement asset, a different finance
+-- approver, an edited payment -- and a recomputed plan would quietly agree with
+-- whatever the chain happened to contain.
+--
+-- planDigest is SHA-256 over the canonical form, so tampering with the JSON is
+-- detectable rather than merely unlikely.
+--
+-- Nullable and additive. Money inside the JSON is stored as decimal STRINGS.
+
+-- AlterTable
+ALTER TABLE "BlockchainTransaction" ADD COLUMN "plan" JSONB,
+ADD COLUMN "planDigest" TEXT;
diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml
new file mode 100644
index 0000000..fbffa92
--- /dev/null
+++ b/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "postgresql"
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 2f77ed1..29b2641 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -1,5 +1,17 @@
-// This is your Prisma schema file,
-// learn more about it in the docs: https://pris.ly/d/prisma-schema
+// CoreFlow data model.
+//
+// ββ Authority, stated once βββββββββββββββββββββββββββββββββββββββββββββββββββ
+// THE CHAIN IS AUTHORITATIVE for settlement: token movement, contract
+// authorization, contract state, and final transaction results. This database is
+// a PROJECTION of that truth plus the workflow metadata the chain does not hold
+// (organizations, CSV provenance, assignments, search, audit views).
+//
+// Consequences encoded below:
+// * `Payment.state` is a projection, never an assertion. Only the indexer β
+// reading the contract's event log β may move a payment to PAID.
+// * A disagreement between this database and the chain is recorded as a
+// `ReconciliationFinding` and surfaced, never silently overwritten.
+// * Money is BigInt base units only. No Float, no Decimal-as-Float, no cents.
generator client {
provider = "prisma-client-js"
@@ -13,52 +25,102 @@ datasource db {
directUrl = env("DIRECT_URL")
}
-/// Two-role access control: ADMIN (full access) and EMPLOYEE (restricted).
+// βββ Identity & tenancy βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+/// Legacy platform-wide role. Retained so existing sessions and the admin
+/// bootstrap path keep working; per-organization authority lives in `OrgRole`.
enum Role {
ADMIN
EMPLOYEE
}
-model Escrow {
- id Int @id @default(autoincrement())
- onChainId Int? @unique // The Soroban contract escrow ID (can be null if pending creation)
- workerPubKey String
- amountCents Int
- rateCents Int
- currency String @default("USDC")
- tokenAddress String? // Stellar Asset Contract address used for custody/settlement
- status String @default("pending_manager") // pending_manager, pending_finance, ready, paid, cancelled, rejected
- managerApproved Boolean @default(false)
- financeApproved Boolean @default(false)
- rejectionReason String? // Reason provided by Admin if hours/escrow rejected
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
-
- timeLogs TimeLog[]
+/// Authority WITHIN an organization. Every payment operation is authorized
+/// against this, never against the platform-wide `Role`.
+///
+/// MANAGER and FINANCE are deliberately separate and neither implies the other:
+/// the product's core claim is separation of duties, and a role that could do
+/// both would make the dual-approval gate vacuous in the same way a single
+/// signer holding both on-chain keys would.
+enum OrgRole {
+ OWNER
+ ADMIN
+ MANAGER
+ FINANCE
+ WORKER
+ VIEWER
+}
- @@index([createdAt])
+/// Membership lifecycle. Only ACTIVE grants any authority.
+///
+/// SUSPENDED is kept distinct from REMOVED so access can be revoked without
+/// destroying the record of who held what β an audit trail that says a role
+/// "never existed" after an incident is worse than no trail at all.
+enum MembershipStatus {
+ INVITED
+ ACTIVE
+ SUSPENDED
+ REMOVED
}
-model TimeLog {
- id Int @id @default(autoincrement())
- escrowId Int
- escrow Escrow @relation(fields: [escrowId], references: [id])
- hoursLogged Int
- paymentId Int // Represents the schedule index from Soroban
- txHash String @unique // Enforce uniqueness to prevent double-counting hours off-chain
- createdAt DateTime @default(now())
+model Organization {
+ id String @id @default(cuid())
+ name String
+ slug String @unique
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ members OrgMember[]
+ projects Project[]
+ workers Worker[]
+ escrows Escrow[]
+ batches PayrollBatch[]
+ payments Payment[]
+ approvals Approval[]
+ attestations OracleAttestation[]
+ transactions BlockchainTransaction[]
+ auditEvents AuditEvent[]
+ findings ReconciliationFinding[]
+ reconciliationRuns ReconciliationRun[]
+ invitations Invitation[]
}
-// βββ Authentication Models ββββββββββββββββββββββββββββββββββββββββββββββββββββ
+model OrgMember {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ userId String
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
+ role OrgRole @default(VIEWER)
+ status MembershipStatus @default(ACTIVE)
+
+ /// Who granted this membership, for audit.
+ invitedBy String?
+ invitedAt DateTime?
+ activatedAt DateTime?
+ suspendedAt DateTime?
+ removedAt DateTime?
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ /// One membership row per user per organization.
+ @@unique([orgId, userId])
+ @@index([userId])
+ @@index([orgId, role])
+ @@index([orgId, status])
+}
model User {
id String @id @default(cuid())
walletAddress String @unique
- /// ADMIN or EMPLOYEE β stored as a Prisma enum for type safety
+ /// Platform-wide role. Organization authority comes from OrgMember.
role Role @default(EMPLOYEE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
- sessions Session[]
+
+ sessions Session[]
+ memberships OrgMember[]
+ workerProfiles Worker[]
}
model Session {
@@ -74,62 +136,778 @@ model Session {
@@index([expiresAt])
}
-model Invitation {
- id String @id @default(cuid())
- email String @unique
- role Role @default(EMPLOYEE)
- token String @unique
- expiresAt DateTime
- usedAt DateTime?
- createdAt DateTime @default(now())
+model Project {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ name String
+ code String
+ archivedAt DateTime?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
- @@index([token])
- @@index([email])
+ escrows Escrow[]
+ batches PayrollBatch[]
+ payments Payment[]
+
+ @@unique([orgId, code])
+ @@index([orgId])
+ /// Referenced by composite foreign keys, so a child cannot point at a
+ /// parent in another organization.
+ @@unique([orgId, id])
+}
+
+/// A payee. Distinct from `User`: a worker may be paid without ever signing in,
+/// and the same wallet may be a worker in several organizations.
+model Worker {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ /// Optional link to a platform account, when the payee has one.
+ userId String?
+ user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
+ walletAddress String
+ displayName String?
+ email String?
+ archivedAt DateTime?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ payments Payment[]
+
+ @@unique([orgId, walletAddress])
+ @@index([orgId])
+ /// Referenced by composite foreign keys, so a child cannot point at a
+ /// parent in another organization.
+ @@unique([orgId, id])
+}
+
+// βββ Escrow (on-chain custody) ββββββββββββββββββββββββββββββββββββββββββββββββ
+
+model Escrow {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ projectId String?
+ /// COMPOSITE FOREIGN KEY. Referencing (orgId, id) rather than id alone makes it
+ /// structurally impossible to attach this escrow to a project owned by a
+ /// different organization β a plain FK only checks the row exists.
+ project Project? @relation(fields: [orgId, projectId], references: [orgId, id], onDelete: NoAction)
+
+ /// The Soroban escrow id. Null only while a creation transaction is in flight.
+ onChainId Int? @unique
+ /// Which deployment this escrow lives in. v1 Mainnet and v2 Testnet escrows
+ /// must never be conflated, and escrow ids collide across deployments.
+ contractId String
+ network String @default("testnet")
+
+ managerAddress String
+ financeApproverAddress String
+ oraclePublicKey String?
+
+ /// Aggregate custody. Per-payment amounts live on Payment.
+ tokenAddress String?
+ assetDecimals Int @default(7)
+ totalAmountBaseUnits BigInt @default(0)
+
+ /// Projection of contract booleans, written only by the indexer.
+ managerApproved Boolean @default(false)
+ financeApproved Boolean @default(false)
+ cancelled Boolean @default(false)
+ oracleRotations Int @default(0)
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ payments Payment[]
+ transactions BlockchainTransaction[]
+ auditEvents AuditEvent[]
+
+ @@index([orgId])
+ @@index([contractId, network])
+ @@index([createdAt])
+ /// Composite-FK target.
+ @@unique([orgId, id])
+}
+
+// βββ Payroll batch (the unit a human uploads and approves) ββββββββββββββββββββ
+
+model PayrollBatch {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ projectId String?
+ /// Composite FK β see Escrow.project.
+ project Project? @relation(fields: [orgId, projectId], references: [orgId, id], onDelete: NoAction)
+
+ /// Human-facing identifier, e.g. CF-00042.
+ reference String
+
+ periodStart DateTime?
+ periodEnd DateTime?
+
+ /// Provenance for a CSV-originated batch.
+ sourceFilename String?
+ sourceRowCount Int?
+ uploadedBy String?
+
+ /// Retry key for batch CREATION, supplied by the client as `Idempotency-Key`.
+ ///
+ /// A finance user who double-clicks Create, refreshes after a gateway timeout,
+ /// or has the page open in two tabs must not end up with two payrolls. The
+ /// uniqueness is enforced by the database rather than by a read-then-write in
+ /// the service, because check-then-insert is a race that loses precisely under
+ /// the concurrency it is meant to handle. NULL is allowed and repeatable:
+ /// Postgres treats NULLs as distinct in a unique index, so a batch created
+ /// without a key is unaffected.
+ idempotencyKey String?
+
+ /// SHA-256 of the semantically meaningful parts of the creation request.
+ ///
+ /// Paired with `idempotencyKey` to tell a genuine retry from a key collision.
+ /// A retry carries the same payload and must replay the original outcome; the
+ /// SAME key with a DIFFERENT payload is a client bug, and honouring it would
+ /// silently return a batch that is not the one the caller just asked for. That
+ /// is refused rather than guessed at.
+ idempotencyFingerprint String?
+
+ /// SHA-256 of the uploaded file's bytes.
+ ///
+ /// NOT an idempotency key: uploading a byte-identical file next pay period is
+ /// legitimate, and must not be silently swallowed. It exists so the UI can say
+ /// "you uploaded this same file 4 minutes ago as CF-00041" and let a human
+ /// decide, which is the opposite of guessing on their behalf.
+ sourceChecksum String?
+
+ /// NOTE: there is deliberately no aggregate `status` column. A batch's
+ /// standing is derived from its payments; a stored rollup would be a second
+ /// copy of mutable truth, free to drift from the payments it summarizes.
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ payments Payment[]
+ auditEvents AuditEvent[]
+ transactions BlockchainTransaction[]
+
+ @@unique([orgId, reference])
+ /// The constraint that makes a double-submitted payroll impossible rather than
+ /// unlikely. Scoped to the organization: two tenants may reuse a key.
+ @@unique([orgId, idempotencyKey])
+ @@index([orgId])
+ @@index([createdAt])
+ @@index([orgId, sourceChecksum])
+ /// Composite-FK target.
+ @@unique([orgId, id])
+}
+
+// βββ Payment (the atomic financial record) ββββββββββββββββββββββββββββββββββββ
+
+/// Lifecycle of a single payment to a single payee.
+///
+/// Defined in full, with valid transitions and responsible actors, in
+/// docs/PAYMENT_STATE_MACHINE.md. The transition table is enforced in code by
+/// src/lib/payments/state-machine.ts β this enum only names the states.
+enum PaymentState {
+ /// Created, not yet validated. Editable.
+ DRAFT
+ /// Undergoing validation (address, amount, asset, hours/rate divisibility).
+ VALIDATING
+ /// Valid and funded on-chain; waiting for an oracle attestation.
+ AWAITING_ORACLE
+ /// An oracle attestation has been verified ON-CHAIN for this payment.
+ ORACLE_VERIFIED
+ /// Waiting for the manager's on-chain approval.
+ AWAITING_MANAGER
+ /// Manager approved; waiting for the distinct finance approver.
+ AWAITING_FINANCE
+ /// Both approvals present on-chain. Settlement may be submitted.
+ READY_TO_SETTLE
+ /// A settlement transaction has been built and signed, submission in flight.
+ SUBMITTING
+ /// Submitted and accepted by the network; awaiting ledger confirmation.
+ CONFIRMING
+ /// Chain-confirmed settlement. Only the indexer may set this.
+ PAID
+
+ // ββ Failure and recovery states, each distinct on purpose ββ
+ /// An approver explicitly declined.
+ REJECTED
+ /// Cancelled before settlement; on-chain custody refunded.
+ CANCELLED
+ /// The pay period or attestation window lapsed without settlement.
+ EXPIRED
+ /// The transaction never reached the network (build/sign/RPC failure).
+ /// Safe to retry: nothing was submitted.
+ SUBMISSION_FAILED
+ /// The transaction reached the chain and FAILED there. Retry only after
+ /// establishing what the chain actually did.
+ SETTLEMENT_FAILED
+ /// Database and chain disagree. Requires operator resolution; never cleared
+ /// automatically.
+ RECONCILIATION_REQUIRED
+}
+
+model Payment {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+
+ /// EVERY parent relation below is a COMPOSITE foreign key on (orgId, id),
+ /// and every one uses `onDelete: NoAction` rather than `SetNull`.
+ ///
+ /// SetNull is impossible here and was a latent defect: it nulls ALL the FK's
+ /// columns, and `orgId` is NOT NULL β so deleting an Escrow that any payment
+ /// referenced failed with "Null constraint violation on the fields: (orgId)".
+ /// Found by an integration test against real PostgreSQL; `prisma validate` had
+ /// been warning about it, and the unit suite could not see it.
+ ///
+ /// NoAction rather than Restrict because NO ACTION is checked at the END of the
+ /// statement. A cascading delete from Organization removes the parent and the
+ /// child in one statement, which RESTRICT would reject depending on evaluation
+ /// order. The effect for a direct delete is the same: an Escrow, Project or
+ /// Worker still referenced by a payment cannot be removed, which is correct β
+ /// detaching a payment from its context destroys the evidence of what was paid
+ /// for, and a financial record must outlive an attempt to tidy up around it.
+ ///
+ /// A plain `batchId` FK only guarantees the batch exists β not that it belongs
+ /// to this payment's organization. Without the composite key, a bug or a
+ /// crafted request could produce a payment in org A attached to a batch, escrow,
+ /// project or worker in org B, and no database constraint would object. The
+ /// tenant boundary would then depend entirely on the application remembering to
+ /// check, which is exactly what this phase is meant to stop relying on.
+ batchId String
+ batch PayrollBatch @relation(fields: [orgId, batchId], references: [orgId, id], onDelete: Cascade)
+
+ escrowId String?
+ escrow Escrow? @relation(fields: [orgId, escrowId], references: [orgId, id], onDelete: NoAction)
+
+ projectId String?
+ project Project? @relation(fields: [orgId, projectId], references: [orgId, id], onDelete: NoAction)
+
+ workerId String?
+ worker Worker? @relation(fields: [orgId, workerId], references: [orgId, id], onDelete: NoAction)
+
+ /// The payee wallet, denormalized deliberately: it is the immutable financial
+ /// identity of this payment. Re-pointing a Worker row must never silently
+ /// change who a historical payment was made to.
+ recipientAddress String
+
+ /// Zero-based index of this payment within its escrow's on-chain payments
+ /// vector β the `payment_id` argument the contract takes.
+ onChainPaymentIndex Int?
+
+ /// Settlement asset, and its decimals, captured at creation.
+ assetContractId String?
+ assetCode String @default("USDC")
+ assetDecimals Int @default(7)
+
+ /// Money, in the asset's base units. BigInt only.
+ amountBaseUnits BigInt
+ rateBaseUnits BigInt
+ /// Whole hours. v2 requires `hours * rate == amount` exactly; fractional
+ /// hours need a versioned scaled-hours schema (v3) and are NOT rounded here.
+ hours BigInt
+
+ periodStart DateTime?
+ periodEnd DateTime?
+
+ /// Free text from the uploader's CSV row, e.g. "Sprint 14".
+ ///
+ /// Stored already neutralized against spreadsheet formula injection (a leading
+ /// apostrophe where the value began with =, +, -, @, tab or CR), because this
+ /// text is re-displayed and can be re-exported. Neutralizing at the ingestion
+ /// boundary means no later renderer or export path has to remember to.
+ sourceReference String?
+
+ state PaymentState @default(DRAFT)
+ stateUpdatedAt DateTime @default(now())
+ /// Why the payment is in a failure state, in operator-readable terms.
+ stateReason String?
+
+ settledAt DateTime?
+ /// Hash of the confirmed settlement transaction. Set only from chain evidence.
+ settlementTxHash String?
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ approvals Approval[]
+ attestations OracleAttestation[]
+ transactions BlockchainTransaction[]
+ auditEvents AuditEvent[]
+ findings ReconciliationFinding[]
+
+ /// One payment per on-chain slot. This is the constraint that makes indexing
+ /// a three-payee settlement produce exactly three rows, no matter how many
+ /// times the events are replayed.
+ @@unique([escrowId, onChainPaymentIndex])
+ /// Composite-FK target for Approval, transactions, findings and audit rows.
+ @@unique([orgId, id])
+ @@index([orgId, state])
+ @@index([batchId])
+ @@index([escrowId])
+ @@index([recipientAddress])
+ @@index([createdAt])
+}
+
+/// An approval decision, recorded per payment per role.
+model Approval {
+ id String @id @default(cuid())
+ /// Denormalized tenant owner. An approval reachable only by joining through
+ /// Payment forces every authorization check to remember the join; carrying the
+ /// organization makes the scope explicit and lets the composite FK enforce it.
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ paymentId String
+ payment Payment @relation(fields: [orgId, paymentId], references: [orgId, id], onDelete: Cascade)
+
+ /// MANAGER or FINANCE. Stored as OrgRole so the separation-of-duties check
+ /// reads against the same vocabulary as membership.
+ role OrgRole
+ decision ApprovalDecision
+ /// Wallet that signed, as observed on-chain where applicable.
+ actorAddress String
+ reason String?
+ /// Transaction carrying the on-chain approval, when it had one.
+ txHash String?
+ createdAt DateTime @default(now())
+
+ /// One decision per role per payment. A second manager approval is a
+ /// duplicate, not a new fact.
+ @@unique([paymentId, role])
+ @@index([paymentId])
+ @@index([orgId])
+}
+
+enum ApprovalDecision {
+ APPROVED
+ REJECTED
+}
+
+// βββ Oracle attestations ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+model OracleAttestation {
+ id String @id @default(cuid())
+ /// Tenant owner. Required: an attestation unlocks settlement, so it must never
+ /// be reachable without an organization scope.
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ paymentId String?
+ payment Payment? @relation(fields: [orgId, paymentId], references: [orgId, id], onDelete: NoAction)
+
+ /// Identity of the on-chain slot this attestation is bound to.
+ escrowOnChainId Int
+ onChainPaymentIndex Int
+ contractId String?
+
+ /// Attestation schema. CFWP-v2 binds network, contract, worker, asset,
+ /// amount and period; v1 bound none of those.
+ schema String @default("CFWP-v2")
+
+ hours BigInt
+ nonce BigInt
+
+ /// sha256 of the 198-byte preimage, so an auditor can confirm what was signed
+ /// without the signature alone having to be trusted.
+ preimageSha256 String?
+ signature String
+
+ /// Wallet that requested the attestation (the escrow's on-chain manager).
+ createdBy String
+ createdAt DateTime @default(now())
+
+ /// One attestation per (escrow, payment, nonce) β a nonce is single-use, so
+ /// signing it twice is a defect, not a retry.
+ @@unique([escrowOnChainId, onChainPaymentIndex, nonce])
+ @@index([escrowOnChainId])
+ @@index([paymentId])
+ @@index([orgId])
+}
+
+// βββ Blockchain transactions (attempts, including retries) ββββββββββββββββββββ
+
+enum TxKind {
+ INITIALIZE_ESCROW
+ SUBMIT_HOURS_PROOF
+ MANAGER_APPROVE
+ FINANCE_APPROVE
+ PAY_BATCH
+ CANCEL_ESCROW
+ ROTATE_ORACLE_KEY
+ EXTEND_ESCROW_TTL
+}
+
+enum TxStatus {
+ PREPARING
+ SIMULATING
+ AWAITING_SIGNATURE
+ SUBMITTED
+ CONFIRMED
+ FAILED
+ EXPIRED
+ CANCELLED
+}
+
+/// One row per ATTEMPT, not one per payment. A retry after an RPC timeout is a
+/// new attempt against the same idempotency key; recording attempts separately
+/// is what lets reconciliation discover that a "failed" submission actually
+/// landed on chain.
+model BlockchainTransaction {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+
+ paymentId String?
+ payment Payment? @relation(fields: [orgId, paymentId], references: [orgId, id], onDelete: NoAction)
+ escrowId String?
+ escrow Escrow? @relation(fields: [orgId, escrowId], references: [orgId, id], onDelete: NoAction)
+
+ /// The batch this transaction acts for, where the action is batch-level.
+ ///
+ /// Funding is the case that needs it. `initialize_multi_sig_escrow` creates the
+ /// escrow AND pulls custody in ONE atomic invocation, so submitting it twice
+ /// creates two funded escrows and charges the manager twice. The contract has no
+ /// idempotency of its own, so "has this batch already been funded, or is a
+ /// funding attempt in flight?" must be answerable off-chain β which requires
+ /// knowing which batch an attempt belongs to. `escrowId` cannot serve: it is
+ /// null until the escrow the attempt is creating exists.
+ batchId String?
+ batch PayrollBatch? @relation(fields: [orgId, batchId], references: [orgId, id], onDelete: NoAction)
+
+ kind TxKind
+ status TxStatus @default(PREPARING)
+
+ /// Caller-supplied key that makes a mutation retry-safe. A repeated request
+ /// with the same key returns the original attempt instead of submitting a
+ /// second payment β the property that matters most in payroll.
+ idempotencyKey String @unique
+
+ /// Attempt number under this idempotency key.
+ attempt Int @default(1)
+
+ /// Null until submission. Unique when present: the same hash must never be
+ /// recorded twice.
+ hash String? @unique
+ ledger Int?
+
+ resultCode String?
+ errorMessage String?
+
+ contractId String?
+ network String @default("testnet")
+
+ /// The IMMUTABLE plan this transaction was prepared for.
+ ///
+ /// Captured when the intent is opened, before a wallet is shown, and never
+ /// rewritten. Confirmation compares chain evidence against THIS, not against a
+ /// freshly recomputed plan: configuration can move under a pending transaction
+ /// (a changed settlement asset, a different finance approver, an edited payment),
+ /// and a recomputed plan would quietly agree with whatever the chain happened to
+ /// contain. Money values inside are decimal STRINGS β JSON has no bigint, and a
+ /// Number here would be the rounding this codebase refuses everywhere else.
+ plan Json?
+
+ /// SHA-256 over the canonical form of `plan`.
+ ///
+ /// Lets a stored plan be proven unaltered without re-reading every field, and
+ /// makes any tampering with the JSON detectable rather than merely unlikely.
+ planDigest String?
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ submittedAt DateTime?
+ confirmedAt DateTime?
+
+ @@index([orgId, status])
+ @@index([paymentId])
+ @@index([escrowId])
+ @@index([batchId])
+ @@index([hash])
}
+// βββ Audit (append-only history) ββββββββββββββββββββββββββββββββββββββββββββββ
+
+/// Append-only record of what happened. Written on every state transition.
+///
+/// This is the history that a "current status" column cannot provide: it carries
+/// previous and new state together with the actor, so a payment's path can be
+/// reconstructed rather than inferred. Nothing in the application updates or
+/// deletes these rows.
+model AuditEvent {
+ id String @id @default(cuid())
+ /// REQUIRED. An audit row with no organization belongs to no tenant, which
+ /// means no scoped query can ever return it and no operator can ever see it β
+ /// an audit trail nobody can read is not an audit trail.
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+
+ /// Dotted event type, e.g. payment.state.changed, approval.granted.
+ type String
+
+ /// Who acted. `actorSystem` names the non-human actor (indexer, reconciler)
+ /// so a machine transition is never mistaken for a person's decision.
+ actorAddress String?
+ actorUserId String?
+ actorSystem String?
+
+ paymentId String?
+ payment Payment? @relation(fields: [orgId, paymentId], references: [orgId, id], onDelete: NoAction)
+ batchId String?
+ batch PayrollBatch? @relation(fields: [orgId, batchId], references: [orgId, id], onDelete: NoAction)
+ escrowId String?
+ escrow Escrow? @relation(fields: [orgId, escrowId], references: [orgId, id], onDelete: NoAction)
+
+ previousState String?
+ newState String?
+
+ txHash String?
+
+ /// Additional context, as JSON, sufficient to reconstruct the transition.
+ metadata Json?
+
+ createdAt DateTime @default(now())
+
+ @@index([orgId, createdAt])
+ @@index([paymentId])
+ @@index([batchId])
+ @@index([escrowId])
+ @@index([type])
+}
+
+/// Legacy flat audit log, retained so existing admin views and the bootstrap
+/// path keep working. New transitions write `AuditEvent`.
model AuditLog {
id String @id @default(cuid())
- action String // e.g. role.grant, escrow.create, auth.logout, escrow.reject, invitation.create
- actor String? // wallet address of the actor
- target String? // affected entity (wallet / escrow id / email)
- metadata String? // JSON blob of extra context
+ action String
+ actor String?
+ target String?
+ metadata String?
createdAt DateTime @default(now())
@@index([action])
@@index([createdAt])
}
-// βββ Chain Indexer ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+// βββ Reconciliation βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+/// What kind of disagreement was found.
+///
+/// Deliberately granular. A single "MISMATCH" value would be useless: an
+/// unreadable RPC, a settled-but-unrecorded payment, and a database claiming a
+/// payment that never settled demand completely different responses β retry,
+/// catch up, and stop trusting the record respectively. Collapsing them forces an
+/// operator to re-derive the distinction from free text every time.
+enum FindingKind {
+ /// The database claims PAID; independent chain evidence does not support it.
+ /// The most serious finding in the system.
+ DB_PAID_CHAIN_NOT
+ /// The chain settled; the projection has not caught up. Recoverable.
+ CHAIN_PAID_DB_NOT
+ /// Settled amount differs from the recorded amount.
+ AMOUNT_MISMATCH
+ /// Settled asset differs from the recorded asset.
+ ASSET_MISMATCH
+ /// Settled recipient differs from the recorded recipient.
+ RECIPIENT_MISMATCH
+ /// A recorded payment has no corresponding on-chain slot.
+ MISSING_ON_CHAIN
+ /// An on-chain payment has no database row, within a KNOWN organization.
+ ORPHAN_ON_CHAIN
+ /// An on-chain escrow belongs to no organization. Never auto-attributed.
+ UNKNOWN_ON_CHAIN_OBJECT
+ /// A transaction recorded as failed actually succeeded on chain.
+ /// Dangerous: invites a retry that would double-pay.
+ FAILED_TX_ACTUALLY_SUCCEEDED
+ /// The contract reports settlement but no asset transfer was observed.
+ MISSING_PAYMENT_EVENT
+ /// More asset transfers were observed than the payment expects.
+ DUPLICATE_PAYMENT_EVENT
+ /// Chain state could not be read. NOT agreement β see CHAIN_UNREADABLE note.
+ CHAIN_UNREADABLE
+ /// Anything the taxonomy does not yet name. Requires a human.
+ OTHER
+}
+
+/// Lifecycle of a finding. Resolution is auditable, never a silent dismissal.
+enum FindingStatus {
+ OPEN
+ ACKNOWLEDGED
+ INVESTIGATING
+ RESOLVED
+}
+
+/// How urgently a finding needs attention.
+///
+/// CRITICAL is reserved for findings where the product may be making a FALSE
+/// STATEMENT ABOUT MONEY β a payment presented as settled that the chain does not
+/// support. Everything else, however annoying, is a lag or an operational issue.
+enum FindingSeverity {
+ CRITICAL
+ HIGH
+ MEDIUM
+ LOW
+}
+
+/// Outcome of comparing one object against independently verified chain facts.
+enum ReconcileOutcome {
+ AGREED
+ CHAIN_AHEAD
+ DATABASE_AHEAD
+ CHAIN_UNREADABLE
+ MISMATCHED
+ UNKNOWN_ON_CHAIN_OBJECT
+ ORPHANED_DATABASE_OBJECT
+}
+
+enum RunStatus {
+ RUNNING
+ COMPLETED
+ FAILED
+ /// Abandoned: the worker holding the lock stopped reporting.
+ STALE
+}
+
+/// One reconciliation pass over a scope.
+///
+/// Exists so an operator can answer two questions that logs cannot: "when did
+/// CoreFlow last reconcile this organization?" and "did that run finish?". A
+/// reconciler whose last run silently died is worse than none, because the absence
+/// of findings reads as health.
+model ReconciliationRun {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+
+ /// Correlation id threaded through every log line for this run.
+ correlationId String @unique
+
+ /// What was examined, e.g. "organization", "payment:".
+ scope String
+ contractId String?
+ network String?
+
+ status RunStatus @default(RUNNING)
+
+ startedAt DateTime @default(now())
+ completedAt DateTime?
+ /// Refreshed while running. A lock whose holder stopped updating this is stale
+ /// and may be taken over β otherwise one crashed worker blocks reconciliation
+ /// forever.
+ heartbeatAt DateTime @default(now())
+
+ escrowsExamined Int @default(0)
+ paymentsExamined Int @default(0)
+ agreed Int @default(0)
+ mismatched Int @default(0)
+ unreadable Int @default(0)
+ chainAhead Int @default(0)
+ databaseAhead Int @default(0)
+ findingsOpened Int @default(0)
+ correctionsApplied Int @default(0)
+
+ errorMessage String?
+
+ findings ReconciliationFinding[]
+
+ @@index([orgId, startedAt])
+ @@index([status])
+}
+
+/// A recorded disagreement between this database and the chain.
+///
+/// Discrepancies are persisted rather than corrected in place. Silently
+/// overwriting the losing side destroys the only evidence that the two ever
+/// diverged, which is exactly what an auditor needs to see.
+model ReconciliationFinding {
+ id String @id @default(cuid())
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+
+ paymentId String?
+ payment Payment? @relation(fields: [orgId, paymentId], references: [orgId, id], onDelete: NoAction)
+
+ /// The run that most recently observed this finding.
+ runId String?
+ run ReconciliationRun? @relation(fields: [runId], references: [id], onDelete: SetNull)
+
+ kind FindingKind
+ status FindingStatus @default(OPEN)
+ severity FindingSeverity @default(MEDIUM)
+
+ dbState String?
+ chainState String?
+ detail String?
+ /// What an operator should actually do. A finding without this is a puzzle.
+ remediation String?
+ metadata Json?
+
+ /// Chain references, so an investigation starts from evidence.
+ txHash String?
+ escrowOnChainId Int?
+ paymentIndex Int?
+
+ detectedAt DateTime @default(now())
+ /// Updated every time a run re-observes the same unresolved finding, so "still
+ /// wrong as of" is answerable without counting duplicate rows.
+ lastObservedAt DateTime @default(now())
+ observationCount Int @default(1)
+
+ acknowledgedAt DateTime?
+ acknowledgedBy String?
+
+ resolvedAt DateTime?
+ resolvedBy String?
+ resolution String?
+
+ @@index([orgId, status])
+ @@index([orgId, severity, status])
+ @@index([paymentId])
+ @@index([runId])
+}
+
+// βββ Chain indexer ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
model IndexerCursor {
- id Int @id @default(1) // single-row table
+ /// One row per (contract, network): a single global cursor would conflate
+ /// deployments, and v1/v2 escrow ids overlap.
+ id String @id @default(cuid())
+ contractId String
+ network String
lastLedger Int @default(0)
updatedAt DateTime @updatedAt
+
+ @@unique([contractId, network])
}
model ChainEvent {
- id String @id // RPC paging token β globally unique, used for idempotency
+ /// RPC paging token β globally unique, and the basis of ingest idempotency.
+ id String @id
+ contractId String?
+ network String @default("testnet")
type String
ledger Int
+ txHash String?
escrowOnChainId Int?
+ /// Payment slot for per-payment events, null for escrow-level ones.
+ paymentIndex Int?
+ /// Decoded payload, kept so a projection bug can be fixed by replaying the
+ /// stored log instead of re-reading the chain.
+ payload Json?
+ /// Whether this event could be attributed to an organization.
+ ///
+ /// The chain knows nothing about CoreFlow organizations. An escrow created
+ /// outside the app β by the CLI, a validation script, or another client β has no
+ /// tenant mapping, and GUESSING one would silently place another party's payroll
+ /// inside a customer's workspace. Such events are recorded with
+ /// `attributed = false` and surfaced for an operator to claim, never attached to
+ /// whichever organization happened to be convenient.
+ attributed Boolean @default(true)
processedAt DateTime @default(now())
@@index([ledger])
-}
-
-model OracleAttestation {
- id String @id @default(cuid())
- escrowOnChainId Int // The Soroban contract escrow ID
- paymentId Int // Payment schedule index
- hoursLogged Int
- nonce Int // Must match the on-chain expected nonce
- signature String // base64 Ed25519 signature
- createdBy String // wallet address that requested the attestation
- createdAt DateTime @default(now())
-
- // One attestation per (escrow, payment, nonce) β prevents double-signing a nonce.
- @@unique([escrowOnChainId, paymentId, nonce])
@@index([escrowOnChainId])
+ @@index([contractId, network])
+ @@index([attributed])
}
model AuthChallenge {
@@ -144,3 +922,56 @@ model AuthChallenge {
@@index([walletAddress])
@@index([expiresAt])
}
+
+/// An invitation to join ONE organization with ONE role.
+///
+/// `email` is unique PER ORGANIZATION, not globally. A global unique constraint
+/// meant that once org A invited alice@example.com, org B could never invite her
+/// at all β and the failure leaked the fact that some other tenant already had
+/// her. Contractors working for several agencies is the normal case, not an edge.
+model Invitation {
+ id String @id @default(cuid())
+ /// REQUIRED. An invitation that does not name the organization it grants
+ /// access to cannot be authorized against anything.
+ orgId String
+ org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
+ email String
+ /// The organization role this invitation grants. Required, and validated
+ /// server-side against what the inviter is permitted to delegate β an
+ /// invitation is the easiest place to smuggle a privilege escalation.
+ orgRole OrgRole @default(VIEWER)
+ /// Legacy platform role, retained for the pre-organization invite flow.
+ role Role @default(EMPLOYEE)
+
+ /// Hash of the token, never the token itself. A leaked database dump must not
+ /// hand over usable invitations.
+ tokenHash String @unique
+
+ expiresAt DateTime
+ usedAt DateTime?
+ /// Set when an invitation is withdrawn before acceptance. Distinct from
+ /// `usedAt`, so "revoked" is never mistaken for "accepted".
+ revokedAt DateTime?
+ revokedBy String?
+
+ invitedBy String?
+ createdAt DateTime @default(now())
+
+ @@unique([orgId, email])
+ @@index([tokenHash])
+ @@index([orgId])
+ @@index([email])
+}
+
+/// Legacy per-escrow time log. Superseded by Payment.hours + OracleAttestation;
+/// retained so historical rows remain readable.
+model TimeLog {
+ id Int @id @default(autoincrement())
+ escrowId String?
+ hoursLogged Int
+ paymentId Int
+ txHash String @unique
+ createdAt DateTime @default(now())
+
+ @@index([escrowId])
+}
diff --git a/scripts/check-env.mjs b/scripts/check-env.mjs
new file mode 100755
index 0000000..3d180d6
--- /dev/null
+++ b/scripts/check-env.mjs
@@ -0,0 +1,323 @@
+#!/usr/bin/env node
+/**
+ * Environment preflight. Fail-closed.
+ *
+ * Why this exists: on 2026-09-11 a `vercel env pull` overwrote .env / .env.local
+ * with the DEPLOYMENT's variables. That silently repointed local development at
+ * Mainnet v1 and at the production database. Nothing in the app objected, because
+ * every individual value was valid β only the combination was wrong.
+ *
+ * So this does not ask "does each variable look plausible?" It asks "is this the
+ * combination development is allowed to run?" and refuses otherwise. Judgements
+ * are made against EXPLICIT ALLOWLISTS below, not string heuristics, so adding a
+ * new deployment is a deliberate edit rather than an accident of pattern matching.
+ *
+ * Secrets are never read for their value and never printed. Only hostnames and
+ * contract addresses appear in output, both of which are public.
+ *
+ * Escape hatches are explicit, per-run, and never defaults:
+ * COREFLOW_ALLOW_MAINNET=1 act against Mainnet on purpose
+ * COREFLOW_ALLOW_REMOTE_DB=1 act against a non-local database on purpose
+ * COREFLOW_ALLOW_UNKNOWN_CONTRACT=1 use a contract not in the registry below
+ */
+
+import { existsSync, readFileSync } from 'node:fs';
+
+// ---------------------------------------------------------------------------
+// Registry. Single source of truth for this check; mirrors docs/DEPLOYMENTS.md.
+// Update this when a contract is deployed β that is the intended friction.
+// ---------------------------------------------------------------------------
+
+/** CoreFlow v2, hardened, Stellar Testnet. The only contract development may use. */
+const V2_TESTNET = {
+ contractId: 'CDN4FIKLJ72WYNPBIKWYSDJWDZG22QNPLWI37VTUAE4EKKIBVAQRG5F4',
+ tokenId: 'CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M',
+};
+
+/** CoreFlow v1, Stellar Mainnet. Superseded, and NOT what v2 development targets. */
+const V1_MAINNET_CONTRACT = 'CCTF5WBOQR7JP2KPLQT372X7JCGCINHDFRSAPF4YTYRKZXZ3J2XPRFFW';
+
+const KNOWN_CONTRACTS = new Map([
+ [V2_TESTNET.contractId, { label: 'CoreFlow v2 (Testnet)', network: 'testnet' }],
+ [V1_MAINNET_CONTRACT, { label: 'CoreFlow v1 (Mainnet)', network: 'public' }],
+]);
+
+/**
+ * Hosts that count as a local development database. An allowlist, because the
+ * failure being prevented is a REMOTE host arriving unnoticed β and a denylist
+ * can only ever exclude the remote hosts somebody already thought of.
+ */
+const LOCAL_DB_HOSTS = new Set([
+ 'localhost',
+ '127.0.0.1',
+ '::1',
+ '0.0.0.0',
+ 'host.docker.internal',
+ 'postgres', // docker-compose service name
+ 'db', // docker-compose service name
+]);
+
+/** Every variable that can carry a database connection. All must be local in dev. */
+const DB_URL_VARS = ['DATABASE_URL', 'DIRECT_URL', 'PRISMA_DATABASE_URL', 'POSTGRES_URL'];
+
+// ---------------------------------------------------------------------------
+
+function parseEnvFile(file) {
+ const out = {};
+ if (!existsSync(file)) return out;
+ for (const line of readFileSync(file, 'utf8').split('\n')) {
+ const m = /^([A-Z_][A-Z0-9_]*)=(.*)$/.exec(line.trim());
+ if (m) out[m[1]] = m[2].trim().replace(/^["']|["']$/g, '');
+ }
+ return out;
+}
+
+/** Next.js precedence: .env.local overrides .env. Mirror it, then real env wins. */
+function loadEnvFiles() {
+ return { ...parseEnvFile('.env'), ...parseEnvFile('.env.local'), ...process.env };
+}
+
+const env = loadEnvFiles();
+
+/**
+ * What a PRISMA-importing process sees.
+ *
+ * Prisma Client loads `.env` and only `.env`. So a script, test or migration that
+ * imports Prisma inherits `.env`'s values no matter what `.env.local` says β and
+ * `next dev` hides this, because Next loads `.env.local` into process.env first and
+ * dotenv never overwrites an existing variable.
+ *
+ * That asymmetry put a live Testnet funding test on Mainnet v1 while this preflight,
+ * which merged the files the way Next.js does, reported OK. Both views are checked
+ * now.
+ */
+const envOnly = parseEnvFile('.env');
+const errors = [];
+const notes = [];
+const allowMainnet = env.COREFLOW_ALLOW_MAINNET === '1';
+const allowRemoteDb = env.COREFLOW_ALLOW_REMOTE_DB === '1';
+const allowUnknownContract = env.COREFLOW_ALLOW_UNKNOWN_CONTRACT === '1';
+const isProductionBuild = process.env.NODE_ENV === 'production';
+
+// --- Network ---------------------------------------------------------------
+const network = (env.NEXT_PUBLIC_STELLAR_NETWORK ?? '').trim().toLowerCase();
+const isMainnet = network === 'public' || network === 'mainnet';
+
+if (isMainnet && !allowMainnet) {
+ errors.push(
+ 'NEXT_PUBLIC_STELLAR_NETWORK is "' + network + '" (Mainnet).\n' +
+ ' v2 development runs exclusively against Testnet. The hardened v2\n' +
+ ' contract is NOT deployed on Mainnet; Mainnet still runs v1.\n' +
+ ' Fix: NEXT_PUBLIC_STELLAR_NETWORK=testnet\n' +
+ ' Override (deliberate Mainnet action): COREFLOW_ALLOW_MAINNET=1',
+ );
+}
+if (!network) {
+ notes.push('NEXT_PUBLIC_STELLAR_NETWORK is unset; the app defaults to testnet.');
+}
+
+// --- Contract --------------------------------------------------------------
+const contractId = (env.NEXT_PUBLIC_STELLAR_CONTRACT_ID ?? '').trim();
+const known = KNOWN_CONTRACTS.get(contractId);
+
+if (!contractId) {
+ errors.push(
+ 'NEXT_PUBLIC_STELLAR_CONTRACT_ID is unset. CoreFlow will not guess a contract\n' +
+ ' address, so every contract call would fail at the point of use.\n' +
+ ' Fix: set it to ' + V2_TESTNET.contractId,
+ );
+} else if (known && known.network === 'public' && !allowMainnet) {
+ errors.push(
+ 'NEXT_PUBLIC_STELLAR_CONTRACT_ID is the ' + known.label + ' contract.\n' +
+ ' This is the live contract holding real funds, and it does NOT carry the\n' +
+ ' v2 security fixes. Development must not point at it.\n' +
+ ' Fix: set it to ' + V2_TESTNET.contractId + '\n' +
+ ' Override (deliberate Mainnet action): COREFLOW_ALLOW_MAINNET=1',
+ );
+} else if (!known && !allowUnknownContract) {
+ errors.push(
+ 'NEXT_PUBLIC_STELLAR_CONTRACT_ID is not a known deployment:\n' +
+ ' ' + contractId + '\n' +
+ ' Refusing rather than assuming which chain or contract version this is.\n' +
+ ' Fix: add it to KNOWN_CONTRACTS in scripts/check-env.mjs and to\n' +
+ ' docs/DEPLOYMENTS.md, or use ' + V2_TESTNET.contractId + '\n' +
+ ' Override (one-off, e.g. a scratch deployment):\n' +
+ ' COREFLOW_ALLOW_UNKNOWN_CONTRACT=1',
+ );
+} else if (known && !isMainnet && known.network !== 'testnet') {
+ errors.push(
+ 'Network is testnet but the contract is ' + known.label + '.\n' +
+ ' A contract address aimed at the wrong network fails every call.',
+ );
+}
+
+// --- Settlement asset ------------------------------------------------------
+const tokenId = (env.NEXT_PUBLIC_STELLAR_TOKEN_ID ?? '').trim();
+if (!isMainnet && contractId === V2_TESTNET.contractId && tokenId !== V2_TESTNET.tokenId) {
+ if (!tokenId) {
+ errors.push(
+ 'NEXT_PUBLIC_STELLAR_TOKEN_ID is unset. An escrow holds exactly one Stellar\n' +
+ ' Asset Contract; without it, funding and settlement verification cannot\n' +
+ ' proceed and CoreFlow will not infer a SAC address from an asset symbol.\n' +
+ ' Fix: set it to ' + V2_TESTNET.tokenId,
+ );
+ } else {
+ errors.push(
+ 'NEXT_PUBLIC_STELLAR_TOKEN_ID does not match the asset the v2 Testnet\n' +
+ ' deployment was configured with.\n' +
+ ' configured: ' + tokenId + '\n' +
+ ' expected: ' + V2_TESTNET.tokenId + '\n' +
+ ' Escrows funded with a different SAC cannot be verified against the\n' +
+ ' transfers this deployment observes.',
+ );
+ }
+}
+
+// --- Databases -------------------------------------------------------------
+const dbHosts = {};
+const remote = [];
+for (const name of DB_URL_VARS) {
+ const raw = env[name];
+ if (!raw) continue;
+ let host;
+ try {
+ host = new URL(raw).hostname;
+ } catch {
+ errors.push(name + ' is not a parseable URL.');
+ continue;
+ }
+ dbHosts[name] = host;
+
+ // Production builds legitimately use the production database.
+ if (isProductionBuild) continue;
+
+ if (!LOCAL_DB_HOSTS.has(host)) remote.push(name + ' -> ' + host);
+}
+
+// Reported as ONE finding. A vercel env pull rewrites all four at once, and four
+// copies of the same paragraph buries the instruction that fixes it.
+if (remote.length > 0) {
+ if (allowRemoteDb) {
+ notes.push('Remote database targets, explicitly allowed: ' + remote.join(', '));
+ } else {
+ errors.push(
+ 'These variables point at a NON-LOCAL database outside production:\n' +
+ remote.map((r) => ' ' + r).join('\n') + '\n' +
+ ' Development writes, migrations, seeds and test resets would land\n' +
+ ' there. If that is the deployed database, this destroys real payroll\n' +
+ ' records. Development requires its own local database.\n' +
+ ' Fix: see docs/ENVIRONMENTS.md for local Postgres setup.\n' +
+ ' Override (deliberate remote action): COREFLOW_ALLOW_REMOTE_DB=1',
+ );
+ }
+}
+if (!env.DATABASE_URL) errors.push('DATABASE_URL is unset.');
+
+// --- The .env-only view, as Prisma and any plain script see it ---------------
+{
+ const net = (envOnly.NEXT_PUBLIC_STELLAR_NETWORK ?? '').trim().toLowerCase();
+ const contract = (envOnly.NEXT_PUBLIC_STELLAR_CONTRACT_ID ?? '').trim();
+ const known = KNOWN_CONTRACTS.get(contract);
+ const mainnetThere =
+ net === 'public' || net === 'mainnet' || (known && known.network === 'public');
+
+ if (mainnetThere && !allowMainnet) {
+ errors.push(
+ '.env itself still names Mainnet, even if .env.local does not:\n' +
+ ' NEXT_PUBLIC_STELLAR_NETWORK=' + (net || '(unset)') + '\n' +
+ ' NEXT_PUBLIC_STELLAR_CONTRACT_ID=' + (contract || '(unset)') + '\n' +
+ ' Prisma Client loads .env and ONLY .env, so every script, test and\n' +
+ ' migration that imports Prisma would act against Mainnet β while the app\n' +
+ ' itself looks correct, because Next.js loads .env.local first.\n' +
+ ' Fix: correct these values in .env, not only in .env.local.',
+ );
+ }
+
+ for (const name of DB_URL_VARS) {
+ const raw = envOnly[name];
+ if (!raw || isProductionBuild) continue;
+ let host;
+ try {
+ host = new URL(raw).hostname;
+ } catch {
+ continue;
+ }
+ if (!LOCAL_DB_HOSTS.has(host) && !allowRemoteDb) {
+ errors.push(
+ '.env itself points ' + name + ' at a non-local host (' + host + ').\n' +
+ ' Prisma reads .env directly, so migrations and database tests would use\n' +
+ ' it regardless of .env.local.',
+ );
+ }
+ }
+}
+
+// --- The combination invariant ----------------------------------------------
+//
+// Each variable can be individually valid while the COMBINATION is wrong, and the
+// combination is what decides whether a mistake costs money. Only two are allowed:
+//
+// LOCAL local database + Testnet + CoreFlow v2
+// PRODUCTION production database + Mainnet + CoreFlow v1
+//
+// Anything else is mixed, and mixed is how local development came to be pointed at
+// the production database and Mainnet v1 on 2026-09-11.
+{
+ const dbIsLocal = Object.keys(dbHosts).length > 0 &&
+ Object.values(dbHosts).every((h) => LOCAL_DB_HOSTS.has(h));
+ const contractVersion = known
+ ? known.network === 'public' ? 'v1' : 'v2'
+ : null;
+
+ const profile =
+ dbIsLocal && !isMainnet && contractVersion === 'v2'
+ ? 'LOCAL'
+ : !dbIsLocal && isMainnet && contractVersion === 'v1'
+ ? 'PRODUCTION'
+ : 'MIXED';
+
+ if (profile === 'MIXED') {
+ const overridden = allowMainnet || allowRemoteDb || allowUnknownContract;
+ // An explicit override means the operator said they meant it, so this becomes a
+ // loud note rather than a refusal. Without one it is an error β and it must be
+ // reachable in both cases, or it is not a control at all.
+ (overridden ? notes : errors).push(
+ 'This is neither a valid LOCAL nor a valid PRODUCTION environment:\n' +
+ ' database: ' + (dbIsLocal ? 'local' : 'non-local') + '\n' +
+ ' network: ' + (isMainnet ? 'Mainnet' : 'Testnet') + '\n' +
+ ' contract: ' + (contractVersion ?? 'unrecognized') + '\n' +
+ ' Only two combinations are permitted:\n' +
+ ' LOCAL local database + Testnet + CoreFlow v2\n' +
+ ' PRODUCTION production database + Mainnet + CoreFlow v1\n' +
+ ' A mixed environment is how development came to be pointed at the\n' +
+ ' production database and Mainnet v1.',
+ );
+ }
+
+ // Surfaced in the report so the profile is visible even when it is valid.
+ globalThis.__coreflowProfile = profile;
+}
+
+// --- Report ----------------------------------------------------------------
+console.log('CoreFlow env preflight');
+console.log(' profile: ' + (globalThis.__coreflowProfile ?? 'unknown'));
+console.log(' network: ' + (isMainnet ? 'MAINNET' : network || 'testnet (default)'));
+console.log(' contract: ' + (contractId || '(unset)') + (known ? ' [' + known.label + ']' : ''));
+console.log(' asset: ' + (tokenId || '(unset)'));
+for (const name of DB_URL_VARS) {
+ if (dbHosts[name]) {
+ const local = LOCAL_DB_HOSTS.has(dbHosts[name]);
+ console.log(' ' + name + ': ' + dbHosts[name] + (local ? ' [local]' : ' [REMOTE]'));
+ }
+}
+
+for (const n of notes) console.log('\n note: ' + n);
+
+if (errors.length > 0) {
+ console.error('\nRefusing to continue:\n');
+ for (const e of errors) console.error(' - ' + e + '\n');
+ process.exit(1);
+}
+console.log('\nOK: ' + (globalThis.__coreflowProfile === 'PRODUCTION'
+ ? 'production database + Mainnet v1.'
+ : 'local database + Testnet v2.'));
diff --git a/scripts/deploy-testnet.sh b/scripts/deploy-testnet.sh
new file mode 100755
index 0000000..ab3f04c
--- /dev/null
+++ b/scripts/deploy-testnet.sh
@@ -0,0 +1,135 @@
+#!/usr/bin/env bash
+#
+# Deploy CoreFlow v2 to Stellar TESTNET.
+#
+# This script is deliberately testnet-only. CoreFlow v1 remains deployed on
+# Mainnet and is NOT touched, repointed, or upgraded by anything here β v2's
+# security improvements are not on Mainnet, and nothing in this repo should
+# imply otherwise.
+#
+# The script refuses to proceed unless the WASM is built with COREFLOW_ADMIN
+# pinned. An unpinned build is vulnerable to `init_admin` front-running: deploy
+# and initialize cannot share a transaction (Stellar allows one Soroban
+# operation per transaction), so anyone watching the ledger can claim admin in
+# between and then upgrade the contract to code that drains every escrow.
+#
+# Usage:
+# ADMIN_IDENTITY=coreflow-v2-admin ORACLE_PUBKEY=<64 hex> ./scripts/deploy-testnet.sh
+#
+set -euo pipefail
+
+NETWORK="testnet"
+NETWORK_PASSPHRASE="Test SDF Network ; September 2015"
+CONTRACT_DIR="contracts/core-flow"
+WASM="$CONTRACT_DIR/target/wasm32v1-none/release/core_flow.wasm"
+OUT_DIR="docs/evidence"
+OUT="$OUT_DIR/testnet-v2-deployment.json"
+
+ADMIN_IDENTITY="${ADMIN_IDENTITY:-coreflow-v2-admin}"
+ORACLE_PUBKEY="${ORACLE_PUBKEY:-}"
+
+log() { printf '\n\033[1m==> %s\033[0m\n' "$*"; }
+die() { printf '\n\033[31mERROR: %s\033[0m\n' "$*" >&2; exit 1; }
+
+command -v stellar >/dev/null || die "stellar CLI not found. See https://developers.stellar.org/docs/tools/cli"
+[ -n "$ORACLE_PUBKEY" ] || die "ORACLE_PUBKEY is required (64 hex chars). Get it with: node scripts/oracle-cli.mjs pubkey"
+[[ "$ORACLE_PUBKEY" =~ ^[0-9a-fA-F]{64}$ ]] || die "ORACLE_PUBKEY must be exactly 64 hex characters."
+
+ADMIN_ADDRESS="$(stellar keys address "$ADMIN_IDENTITY")"
+[[ "$ADMIN_ADDRESS" =~ ^G[A-Z2-7]{55}$ ]] || die "Could not resolve identity '$ADMIN_IDENTITY' to a G-address."
+
+log "CoreFlow v2 β Stellar Testnet"
+echo " admin identity : $ADMIN_IDENTITY"
+echo " admin address : $ADMIN_ADDRESS"
+echo " oracle pubkey : $ORACLE_PUBKEY"
+
+# ββ 1. Build with the admin pinned into the WASM ββββββββββββββββββββββββββββ
+log "Building WASM with COREFLOW_ADMIN pinned"
+(
+ cd "$CONTRACT_DIR"
+ COREFLOW_ADMIN="$ADMIN_ADDRESS" cargo build --release --target wasm32v1-none
+)
+[ -f "$WASM" ] || die "Build produced no WASM at $WASM"
+
+# The pin must be physically present in the binary. Building with the env var
+# set is not evidence that the compiler used it β a cached artifact from an
+# unpinned build would look identical here otherwise.
+if ! grep -qa "$ADMIN_ADDRESS" "$WASM"; then
+ die "COREFLOW_ADMIN is not baked into the WASM. Refusing to deploy an unpinned build.
+Try: (cd $CONTRACT_DIR && cargo clean) and re-run."
+fi
+echo " verified: admin pin present in WASM"
+
+WASM_SHA256="$(sha256sum "$WASM" | cut -d' ' -f1)"
+WASM_BYTES="$(stat -c%s "$WASM")"
+echo " wasm sha256 : $WASM_SHA256"
+echo " wasm size : $WASM_BYTES bytes"
+
+# ββ 2. Deploy βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+log "Deploying to $NETWORK"
+CONTRACT_ID="$(stellar contract deploy \
+ --wasm "$WASM" \
+ --source "$ADMIN_IDENTITY" \
+ --network "$NETWORK" 2>/dev/null | tail -1)"
+[[ "$CONTRACT_ID" =~ ^C[A-Z2-7]{55}$ ]] || die "Deploy did not return a contract id (got: '$CONTRACT_ID')"
+echo " contract id : $CONTRACT_ID"
+
+inv() { stellar contract invoke --id "$CONTRACT_ID" --source "$ADMIN_IDENTITY" --network "$NETWORK" -- "$@" 2>/dev/null; }
+
+# ββ 3. Claim admin ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# The pin makes this race-proof: any other address calling init_admin first is
+# rejected with AdminMismatch (#20), so there is nothing to win by front-running.
+log "Initializing admin"
+inv init_admin --admin "$ADMIN_ADDRESS" >/dev/null
+echo " init_admin done"
+
+# ββ 4. Register the oracle key ββββββββββββββββββββββββββββββββββββββββββββββ
+log "Registering oracle signing key"
+inv register_oracle_key --pubkey "$ORACLE_PUBKEY" >/dev/null
+echo " register_oracle_key done"
+
+# ββ 5. Verify the deployed state, rather than assuming the calls worked βββββ
+log "Verifying deployed state"
+GOT_EXPECTED_ADMIN="$(inv expected_admin | tr -d '"')"
+GOT_ADMIN="$(inv get_admin | tr -d '"')"
+GOT_PAUSED="$(inv is_paused)"
+GOT_ORACLE="$(inv is_oracle_key_registered --pubkey "$ORACLE_PUBKEY")"
+
+echo " expected_admin (build pin) : $GOT_EXPECTED_ADMIN"
+echo " get_admin (on-chain) : $GOT_ADMIN"
+echo " is_paused : $GOT_PAUSED"
+echo " oracle key registered : $GOT_ORACLE"
+
+[ "$GOT_EXPECTED_ADMIN" = "$ADMIN_ADDRESS" ] || die "WASM admin pin does not match the deploying admin."
+[ "$GOT_ADMIN" = "$ADMIN_ADDRESS" ] || die "On-chain admin is not the expected address."
+[ "$GOT_PAUSED" = "false" ] || die "Contract deployed in a paused state."
+[ "$GOT_ORACLE" = "true" ] || die "Oracle key is not registered."
+
+# ββ 6. Record the deployment ββββββββββββββββββββββββββββββββββββββββββββββββ
+mkdir -p "$OUT_DIR"
+cat > "$OUT" <&2; exit 1; }
+
+running() { pg_ctl -D "$PGDATA" status >/dev/null 2>&1; }
+
+cmd_init() {
+ [ -d "$PGDATA" ] && die "$PGDATA already exists. Use 'start', or 'destroy' first."
+ command -v initdb >/dev/null || die "initdb not found."
+
+ mkdir -p "$(dirname "$PGDATA")"
+
+ # Generated locally, never echoed, never committed. The pwfile is removed
+ # immediately after initdb consumes it.
+ local pwfile
+ pwfile="$(mktemp)"
+ chmod 600 "$pwfile"
+ node -e "process.stdout.write(require('crypto').randomBytes(24).toString('base64url'))" > "$pwfile"
+
+ echo "Creating cluster at $PGDATA ..."
+ initdb -D "$PGDATA" \
+ --username="$PGUSER_DEV" \
+ --auth-local=scram-sha-256 \
+ --auth-host=scram-sha-256 \
+ --pwfile="$pwfile" \
+ --encoding=UTF8 \
+ --no-instructions >/dev/null
+
+ # Listen on loopback only. A development database must not be reachable from the
+ # network, whatever else is misconfigured.
+ {
+ echo "port = $PGPORT"
+ echo "listen_addresses = '127.0.0.1'"
+ echo "unix_socket_directories = '$PGDATA'"
+ # Small: this is one developer's machine, not a server.
+ echo "max_connections = 50"
+ echo "shared_buffers = 128MB"
+ echo "fsync = off" # development only; speeds up test resets
+ echo "full_page_writes = off" # development only
+ } >> "$PGDATA/postgresql.conf"
+
+ cmd_start
+
+ local password url_dev url_shadow
+ password="$(cat "$pwfile")"
+ rm -f "$pwfile"
+
+ PGPASSWORD="$password" createdb -h 127.0.0.1 -p "$PGPORT" -U "$PGUSER_DEV" "$DB_DEV"
+ PGPASSWORD="$password" createdb -h 127.0.0.1 -p "$PGPORT" -U "$PGUSER_DEV" "$DB_SHADOW"
+ echo "Created databases $DB_DEV and $DB_SHADOW."
+
+ url_dev="postgresql://$PGUSER_DEV:$password@127.0.0.1:$PGPORT/$DB_DEV?schema=public"
+ url_shadow="postgresql://$PGUSER_DEV:$password@127.0.0.1:$PGPORT/$DB_SHADOW?schema=public"
+
+ [ -f "$ENV_FILE" ] || touch "$ENV_FILE"
+ # Rewrite only the database keys; every other line, including every secret, is
+ # left exactly as it was. PRISMA_DATABASE_URL and POSTGRES_URL are deployment
+ # artifacts a `vercel env pull` leaves behind β they are commented out rather
+ # than deleted, so nothing is silently lost.
+ python3 - "$ENV_FILE" "$url_dev" "$url_shadow" <<'PYEOF'
+import re, sys
+path, url_dev, url_shadow = sys.argv[1], sys.argv[2], sys.argv[3]
+with open(path) as f:
+ lines = f.read().splitlines()
+
+targets = {'DATABASE_URL': url_dev, 'DIRECT_URL': url_dev, 'SHADOW_DATABASE_URL': url_shadow}
+neutralize = {'PRISMA_DATABASE_URL', 'POSTGRES_URL'}
+out, seen = [], set()
+for line in lines:
+ m = re.match(r'^([A-Z_][A-Z0-9_]*)=', line)
+ key = m.group(1) if m else None
+ if key in targets:
+ out.append('%s="%s"' % (key, targets[key]))
+ seen.add(key)
+ elif key in neutralize:
+ out.append('# Deployment artifact from `vercel env pull`; not used locally.')
+ out.append('# ' + line)
+ else:
+ out.append(line)
+for key, url in targets.items():
+ if key not in seen:
+ out.append('%s="%s"' % (key, url))
+with open(path, 'w') as f:
+ f.write('\n'.join(out) + '\n')
+print('Wrote DATABASE_URL, DIRECT_URL and SHADOW_DATABASE_URL to ' + path)
+PYEOF
+
+ echo
+ echo "Done. The password was generated locally and written only to $ENV_FILE"
+ echo "(git-ignored). It was not printed."
+ echo
+ echo "Next: npm run check:env && npm run db:deploy"
+}
+
+cmd_start() {
+ [ -d "$PGDATA" ] || die "no cluster at $PGDATA. Run 'init' first."
+ if running; then echo "Already running on port $PGPORT."; return; fi
+ pg_ctl -D "$PGDATA" -l "$LOGFILE" start >/dev/null
+ for _ in $(seq 1 30); do
+ running && break
+ sleep 0.2
+ done
+ running || die "failed to start; see $LOGFILE"
+ echo "PostgreSQL running on 127.0.0.1:$PGPORT (data: $PGDATA)"
+}
+
+cmd_stop() {
+ running || { echo "Not running."; return; }
+ pg_ctl -D "$PGDATA" stop -m fast >/dev/null
+ echo "Stopped."
+}
+
+cmd_status() {
+ if running; then
+ echo "running on 127.0.0.1:$PGPORT"
+ pg_ctl -D "$PGDATA" status | head -2
+ else
+ echo "not running (data: $PGDATA)"
+ fi
+}
+
+cmd_psql() {
+ running || die "not running. Run 'start' first."
+ # Reads the URL from .env.local so the password never appears in a command.
+ local url
+ url="$(grep -m1 '^DATABASE_URL=' "$ENV_FILE" | sed 's/^DATABASE_URL=//' | tr -d '"')"
+ [ -n "$url" ] || die "no DATABASE_URL in $ENV_FILE"
+ psql "$url"
+}
+
+cmd_destroy() {
+ running && pg_ctl -D "$PGDATA" stop -m immediate >/dev/null || true
+ [ -d "$PGDATA" ] || { echo "Nothing to remove."; return; }
+ rm -rf "$PGDATA" "$LOGFILE"
+ echo "Removed $PGDATA. Database keys in $ENV_FILE now point at nothing."
+}
+
+case "${1:-}" in
+ init) cmd_init ;;
+ start) cmd_start ;;
+ stop) cmd_stop ;;
+ status) cmd_status ;;
+ psql) cmd_psql ;;
+ destroy) cmd_destroy ;;
+ *) sed -n '2,30p' "$0" | sed 's/^# \{0,1\}//'; exit 1 ;;
+esac
diff --git a/scripts/oracle-cli.mjs b/scripts/oracle-cli.mjs
index d6177dd..ee27d72 100755
--- a/scripts/oracle-cli.mjs
+++ b/scripts/oracle-cli.mjs
@@ -2,39 +2,57 @@
/**
* CoreFlow oracle signing CLI (Deliverable 2).
*
- * Signs work-hours attestations that `submit_hours_proof` will accept on-chain.
+ * Signs work attestations that `submit_hours_proof` will accept on-chain.
*
- * IMPORTANT β message shape:
+ * ββ Message shape (schema v2, 198 bytes) ββββββββββββββββββββββββββββββββββββ
* The contract does NOT verify a signature over a `{payees, nonce}` JSON blob.
- * It reconstructs an exact 32-byte message per PAYMENT and verifies against it:
+ * It reconstructs an exact preimage PER PAYMENT, from its own stored state, and
+ * verifies against that:
*
- * escrow_id u32 4 bytes BE
- * payment_id u32 4 bytes BE
- * hours i128 16 bytes BE (two's complement)
- * nonce u64 8 bytes BE
+ * magic "CFWP" 4 | version u16 2 | network_id 32 | contract 32 |
+ * worker 32 | token 32 | escrow_id u32 4 | payment_id u32 4 |
+ * amount i128 16 | hours i128 16 | start u64 8 | end u64 8 | nonce u64 8
*
- * So a batch input yields ONE SIGNATURE PER PAYEE, each with its own nonce,
- * consumed in ascending order β the contract's nonce watermark increments by
- * one per accepted proof. Signing a batch blob would produce signatures the
- * contract rejects every time.
+ * Every field but hours and nonce comes from the on-chain payment row, which is
+ * why this CLI needs the escrow's worker/token/amount/period as input: it is
+ * reproducing what the contract will build, not describing what you want paid.
+ *
+ * A batch yields ONE SIGNATURE PER PAYEE, each with its own nonce, consumed in
+ * ascending order β the contract's watermark increments by one per accepted
+ * proof. The contract also enforces `hours x rate_per_hour == amount`.
*
* Keep in sync with:
- * contracts/core-flow/src/lib.rs (submit_hours_proof)
+ * contracts/core-flow/src/lib.rs (build_proof_message)
* src/lib/oracle/index.ts (buildProofMessage)
- * The vitest in src/lib/oracle/__tests__ asserts this encoding matches.
+ * All three are pinned to the shared vector in docs/evidence/proof-vector-v2.json.
+ * The contract also exposes `proof_preimage` for signers that prefer to read the
+ * bytes rather than rebuild them.
*
* Usage:
* ORACLE_SECRET_KEY=<64 hex chars> node scripts/oracle-cli.mjs sign batch.json
* ORACLE_SECRET_KEY=... node scripts/oracle-cli.mjs sign - # stdin
+ * ORACLE_SECRET_KEY=... node scripts/oracle-cli.mjs verify batch.json signed.json
* ORACLE_SECRET_KEY=... node scripts/oracle-cli.mjs pubkey
*
* batch.json:
- * { "escrowId": 1, "startNonce": 0,
- * "payees": [ { "paymentId": 0, "hours": 40 },
- * { "paymentId": 1, "hours": 32 } ] }
+ * {
+ * "networkPassphrase": "Test SDF Network ; September 2015",
+ * "contractId": "C...",
+ * "escrowId": 1,
+ * "startNonce": 0,
+ * "payees": [
+ * { "paymentId": 0, "worker": "G...", "token": "C...",
+ * "amount": "10000", "hours": 40, "startDate": 1000, "endDate": 2000 }
+ * ]
+ * }
*/
import { readFileSync } from 'node:fs';
-import { Keypair } from '@stellar/stellar-sdk';
+import { createHash } from 'node:crypto';
+import { Keypair, nativeToScVal } from '@stellar/stellar-sdk';
+
+const PROOF_MAGIC = Buffer.from('CFWP', 'ascii');
+const PROOF_VERSION = 2;
+const PROOF_MESSAGE_BYTES = 198;
function loadKeypair() {
const seed = process.env.ORACLE_SECRET_KEY;
@@ -46,6 +64,7 @@ function loadKeypair() {
return Keypair.fromRawEd25519Seed(Buffer.from(seed, 'hex'));
}
+function u16be(n) { const b = Buffer.alloc(2); b.writeUInt16BE(n); return b; }
function u32be(n) { const b = Buffer.alloc(4); b.writeUInt32BE(n >>> 0); return b; }
function u64be(n) { const b = Buffer.alloc(8); b.writeBigUInt64BE(BigInt(n)); return b; }
function i128be(n) {
@@ -55,51 +74,143 @@ function i128be(n) {
return b;
}
-/** The exact 32 bytes the contract reconstructs and verifies. */
-function buildProofMessage(escrowId, paymentId, hours, nonce) {
- return Buffer.concat([u32be(escrowId), u32be(paymentId), i128be(hours), u64be(nonce)]);
+/** sha256(network passphrase) β what Soroban gives a contract as network_id(). */
+const networkId = (passphrase) => createHash('sha256').update(passphrase, 'utf8').digest();
+
+/** sha256(ScVal XDR of the address) β matches the contract's addr_digest. */
+const addressDigest = (address) =>
+ createHash('sha256').update(nativeToScVal(address, { type: 'address' }).toXDR()).digest();
+
+/** The exact 198 bytes the contract reconstructs and verifies. */
+function buildProofMessage(ctx, escrowId, paymentId, hours, nonce) {
+ const msg = Buffer.concat([
+ PROOF_MAGIC,
+ u16be(PROOF_VERSION),
+ networkId(ctx.networkPassphrase),
+ addressDigest(ctx.contractId),
+ addressDigest(ctx.worker),
+ addressDigest(ctx.token),
+ u32be(escrowId),
+ u32be(paymentId),
+ i128be(ctx.amount),
+ i128be(hours),
+ u64be(ctx.startDate),
+ u64be(ctx.endDate),
+ u64be(nonce),
+ ]);
+ if (msg.length !== PROOF_MESSAGE_BYTES) {
+ throw new Error(`Preimage must be ${PROOF_MESSAGE_BYTES} bytes, built ${msg.length}.`);
+ }
+ return msg;
}
function readPayload(path) {
const raw = path === '-' ? readFileSync(0, 'utf8') : readFileSync(path, 'utf8');
const p = JSON.parse(raw);
if (!Number.isInteger(p.escrowId)) throw new Error('escrowId must be an integer');
- if (!Array.isArray(p.payees) || p.payees.length === 0) throw new Error('payees must be a non-empty array');
+ if (typeof p.networkPassphrase !== 'string' || !p.networkPassphrase) {
+ throw new Error('networkPassphrase is required β it binds the proof to Testnet or Mainnet');
+ }
+ if (typeof p.contractId !== 'string' || !p.contractId) {
+ throw new Error('contractId is required β it binds the proof to this deployment');
+ }
+ if (!Array.isArray(p.payees) || p.payees.length === 0) {
+ throw new Error('payees must be a non-empty array');
+ }
+ for (const [i, payee] of p.payees.entries()) {
+ for (const f of ['worker', 'token', 'amount', 'hours', 'startDate', 'endDate']) {
+ if (payee[f] === undefined) throw new Error(`payees[${i}] is missing "${f}"`);
+ }
+ }
return p;
}
-const [cmd, arg] = process.argv.slice(2);
-
-if (cmd === 'pubkey') {
- // Hex, because the contract stores oracle_pubkey as BytesN<32>.
- console.log(loadKeypair().rawPublicKey().toString('hex'));
-} else if (cmd === 'sign') {
- if (!arg) { console.error('usage: oracle-cli.mjs sign '); process.exit(1); }
- const kp = loadKeypair();
- const { escrowId, startNonce = 0, payees } = readPayload(arg);
-
- // Nonces are sequential from startNonce: the contract accepts exactly the
- // next expected value, so proofs must be submitted in this order.
- const signatures = payees.map((payee, i) => {
+/** One signature per payee, nonces sequential from startNonce. */
+function signBatch(kp, payload) {
+ const { escrowId, startNonce = 0, networkPassphrase, contractId, payees } = payload;
+ return payees.map((payee, i) => {
const nonce = Number(startNonce) + i;
- const msg = buildProofMessage(escrowId, payee.paymentId, payee.hours, nonce);
+ const paymentId = payee.paymentId ?? i;
+ const ctx = {
+ networkPassphrase,
+ contractId,
+ worker: payee.worker,
+ token: payee.token,
+ amount: BigInt(payee.amount),
+ startDate: BigInt(payee.startDate),
+ endDate: BigInt(payee.endDate),
+ };
+ const msg = buildProofMessage(ctx, escrowId, paymentId, BigInt(payee.hours), BigInt(nonce));
return {
- paymentId: payee.paymentId,
+ paymentId,
+ worker: payee.worker,
hours: payee.hours,
nonce,
+ messageSha256: createHash('sha256').update(msg).digest('hex'),
message: msg.toString('hex'),
signature: kp.sign(msg).toString('base64'),
};
});
+}
+
+const [cmd, arg, arg2] = process.argv.slice(2);
+if (cmd === 'pubkey') {
+ // Hex, because the contract stores oracle_pubkey as BytesN<32>.
+ console.log(loadKeypair().rawPublicKey().toString('hex'));
+} else if (cmd === 'sign') {
+ if (!arg) { console.error('usage: oracle-cli.mjs sign '); process.exit(1); }
+ const kp = loadKeypair();
+ const payload = readPayload(arg);
console.log(JSON.stringify({
- escrowId,
+ schema: 'CFWP-v2',
+ escrowId: payload.escrowId,
+ networkPassphrase: payload.networkPassphrase,
+ contractId: payload.contractId,
oraclePublicKey: kp.rawPublicKey().toString('hex'),
- signatures,
+ signatures: signBatch(kp, payload),
}, null, 2));
+} else if (cmd === 'verify') {
+ // Local verification + replay demonstration, so an operator can confirm a
+ // batch before broadcasting rather than discovering a mismatch on-chain.
+ if (!arg) { console.error('usage: oracle-cli.mjs verify [signed.json]'); process.exit(1); }
+ const kp = loadKeypair();
+ const payload = readPayload(arg);
+ const expected = signBatch(kp, payload);
+ const actual = arg2
+ ? JSON.parse(readFileSync(arg2, 'utf8')).signatures
+ : expected;
+
+ let ok = true;
+ for (const [i, sig] of expected.entries()) {
+ const got = actual[i];
+ const match = got && got.signature === sig.signature;
+ if (!match) ok = false;
+ console.log(`payment ${sig.paymentId} nonce ${sig.nonce} ${match ? 'VALID' : 'MISMATCH'}`);
+ }
+
+ // Replay check: the same payload signed at the NEXT nonce must differ. If it
+ // did not, the nonce would not be part of the preimage and every signature
+ // would be reusable forever.
+ const replay = signBatch(kp, { ...payload, startNonce: Number(payload.startNonce ?? 0) + 1 });
+ const nonceBinds = replay[0].signature !== expected[0].signature;
+ console.log(`replay protection: nonce ${nonceBinds ? 'IS' : 'IS NOT'} bound into the signature`);
+ if (!nonceBinds) ok = false;
+
+ // Domain check: the same payload on the other network must differ.
+ const otherNetwork = payload.networkPassphrase.includes('Test')
+ ? 'Public Global Stellar Network ; September 2015'
+ : 'Test SDF Network ; September 2015';
+ const crossNet = signBatch(kp, { ...payload, networkPassphrase: otherNetwork });
+ const netBinds = crossNet[0].signature !== expected[0].signature;
+ console.log(`domain separation: network ${netBinds ? 'IS' : 'IS NOT'} bound into the signature`);
+ if (!netBinds) ok = false;
+
+ process.exit(ok ? 0 : 1);
} else {
- console.error('CoreFlow oracle CLI');
- console.error(' sign emit one Ed25519 signature per payee');
- console.error(' pubkey print the oracle public key (hex)');
+ console.error('CoreFlow oracle CLI (schema CFWP-v2)');
+ console.error(' sign emit one Ed25519 signature per payee');
+ console.error(' verify [signed.json] verify locally + prove replay/domain binding');
+ console.error(' pubkey print the oracle public key (hex)');
process.exit(1);
}
diff --git a/scripts/oracle-key-transition.mjs b/scripts/oracle-key-transition.mjs
new file mode 100755
index 0000000..311045c
--- /dev/null
+++ b/scripts/oracle-key-transition.mjs
@@ -0,0 +1,193 @@
+#!/usr/bin/env node
+/**
+ * Oracle registry transition: register a new key, verify, revoke the old, verify.
+ *
+ * NOT RUNNABLE BY ACCIDENT. It refuses unless BOTH public keys are named on the
+ * command line and `--confirm-mapping` is passed, because the one fact this cannot
+ * determine for itself is which key is the post-rotation one. Naming suggests an
+ * answer; naming is not evidence. Registering the wrong key would authorize a
+ * credential an attacker may hold to sign work attestations β exactly what the
+ * admin-managed registry exists to prevent.
+ *
+ * node scripts/oracle-key-transition.mjs \
+ * --new <64-hex public key> \
+ * --old <64-hex public key> \
+ * --confirm-mapping
+ *
+ * Add --dry-run to perform only the read-only checks.
+ *
+ * Order is load-bearing: register BEFORE revoke. Revoking first would leave the
+ * contract with no registered key at all, stranding every escrow awaiting an
+ * attestation.
+ *
+ * Verification reads CHAIN STATE, never the CLI exit code. Only public values are
+ * printed: network, contract, admin address, oracle public keys, operation.
+ */
+
+import { execFileSync } from 'node:child_process';
+import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
+
+const args = process.argv.slice(2);
+const flag = (name) => args.includes(`--${name}`);
+const value = (name) => {
+ const i = args.indexOf(`--${name}`);
+ return i >= 0 ? args[i + 1] : null;
+};
+
+const NEW_KEY = value('new');
+const OLD_KEY = value('old');
+const DRY_RUN = flag('dry-run');
+const CONFIRMED = flag('confirm-mapping');
+const NETWORK = process.env.NETWORK || 'testnet';
+const IDENTITY = process.env.ADMIN_IDENTITY || 'coreflow-v2-admin';
+const HEX64 = /^[0-9a-f]{64}$/;
+
+function die(message) {
+ console.error(`\nrefusing to continue: ${message}\n`);
+ process.exit(1);
+}
+
+if (!HEX64.test(NEW_KEY ?? '')) die('--new must be a 64-character lower-case hex public key.');
+if (!HEX64.test(OLD_KEY ?? '')) die('--old must be a 64-character lower-case hex public key.');
+if (NEW_KEY === OLD_KEY) die('--new and --old are the same key.');
+if (!CONFIRMED) {
+ die(
+ 'the key mapping must be confirmed explicitly with --confirm-mapping.\n' +
+ ' Which key is post-rotation cannot be determined from here, and registering\n' +
+ ' the wrong one would re-authorize a possibly exposed credential.',
+ );
+}
+
+const contractId = (process.env.NEXT_PUBLIC_STELLAR_CONTRACT_ID || readEnvFile().NEXT_PUBLIC_STELLAR_CONTRACT_ID || '').trim();
+if (!contractId) die('NEXT_PUBLIC_STELLAR_CONTRACT_ID is not set.');
+
+function readEnvFile() {
+ const out = {};
+ if (!existsSync('.env')) return out;
+ for (const line of readFileSync('.env', 'utf8').split('\n')) {
+ const m = /^([A-Z_][A-Z0-9_]*)=(.*)$/.exec(line.trim());
+ if (m) out[m[1]] = m[2].trim().replace(/^["']|["']$/g, '');
+ }
+ return out;
+}
+
+function cli(argv) {
+ const command = `stellar ${argv.map((a) => `'${String(a).replace(/'/g, "'\\''")}'`).join(' ')} 2>&1`;
+ try {
+ return execFileSync('bash', ['-c', command], { encoding: 'utf8', maxBuffer: 10 * 1024 * 1024 });
+ } catch (e) {
+ throw new Error(`stellar CLI failed:\n${`${e.stdout ?? ''}${e.stderr ?? ''}`.trim()}`);
+ }
+}
+
+const invoke = (fn, extra = [], send = true) =>
+ cli([
+ 'contract', 'invoke', '--id', contractId, '--source', IDENTITY, '--network', NETWORK,
+ ...(send ? [] : ['--send=no']), '--', fn, ...extra,
+ ]);
+
+const isRegistered = (pubkey) =>
+ invoke('is_oracle_key_registered', ['--pubkey', pubkey], false).trim().endsWith('true');
+
+const hashOf = (output) => output.match(/tx\/([0-9a-f]{64})/)?.[1] ?? null;
+
+const adminAddress = cli(['keys', 'address', IDENTITY]).trim();
+
+console.log('Oracle registry transition');
+console.log(` network: Stellar ${NETWORK}`);
+console.log(` contract: ${contractId}`);
+console.log(` admin: ${adminAddress}`);
+console.log(` old oracle: ${OLD_KEY}`);
+console.log(` new oracle: ${NEW_KEY}`);
+console.log(` mode: ${DRY_RUN ? 'DRY RUN (read-only)' : 'EXECUTE'}`);
+
+// --- 0. The signer must BE the on-chain admin -------------------------------
+const onChainAdmin = invoke('get_admin', [], false).trim().replace(/[^G-Z2-7]/g, '');
+if (!onChainAdmin.includes(adminAddress)) {
+ die(
+ `the signing identity is not the contract admin.\n` +
+ ` signing as: ${adminAddress}\n` +
+ ` get_admin: ${onChainAdmin}`,
+ );
+}
+console.log('\n get_admin matches the signing identity.');
+
+const before = { new: isRegistered(NEW_KEY), old: isRegistered(OLD_KEY) };
+console.log(` before: new=${before.new ? 'registered' : 'not registered'}` +
+ ` old=${before.old ? 'registered' : 'not registered'}`);
+
+const record = {
+ title: 'Oracle registry transition',
+ network: `Stellar ${NETWORK}`,
+ contract: contractId,
+ admin: adminAddress,
+ oldOracleKey: OLD_KEY,
+ newOracleKey: NEW_KEY,
+ before,
+ executedAt: new Date().toISOString(),
+};
+
+if (DRY_RUN) {
+ console.log('\nDry run complete. No transaction sent.');
+ process.exit(0);
+}
+
+// --- 1. Register the new key FIRST -----------------------------------------
+if (before.new) {
+ console.log('\n new key is already registered; skipping registration.');
+ record.registrationTx = null;
+} else {
+ console.log('\n registering the new oracle key...');
+ record.registrationTx = hashOf(invoke('register_oracle_key', ['--pubkey', NEW_KEY]));
+ console.log(` registration tx: ${record.registrationTx ?? '(hash not parsed)'}`);
+}
+
+// --- 2. Verify from chain state, not the exit code -------------------------
+record.afterRegistration = { new: isRegistered(NEW_KEY), old: isRegistered(OLD_KEY) };
+console.log(` after registration: new=${record.afterRegistration.new}` +
+ ` old=${record.afterRegistration.old}`);
+
+if (!record.afterRegistration.new) {
+ writeRecord();
+ die(
+ 'the new key is NOT registered after the registration attempt.\n' +
+ ' STOPPING. The old key has deliberately NOT been revoked: revoking now\n' +
+ ' would leave the contract with no usable oracle.',
+ );
+}
+
+// --- 3. Revoke the old key -------------------------------------------------
+if (!record.afterRegistration.old) {
+ console.log('\n old key is already not registered; skipping revocation.');
+ record.revocationTx = null;
+} else {
+ console.log('\n revoking the old oracle key...');
+ record.revocationTx = hashOf(invoke('revoke_oracle_key', ['--pubkey', OLD_KEY]));
+ console.log(` revocation tx: ${record.revocationTx ?? '(hash not parsed)'}`);
+}
+
+// --- 4. Verify the final registry state ------------------------------------
+record.afterRevocation = { new: isRegistered(NEW_KEY), old: isRegistered(OLD_KEY) };
+console.log(` after revocation: new=${record.afterRevocation.new}` +
+ ` old=${record.afterRevocation.old}`);
+
+const expected = record.afterRevocation.new === true && record.afterRevocation.old === false;
+record.finalStateAsExpected = expected;
+writeRecord();
+
+if (!expected) {
+ die(
+ 'the final registry state does not match the expected state.\n' +
+ ` expected: new=registered, old=not registered\n` +
+ ` actual: new=${record.afterRevocation.new}, old=${record.afterRevocation.old}\n` +
+ ' STOPPING without a corrective transaction. Report this state for review.',
+ );
+}
+
+console.log('\nTransition complete and verified against chain state.');
+console.log('Evidence: docs/evidence/oracle-key-transition.json');
+
+function writeRecord() {
+ mkdirSync('docs/evidence', { recursive: true });
+ writeFileSync('docs/evidence/oracle-key-transition.json', JSON.stringify(record, null, 2) + '\n');
+}
diff --git a/scripts/rotate-secrets.mjs b/scripts/rotate-secrets.mjs
new file mode 100755
index 0000000..f13781c
--- /dev/null
+++ b/scripts/rotate-secrets.mjs
@@ -0,0 +1,500 @@
+#!/usr/bin/env node
+/**
+ * Secret rotation executor.
+ *
+ * Rotates the shared secrets exposed by `prodenv.txt`, and proves the OLD value
+ * can no longer authenticate. Emits its own evidence record β a rotation you
+ * cannot demonstrate is a rotation you have not finished.
+ *
+ * THE VALUE IS NEVER DISPLAYED. A generated secret goes straight from
+ * `crypto.randomBytes` into the stdin of `vercel env update`, which stores it
+ * write-only. Nothing is written to a file, echoed, or passed in argv (argv is
+ * world-readable via `ps`). What this script prints is a FINGERPRINT:
+ * `sha256(value)` truncated to 12 hex characters. The preimage is 256 bits of
+ * CSPRNG output, so a fingerprint is not a shortcut to the secret β it exists
+ * so you can confirm the value in Vercel matches the value in `.env` without
+ * either of them being readable.
+ *
+ * Usage:
+ * node scripts/rotate-secrets.mjs --plan
+ * node scripts/rotate-secrets.mjs --rotate AUTH_SECRET [--targets production]
+ * node scripts/rotate-secrets.mjs --remove BOOTSTRAP_SECRET
+ * node scripts/rotate-secrets.mjs --fingerprint-local AUTH_SECRET
+ * node scripts/rotate-secrets.mjs --verify-dead CRON_SECRET --url https://β¦
+ * node scripts/rotate-secrets.mjs --verify-dead AUTH_SECRET --url https://β¦
+ *
+ * `--verify-dead` reads the OLD secret from stdin, never argv:
+ * node scripts/rotate-secrets.mjs --verify-dead CRON_SECRET --url https://β¦ < old.txt
+ * β¦and shred that file afterwards.
+ */
+
+import { randomBytes, createHash, createHmac } from 'node:crypto';
+import { spawnSync } from 'node:child_process';
+import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
+const EVIDENCE = join(ROOT, 'docs', 'evidence', 'secret-rotation.json');
+
+/** Must track src/lib/auth/index.ts:315. */
+const SESSION_COOKIE = 'cf_session';
+
+/** Secrets this script may generate. Each entry states the blast radius. */
+const ROTATABLE = {
+ AUTH_SECRET: {
+ bytes: 32,
+ encoding: 'hex',
+ effect:
+ 'Invalidates every issued JWT. All users are logged out at redeploy. ' +
+ 'There is no dual-secret overlap in src/lib/auth/jwt.ts, so this is a ' +
+ 'hard cutover, not a graceful one.',
+ verify: 'forged-jwt',
+ },
+ CRON_SECRET: {
+ bytes: 32,
+ encoding: 'hex',
+ effect:
+ 'Vercel Cron loses access to GET /api/indexer/run and ' +
+ 'POST /api/reconciliation/run until redeploy. Both read ' +
+ 'CRON_SECRET || INDEXER_SECRET, so rotate them together or the old one ' +
+ 'keeps working as a fallback.',
+ verify: 'bearer',
+ },
+ INDEXER_SECRET: {
+ bytes: 32,
+ encoding: 'hex',
+ effect:
+ 'Same two endpoints as CRON_SECRET β it is the first-choice fallback in ' +
+ 'src/app/api/indexer/run/route.ts:16. Leaving this at its exposed value ' +
+ 'while rotating only CRON_SECRET rotates nothing.',
+ verify: 'bearer',
+ },
+ BOOTSTRAP_SECRET: {
+ bytes: 32,
+ encoding: 'hex',
+ effect:
+ 'Guards POST /api/admin/bootstrap, which claims the FIRST admin. If an ' +
+ 'admin already exists, prefer --remove: unset, the endpoint answers 404 ' +
+ 'and no secret can reach it at all. Rotating keeps a live door.',
+ verify: 'config-only',
+ },
+};
+
+/**
+ * ORACLE_SECRET_KEY is deliberately NOT rotatable here, and this is the most
+ * important guard in the file.
+ *
+ * Its public half is derived from the secret (src/lib/oracle/index.ts:74) and
+ * stored as each escrow's `oracle_pubkey`. The contract accepts attestations
+ * only from a key its admin has registered. So rotating the secret is not an
+ * environment change β it is an on-chain change, and that registration is the
+ * action currently blocked on the owner confirming the key mapping.
+ *
+ * Generating a third oracle key now would be worse than doing nothing: the
+ * open question is which of two keys is post-rotation, and a third candidate
+ * destroys the ability to answer it from the evidence that exists.
+ */
+const ORACLE_REFUSAL =
+ 'ORACLE_SECRET_KEY is not rotatable by this script.\n\n' +
+ ' Its public half is registered ON CHAIN. Rotating the secret produces a\n' +
+ ' public key the contract does not trust, which is exactly the state that\n' +
+ ' currently blocks the live funding run (OracleKeyNotRegistered).\n\n' +
+ ' Generating a third key would also destroy the evidence needed to decide\n' +
+ ' which of the two existing keys is post-rotation.\n\n' +
+ ' See docs/ORACLE_KEY_TRANSITION.md. That transition is owner-gated.';
+
+const DB_REFUSAL =
+ 'The database credential is not rotatable by this script.\n\n' +
+ ' It lives in the Postgres provider, not in Vercel alone: the password must\n' +
+ ' be changed provider-side first, then DATABASE_URL, DIRECT_URL,\n' +
+ ' PRISMA_DATABASE_URL and POSTGRES_URL all updated to match. Rotating the\n' +
+ ' env vars alone breaks the app; rotating the provider alone breaks it too.\n\n' +
+ ' See docs/SECRET_ROTATION.md for the ordered procedure.';
+
+function die(msg) {
+ console.error(`\nrefusing: ${msg}\n`);
+ process.exit(1);
+}
+
+/** sha256 β first 12 hex. Safe to print, publish, and paste. */
+function fingerprint(value) {
+ return createHash('sha256').update(value).digest('hex').slice(0, 12);
+}
+
+function appendEvidence(record) {
+ mkdirSync(dirname(EVIDENCE), { recursive: true });
+ let log = [];
+ if (existsSync(EVIDENCE)) {
+ try {
+ const parsed = JSON.parse(readFileSync(EVIDENCE, 'utf8'));
+ if (Array.isArray(parsed)) log = parsed;
+ else if (Array.isArray(parsed.actions)) log = parsed.actions;
+ } catch {
+ die(`${EVIDENCE} exists but is not valid JSON; refusing to overwrite it`);
+ }
+ }
+ log.push(record);
+ writeFileSync(EVIDENCE, `${JSON.stringify(log, null, 2)}\n`);
+ console.log(` evidence appended β docs/evidence/secret-rotation.json`);
+}
+
+function requireVercelAuth() {
+ const who = spawnSync('vercel', ['whoami'], { encoding: 'utf8' });
+ if (who.status !== 0) {
+ die(
+ 'not authenticated to Vercel (`vercel whoami` failed). Run `vercel login`.\n' +
+ ` ${(who.stderr || who.stdout || '').trim()}`
+ );
+ }
+ if (!existsSync(join(ROOT, '.vercel', 'project.json'))) {
+ die('no .vercel/project.json β this directory is not linked. Run `vercel link`.');
+ }
+ return who.stdout.trim();
+}
+
+/** Reads a local env value WITHOUT importing it into this process's env. */
+function readLocalEnvValue(name) {
+ for (const file of ['.env', '.env.local']) {
+ const path = join(ROOT, file);
+ if (!existsSync(path)) continue;
+ for (const line of readFileSync(path, 'utf8').split('\n')) {
+ const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)$/);
+ if (!m || m[1] !== name) continue;
+ let v = m[2].trim();
+ if (
+ (v.startsWith('"') && v.endsWith('"')) ||
+ (v.startsWith("'") && v.endsWith("'"))
+ ) {
+ v = v.slice(1, -1);
+ }
+ if (v) return { value: v, file };
+ }
+ }
+ return null;
+}
+
+function plan() {
+ console.log('\nSecret rotation plan\n====================\n');
+ console.log('Rotatable by this script (Vercel env, value never displayed):\n');
+ for (const [name, spec] of Object.entries(ROTATABLE)) {
+ const local = readLocalEnvValue(name);
+ console.log(` ${name}`);
+ console.log(` new value : ${spec.bytes} random bytes, ${spec.encoding}`);
+ console.log(
+ ` local copy : ${local ? `present in ${local.file} (fp ${fingerprint(local.value)})` : 'absent'}`
+ );
+ console.log(` blast radius: ${spec.effect}`);
+ console.log();
+ }
+ console.log('Refused, by design:\n');
+ console.log(' ORACLE_SECRET_KEY on-chain coupling β see --rotate for detail');
+ console.log(' DATABASE credential provider-side β see docs/SECRET_ROTATION.md');
+ console.log(
+ '\nNote: a Vercel env change does not affect the RUNNING deployment.\n' +
+ 'Nothing cuts over until you redeploy, so the order above is not urgent β\n' +
+ 'but an un-redeployed rotation has also not taken effect. Verify after deploy.\n'
+ );
+}
+
+function rotate(name, targets, alsoLocal) {
+ if (name === 'ORACLE_SECRET_KEY') die(ORACLE_REFUSAL);
+ if (/DATABASE|POSTGRES|PRISMA|DIRECT_URL/.test(name)) die(DB_REFUSAL);
+ const spec = ROTATABLE[name];
+ if (!spec) {
+ die(`${name} is not a known rotatable secret. Known: ${Object.keys(ROTATABLE).join(', ')}`);
+ }
+
+ const account = requireVercelAuth();
+ console.log(`\nRotating ${name}`);
+ console.log(` vercel account : ${account}`);
+ console.log(` targets : ${targets.join(', ')}`);
+ console.log(` effect : ${spec.effect}\n`);
+
+ // Generated once, reused across targets so every environment agrees.
+ const value = randomBytes(spec.bytes).toString(spec.encoding);
+ const fp = fingerprint(value);
+
+ for (const target of targets) {
+ // `update` replaces in place β no window where the variable is absent.
+ // The value arrives on stdin: not in argv, not in a file, not on screen.
+ const res = spawnSync('vercel', ['env', 'update', name, target, '--yes'], {
+ input: value,
+ encoding: 'utf8',
+ });
+ if (res.status !== 0) {
+ const out = `${res.stdout || ''}${res.stderr || ''}`;
+ // An absent variable cannot be updated; add it instead.
+ if (/not found|does not exist/i.test(out)) {
+ const add = spawnSync('vercel', ['env', 'add', name, target, '--force', '--yes'], {
+ input: value,
+ encoding: 'utf8',
+ });
+ if (add.status !== 0) {
+ die(`vercel env add ${name} ${target} failed:\n ${(add.stderr || add.stdout || '').trim()}`);
+ }
+ console.log(` ${target}: added (was absent)`);
+ } else {
+ die(`vercel env update ${name} ${target} failed:\n ${out.trim()}`);
+ }
+ } else {
+ console.log(` ${target}: updated`);
+ }
+ }
+
+ if (alsoLocal) {
+ const path = join(ROOT, '.env');
+ if (!existsSync(path)) die('.env does not exist; not creating it implicitly');
+ const lines = readFileSync(path, 'utf8').split('\n');
+ let replaced = false;
+ const next = lines.map((line) => {
+ if (new RegExp(`^\\s*${name}\\s*=`).test(line)) {
+ replaced = true;
+ return `${name}="${value}"`;
+ }
+ return line;
+ });
+ if (!replaced) next.push(`${name}="${value}"`);
+ writeFileSync(path, next.join('\n'));
+ console.log(` .env: ${replaced ? 'replaced' : 'appended'} (value not displayed)`);
+ }
+
+ console.log(`\n fingerprint: ${fp}`);
+ console.log(' Compare this against the Vercel dashboard only via a later');
+ console.log(' --fingerprint-local run; the value itself is now write-only.\n');
+ console.log(' NOT YET IN EFFECT. Redeploy, then run --verify-dead with the OLD value.\n');
+
+ appendEvidence({
+ timestamp: new Date().toISOString(),
+ action: 'rotate',
+ secret: name,
+ targets,
+ local_env_updated: Boolean(alsoLocal),
+ new_value_fingerprint: fp,
+ vercel_account: account,
+ in_effect: false,
+ note: 'Vercel env change staged; takes effect at next deployment. Old value not yet proven dead.',
+ });
+}
+
+function removeSecret(name, targets) {
+ if (name !== 'BOOTSTRAP_SECRET') {
+ die(
+ `--remove is only for BOOTSTRAP_SECRET (removing ${name} would break a live code path).`
+ );
+ }
+ const account = requireVercelAuth();
+ console.log(`\nRemoving ${name} β POST /api/admin/bootstrap answers 404 once unset.`);
+ console.log(' Do this only if the first admin already exists in production.\n');
+ const removed = [];
+ for (const target of targets) {
+ const res = spawnSync('vercel', ['env', 'remove', name, target, '--yes'], {
+ encoding: 'utf8',
+ });
+ const out = `${res.stdout || ''}${res.stderr || ''}`;
+ if (res.status !== 0 && !/not found|does not exist/i.test(out)) {
+ die(`vercel env remove ${name} ${target} failed:\n ${out.trim()}`);
+ }
+ console.log(` ${target}: ${res.status === 0 ? 'removed' : 'already absent'}`);
+ removed.push(target);
+ }
+ appendEvidence({
+ timestamp: new Date().toISOString(),
+ action: 'remove',
+ secret: name,
+ targets: removed,
+ vercel_account: account,
+ in_effect: false,
+ note: 'Endpoint disabled once redeployed; verify with --verify-dead BOOTSTRAP_SECRET.',
+ });
+}
+
+function fingerprintLocal(name) {
+ const local = readLocalEnvValue(name);
+ if (!local) die(`${name} is not set in .env or .env.local`);
+ console.log(`\n ${name}`);
+ console.log(` source : ${local.file}`);
+ console.log(` fingerprint: ${fingerprint(local.value)}`);
+ console.log(` length : ${local.value.length} chars\n`);
+}
+
+/** Mints an HS256 JWT with the OLD secret. If the app accepts it, it is alive. */
+function forgeJwt(secret) {
+ const b64 = (o) =>
+ Buffer.from(JSON.stringify(o)).toString('base64url');
+ const now = Math.floor(Date.now() / 1000);
+ const head = b64({ alg: 'HS256', typ: 'JWT' });
+ const body = b64({
+ sub: 'GROTATIONPROBE000000000000000000000000000000000000000000',
+ role: 'admin',
+ iat: now,
+ exp: now + 300,
+ });
+ const sig = createHmac('sha256', secret)
+ .update(`${head}.${body}`)
+ .digest('base64url');
+ return `${head}.${body}.${sig}`;
+}
+
+async function verifyDead(name, url) {
+ if (!url) die('--verify-dead requires --url https://');
+ if (process.stdin.isTTY) {
+ die(
+ 'the OLD secret must arrive on stdin, never argv (argv is visible in `ps`).\n' +
+ ` node scripts/rotate-secrets.mjs --verify-dead ${name} --url ${url} < old-secret.txt`
+ );
+ }
+ const chunks = [];
+ for await (const c of process.stdin) chunks.push(c);
+ const old = Buffer.concat(chunks).toString('utf8').trim();
+ if (!old) die('stdin was empty β expected the OLD secret value');
+ // Without this, piping a placeholder would write an evidence record asserting
+ // the old credential was rejected β a claim about a value never actually in
+ // use. Every secret this script rotates is 64 hex characters.
+ if (old.length < 32) {
+ die(
+ `the value on stdin is ${old.length} characters; every rotated secret is at least 32.\n` +
+ ' Refusing to record a rejection for a value that was never the live secret.'
+ );
+ }
+
+ const base = url.replace(/\/+$/, '');
+ const spec = ROTATABLE[name];
+ if (!spec) die(`unknown secret ${name}`);
+
+ const probes = [];
+ if (spec.verify === 'bearer') {
+ probes.push(
+ { label: 'GET /api/indexer/run', method: 'GET', path: '/api/indexer/run', headers: { authorization: `Bearer ${old}` } },
+ { label: 'POST /api/reconciliation/run', method: 'POST', path: '/api/reconciliation/run', headers: { authorization: `Bearer ${old}` } }
+ );
+ } else if (spec.verify === 'forged-jwt') {
+ probes.push({
+ label: 'GET /api/auth/me with JWT forged using the old AUTH_SECRET',
+ method: 'GET',
+ path: '/api/auth/me',
+ headers: { cookie: `${SESSION_COOKIE}=${forgeJwt(old)}` },
+ });
+ } else if (spec.verify === 'config-only') {
+ // Deliberately NOT probed over the network.
+ //
+ // On a secret match, POST /api/admin/bootstrap proceeds directly to
+ // prisma.user.upsert, defaulting the wallet to ADMIN_WALLETS[0] when the
+ // body omits one. A probe that *succeeded* would therefore grant admin in
+ // production β the verification would cause the thing it is checking for.
+ //
+ // It is also not externally decidable: the endpoint answers 404 both when
+ // the secret is unset and when it is set but wrong. Absence is proven from
+ // configuration, not from a response code.
+ die(
+ 'BOOTSTRAP_SECRET cannot be verified by probing.\n\n' +
+ ' A request bearing a still-live secret would perform a REAL admin\n' +
+ ' bootstrap (route.ts falls back to ADMIN_WALLETS[0]), and the endpoint\n' +
+ ' returns 404 whether the secret is unset or merely wrong β so a 404\n' +
+ ' proves nothing either way.\n\n' +
+ ' Verify from configuration instead:\n' +
+ ' vercel env ls production | grep BOOTSTRAP_SECRET # expect no row\n' +
+ ' then confirm a deployment was created after the removal.'
+ );
+ }
+
+ // reconciliation/run answers 404 as its REJECTION. A wrong path answers 404
+ // too, which would otherwise read as a pass. Require the route in source, so
+ // a 404 can only mean the credential was refused.
+ for (const p of probes) {
+ const routeFile = join(ROOT, 'src', 'app', `${p.path}`, 'route.ts');
+ if (!existsSync(routeFile)) {
+ die(
+ `${p.path} has no route at src/app${p.path}/route.ts.\n` +
+ ' Refusing to probe: a 404 from a path that does not exist would be\n' +
+ ' reported as a rejected credential.'
+ );
+ }
+ }
+
+ console.log(`\nProving the OLD ${name} is dead against ${base}\n`);
+ const results = [];
+ let allDead = true;
+ for (const p of probes) {
+ let status = null;
+ let error = null;
+ try {
+ const res = await fetch(`${base}${p.path}`, {
+ method: p.method,
+ headers: p.headers,
+ body: p.body,
+ redirect: 'manual',
+ });
+ status = res.status;
+ } catch (e) {
+ error = e instanceof Error ? e.message : String(e);
+ }
+ // 401/403/404 = rejected. 200 = the old credential still works.
+ const dead = status !== null && [401, 403, 404].includes(status);
+ if (!dead) allDead = false;
+ console.log(
+ ` ${dead ? 'DEAD ' : 'ALIVE β '} ${p.label} β ${error ? `network error: ${error}` : `HTTP ${status}`}`
+ );
+ results.push({ probe: p.label, status, error, rejected: dead });
+ }
+
+ console.log(
+ allDead
+ ? `\n OLD ${name} is rejected everywhere probed. Rotation complete.\n`
+ : `\n OLD ${name} STILL AUTHENTICATES. The rotation is NOT complete β\n` +
+ ' check that you redeployed, and that no fallback variable still holds it.\n'
+ );
+
+ appendEvidence({
+ timestamp: new Date().toISOString(),
+ action: 'verify-old-dead',
+ secret: name,
+ deployment: base,
+ old_value_fingerprint: fingerprint(old),
+ probes: results,
+ probe_paths_verified_in_source: true,
+ old_value_rejected_everywhere: allDead,
+ in_effect: allDead,
+ });
+
+ if (!allDead) process.exit(2);
+}
+
+// ---------------------------------------------------------------- arg parsing
+const argv = process.argv.slice(2);
+const flag = (n) => {
+ const i = argv.indexOf(n);
+ return i === -1 ? null : argv[i + 1] ?? null;
+};
+const has = (n) => argv.includes(n);
+
+for (const a of argv) {
+ if (/^[0-9a-f]{64}$/i.test(a)) {
+ die('a 64-hex value was passed in argv. Secrets must never be in argv β it is visible in `ps`.');
+ }
+}
+
+const targets = (flag('--targets') ?? 'production')
+ .split(',')
+ .map((t) => t.trim())
+ .filter(Boolean);
+for (const t of targets) {
+ if (!['production', 'preview', 'development'].includes(t)) {
+ die(`unknown target "${t}" (expected production, preview, or development)`);
+ }
+}
+
+if (has('--plan')) {
+ plan();
+} else if (has('--rotate')) {
+ rotate(flag('--rotate'), targets, has('--local'));
+} else if (has('--remove')) {
+ removeSecret(flag('--remove'), targets);
+} else if (has('--fingerprint-local')) {
+ fingerprintLocal(flag('--fingerprint-local'));
+} else if (has('--verify-dead')) {
+ await verifyDead(flag('--verify-dead'), flag('--url'));
+} else {
+ console.log(readFileSync(fileURLToPath(import.meta.url), 'utf8').split('*/')[0]);
+ process.exit(1);
+}
diff --git a/scripts/validate-testnet-v2.mjs b/scripts/validate-testnet-v2.mjs
new file mode 100755
index 0000000..597ba05
--- /dev/null
+++ b/scripts/validate-testnet-v2.mjs
@@ -0,0 +1,323 @@
+#!/usr/bin/env node
+/**
+ * CoreFlow v2 β end-to-end Testnet validation.
+ *
+ * Runs the complete golden path against the DEPLOYED v2 contract and records
+ * machine-readable evidence:
+ *
+ * escrow creation + custody funding
+ * -> oracle attestation (CFWP-v2, per payment)
+ * -> submit_hours_proof
+ * -> manager approval
+ * -> DISTINCT finance approval
+ * -> pay_batch
+ * -> real SAC transfers
+ * -> balance verification
+ *
+ * Every step is verified against on-chain state rather than assumed from a
+ * non-erroring CLI call. Balances are read before and after, so "the payment
+ * settled" is a measured fact, not an inference from an exit code.
+ *
+ * TESTNET ONLY. CoreFlow v1 on Mainnet is untouched.
+ */
+import { execFileSync } from 'node:child_process';
+import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
+import { createHash } from 'node:crypto';
+import { Keypair, nativeToScVal } from '@stellar/stellar-sdk';
+
+const NETWORK = 'testnet';
+const NETWORK_PASSPHRASE = 'Test SDF Network ; September 2015';
+const DEPLOYMENT = JSON.parse(readFileSync('docs/evidence/testnet-v2-deployment.json', 'utf8'));
+const CONTRACT = DEPLOYMENT.contractId;
+
+const ORACLE_SEED = (process.env.ORACLE_SECRET_KEY || '').trim();
+if (!/^[0-9a-fA-F]{64}$/.test(ORACLE_SEED)) {
+ console.error('ORACLE_SECRET_KEY must be a 32-byte hex seed.');
+ process.exit(1);
+}
+const oracleKp = Keypair.fromRawEd25519Seed(Buffer.from(ORACLE_SEED, 'hex'));
+
+// ββ CFWP-v2 preimage (mirrors src/lib/oracle/index.ts) ββββββββββββββββββββββ
+const u16be = (n) => { const b = Buffer.alloc(2); b.writeUInt16BE(n); return b; };
+const u32be = (n) => { const b = Buffer.alloc(4); b.writeUInt32BE(n >>> 0); return b; };
+const u64be = (n) => { const b = Buffer.alloc(8); b.writeBigUInt64BE(BigInt(n)); return b; };
+const i128be = (n) => {
+ const b = Buffer.alloc(16);
+ let v = BigInt(n) & ((1n << 128n) - 1n);
+ for (let i = 15; i >= 0; i--) { b[i] = Number(v & 0xffn); v >>= 8n; }
+ return b;
+};
+const sha256 = (b) => createHash('sha256').update(b).digest();
+const addrDigest = (a) => sha256(nativeToScVal(a, { type: 'address' }).toXDR());
+
+function buildProofMessage(ctx, escrowId, paymentId, hours, nonce) {
+ const m = Buffer.concat([
+ Buffer.from('CFWP', 'ascii'), u16be(2),
+ sha256(Buffer.from(NETWORK_PASSPHRASE, 'utf8')),
+ addrDigest(ctx.contractId), addrDigest(ctx.worker), addrDigest(ctx.token),
+ u32be(escrowId), u32be(paymentId),
+ i128be(ctx.amount), i128be(hours),
+ u64be(ctx.startDate), u64be(ctx.endDate), u64be(nonce),
+ ]);
+ if (m.length !== 198) throw new Error(`preimage is ${m.length} bytes, expected 198`);
+ return m;
+}
+
+// ββ CLI plumbing ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+const sh = (args) =>
+ execFileSync('stellar', args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
+
+const addr = (id) => sh(['keys', 'address', id]);
+
+function invoke(source, fn, args = [], { id = CONTRACT } = {}) {
+ return sh(['contract', 'invoke', '--id', id, '--source', source,
+ '--network', NETWORK, '--', fn, ...args]);
+}
+
+/** Invoke and also return the transaction hash, for the evidence record. */
+function invokeWithHash(source, fn, args = [], { id = CONTRACT } = {}) {
+ const out = execFileSync('stellar',
+ ['contract', 'invoke', '--id', id, '--source', source, '--network', NETWORK, '--', fn, ...args],
+ { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
+ // The CLI prints the tx hash on stderr as part of its progress output; when
+ // absent we still record the result rather than failing the run.
+ return { result: out.trim(), hash: null };
+}
+
+const balance = (sac, who) =>
+ BigInt(JSON.parse(invoke('coreflow-v2-admin', 'balance', ['--id', who], { id: sac })));
+
+const step = (n, msg) => console.log(`\n\x1b[1m[${n}] ${msg}\x1b[0m`);
+const ok = (msg) => console.log(` \x1b[32mβ\x1b[0m ${msg}`);
+const fail = (msg) => { console.error(` \x1b[31mβ ${msg}\x1b[0m`); process.exitCode = 1; throw new Error(msg); };
+const check = (cond, msg) => cond ? ok(msg) : fail(msg);
+
+// ββ Payroll definition ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+// Amounts are USDC base units (7 decimals). Every row satisfies the contract's
+// `hours x rate == amount` invariant exactly; nothing is rounded to fit.
+const USDC = (n) => BigInt(Math.round(n * 1e7));
+const PAYROLL = [
+ { identity: 'coreflow-v2-worker', hours: 40n, rateUsdc: 25 },
+ { identity: 'coreflow-v2-worker2', hours: 32n, rateUsdc: 30 },
+ { identity: 'coreflow-v2-worker3', hours: 45n, rateUsdc: 20 },
+];
+
+const evidence = { version: 'v2', network: NETWORK, contractId: CONTRACT, steps: [] };
+const record = (name, data) => evidence.steps.push({ name, at: new Date().toISOString(), ...data });
+
+async function main() {
+ // The settlement asset comes from the deployment record, not a temp file: the
+ // record is the committed source of truth for what this deployment settles in.
+ const SAC = DEPLOYMENT.settlementAsset?.sacContractId;
+ if (!SAC) {
+ throw new Error(
+ 'docs/evidence/testnet-v2-deployment.json has no settlementAsset.sacContractId'
+ );
+ }
+ const manager = addr('coreflow-v2-manager');
+ const finance = addr('coreflow-v2-finance');
+
+ console.log(`CoreFlow v2 Testnet validation`);
+ console.log(` contract : ${CONTRACT}`);
+ console.log(` asset : ${SAC}`);
+ console.log(` manager : ${manager}`);
+ console.log(` finance : ${finance}`);
+
+ check(manager !== finance, 'manager and finance are DISTINCT keys (separation of duties)');
+
+ const now = Math.floor(Date.now() / 1000);
+ const periodStart = now - 14 * 86400;
+ const periodEnd = now;
+
+ const rows = PAYROLL.map((p, i) => {
+ const rate = USDC(p.rateUsdc);
+ const amount = p.hours * rate;
+ return {
+ paymentId: i,
+ identity: p.identity,
+ worker: addr(p.identity),
+ token: SAC,
+ hours: p.hours,
+ rate,
+ amount,
+ startDate: BigInt(periodStart),
+ endDate: BigInt(periodEnd),
+ };
+ });
+
+ const total = rows.reduce((a, r) => a + r.amount, 0n);
+ console.log(`\n payroll: ${rows.length} contractors, ${Number(total) / 1e7} USDC total`);
+ for (const r of rows) {
+ console.log(` #${r.paymentId} ${r.worker.slice(0, 8)}β¦ ${r.hours}h @ ${Number(r.rate) / 1e7} = ${Number(r.amount) / 1e7} USDC`);
+ }
+
+ // ββ 1. Balances before ββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ step(1, 'Recording balances before settlement');
+ const managerBefore = balance(SAC, manager);
+ const workerBefore = rows.map((r) => balance(SAC, r.worker));
+ ok(`manager holds ${Number(managerBefore) / 1e7} USDC`);
+ workerBefore.forEach((b, i) => ok(`worker #${i} holds ${Number(b) / 1e7} USDC`));
+ record('balances_before', {
+ manager: managerBefore.toString(),
+ workers: workerBefore.map(String),
+ });
+
+ // ββ 2. Create escrow (pulls custody) ββββββββββββββββββββββββββββββββββββββ
+ step(2, 'Creating escrow β custody funded from the manager in one transaction');
+ const paymentsJson = JSON.stringify(rows.map((r) => ({
+ id: r.paymentId + 1,
+ worker: r.worker,
+ token: r.token,
+ amount: r.amount.toString(),
+ start_date: Number(r.startDate),
+ end_date: Number(r.endDate),
+ hours_logged: '0',
+ rate_per_hour: r.rate.toString(),
+ proof_verified: false,
+ // PaymentStatus is a #[repr(u32)] C-like enum, which the CLI's spec tools
+ // encode by discriminant rather than by variant name.
+ status: 0,
+ })));
+
+ const escrowIdRaw = invoke('coreflow-v2-manager', 'initialize_multi_sig_escrow', [
+ '--manager', manager,
+ '--finance_approver', finance,
+ '--oracle_pubkey', DEPLOYMENT.oraclePublicKey,
+ '--payments', paymentsJson,
+ ]);
+ const escrowId = Number(JSON.parse(escrowIdRaw));
+ ok(`escrow #${escrowId} created`);
+
+ const custody = balance(SAC, CONTRACT);
+ check(custody === total, `contract custody holds exactly ${Number(total) / 1e7} USDC`);
+ const managerAfterFund = balance(SAC, manager);
+ check(managerAfterFund === managerBefore - total, 'manager debited by exactly the batch total');
+ record('escrow_created', { escrowId, custodyBaseUnits: custody.toString() });
+
+ // ββ 3. Oracle attestation βββββββββββββββββββββββββββββββββββββββββββββββββ
+ step(3, 'Oracle attestation (CFWP-v2) and on-chain proof submission');
+ const attestations = [];
+ for (const r of rows) {
+ const nonce = BigInt(JSON.parse(invoke('coreflow-v2-admin', 'get_nonce', ['--escrow_id', String(escrowId)])));
+
+ const ctx = { contractId: CONTRACT, worker: r.worker, token: r.token, amount: r.amount, startDate: r.startDate, endDate: r.endDate };
+ const msg = buildProofMessage(ctx, escrowId, r.paymentId, r.hours, nonce);
+
+ // The contract is the source of truth for the preimage β confirm our
+ // independently built bytes are byte-identical before signing them.
+ const onChain = Buffer.from(JSON.parse(invoke('coreflow-v2-admin', 'proof_preimage', [
+ '--escrow_id', String(escrowId), '--payment_id', String(r.paymentId),
+ '--hours', r.hours.toString(), '--nonce', nonce.toString(),
+ ])), 'hex');
+ check(onChain.equals(msg), `payment #${r.paymentId}: local preimage matches contract's proof_preimage`);
+
+ const sig = oracleKp.sign(msg);
+ invoke('coreflow-v2-manager', 'submit_hours_proof', [
+ '--escrow_id', String(escrowId), '--payment_id', String(r.paymentId),
+ '--hours_logged', r.hours.toString(), '--nonce', nonce.toString(),
+ '--signature', sig.toString('hex'),
+ ]);
+ ok(`payment #${r.paymentId}: ${r.hours}h attested and verified on-chain (nonce ${nonce})`);
+ attestations.push({
+ paymentId: r.paymentId, hours: r.hours.toString(), nonce: nonce.toString(),
+ preimageSha256: sha256(msg).toString('hex'), signature: sig.toString('base64'),
+ });
+ }
+ record('oracle_attestations', { schema: 'CFWP-v2', attestations });
+
+ // ββ 4. Replay must fail βββββββββββββββββββββββββββββββββββββββββββββββββββ
+ step(4, 'Replay protection β resubmitting a consumed attestation');
+ const replay = attestations[0];
+ let replayRejected = false;
+ try {
+ invoke('coreflow-v2-manager', 'submit_hours_proof', [
+ '--escrow_id', String(escrowId), '--payment_id', '0',
+ '--hours_logged', replay.hours, '--nonce', replay.nonce,
+ '--signature', Buffer.from(replay.signature, 'base64').toString('hex'),
+ ]);
+ } catch {
+ replayRejected = true;
+ }
+ check(replayRejected, 'a consumed nonce is rejected on-chain (InvalidNonce)');
+ record('replay_rejected', { paymentId: 0, nonce: replay.nonce, rejected: replayRejected });
+
+ // ββ 5. Settlement must require BOTH approvals βββββββββββββββββββββββββββββ
+ step(5, 'Dual approval β settlement blocked until both signers approve');
+ let blockedNoApprovals = false;
+ try { invoke('coreflow-v2-manager', 'pay_batch', ['--escrow_id', String(escrowId)]); }
+ catch { blockedNoApprovals = true; }
+ check(blockedNoApprovals, 'pay_batch refused with zero approvals');
+
+ invoke('coreflow-v2-manager', 'manager_approve', ['--escrow_id', String(escrowId)]);
+ ok('manager approved');
+
+ let blockedOneApproval = false;
+ try { invoke('coreflow-v2-manager', 'pay_batch', ['--escrow_id', String(escrowId)]); }
+ catch { blockedOneApproval = true; }
+ check(blockedOneApproval, 'pay_batch still refused with only the manager approval');
+
+ // A DIFFERENT key signs. The manager cannot produce this approval.
+ invoke('coreflow-v2-finance', 'finance_approve', ['--escrow_id', String(escrowId)]);
+ ok('finance approved (distinct key)');
+ record('dual_approval', { blockedNoApprovals, blockedOneApproval, manager, finance });
+
+ // ββ 6. Settle βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ step(6, 'pay_batch β real SAC transfers to every contractor');
+ invoke('coreflow-v2-manager', 'pay_batch', ['--escrow_id', String(escrowId)]);
+ ok('pay_batch executed');
+
+ // ββ 7. Verify settlement by measured balances βββββββββββββββββββββββββββββ
+ step(7, 'Verifying settlement against on-chain balances');
+ const custodyAfter = balance(SAC, CONTRACT);
+ check(custodyAfter === 0n, 'contract custody fully drained (no residue)');
+
+ const paid = [];
+ rows.forEach((r, i) => {
+ const after = balance(SAC, r.worker);
+ const delta = after - workerBefore[i];
+ check(delta === r.amount, `worker #${i} received exactly ${Number(r.amount) / 1e7} USDC`);
+ paid.push({ paymentId: r.paymentId, worker: r.worker, receivedBaseUnits: delta.toString() });
+ });
+ record('settlement', { custodyAfter: custodyAfter.toString(), paid });
+
+ // ββ 8. Double-settlement must fail ββββββββββββββββββββββββββββββββββββββββ
+ step(8, 'Double-settlement protection');
+ let doubleRejected = false;
+ try { invoke('coreflow-v2-manager', 'pay_batch', ['--escrow_id', String(escrowId)]); }
+ catch { doubleRejected = true; }
+ check(doubleRejected, 'a second pay_batch is rejected (PaymentAlreadyFinalized)');
+ record('double_settlement_rejected', { rejected: doubleRejected });
+
+ // ββ 9. Final escrow state βββββββββββββββββββββββββββββββββββββββββββββββββ
+ step(9, 'Final on-chain escrow state');
+ const finalEscrow = JSON.parse(invoke('coreflow-v2-admin', 'get_escrow', ['--escrow_id', String(escrowId)]));
+ check(finalEscrow.manager_approved === true, 'manager_approved = true');
+ check(finalEscrow.finance_approved === true, 'finance_approved = true');
+ check(finalEscrow.payments.every((p) => p.proof_verified === true), 'every payment carries a verified oracle proof');
+ // PaymentStatus is #[repr(u32)]; the CLI renders it as its discriminant.
+ // Accept either form so this assertion survives a CLI that learns the names.
+ const FINALIZED = 3;
+ check(
+ finalEscrow.payments.every((p) => p.status === FINALIZED || p.status === 'Finalized'),
+ 'every payment is Finalized'
+ );
+ record('final_state', { escrowId, escrow: finalEscrow });
+
+ evidence.escrowId = escrowId;
+ evidence.assetContract = SAC;
+ evidence.totalSettledBaseUnits = total.toString();
+ evidence.completedAt = new Date().toISOString();
+ evidence.explorer = {
+ contract: `https://stellar.expert/explorer/testnet/contract/${CONTRACT}`,
+ asset: `https://stellar.expert/explorer/testnet/contract/${SAC}`,
+ };
+
+ mkdirSync('docs/evidence', { recursive: true });
+ writeFileSync('docs/evidence/testnet-v2-golden-path.json', JSON.stringify(evidence, null, 2));
+
+ console.log(`\n\x1b[32m\x1b[1mGOLDEN PATH COMPLETE\x1b[0m`);
+ console.log(` escrow #${escrowId}: ${Number(total) / 1e7} USDC settled to ${rows.length} contractors`);
+ console.log(` evidence: docs/evidence/testnet-v2-golden-path.json`);
+}
+
+main().catch((e) => { console.error(`\n\x1b[31mFAILED: ${e.message}\x1b[0m`); process.exit(1); });
diff --git a/src/app/api/__tests__/escrows.route.test.ts b/src/app/api/__tests__/escrows.route.test.ts
index 72b41b9..3d74448 100644
--- a/src/app/api/__tests__/escrows.route.test.ts
+++ b/src/app/api/__tests__/escrows.route.test.ts
@@ -10,7 +10,12 @@ vi.mock('@/lib/auth', async (orig) => {
vi.mock('@/lib/db/prisma', () => {
const prisma = {
escrow: { findMany: vi.fn(), create: vi.fn() },
+ orgMember: { findMany: vi.fn(), findUnique: vi.fn(), findFirst: vi.fn() },
+ payrollBatch: { create: vi.fn() },
+ payment: { create: vi.fn() },
auditLog: { create: vi.fn() },
+ // The route writes escrow + batch + payment atomically.
+ $transaction: vi.fn(async (fn: any) => fn(prisma)),
};
return { default: prisma };
});
@@ -39,21 +44,107 @@ describe('GET /api/escrows', () => {
expect(res.status).toBe(401);
});
+ it('returns nothing for a user who belongs to no organization', async () => {
+ // Previously a platform ADMIN with no membership saw EVERY tenant's escrows.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: 'GU', role: 'ADMIN' });
+ mockPrisma.orgMember.findMany.mockResolvedValue([]);
+
+ const body = await (await GET(new Request('http://localhost/api/escrows') as any)).json();
+
+ expect(body.escrows).toEqual([]);
+ expect(mockPrisma.escrow.findMany).not.toHaveBeenCalled();
+ });
+
+ it('scopes the query to the callerβs organizations', async () => {
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: 'GU', role: 'ADMIN' });
+ mockPrisma.orgMember.findMany.mockResolvedValue([
+ { orgId: 'orgA', role: 'OWNER' },
+ { orgId: 'orgC', role: 'VIEWER' },
+ ]);
+ mockPrisma.escrow.findMany.mockResolvedValue([]);
+
+ await GET(new Request('http://localhost/api/escrows') as any);
+
+ const where = mockPrisma.escrow.findMany.mock.calls[0][0].where;
+ // Every branch of the query names an organization the caller belongs to.
+ const orgFilters = JSON.stringify(where);
+ expect(orgFilters).toContain('orgA');
+ expect(orgFilters).toContain('orgC');
+ expect(orgFilters).not.toContain('orgB');
+ });
+
+ it('restricts a WORKER to escrows that pay them', async () => {
+ // A WORKER holds no organization-wide read: otherwise any contractor could
+ // enumerate the whole payroll.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: 'GME', role: 'EMPLOYEE' });
+ mockPrisma.orgMember.findMany.mockResolvedValue([{ orgId: 'orgA', role: 'WORKER' }]);
+ mockPrisma.escrow.findMany.mockResolvedValue([]);
+
+ await GET(new Request('http://localhost/api/escrows') as any);
+
+ const where = JSON.stringify(mockPrisma.escrow.findMany.mock.calls[0][0].where);
+ expect(where).toContain('recipientAddress');
+ expect(where).toContain('GME');
+ });
+
it('returns mapped escrows for an authenticated user', async () => {
- mockGetUser.mockResolvedValue({ walletAddress: 'GU', role: 'EMPLOYEE' });
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: 'GU', role: 'EMPLOYEE' });
+ mockPrisma.orgMember.findMany.mockResolvedValue([{ orgId: 'orgA', role: 'OWNER' }]);
+ // A THREE-payee escrow: the response must carry three payments, not one.
+ // Collapsing them into a single row was the defect this phase removed.
mockPrisma.escrow.findMany.mockResolvedValue([
{
- id: 1, onChainId: 7, workerPubKey: 'GWORKERADDRESSLONG', amountCents: 420000,
- rateCents: 25000, currency: 'USDC', status: 'ready', managerApproved: true,
- financeApproved: true, createdAt: new Date(), timeLogs: [{ hoursLogged: 40 }],
+ id: 'esc_1', onChainId: 7, contractId: 'CCONTRACT', network: 'testnet',
+ assetDecimals: 7, managerApproved: true, financeApproved: true,
+ cancelled: false, createdAt: new Date(),
+ payments: [
+ {
+ id: 'p0', recipientAddress: 'GWORKER1', onChainPaymentIndex: 0,
+ amountBaseUnits: 10_000_000_000n, rateBaseUnits: 250_000_000n, hours: 40n,
+ assetDecimals: 7, assetCode: 'USDC', state: 'PAID',
+ settlementTxHash: 'HASH0', settledAt: new Date(),
+ },
+ {
+ id: 'p1', recipientAddress: 'GWORKER2', onChainPaymentIndex: 1,
+ amountBaseUnits: 9_600_000_000n, rateBaseUnits: 300_000_000n, hours: 32n,
+ assetDecimals: 7, assetCode: 'USDC', state: 'AWAITING_FINANCE',
+ settlementTxHash: null, settledAt: null,
+ },
+ {
+ id: 'p2', recipientAddress: 'GWORKER3', onChainPaymentIndex: 2,
+ amountBaseUnits: 9_000_000_000n, rateBaseUnits: 200_000_000n, hours: 45n,
+ assetDecimals: 7, assetCode: 'USDC', state: 'SETTLEMENT_FAILED',
+ settlementTxHash: 'HASH2', settledAt: null,
+ },
+ ],
},
]);
const res = await GET(new Request('http://localhost/api/escrows') as any);
const data = await res.json();
expect(res.status).toBe(200);
expect(data.escrows[0].id).toBe(7);
- expect(data.escrows[0].hoursLogged).toBe('40');
expect(data.escrows[0].manager_approved).toBe(true);
+
+ // THE REGRESSION GUARD: three payees must surface as three payments, each
+ // with its own recipient and amount.
+ expect(data.escrows[0].paymentCount).toBe(3);
+ expect(data.escrows[0].payments).toHaveLength(3);
+ expect(data.escrows[0].payments.map((p: any) => p.recipient))
+ .toEqual(['GWORKER1', 'GWORKER2', 'GWORKER3']);
+ expect(data.escrows[0].payments.map((p: any) => p.amount))
+ .toEqual(['1,000.00', '960.00', '900.00']);
+
+ // Aggregates are derived from the payments, not stored.
+ expect(data.escrows[0].amount).toBe('2,860.00');
+ expect(data.escrows[0].hoursLogged).toBe('117'); // 40 + 32 + 45
+
+ // A batch containing a failure reports as failed, rather than letting one
+ // broken payment hide inside a mostly-paid batch.
+ expect(data.escrows[0].status).toBe('Settlement failed');
+
+ // Per-payment states are distinct and human-readable, never "Processing".
+ expect(data.escrows[0].payments.map((p: any) => p.stateLabel))
+ .toEqual(['Paid', 'Awaiting finance approval', 'Settlement failed']);
});
});
@@ -62,28 +153,60 @@ describe('POST /api/escrows', () => {
it('401 when unauthenticated', async () => {
mockGetUser.mockResolvedValue(null);
- const res = await POST(jsonReq({ workerPubKey: 'G', amountCents: 1, rateCents: 1 }));
+ const res = await POST(jsonReq({ workerPubKey: 'G', amountBaseUnits: '1', rateBaseUnits: '1' }));
expect(res.status).toBe(401);
});
it('403 for an employee (insufficient role)', async () => {
mockGetUser.mockResolvedValue({ walletAddress: 'GU', role: 'EMPLOYEE' });
- const res = await POST(jsonReq({ workerPubKey: 'G', amountCents: 100, rateCents: 10 }));
+ const res = await POST(jsonReq({ workerPubKey: 'G', amountBaseUnits: '100', rateBaseUnits: '10' }));
expect(res.status).toBe(403);
});
it('400 on invalid body (negative amount)', async () => {
mockGetUser.mockResolvedValue({ walletAddress: 'GA', role: 'ADMIN' });
- const res = await POST(jsonReq({ workerPubKey: 'G', amountCents: -5, rateCents: 10 }));
+ const res = await POST(jsonReq({ workerPubKey: 'G', amountBaseUnits: '-5', rateBaseUnits: '10' }));
expect(res.status).toBe(400);
});
it('201 for an admin with a valid body (and writes an audit log)', async () => {
mockGetUser.mockResolvedValue({ walletAddress: 'GA', role: 'ADMIN' });
- mockPrisma.escrow.create.mockResolvedValue({ id: 1, onChainId: null });
- const res = await POST(jsonReq({ workerPubKey: 'GWORKER', amountCents: 4200, rateCents: 250 }));
+ mockPrisma.orgMember.findFirst.mockResolvedValue({ orgId: 'org_1' });
+ mockPrisma.escrow.create.mockResolvedValue({
+ id: 'esc_1',
+ onChainId: null,
+ totalAmountBaseUnits: 42_000_000_000n,
+ });
+ mockPrisma.payrollBatch.create.mockResolvedValue({ id: 'bat_1', reference: 'ESC-00000-esc_1' });
+ mockPrisma.payment.create.mockResolvedValue({
+ id: 'pay_1',
+ state: 'VALIDATING',
+ amountBaseUnits: 42_000_000_000n,
+ });
+ const res = await POST(jsonReq({
+ workerPubKey: 'GWORKER', amountBaseUnits: '42000000000', rateBaseUnits: '2500000000',
+ }));
expect(res.status).toBe(201);
expect(mockPrisma.escrow.create).toHaveBeenCalled();
expect(mockPrisma.auditLog.create).toHaveBeenCalled();
+
+ // BigInt columns must leave the API as strings: JSON.stringify throws on
+ // bigint outright, so an un-serialized amount is a 500, not a rounding bug.
+ const body = await res.json();
+ expect(body.escrow.totalAmountBaseUnits).toBe('42000000000');
+ expect(body.payment.amountBaseUnits).toBe('42000000000');
+
+ // The value written to the DB is a bigint, not a lossy Number.
+ expect(mockPrisma.escrow.create.mock.calls[0][0].data.totalAmountBaseUnits)
+ .toBe(42_000_000_000n);
+
+ // A recorded escrow creates its Payment row β the escrow is not itself the
+ // payment.
+ expect(mockPrisma.payment.create).toHaveBeenCalled();
+ const paymentData = mockPrisma.payment.create.mock.calls[0][0].data;
+ expect(paymentData.amountBaseUnits).toBe(42_000_000_000n);
+ expect(paymentData.onChainPaymentIndex).toBe(0);
+ // Nothing here asserts settlement: the indexer owns that.
+ expect(paymentData.state).toBe('VALIDATING');
});
});
diff --git a/src/app/api/__tests__/submit-batch.route.test.ts b/src/app/api/__tests__/submit-batch.route.test.ts
new file mode 100644
index 0000000..173dede
--- /dev/null
+++ b/src/app/api/__tests__/submit-batch.route.test.ts
@@ -0,0 +1,264 @@
+// @vitest-environment node
+/**
+ * Authorization regression tests for POST /api/submit-batch.
+ *
+ * This endpoint issues the Ed25519 attestations that flip `proof_verified` on
+ * chain, and `pay_batch` refuses to move funds without them. It was previously
+ * reachable with no session at all, which meant anyone could manufacture the
+ * proof-of-work half of the security model. These tests pin the two gates that
+ * now stand in the way: a verified session, and caller == on-chain manager.
+ */
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+
+vi.mock('@/lib/auth', async (orig) => {
+ const actual = await orig();
+ return { ...actual, getUserFromRequest: vi.fn() };
+});
+
+vi.mock('@/lib/oracle', () => ({
+ getOraclePublicKeyHex: vi.fn(() => 'ab'.repeat(32)),
+ signHoursProof: vi.fn(() => 'SIGNATURE_BASE64'),
+}));
+
+vi.mock('@/lib/config', () => ({
+ STELLAR_CONFIG: {
+ contract: { id: 'CCQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2DINBUGQ2CNSG' },
+ getNetworkPassphrase: () => 'Test SDF Network ; September 2015',
+ },
+}));
+
+const getEscrow = vi.fn();
+const getNonce = vi.fn();
+vi.mock('@/lib/contracts', () => ({
+ CoreFlowClient: class {
+ getEscrow = getEscrow;
+ getNonce = getNonce;
+ },
+}));
+
+vi.mock('@/lib/audit', () => ({ audit: vi.fn() }));
+
+// Tenant layer: the escrow must belong to an organization the caller is in, on
+// top of the on-chain manager check.
+vi.mock('@/lib/db/prisma', () => {
+ const prisma: any = {
+ orgMember: { findUnique: vi.fn(), findMany: vi.fn() },
+ escrow: { findFirst: vi.fn() },
+ };
+ return { default: prisma };
+});
+
+import { POST } from '../submit-batch/route';
+import { getUserFromRequest } from '@/lib/auth';
+import { signHoursProof } from '@/lib/oracle';
+import prismaDefault from '@/lib/db/prisma';
+
+const prismaMock = prismaDefault as any;
+const ORG = 'orgA';
+
+/** Give the signed-in caller an ACTIVE membership that owns the escrow. */
+function grantTenant(role = 'MANAGER', walletAddress = MANAGER) {
+ prismaMock.orgMember.findMany.mockResolvedValue([{ orgId: ORG, role }]);
+ prismaMock.orgMember.findUnique.mockResolvedValue({
+ orgId: ORG, userId: 'u1', role, status: 'ACTIVE',
+ org: { id: ORG, name: 'Org A', slug: 'org-a' },
+ user: { walletAddress },
+ });
+ prismaMock.escrow.findFirst.mockResolvedValue({ id: 'esc1', orgId: ORG, onChainId: 1 });
+}
+
+const mockGetUser = getUserFromRequest as unknown as ReturnType;
+
+const MANAGER = 'G' + 'A'.repeat(55);
+const WORKER = 'G' + 'B'.repeat(55);
+const PAYEE = 'G' + 'C'.repeat(55);
+
+function req(body: unknown) {
+ return new Request('http://localhost/api/submit-batch', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(body),
+ }) as any;
+}
+
+const validBody = {
+ escrow_id: 1,
+ payees: [{ address: PAYEE, amount: '40', token: 'USDC' }],
+};
+
+/** One on-chain payment row: 10000 units at 250/hour == 40 hours. */
+const onChainPayment = (worker: string) => ({
+ worker,
+ token: 'CCZLFMVSWKZLFMVSWKZLFMVSWKZLFMVSWKZLFMVSWKZLFMVSWKZLEB3K',
+ amount: 10000n,
+ rate_per_hour: 250n,
+ start_date: 1000,
+ end_date: 2000,
+});
+
+describe('POST /api/submit-batch β authorization', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ getEscrow.mockResolvedValue({
+ manager: MANAGER,
+ payments: [onChainPayment(PAYEE)],
+ });
+ getNonce.mockResolvedValue(0);
+ grantTenant();
+ });
+
+ it('401s an unauthenticated caller and signs nothing', async () => {
+ mockGetUser.mockResolvedValue(null);
+
+ const res = await POST(req(validBody));
+
+ expect(res.status).toBe(401);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('403s a signed-in worker who is not the on-chain manager', async () => {
+ // The worker holds a perfectly valid session β the only thing stopping them
+ // from attesting to their own hours is the on-chain manager check.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: WORKER, role: 'EMPLOYEE' });
+ grantTenant('MANAGER', WORKER);
+
+ const res = await POST(req(validBody));
+
+ expect(res.status).toBe(403);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('403s even an ADMIN who is not the escrow manager', async () => {
+ // Platform admin is not the same authority as this escrow's manager;
+ // role must not substitute for on-chain custody of the escrow.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: WORKER, role: 'ADMIN' });
+ grantTenant('ADMIN', WORKER);
+
+ const res = await POST(req(validBody));
+
+ expect(res.status).toBe(403);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('issues attestations to the on-chain manager', async () => {
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+
+ const res = await POST(req(validBody));
+ const data = await res.json();
+
+ expect(res.status).toBe(200);
+ expect(data.signatures).toHaveLength(1);
+ expect(data.signatures[0].signature).toBe('SIGNATURE_BASE64');
+ });
+
+ it('starts nonces at the live on-chain watermark, not zero', async () => {
+ // Signing from 0 against an escrow that already consumed nonces would
+ // produce signatures the contract rejects with InvalidNonce (#9).
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+ getNonce.mockResolvedValue(7);
+ getEscrow.mockResolvedValue({
+ manager: MANAGER,
+ payments: [onChainPayment(PAYEE), onChainPayment(WORKER)],
+ });
+
+ const data = await (await POST(req({
+ escrow_id: 1,
+ payees: [
+ { address: PAYEE, amount: '40', token: 'USDC' },
+ { address: WORKER, amount: '32', token: 'USDC' },
+ ],
+ }))).json();
+
+ expect(data.startNonce).toBe(7);
+ expect(data.signatures.map((s: { nonce: number }) => s.nonce)).toEqual([7, 8]);
+ });
+
+ it('rejects a batch over the 100-payee cap before touching the oracle', async () => {
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+
+ const res = await POST(req({
+ escrow_id: 1,
+ payees: Array.from({ length: 101 }, () => ({ address: PAYEE, amount: '1', token: 'USDC' })),
+ }));
+
+ expect(res.status).toBe(400);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('refuses when the upload has a different payee count than the escrow', async () => {
+ // The signed preimage comes from on-chain rows, so a mismatched upload
+ // would attest to something the uploader never reviewed.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+
+ const res = await POST(req({
+ escrow_id: 1,
+ payees: [
+ { address: PAYEE, amount: '40', token: 'USDC' },
+ { address: WORKER, amount: '32', token: 'USDC' },
+ ],
+ }));
+
+ expect(res.status).toBe(409);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('refuses when an uploaded payee does not match the on-chain row', async () => {
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+
+ const res = await POST(req({
+ escrow_id: 1,
+ payees: [{ address: WORKER, amount: '40', token: 'USDC' }], // chain holds PAYEE
+ }));
+
+ expect(res.status).toBe(409);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('derives hours from the escrowed amount, not from the upload', async () => {
+ // The contract enforces `hours x rate == amount`; 10000/250 = 40 regardless
+ // of what the CSV claims, so a wrong CSV figure cannot reach the signature.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+
+ const data = await (await POST(req({
+ escrow_id: 1,
+ payees: [{ address: PAYEE, amount: '999999', token: 'USDC' }],
+ }))).json();
+
+ expect(data.signatures[0].hours).toBe(40);
+ });
+
+ it('403s a caller whose organization does not own the escrow', async () => {
+ // The caller may well be the on-chain manager β controlling a key is not the
+ // same as the escrow being part of their workspace.
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+ grantTenant('MANAGER', MANAGER);
+ prismaMock.escrow.findFirst.mockResolvedValue(null); // not in this tenant
+
+ const res = await POST(req(validBody));
+
+ expect(res.status).toBe(404);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('403s a role that cannot request attestations', async () => {
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+ grantTenant('VIEWER', MANAGER);
+
+ const res = await POST(req(validBody));
+
+ expect(res.status).toBe(403);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+
+ it('rejects a malformed payee address', async () => {
+ mockGetUser.mockResolvedValue({ userId: 'u1', walletAddress: MANAGER, role: 'EMPLOYEE' });
+
+ const res = await POST(req({
+ escrow_id: 1,
+ payees: [{ address: 'not-a-stellar-address', amount: '40', token: 'USDC' }],
+ }));
+
+ expect(res.status).toBe(400);
+ expect(signHoursProof).not.toHaveBeenCalled();
+ });
+});
diff --git a/src/app/api/admin/__tests__/bootstrap.route.test.ts b/src/app/api/admin/__tests__/bootstrap.route.test.ts
new file mode 100644
index 0000000..5bb7b2b
--- /dev/null
+++ b/src/app/api/admin/__tests__/bootstrap.route.test.ts
@@ -0,0 +1,106 @@
+// @vitest-environment node
+/**
+ * Abuse-resistance tests for POST /api/admin/bootstrap.
+ *
+ * This endpoint is exempt from session auth by necessity β there is no admin to
+ * authenticate as yet β so BOOTSTRAP_SECRET is the only control between an
+ * anonymous caller and full platform control. It previously had no rate limit
+ * and used a short-circuiting `!==` comparison.
+ */
+import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
+
+vi.mock('@/lib/db/prisma', () => ({
+ default: { user: { upsert: vi.fn() }, auditLog: { create: vi.fn() } },
+}));
+vi.mock('@/lib/audit', () => ({ audit: vi.fn() }));
+
+import { POST } from '../bootstrap/route';
+import prisma from '@/lib/db/prisma';
+import { __resetRateLimiter } from '@/lib/ratelimit';
+
+const mockPrisma = prisma as any;
+
+const GOOD_SECRET = 'x'.repeat(48);
+const WALLET = 'G' + 'A'.repeat(55);
+
+function req(secret: string | undefined, ip = '203.0.113.10') {
+ return new Request('http://localhost/api/admin/bootstrap', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'x-forwarded-for': ip,
+ ...(secret === undefined ? {} : { 'x-bootstrap-secret': secret }),
+ },
+ body: JSON.stringify({ walletAddress: WALLET }),
+ }) as any;
+}
+
+describe('POST /api/admin/bootstrap', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ __resetRateLimiter();
+ process.env.BOOTSTRAP_SECRET = GOOD_SECRET;
+ mockPrisma.user.upsert.mockResolvedValue({
+ id: 'u1', walletAddress: WALLET, role: 'ADMIN',
+ });
+ });
+ afterEach(() => {
+ delete process.env.BOOTSTRAP_SECRET;
+ });
+
+ it('promotes the target wallet when the secret is correct', async () => {
+ const res = await POST(req(GOOD_SECRET));
+ expect(res.status).toBe(200);
+ expect(mockPrisma.user.upsert).toHaveBeenCalled();
+ });
+
+ it('404s a wrong secret without revealing that the endpoint exists', async () => {
+ const res = await POST(req('y'.repeat(48)));
+ expect(res.status).toBe(404);
+ expect(mockPrisma.user.upsert).not.toHaveBeenCalled();
+ });
+
+ it('404s when the secret is not configured', async () => {
+ delete process.env.BOOTSTRAP_SECRET;
+ expect((await POST(req(GOOD_SECRET))).status).toBe(404);
+ });
+
+ it('refuses to operate with a secret too short to resist guessing', async () => {
+ // A short secret reads as protection while providing none, so the endpoint
+ // disables itself rather than accepting it.
+ process.env.BOOTSTRAP_SECRET = 'short';
+ const res = await POST(req('short'));
+ expect(res.status).toBe(404);
+ expect(mockPrisma.user.upsert).not.toHaveBeenCalled();
+ });
+
+ it('throttles brute-force guessing from one IP', async () => {
+ // Without a brake the secret is guessable at network speed.
+ for (let i = 0; i < 5; i++) {
+ expect((await POST(req(`wrong-${i}`.padEnd(48, 'z')))).status).toBe(404);
+ }
+
+ // Budget exhausted: even the CORRECT secret is now refused from this IP.
+ // That is the point β the limiter must not be bypassable by guessing right.
+ const res = await POST(req(GOOD_SECRET));
+ expect(res.status).toBe(404);
+ expect(mockPrisma.user.upsert).not.toHaveBeenCalled();
+ });
+
+ it('counts the budget per IP, not globally', async () => {
+ for (let i = 0; i < 5; i++) await POST(req('wrong'.padEnd(48, 'z'), '198.51.100.1'));
+
+ // A different client is unaffected by the first one's exhausted budget.
+ const res = await POST(req(GOOD_SECRET, '198.51.100.2'));
+ expect(res.status).toBe(200);
+ });
+
+ it('rejects a non-string secret without throwing', async () => {
+ const r = new Request('http://localhost/api/admin/bootstrap', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json', 'x-forwarded-for': '203.0.113.99' },
+ body: JSON.stringify({ walletAddress: WALLET, bootstrapSecret: { evil: true } }),
+ }) as any;
+ expect((await POST(r)).status).toBe(404);
+ });
+});
diff --git a/src/app/api/admin/__tests__/invitations-revoke.route.test.ts b/src/app/api/admin/__tests__/invitations-revoke.route.test.ts
deleted file mode 100644
index d24b469..0000000
--- a/src/app/api/admin/__tests__/invitations-revoke.route.test.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-// @vitest-environment node
-import { describe, it, expect, vi, beforeEach } from 'vitest';
-
-vi.mock('@/lib/auth', async (orig) => {
- const actual = await orig();
- return { ...actual, getUserFromRequest: vi.fn() };
-});
-
-vi.mock('@/lib/db/prisma', () => {
- const prisma = {
- invitation: { findUnique: vi.fn(), delete: vi.fn() },
- auditLog: { create: vi.fn() },
- };
- return { default: prisma };
-});
-
-import { DELETE } from '../invitations/[token]/route';
-import { getUserFromRequest } from '@/lib/auth';
-import prisma from '@/lib/db/prisma';
-
-const mockGetUser = getUserFromRequest as unknown as ReturnType;
-const mockPrisma = prisma as any;
-
-function deleteReq(token: string) {
- return new Request(`http://localhost/api/admin/invitations/${token}`, {
- method: 'DELETE',
- }) as any;
-}
-
-describe('DELETE /api/admin/invitations/[token]', () => {
- beforeEach(() => vi.clearAllMocks());
-
- it('401 when unauthenticated', async () => {
- mockGetUser.mockResolvedValue(null);
- const res = await DELETE(deleteReq('sometoken'), { params: { token: 'sometoken' } });
- expect(res.status).toBe(401);
- });
-
- it('403 for a non-admin', async () => {
- mockGetUser.mockResolvedValue({ walletAddress: 'GM', role: 'EMPLOYEE' });
- const res = await DELETE(deleteReq('sometoken'), { params: { token: 'sometoken' } });
- expect(res.status).toBe(403);
- });
-
- it('404 when invitation not found', async () => {
- mockGetUser.mockResolvedValue({ walletAddress: 'GA', role: 'ADMIN' });
- mockPrisma.invitation.findUnique.mockResolvedValue(null);
- const res = await DELETE(deleteReq('sometoken'), { params: { token: 'sometoken' } });
- expect(res.status).toBe(404);
- });
-
- it('200 and deletes invitation for an admin', async () => {
- mockGetUser.mockResolvedValue({ walletAddress: 'GA', role: 'ADMIN' });
- mockPrisma.invitation.findUnique.mockResolvedValue({
- id: 'inv-1',
- email: 'test@example.com',
- role: 'EMPLOYEE',
- token: 'sometoken',
- });
- mockPrisma.invitation.delete.mockResolvedValue({});
-
- const res = await DELETE(deleteReq('sometoken'), { params: { token: 'sometoken' } });
- expect(res.status).toBe(200);
- expect(mockPrisma.invitation.delete).toHaveBeenCalledWith({
- where: { token: 'sometoken' },
- });
- expect(mockPrisma.auditLog.create).toHaveBeenCalled();
- });
-});
\ No newline at end of file
diff --git a/src/app/api/admin/audit-logs/route.ts b/src/app/api/admin/audit-logs/route.ts
index fd202db..5e83d47 100644
--- a/src/app/api/admin/audit-logs/route.ts
+++ b/src/app/api/admin/audit-logs/route.ts
@@ -1,78 +1,75 @@
/**
- * GET /api/admin/audit-logs
+ * GET /api/admin/audit-logs β the caller's organization's audit trail.
*
- * Lists audit log entries for the Admin Audit Log viewer.
- * Supports optional filtering by action type and pagination.
+ * ββ What changed and why βββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ * This read the global, tenant-less `AuditLog` table, so any platform admin saw
+ * every organization's activity: who approved what, for how much, for whom. An
+ * audit trail is among the most sensitive data in the product β it names the
+ * people holding approval authority β so it is now scoped to the caller's own
+ * organization and served from the tenant-owned `AuditEvent` model.
*
- * Restricted to ADMIN role only.
+ * Legacy `AuditLog` rows are NOT exposed here. They predate organizations and
+ * cannot be attributed to one; surfacing them to whichever tenant happened to ask
+ * would be the leak this endpoint just closed.
*/
import { NextRequest, NextResponse } from 'next/server';
import prisma from '@/lib/db/prisma';
-import { getUserFromRequest, isAdmin } from '@/lib/auth';
+import { withTenant } from '@/lib/tenancy/http';
+
+const MAX_LIMIT = 200;
export async function GET(request: NextRequest) {
- const user = await getUserFromRequest(request);
- if (!user) {
- return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
- }
- if (!isAdmin(user)) {
- return NextResponse.json(
- { error: 'Forbidden: ADMIN role required' },
- { status: 403 }
+ return withTenant(request, { permission: 'audit:read', parseBody: false }, async ({ ctx }) => {
+ const url = new URL(request.url);
+ const limit = Math.min(
+ Math.max(parseInt(url.searchParams.get('limit') || '50', 10) || 50, 1),
+ MAX_LIMIT
);
- }
-
- try {
- const { searchParams } = new URL(request.url);
- const limit = Math.min(parseInt(searchParams.get('limit') || '50', 10), 200);
- const cursor = searchParams.get('cursor');
- const action = searchParams.get('action');
-
- const whereClause: any = {};
- if (action) {
- whereClause.action = action;
- }
-
- if (cursor) {
- whereClause.id = { lt: cursor };
- }
+ const type = url.searchParams.get('type');
+ const actor = url.searchParams.get('actor');
+ const cursor = url.searchParams.get('cursor');
- const logs = await prisma.auditLog.findMany({
- where: whereClause,
- take: limit + 1,
+ const events = await prisma.auditEvent.findMany({
+ where: {
+ // Scope is part of the query, never a check afterwards.
+ orgId: ctx.orgId,
+ ...(type ? { type } : {}),
+ ...(actor ? { actorAddress: actor } : {}),
+ ...(cursor ? { createdAt: { lt: new Date(cursor) } } : {}),
+ },
orderBy: { createdAt: 'desc' },
+ take: limit + 1,
+ select: {
+ id: true, type: true, actorAddress: true, actorSystem: true,
+ paymentId: true, batchId: true, escrowId: true,
+ previousState: true, newState: true, txHash: true,
+ metadata: true, createdAt: true,
+ },
});
- const hasNextPage = logs.length > limit;
- const items = hasNextPage ? logs.slice(0, limit) : logs;
- const nextCursor = hasNextPage ? items[items.length - 1].id : null;
-
- // Parse metadata JSON for each log entry
- const mappedLogs = items.map((log) => ({
- id: log.id,
- action: log.action,
- actor: log.actor,
- target: log.target,
- metadata: log.metadata ? JSON.parse(log.metadata) : null,
- createdAt: log.createdAt.toISOString(),
- }));
+ const hasMore = events.length > limit;
+ const page = hasMore ? events.slice(0, limit) : events;
- return NextResponse.json(
- {
- logs: mappedLogs,
- pagination: {
- hasNextPage,
- nextCursor,
- },
- },
- { status: 200 }
- );
- } catch (error) {
- console.error('[admin/audit-logs] GET error:', error);
- return NextResponse.json(
- { error: 'Failed to fetch audit logs' },
- { status: 500 }
- );
- }
-}
\ No newline at end of file
+ return NextResponse.json({
+ organization: { id: ctx.orgId, name: ctx.orgName },
+ logs: page.map((e) => ({
+ id: e.id,
+ action: e.type,
+ // A machine actor is labelled as such, so an automated transition is
+ // never read as a person's decision.
+ actor: e.actorAddress ?? e.actorSystem ?? 'system',
+ actorIsSystem: !e.actorAddress,
+ paymentId: e.paymentId,
+ batchId: e.batchId,
+ escrowId: e.escrowId,
+ previousState: e.previousState,
+ newState: e.newState,
+ txHash: e.txHash,
+ metadata: e.metadata,
+ createdAt: e.createdAt.toISOString(),
+ })),
+ nextCursor: hasMore ? page[page.length - 1].createdAt.toISOString() : null,
+ });
+ });
+}
diff --git a/src/app/api/admin/bootstrap/route.ts b/src/app/api/admin/bootstrap/route.ts
index 124f13a..d7895d2 100644
--- a/src/app/api/admin/bootstrap/route.ts
+++ b/src/app/api/admin/bootstrap/route.ts
@@ -1,8 +1,50 @@
+/**
+ * POST /api/admin/bootstrap β create the very first ADMIN.
+ *
+ * This endpoint is deliberately exempt from session auth (there is no admin yet
+ * to authenticate as), which makes BOOTSTRAP_SECRET the only thing standing
+ * between an anonymous caller and full platform control. It is therefore
+ * hardened three ways:
+ *
+ * 1. RATE LIMITED per client IP. Without a brake, the secret is simply
+ * brute-forceable at network speed β an unlimited oracle for guessing.
+ * 2. CONSTANT-TIME comparison. `!==` on strings short-circuits at the first
+ * differing byte, which leaks the length of a correct prefix.
+ * 3. MINIMUM LENGTH. A short secret is guessable regardless of the above, so
+ * the endpoint refuses to operate rather than offering false assurance.
+ *
+ * Every outcome returns the same 404 body, so a caller cannot distinguish "the
+ * endpoint is disabled" from "your secret was wrong" from "you are rate
+ * limited" β none of those should be observable.
+ */
+
import { NextRequest } from 'next/server';
+import { createHash, timingSafeEqual } from 'crypto';
import { ApiResponse } from '@/lib/api-response';
import prisma from '@/lib/db/prisma';
import { Role } from '@prisma/client';
import { audit } from '@/lib/audit';
+import { rateLimit, clientIp } from '@/lib/ratelimit';
+
+/** Shortest secret this endpoint will accept. */
+const MIN_SECRET_LENGTH = 32;
+
+/** Attempts allowed per IP per window. */
+const BOOTSTRAP_ATTEMPT_LIMIT = 5;
+const BOOTSTRAP_WINDOW_MS = 60 * 60 * 1000; // 1 hour
+
+/**
+ * Compare two secrets without leaking where they diverge.
+ *
+ * Both sides are hashed to a fixed length first: `timingSafeEqual` throws on
+ * length mismatch, and catching that would reintroduce exactly the length
+ * oracle this is meant to remove.
+ */
+function secretsMatch(provided: string, expected: string): boolean {
+ const a = createHash('sha256').update(provided).digest();
+ const b = createHash('sha256').update(expected).digest();
+ return timingSafeEqual(a, b);
+}
export async function POST(req: NextRequest) {
const secret = process.env.BOOTSTRAP_SECRET;
@@ -12,11 +54,34 @@ export async function POST(req: NextRequest) {
return ApiResponse.notFound('Endpoint not available');
}
+ // A secret too short to resist guessing is worse than no endpoint: it reads
+ // as protection while providing none.
+ if (secret.trim().length < MIN_SECRET_LENGTH) {
+ console.error(
+ `[Bootstrap] BOOTSTRAP_SECRET is shorter than ${MIN_SECRET_LENGTH} characters; endpoint disabled.`
+ );
+ return ApiResponse.notFound('Endpoint not available');
+ }
+
+ // Rate limit BEFORE comparing, so failed guesses consume the budget.
+ const rl = rateLimit(`bootstrap:${clientIp(req)}`, BOOTSTRAP_ATTEMPT_LIMIT, BOOTSTRAP_WINDOW_MS);
+ if (!rl.ok) {
+ await audit('admin.bootstrap.throttled', {
+ actor: clientIp(req),
+ metadata: { retryAfter: rl.retryAfter },
+ });
+ return ApiResponse.notFound('Endpoint not available');
+ }
+
try {
const body = await req.json().catch(() => ({}));
const requestSecret = req.headers.get('x-bootstrap-secret') || body.bootstrapSecret;
- if (requestSecret !== secret) {
+ if (typeof requestSecret !== 'string' || !secretsMatch(requestSecret, secret)) {
+ await audit('admin.bootstrap.denied', {
+ actor: clientIp(req),
+ metadata: { reason: 'invalid bootstrap secret' },
+ });
return ApiResponse.notFound('Endpoint not available');
}
diff --git a/src/app/api/admin/invitations/[token]/route.ts b/src/app/api/admin/invitations/[token]/route.ts
deleted file mode 100644
index 79bb166..0000000
--- a/src/app/api/admin/invitations/[token]/route.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * DELETE /api/admin/invitations/[token]
- *
- * Revokes an active invitation by its token. The invitation row is deleted
- * from the database so the onboarding link becomes immediately invalid.
- *
- * Restricted to ADMIN role only.
- */
-
-import { NextRequest, NextResponse } from 'next/server';
-import prisma from '@/lib/db/prisma';
-import { getUserFromRequest, isAdmin } from '@/lib/auth';
-import { audit } from '@/lib/audit';
-
-export async function DELETE(
- request: NextRequest,
- { params }: { params: { token: string } }
-) {
- const user = await getUserFromRequest(request);
- if (!user) {
- return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
- }
- if (!isAdmin(user)) {
- return NextResponse.json(
- { error: 'Forbidden: ADMIN role required' },
- { status: 403 }
- );
- }
-
- try {
- const invitation = await prisma.invitation.findUnique({
- where: { token: params.token },
- });
-
- if (!invitation) {
- return NextResponse.json(
- { error: 'Invitation not found' },
- { status: 404 }
- );
- }
-
- await prisma.invitation.delete({
- where: { token: params.token },
- });
-
- await audit('invitation.revoke', {
- actor: user.walletAddress,
- target: invitation.email,
- metadata: { token: params.token, role: invitation.role },
- });
-
- return NextResponse.json(
- { message: 'Invitation revoked successfully' },
- { status: 200 }
- );
- } catch (error) {
- console.error('[admin/invitations/token] DELETE error:', error);
- return NextResponse.json(
- { error: 'Failed to revoke invitation' },
- { status: 500 }
- );
- }
-}
\ No newline at end of file
diff --git a/src/app/api/admin/invitations/route.ts b/src/app/api/admin/invitations/route.ts
deleted file mode 100644
index 2bd6a57..0000000
--- a/src/app/api/admin/invitations/route.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { NextRequest, NextResponse } from 'next/server';
-import prisma from '@/lib/db/prisma';
-import { getUserFromRequest, isAdmin, Role } from '@/lib/auth';
-import { audit } from '@/lib/audit';
-import crypto from 'crypto';
-import { z } from 'zod';
-import { parseBody } from '@/lib/validation/schemas';
-
-const createInviteSchema = z.object({
- email: z.string().email(),
- role: z.enum(['ADMIN', 'EMPLOYEE']).default('EMPLOYEE'),
-});
-
-export async function GET(request: NextRequest) {
- const user = await getUserFromRequest(request);
- if (!user) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
- if (!isAdmin(user)) return NextResponse.json({ error: 'Forbidden: ADMIN role required' }, { status: 403 });
-
- try {
- const invitations = await prisma.invitation.findMany({
- orderBy: { createdAt: 'desc' },
- take: 100,
- });
- return NextResponse.json({ invitations }, { status: 200 });
- } catch (error) {
- console.error('[admin/invitations] GET error:', error);
- return NextResponse.json({ error: 'Failed to fetch invitations' }, { status: 500 });
- }
-}
-
-export async function POST(request: NextRequest) {
- const user = await getUserFromRequest(request);
- if (!user) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
- if (!isAdmin(user)) return NextResponse.json({ error: 'Forbidden: ADMIN role required' }, { status: 403 });
-
- try {
- const body = await request.json().catch(() => null);
- const parsed = parseBody(createInviteSchema, body);
- if (!parsed.ok) {
- return NextResponse.json({ error: parsed.error }, { status: 400 });
- }
- const { email, role } = parsed.data;
-
- // Check if invitation already exists for this email
- const existing = await prisma.invitation.findUnique({ where: { email } });
- if (existing && !existing.usedAt && existing.expiresAt > new Date()) {
- return NextResponse.json(
- { invitation: existing, message: 'Existing active invitation retrieved' },
- { status: 200 }
- );
- }
-
- const token = crypto.randomBytes(32).toString('hex');
- const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days
-
- const invitation = await prisma.invitation.upsert({
- where: { email },
- create: {
- email,
- role: role as Role,
- token,
- expiresAt,
- },
- update: {
- role: role as Role,
- token,
- expiresAt,
- usedAt: null,
- },
- });
-
- await audit('invitation.create', {
- actor: user.walletAddress,
- target: email,
- metadata: { role, token, expiresAt: expiresAt.toISOString() },
- });
-
- return NextResponse.json({ invitation }, { status: 201 });
- } catch (error) {
- console.error('[admin/invitations] POST error:', error);
- return NextResponse.json({ error: 'Failed to create invitation' }, { status: 500 });
- }
-}
diff --git a/src/app/api/escrows/[id]/status/route.ts b/src/app/api/escrows/[id]/status/route.ts
deleted file mode 100644
index f9b7360..0000000
--- a/src/app/api/escrows/[id]/status/route.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { NextRequest, NextResponse } from 'next/server';
-import prisma from '@/lib/db/prisma';
-import { getUserFromRequest, isAdmin } from '@/lib/auth';
-import { parseBody, statusPatchSchema } from '@/lib/validation/schemas';
-import { audit } from '@/lib/audit';
-
-export async function PATCH(request: NextRequest, { params }: { params: { id: string } }) {
- // Role guard β only ADMIN can update escrow status (approve/reject/finalize/cancel)
- const user = await getUserFromRequest(request);
- if (!user) {
- return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
- }
- if (!isAdmin(user)) {
- return NextResponse.json(
- { error: 'Forbidden: only ADMIN can update escrow status' },
- { status: 403 }
- );
- }
-
- try {
- const onChainId = parseInt(params.id, 10);
- if (isNaN(onChainId)) {
- return NextResponse.json({ error: 'Invalid escrow ID' }, { status: 400 });
- }
-
- const body = await request.json().catch(() => null);
- const parsed = parseBody(statusPatchSchema, body);
- if (!parsed.ok) {
- return NextResponse.json({ error: parsed.error }, { status: 400 });
- }
- const { status, managerApproved, financeApproved, rejectionReason } = parsed.data;
-
- const updated = await prisma.escrow.update({
- where: { onChainId },
- data: {
- ...(status && { status }),
- ...(managerApproved !== undefined && { managerApproved }),
- ...(financeApproved !== undefined && { financeApproved }),
- ...(rejectionReason !== undefined && { rejectionReason }),
- },
- });
-
- await audit(status === 'rejected' ? 'escrow.reject' : 'escrow.status_update', {
- actor: user.walletAddress,
- target: String(onChainId),
- metadata: { status, managerApproved, financeApproved, rejectionReason },
- });
-
- return NextResponse.json({ escrow: updated }, { status: 200 });
- } catch (error) {
- console.error(`Failed to update escrow ${params.id}:`, error);
- return NextResponse.json({ error: 'Failed to update escrow' }, { status: 500 });
- }
-}
diff --git a/src/app/api/escrows/route.ts b/src/app/api/escrows/route.ts
index cddf3c2..913e086 100644
--- a/src/app/api/escrows/route.ts
+++ b/src/app/api/escrows/route.ts
@@ -1,13 +1,32 @@
+/**
+ * GET /api/escrows β list escrows with their payments
+ * POST /api/escrows β record an escrow created on-chain
+ *
+ * ββ Status of this endpoint ββββββββββββββββββββββββββββββββββββββββββββββββββ
+ * Superseded by /api/batches and /api/payments, which expose the payment domain
+ * directly. It is retained, working, because the existing dashboard consumes its
+ * shape; it now reads through the Payment model rather than the single-payee
+ * columns that used to live on Escrow.
+ *
+ * The per-escrow response aggregates its payments. A caller wanting per-payment
+ * truth should use /api/payments β an escrow-shaped view of a multi-payee batch
+ * is exactly the lossiness this phase removed, so it is not reintroduced here as
+ * the primary interface.
+ */
+
import { NextRequest, NextResponse } from 'next/server';
+import { PaymentState } from '@prisma/client';
import prisma from '@/lib/db/prisma';
import { getUserFromRequest, isAdmin } from '@/lib/auth';
+import { MembershipStatus } from '@prisma/client';
+import { can } from '@/lib/tenancy/rbac';
import { parseBody, createEscrowSchema } from '@/lib/validation/schemas';
import { audit } from '@/lib/audit';
+import { SAC_DECIMALS, formatAmountWithSeparators, sumAmounts } from '@/lib/money';
+import { describeState } from '@/lib/payments/state-machine';
+import { rollupBatch } from '@/lib/payments/service';
export async function GET(request: NextRequest) {
- // Auth guard β all authenticated users can list escrows.
- // EMPLOYEES see only their own escrows (filtered by workerPubKey).
- // ADMINS see all escrows.
const user = await getUserFromRequest(request);
if (!user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
@@ -18,74 +37,125 @@ export async function GET(request: NextRequest) {
const limit = Math.min(parseInt(searchParams.get('limit') || '10', 10), 50);
const cursor = searchParams.get('cursor');
- const whereClause: any = isAdmin(user)
- ? {} // Admin sees everything
- : { workerPubKey: user.walletAddress }; // Employee sees only their own
+ // TENANT SCOPE FIRST.
+ //
+ // This previously returned `{}` for a platform ADMIN β every organization's
+ // escrows, to anyone holding that flag. Platform-level admin is not a licence
+ // to read other tenants' payroll, so the query is scoped to organizations the
+ // caller is an ACTIVE member of, and then narrowed by role within them.
+ const memberships = await prisma.orgMember.findMany({
+ where: { userId: user.userId, status: MembershipStatus.ACTIVE },
+ select: { orgId: true, role: true },
+ });
+ if (memberships.length === 0) {
+ return NextResponse.json({ escrows: [], nextCursor: null });
+ }
+
+ // Organizations where this caller may read payroll at all. A WORKER holds no
+ // organization-wide read, so they see only escrows that pay them.
+ const readableOrgIds = memberships.filter((m) => can(m.role, 'escrow:read')).map((m) => m.orgId);
+ const payeeOnlyOrgIds = memberships.filter((m) => !can(m.role, 'escrow:read')).map((m) => m.orgId);
+
+ const whereClause: any = {
+ OR: [
+ ...(readableOrgIds.length ? [{ orgId: { in: readableOrgIds } }] : []),
+ ...(payeeOnlyOrgIds.length
+ ? [{
+ orgId: { in: payeeOnlyOrgIds },
+ payments: { some: { recipientAddress: user.walletAddress } },
+ }]
+ : []),
+ ],
+ };
+ if (whereClause.OR.length === 0) {
+ return NextResponse.json({ escrows: [], nextCursor: null });
+ }
if (cursor) {
- whereClause.id = { lt: parseInt(cursor, 10) };
+ whereClause.createdAt = { lt: new Date(cursor) };
}
const escrows = await prisma.escrow.findMany({
where: whereClause,
- take: limit + 1, // Fetch limit + 1 to check if there is a next page
- orderBy: { id: 'desc' },
- include: { timeLogs: true },
+ take: limit + 1,
+ orderBy: { createdAt: 'desc' },
+ include: {
+ payments: {
+ orderBy: { onChainPaymentIndex: 'asc' },
+ select: {
+ id: true, recipientAddress: true, onChainPaymentIndex: true,
+ amountBaseUnits: true, rateBaseUnits: true, hours: true,
+ assetDecimals: true, assetCode: true, state: true,
+ settlementTxHash: true, settledAt: true,
+ },
+ },
+ },
});
const hasNextPage = escrows.length > limit;
const items = hasNextPage ? escrows.slice(0, limit) : escrows;
- const nextCursor = hasNextPage ? items[items.length - 1].id : null;
+ const nextCursor = hasNextPage
+ ? items[items.length - 1].createdAt.toISOString()
+ : null;
+
+ const mappedEscrows = items.map((e) => {
+ const rollup = rollupBatch(e.payments);
+ const total = sumAmounts(e.payments.map((p) => p.amountBaseUnits));
+ const decimals = e.assetDecimals ?? SAC_DECIMALS;
+ const totalHours = e.payments.reduce((acc, p) => acc + p.hours, 0n);
- const mappedEscrows = items.map((e: any) => {
- const totalHours = e.timeLogs.reduce((acc: number, log: any) => acc + log.hoursLogged, 0);
return {
- id: e.onChainId || e.id,
- worker:
- e.workerPubKey.length >= 10
- ? `${e.workerPubKey.slice(0, 6)}...${e.workerPubKey.slice(-4)}`
- : e.workerPubKey,
- amount: (e.amountCents / 100).toLocaleString(undefined, {
- minimumFractionDigits: 2,
- maximumFractionDigits: 2,
- }),
- currency: e.currency,
+ id: e.onChainId ?? e.id,
+ escrowId: e.id,
+ onChainId: e.onChainId,
+ contractId: e.contractId,
+ network: e.network,
+ // Aggregate across payees, rendered at the asset's own precision.
+ amount: formatAmountWithSeparators(total, decimals),
+ amountBaseUnits: total.toString(),
+ currency: e.payments[0]?.assetCode ?? 'USDC',
+ paymentCount: e.payments.length,
hoursLogged: totalHours.toString(),
- status: e.status,
+ // Derived from the payments, never a stored rollup.
+ status: rollup.headline,
manager_approved: e.managerApproved,
finance_approved: e.financeApproved,
- hours_verified: totalHours > 0,
- rejectionReason: e.rejectionReason,
+ hours_verified: e.payments.every(
+ (p) => p.state !== PaymentState.AWAITING_ORACLE
+ ),
+ cancelled: e.cancelled,
created_at: e.createdAt.toISOString(),
isMock: false,
+ payments: e.payments.map((p) => ({
+ id: p.id,
+ index: p.onChainPaymentIndex,
+ recipient: p.recipientAddress,
+ amount: formatAmountWithSeparators(p.amountBaseUnits, p.assetDecimals),
+ amountBaseUnits: p.amountBaseUnits.toString(),
+ hours: p.hours.toString(),
+ state: p.state,
+ stateLabel: describeState(p.state).label,
+ txHash: p.settlementTxHash,
+ settledAt: p.settledAt?.toISOString() ?? null,
+ })),
};
});
- return NextResponse.json(
- {
- escrows: mappedEscrows,
- pagination: {
- hasNextPage,
- nextCursor,
- },
- },
- { status: 200 }
- );
+ return NextResponse.json({ escrows: mappedEscrows, nextCursor });
} catch (error) {
- console.error('Failed to fetch escrows:', error);
- return NextResponse.json({ error: 'Failed to fetch escrows' }, { status: 500 });
+ console.error('Failed to list escrows:', error);
+ return NextResponse.json({ error: 'Failed to list escrows' }, { status: 500 });
}
}
export async function POST(request: NextRequest) {
- // Auth guard β only ADMIN can create escrow records
const user = await getUserFromRequest(request);
if (!user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
if (!isAdmin(user)) {
return NextResponse.json(
- { error: 'Forbidden: only ADMIN can create escrows' },
+ { error: 'Forbidden: this action requires the ADMIN role' },
{ status: 403 }
);
}
@@ -96,25 +166,91 @@ export async function POST(request: NextRequest) {
if (!parsed.ok) {
return NextResponse.json({ error: parsed.error }, { status: 400 });
}
- const { onChainId, workerPubKey, amountCents, rateCents, tokenAddress } = parsed.data;
-
- const escrow = await prisma.escrow.create({
- data: {
- onChainId: onChainId ?? null,
- workerPubKey,
- amountCents,
- rateCents,
- tokenAddress: tokenAddress ?? null,
- },
+ const {
+ onChainId, workerPubKey, financeApprover,
+ amountBaseUnits, rateBaseUnits, assetDecimals, tokenAddress,
+ } = parsed.data;
+
+ // A recorded escrow needs an organization and a batch to hold its payment.
+ // The membership the caller already has determines which.
+ const membership = await prisma.orgMember.findFirst({
+ where: { user: { walletAddress: user.walletAddress } },
+ orderBy: { createdAt: 'asc' },
+ select: { orgId: true },
+ });
+ if (!membership) {
+ return NextResponse.json(
+ { error: 'You are not a member of any organization.' },
+ { status: 409 }
+ );
+ }
+
+ const amount = BigInt(amountBaseUnits);
+ const rate = BigInt(rateBaseUnits);
+
+ const created = await prisma.$transaction(async (tx) => {
+ const escrow = await tx.escrow.create({
+ data: {
+ orgId: membership.orgId,
+ onChainId: onChainId ?? null,
+ contractId: process.env.NEXT_PUBLIC_STELLAR_CONTRACT_ID ?? '',
+ network: process.env.NEXT_PUBLIC_STELLAR_NETWORK ?? 'testnet',
+ managerAddress: user.walletAddress,
+ financeApproverAddress: financeApprover ?? '',
+ tokenAddress: tokenAddress ?? null,
+ assetDecimals,
+ totalAmountBaseUnits: amount,
+ },
+ });
+
+ const reference = `ESC-${String(onChainId ?? 0).padStart(5, '0')}-${escrow.id.slice(-6)}`;
+ const batch = await tx.payrollBatch.create({
+ data: { orgId: membership.orgId, reference, uploadedBy: user.walletAddress },
+ });
+
+ const payment = await tx.payment.create({
+ data: {
+ orgId: membership.orgId,
+ batchId: batch.id,
+ escrowId: escrow.id,
+ recipientAddress: workerPubKey,
+ onChainPaymentIndex: 0,
+ assetContractId: tokenAddress ?? null,
+ assetDecimals,
+ amountBaseUnits: amount,
+ rateBaseUnits: rate,
+ hours: rate > 0n ? amount / rate : 0n,
+ // The client has submitted the on-chain creation; the indexer confirms
+ // funding and advances the state. Nothing here asserts settlement.
+ state: PaymentState.VALIDATING,
+ },
+ });
+
+ return { escrow, batch, payment };
});
await audit('escrow.create', {
actor: user.walletAddress,
- target: String(escrow.id),
- metadata: { onChainId: escrow.onChainId },
+ target: created.escrow.id,
+ metadata: { onChainId: created.escrow.onChainId, paymentId: created.payment.id },
});
- return NextResponse.json({ escrow }, { status: 201 });
+ return NextResponse.json(
+ {
+ escrow: {
+ id: created.escrow.id,
+ onChainId: created.escrow.onChainId,
+ totalAmountBaseUnits: created.escrow.totalAmountBaseUnits.toString(),
+ },
+ batch: { id: created.batch.id, reference: created.batch.reference },
+ payment: {
+ id: created.payment.id,
+ state: created.payment.state,
+ amountBaseUnits: created.payment.amountBaseUnits.toString(),
+ },
+ },
+ { status: 201 }
+ );
} catch (error: any) {
if (error?.code === 'P2002') {
return NextResponse.json({ message: 'Escrow already indexed' }, { status: 200 });
diff --git a/src/app/api/hours/route.ts b/src/app/api/hours/route.ts
index 968fdd1..a5fb996 100644
--- a/src/app/api/hours/route.ts
+++ b/src/app/api/hours/route.ts
@@ -1,6 +1,7 @@
import { NextRequest, NextResponse } from 'next/server';
import prisma from '@/lib/db/prisma';
import { getUserFromRequest, isEmployee } from '@/lib/auth';
+import { resolveTenant, findEscrowByOnChainId } from '@/lib/tenancy/resolve';
import { parseBody, hoursSchema } from '@/lib/validation/schemas';
import { audit } from '@/lib/audit';
@@ -27,20 +28,39 @@ export async function POST(request: NextRequest) {
}
const { onChainId, hoursLogged, paymentId, txHash } = parsed.data;
- const escrow = await prisma.escrow.findUnique({ where: { onChainId } });
+ // TENANT SCOPE. `onChainId` comes from the contract, so the same id exists in
+ // other organizations on other deployments β resolving it globally would let
+ // a member of any organization log hours against another's escrow.
+ const orgId =
+ request.headers.get('x-organization-id') ??
+ new URL(request.url).searchParams.get('orgId') ??
+ (await prisma.orgMember
+ .findMany({ where: { userId: user.userId, status: 'ACTIVE' }, select: { orgId: true }, take: 2 })
+ .then((m) => (m.length === 1 ? m[0].orgId : null)));
- if (!escrow) {
- return NextResponse.json({ error: 'Escrow not found in database index' }, { status: 404 });
+ const tenant = await resolveTenant(prisma, user.userId, orgId);
+ if (!tenant.ok) {
+ return NextResponse.json({ error: tenant.message }, { status: tenant.status });
}
+ const owned = await findEscrowByOnChainId(prisma, tenant.value, onChainId);
+ if (!owned.ok) {
+ return NextResponse.json({ error: owned.message }, { status: owned.status });
+ }
+ const escrow = owned.value;
+
const timeLog = await prisma.timeLog.create({
data: { escrowId: escrow.id, hoursLogged, paymentId, txHash },
});
- await prisma.escrow.update({
- where: { id: escrow.id },
- data: { status: 'pending_manager' },
- });
+ // Deliberately NOT advancing payment state here.
+ //
+ // This endpoint records that a client submitted an hours proof. Whether the
+ // CONTRACT accepted it is a separate question, answered by the `hours/submit`
+ // event the indexer observes. Moving the payment to ORACLE_VERIFIED from here
+ // would let a client assert a verification the chain may have rejected β
+ // exactly the "frontend manufactures a successful state" failure the state
+ // machine exists to prevent.
await audit('hours.submit', {
actor: user.walletAddress,
diff --git a/src/app/api/invitations/[token]/route.ts b/src/app/api/invitations/[token]/route.ts
index 7a5df7d..23008a5 100644
--- a/src/app/api/invitations/[token]/route.ts
+++ b/src/app/api/invitations/[token]/route.ts
@@ -1,86 +1,99 @@
+/**
+ * GET /api/invitations/:token β what this invitation offers
+ * POST /api/invitations/:token β accept it
+ *
+ * Public by necessity: the recipient has no membership yet, so there is nothing to
+ * authorize against except the token itself. Acceptance still requires an
+ * authenticated wallet β a token proves you were invited, not who you are.
+ *
+ * ββ Why every failure looks the same ββββββββββββββββββββββββββββββββββββββββ
+ * Expired, revoked, already-used and never-existed all return the same 404 body.
+ * Distinguishing them tells someone probing tokens which of their guesses were
+ * real, and a real-but-used token still reveals that an organization invited that
+ * address.
+ */
+
import { NextRequest, NextResponse } from 'next/server';
import prisma from '@/lib/db/prisma';
-import { getUserFromRequest, Role } from '@/lib/auth';
-import { audit } from '@/lib/audit';
+import { getUserFromRequest } from '@/lib/auth';
+import { resolveInvitation, acceptInvitation } from '@/lib/tenancy/membership';
+import { permissionsFor } from '@/lib/tenancy/rbac';
+import { rateLimit, clientIp } from '@/lib/ratelimit';
-export async function GET(request: NextRequest, { params }: { params: { token: string } }) {
- try {
- const invitation = await prisma.invitation.findUnique({
- where: { token: params.token },
- });
+const NOT_FOUND = NextResponse.json(
+ { error: 'This invitation is not valid. Ask your administrator for a new one.' },
+ { status: 404 }
+);
- if (!invitation) {
- return NextResponse.json({ error: 'Invalid or expired invitation token' }, { status: 404 });
- }
+export async function GET(_request: NextRequest, { params }: { params: { token: string } }) {
+ // Unauthenticated and guessable-by-construction, so brake it per IP.
+ const rl = rateLimit(`invite-read:${clientIp(_request)}`, 30, 60_000);
+ if (!rl.ok) return NOT_FOUND;
- if (invitation.usedAt) {
- return NextResponse.json({ error: 'This invitation link has already been used' }, { status: 400 });
- }
+ const resolved = await resolveInvitation(prisma, params.token);
+ if (!resolved.ok) {
+ console.warn(`[invitations] rejected lookup: ${resolved.reason}`);
+ return NOT_FOUND;
+ }
- if (invitation.expiresAt < new Date()) {
- return NextResponse.json({ error: 'This invitation has expired' }, { status: 400 });
- }
+ const org = await prisma.organization.findUnique({
+ where: { id: resolved.value.orgId },
+ select: { name: true, slug: true },
+ });
- return NextResponse.json({
- invitation: {
- email: invitation.email,
- role: invitation.role,
- expiresAt: invitation.expiresAt,
- },
- });
- } catch (error) {
- console.error('[invitations/token] GET error:', error);
- return NextResponse.json({ error: 'Failed to validate invitation' }, { status: 500 });
- }
+ return NextResponse.json({
+ invitation: {
+ // The organization NAME is shown so the recipient knows what they are
+ // joining. Its id is not: that is an internal identifier with no business
+ // meaning to an invitee.
+ organizationName: org?.name ?? 'an organization',
+ email: resolved.value.email,
+ role: resolved.value.orgRole,
+ permissions: permissionsFor(resolved.value.orgRole),
+ },
+ });
}
export async function POST(request: NextRequest, { params }: { params: { token: string } }) {
+ const rl = rateLimit(`invite-accept:${clientIp(request)}`, 10, 60_000);
+ if (!rl.ok) return NOT_FOUND;
+
+ // A token says you were invited. It does not say who you are β that needs a
+ // wallet signature, so the membership is bound to a proven identity.
const user = await getUserFromRequest(request);
if (!user) {
- return NextResponse.json({ error: 'Please connect and sign in with your wallet first' }, { status: 401 });
+ return NextResponse.json(
+ {
+ error: 'Connect and sign in with your Stellar wallet to accept this invitation.',
+ code: 'AUTHENTICATION_REQUIRED',
+ },
+ { status: 401 }
+ );
}
- try {
- const invitation = await prisma.invitation.findUnique({
- where: { token: params.token },
- });
+ const result = await acceptInvitation(prisma, params.token, {
+ id: user.userId,
+ walletAddress: user.walletAddress,
+ });
- if (!invitation) {
- return NextResponse.json({ error: 'Invalid invitation token' }, { status: 404 });
+ if (!result.ok) {
+ // A 403 here is meaningful and safe: the caller is authenticated, and being
+ // told their membership was removed is information they already have.
+ if (result.status === 403) {
+ return NextResponse.json({ error: result.message }, { status: 403 });
}
+ return NOT_FOUND;
+ }
- if (invitation.usedAt) {
- return NextResponse.json({ error: 'This invitation link has already been redeemed' }, { status: 400 });
- }
-
- if (invitation.expiresAt < new Date()) {
- return NextResponse.json({ error: 'This invitation link has expired' }, { status: 400 });
- }
-
- // Assign the role to the logged-in wallet user
- const updatedUser = await prisma.user.update({
- where: { walletAddress: user.walletAddress },
- data: { role: invitation.role as Role },
- });
-
- // Mark invitation as used
- await prisma.invitation.update({
- where: { token: params.token },
- data: { usedAt: new Date() },
- });
-
- await audit('invitation.accept', {
- actor: user.walletAddress,
- target: invitation.email,
- metadata: { role: invitation.role, token: params.token },
- });
+ const org = await prisma.organization.findUnique({
+ where: { id: result.value.orgId },
+ select: { id: true, name: true, slug: true },
+ });
- return NextResponse.json({
- message: `Invitation accepted! Role set to ${updatedUser.role}`,
- user: updatedUser,
- });
- } catch (error) {
- console.error('[invitations/token] POST error:', error);
- return NextResponse.json({ error: 'Failed to redeem invitation' }, { status: 500 });
- }
+ return NextResponse.json({
+ joined: true,
+ organization: org,
+ role: result.value.role,
+ permissions: permissionsFor(result.value.role),
+ });
}
diff --git a/src/app/api/oracle/attest/route.ts b/src/app/api/oracle/attest/route.ts
index 17a264d..e6bb74f 100644
--- a/src/app/api/oracle/attest/route.ts
+++ b/src/app/api/oracle/attest/route.ts
@@ -14,7 +14,10 @@
import { NextRequest, NextResponse } from 'next/server';
import prisma from '@/lib/db/prisma';
import { getUserFromRequest } from '@/lib/auth';
-import { signHoursProof, getOraclePublicKeyHex } from '@/lib/oracle';
+import { resolveTenant, findEscrowByOnChainId, requirePermission } from '@/lib/tenancy/resolve';
+import { signHoursProof, getOraclePublicKeyHex, type ProofContext } from '@/lib/oracle';
+import { CoreFlowClient } from '@/lib/contracts';
+import { STELLAR_CONFIG } from '@/lib/config';
import { parseBody, attestSchema } from '@/lib/validation/schemas';
import { rateLimit } from '@/lib/ratelimit';
@@ -47,10 +50,41 @@ export async function POST(request: NextRequest) {
}
const { onChainId, paymentId, hoursLogged, nonce } = parsed.data;
+ // ββ Tenant scope ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ // An attestation unlocks settlement, so it must be scoped to an organization
+ // the caller actually belongs to. Without this, a member of any organization
+ // could request signatures for another's escrow simply by naming its id.
+ const orgId =
+ request.headers.get('x-organization-id') ??
+ new URL(request.url).searchParams.get('orgId') ??
+ (await prisma.orgMember
+ .findMany({ where: { userId: user.userId, status: 'ACTIVE' }, select: { orgId: true }, take: 2 })
+ .then((m) => (m.length === 1 ? m[0].orgId : null)));
+
+ const tenant = await resolveTenant(prisma, user.userId, orgId);
+ if (!tenant.ok) {
+ return NextResponse.json({ error: tenant.message }, { status: tenant.status });
+ }
+ const denied = requirePermission(tenant.value, 'oracle:attest:request');
+ if (denied) {
+ return NextResponse.json({ error: denied.message, code: denied.code }, { status: 403 });
+ }
+
+ // The escrow must be one of THIS organization's. Escrow ids come from the
+ // contract, so the same id exists in other tenants on other deployments.
+ const owned = await findEscrowByOnChainId(prisma, tenant.value, onChainId);
+ if (!owned.ok) {
+ return NextResponse.json({ error: owned.message }, { status: owned.status });
+ }
+
// Idempotency: never sign the same (escrow, payment, nonce) twice.
const existing = await prisma.oracleAttestation.findUnique({
where: {
- escrowOnChainId_paymentId_nonce: { escrowOnChainId: onChainId, paymentId, nonce },
+ escrowOnChainId_onChainPaymentIndex_nonce: {
+ escrowOnChainId: onChainId,
+ onChainPaymentIndex: paymentId,
+ nonce: BigInt(nonce),
+ },
},
});
if (existing) {
@@ -60,15 +94,71 @@ export async function POST(request: NextRequest) {
);
}
- const signature = signHoursProof(onChainId, paymentId, hoursLogged, nonce);
+ // Schema v2 binds the attestation to the payee, asset, amount, period,
+ // contract and network. Those come from the on-chain payment row, never
+ // from the request, so a caller cannot steer a signature onto a payment
+ // the oracle was not asked about.
+ let escrow: Awaited>;
+ try {
+ escrow = await new CoreFlowClient().getEscrow(onChainId);
+ } catch {
+ return NextResponse.json(
+ { error: `Could not read escrow ${onChainId} on this network.` },
+ { status: 502 }
+ );
+ }
+
+ if (escrow.manager !== user.walletAddress) {
+ return NextResponse.json(
+ { error: 'Only the escrow manager can request attestations for this escrow.' },
+ { status: 403 }
+ );
+ }
+
+ const payment = escrow.payments[paymentId];
+ if (!payment) {
+ return NextResponse.json(
+ { error: `Escrow ${onChainId} has no payment ${paymentId}.` },
+ { status: 400 }
+ );
+ }
+
+ // The contract enforces `hours x rate == amount`; signing anything else
+ // produces a signature that can only ever be rejected on chain.
+ const expectedHours = payment.amount / payment.rate_per_hour;
+ if (BigInt(hoursLogged) !== expectedHours) {
+ return NextResponse.json(
+ {
+ error:
+ `Escrow ${onChainId} payment ${paymentId} is funded for ${payment.amount} ` +
+ `at ${payment.rate_per_hour}/hour, which is ${expectedHours} hours, not ${hoursLogged}.`,
+ },
+ { status: 409 }
+ );
+ }
+
+ const ctx: ProofContext = {
+ networkPassphrase: STELLAR_CONFIG.getNetworkPassphrase(),
+ contractId: STELLAR_CONFIG.contract.id,
+ worker: payment.worker,
+ token: payment.token,
+ amount: payment.amount,
+ startDate: BigInt(payment.start_date),
+ endDate: BigInt(payment.end_date),
+ };
+
+ const signature = signHoursProof(ctx, onChainId, paymentId, hoursLogged, nonce);
await prisma.oracleAttestation.create({
data: {
+ orgId: tenant.value.orgId,
escrowOnChainId: onChainId,
- paymentId,
- hoursLogged,
- nonce,
+ onChainPaymentIndex: paymentId,
+ hours: BigInt(hoursLogged),
+ nonce: BigInt(nonce),
signature,
+ schema: 'CFWP-v2',
+ contractId: STELLAR_CONFIG.contract.id,
createdBy: user.walletAddress,
},
});
diff --git a/src/app/api/organizations/[id]/escrows/claim/route.ts b/src/app/api/organizations/[id]/escrows/claim/route.ts
new file mode 100644
index 0000000..4e4bef6
--- /dev/null
+++ b/src/app/api/organizations/[id]/escrows/claim/route.ts
@@ -0,0 +1,151 @@
+/**
+ * POST /api/organizations/:id/escrows/claim β attribute an on-chain escrow to this
+ * organization.
+ *
+ * ββ Why a claim exists at all ββββββββββββββββββββββββββββββββββββββββββββββββ
+ * The chain knows nothing about CoreFlow organizations. An escrow created outside
+ * the app β by the CLI, a validation script, or another client β has no tenant
+ * mapping, so the indexer records its events as unattributed and projects nothing.
+ * This is how such an escrow becomes visible, deliberately, to a named
+ * organization.
+ *
+ * ββ What makes the claim safe ββββββββββββββββββββββββββββββββββββββββββββββββ
+ * The caller must prove, against LIVE CONTRACT STATE, that their wallet is the
+ * escrow's on-chain manager. Without that check, any organization could claim any
+ * escrow by naming its id and gain the payroll of whoever actually created it β
+ * the exact leak the unattributed-by-default rule exists to prevent.
+ *
+ * An escrow already claimed by another organization is reported as a conflict and
+ * never reassigned: silently moving it would transfer one tenant's financial
+ * records to another.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant } from '@/lib/tenancy/http';
+import { writeMembershipAudit } from '@/lib/tenancy/membership';
+import { CoreFlowClient } from '@/lib/contracts';
+import { STELLAR_CONFIG } from '@/lib/config';
+import { SAC_DECIMALS } from '@/lib/money';
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'escrow:create' }, async ({ ctx, body }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const onChainId = Number(body?.onChainId);
+ if (!Number.isInteger(onChainId) || onChainId < 1) {
+ return NextResponse.json(
+ { error: 'onChainId must be a positive integer.' },
+ { status: 400 }
+ );
+ }
+
+ const contractId = STELLAR_CONFIG.contract.id;
+ const network = STELLAR_CONFIG.contract.network;
+ if (!contractId) {
+ return NextResponse.json(
+ { error: 'No contract is configured for this deployment.' },
+ { status: 503 }
+ );
+ }
+
+ // Already mapped? Report it rather than reassigning.
+ const existing = await prisma.escrow.findFirst({
+ where: { onChainId, contractId, network },
+ select: { id: true, orgId: true },
+ });
+ if (existing) {
+ if (existing.orgId === ctx.orgId) {
+ return NextResponse.json(
+ { claimed: true, escrowId: existing.id, alreadyClaimed: true },
+ { status: 200 }
+ );
+ }
+ // Deliberately vague: confirming that ANOTHER organization holds it would
+ // disclose that a tenant we must not name exists and uses this escrow.
+ return NextResponse.json(
+ {
+ error: `Escrow ${onChainId} is not available to claim.`,
+ code: 'ESCROW_UNAVAILABLE',
+ },
+ { status: 409 }
+ );
+ }
+
+ // The proof: live contract state must name this caller as manager.
+ let chainEscrow: Awaited>;
+ try {
+ chainEscrow = await new CoreFlowClient().getEscrow(onChainId);
+ } catch {
+ return NextResponse.json(
+ { error: `Escrow ${onChainId} could not be read from ${network}.` },
+ { status: 502 }
+ );
+ }
+
+ if (chainEscrow.manager !== ctx.walletAddress) {
+ return NextResponse.json(
+ {
+ error:
+ 'Only the escrowβs on-chain manager can claim it. Sign in with the ' +
+ 'wallet that created the escrow.',
+ code: 'NOT_ON_CHAIN_MANAGER',
+ },
+ { status: 403 }
+ );
+ }
+
+ const total = chainEscrow.payments.reduce((a, p) => a + p.amount, 0n);
+
+ const escrow = await prisma.$transaction(async (tx) => {
+ const created = await tx.escrow.create({
+ data: {
+ orgId: ctx.orgId,
+ onChainId,
+ contractId,
+ network,
+ managerAddress: chainEscrow.manager,
+ financeApproverAddress: chainEscrow.finance_approver,
+ oraclePublicKey: chainEscrow.oracle_pubkey ?? null,
+ tokenAddress: chainEscrow.payments[0]?.token ?? null,
+ assetDecimals: SAC_DECIMALS,
+ totalAmountBaseUnits: total,
+ managerApproved: chainEscrow.manager_approved,
+ financeApproved: chainEscrow.finance_approved,
+ cancelled: chainEscrow.cancelled,
+ oracleRotations: chainEscrow.oracle_rotations,
+ },
+ });
+
+ await writeMembershipAudit(tx, {
+ orgId: ctx.orgId,
+ type: 'escrow.claimed',
+ actorAddress: ctx.walletAddress,
+ metadata: {
+ onChainId, contractId, network,
+ paymentCount: chainEscrow.payments.length,
+ totalAmountBaseUnits: total.toString(),
+ },
+ });
+
+ return created;
+ });
+
+ return NextResponse.json(
+ {
+ claimed: true,
+ escrowId: escrow.id,
+ onChainId,
+ paymentCount: chainEscrow.payments.length,
+ // Events that arrived before the claim were recorded unattributed; the
+ // next indexer run applies them now that a mapping exists.
+ note:
+ 'Run the indexer to project this escrowβs history. Events recorded ' +
+ 'before the claim are replayed, not lost.',
+ },
+ { status: 201 }
+ );
+ });
+}
diff --git a/src/app/api/organizations/[id]/findings/[findingId]/route.ts b/src/app/api/organizations/[id]/findings/[findingId]/route.ts
new file mode 100644
index 0000000..b13419b
--- /dev/null
+++ b/src/app/api/organizations/[id]/findings/[findingId]/route.ts
@@ -0,0 +1,138 @@
+/**
+ * PATCH /api/organizations/:id/findings/:findingId β advance a finding's lifecycle.
+ *
+ * OPEN β ACKNOWLEDGED β INVESTIGATING β RESOLVED
+ *
+ * ββ Why resolution needs a reason ββββββββββββββββββββββββββββββββββββββββββββ
+ * A "mark resolved" button with no explanation turns the findings queue into a
+ * dismiss button. The next person to look at a resolved CRITICAL finding β quite
+ * possibly during an incident β needs to know what was established and by whom.
+ * Resolution therefore requires a substantive reason and records the actor.
+ *
+ * ββ What this endpoint cannot do βββββββββββββββββββββββββββββββββββββββββββββ
+ * It cannot change a payment's state, amount, recipient or transaction hash.
+ * Resolving a finding records a human judgement ABOUT a discrepancy; it does not
+ * alter the financial record, and it certainly cannot manufacture a settlement.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { FindingStatus } from '@prisma/client';
+import prisma from '@/lib/db/prisma';
+import { withTenant } from '@/lib/tenancy/http';
+import { recordAuditEvent } from '@/lib/payments/service';
+
+/** Valid lifecycle moves. RESOLVED is terminal; reopening is a new finding. */
+const TRANSITIONS: Record = {
+ [FindingStatus.OPEN]: [FindingStatus.ACKNOWLEDGED, FindingStatus.INVESTIGATING, FindingStatus.RESOLVED],
+ [FindingStatus.ACKNOWLEDGED]: [FindingStatus.INVESTIGATING, FindingStatus.RESOLVED],
+ [FindingStatus.INVESTIGATING]: [FindingStatus.RESOLVED, FindingStatus.ACKNOWLEDGED],
+ [FindingStatus.RESOLVED]: [],
+};
+
+const MIN_RESOLUTION_LENGTH = 10;
+
+export async function PATCH(
+ request: NextRequest,
+ { params }: { params: { id: string; findingId: string } }
+) {
+ return withTenant(
+ request,
+ { permission: 'reconciliation:resolve' },
+ async ({ ctx, body }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const target = body?.status as FindingStatus | undefined;
+ if (!target || !(Object.values(FindingStatus) as string[]).includes(target)) {
+ return NextResponse.json(
+ { error: `status must be one of ${Object.values(FindingStatus).join(', ')}.` },
+ { status: 400 }
+ );
+ }
+
+ // Scoped lookup: a finding id from another tenant is a 404.
+ const finding = await prisma.reconciliationFinding.findFirst({
+ where: { id: params.findingId, orgId: ctx.orgId },
+ });
+ if (!finding) {
+ return NextResponse.json({ error: 'Finding not found.' }, { status: 404 });
+ }
+
+ if (finding.status === target) {
+ return NextResponse.json({ changed: false, status: finding.status });
+ }
+
+ if (!TRANSITIONS[finding.status].includes(target)) {
+ return NextResponse.json(
+ {
+ error:
+ `A ${finding.status} finding cannot become ${target}. ` +
+ `Valid next states: ${TRANSITIONS[finding.status].join(', ') || 'none'}.`,
+ code: 'INVALID_FINDING_TRANSITION',
+ },
+ { status: 409 }
+ );
+ }
+
+ const reason = typeof body?.resolution === 'string' ? body.resolution.trim() : '';
+ if (target === FindingStatus.RESOLVED && reason.length < MIN_RESOLUTION_LENGTH) {
+ return NextResponse.json(
+ {
+ error:
+ 'Resolving a finding requires an explanation of what was established. ' +
+ 'The next person to read this β possibly during an incident β needs to ' +
+ 'know why it was closed.',
+ code: 'RESOLUTION_REASON_REQUIRED',
+ },
+ { status: 400 }
+ );
+ }
+
+ const now = new Date();
+ const updated = await prisma.$transaction(async (tx) => {
+ const row = await tx.reconciliationFinding.update({
+ where: { id: finding.id },
+ data: {
+ status: target,
+ ...(target === FindingStatus.ACKNOWLEDGED
+ ? { acknowledgedAt: now, acknowledgedBy: ctx.walletAddress }
+ : {}),
+ ...(target === FindingStatus.RESOLVED
+ ? { resolvedAt: now, resolvedBy: ctx.walletAddress, resolution: reason }
+ : {}),
+ },
+ });
+
+ await recordAuditEvent(tx, {
+ orgId: ctx.orgId,
+ type: `reconciliation.finding.${target.toLowerCase()}`,
+ actor: { kind: 'user', role: ctx.role, address: ctx.walletAddress },
+ paymentId: finding.paymentId ?? undefined,
+ txHash: finding.txHash ?? undefined,
+ metadata: {
+ findingId: finding.id,
+ kind: finding.kind,
+ severity: finding.severity,
+ previousStatus: finding.status,
+ newStatus: target,
+ ...(reason ? { resolution: reason } : {}),
+ },
+ });
+
+ return row;
+ });
+
+ return NextResponse.json({
+ changed: true,
+ finding: {
+ id: updated.id,
+ status: updated.status,
+ acknowledgedBy: updated.acknowledgedBy,
+ resolvedBy: updated.resolvedBy,
+ resolution: updated.resolution,
+ },
+ });
+ }
+ );
+}
diff --git a/src/app/api/organizations/[id]/findings/route.ts b/src/app/api/organizations/[id]/findings/route.ts
new file mode 100644
index 0000000..e041757
--- /dev/null
+++ b/src/app/api/organizations/[id]/findings/route.ts
@@ -0,0 +1,113 @@
+/**
+ * GET /api/organizations/:id/findings β reconciliation findings for this tenant.
+ *
+ * Tenant-scoped like everything else. Findings name payments, amounts and
+ * recipients, so a cross-tenant leak here would disclose another organization's
+ * payroll.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { FindingStatus, FindingSeverity } from '@prisma/client';
+import prisma from '@/lib/db/prisma';
+import { withTenant } from '@/lib/tenancy/http';
+import { formatAmountWithSeparators } from '@/lib/money';
+import { txUrl } from '@/lib/explorer';
+
+const SEVERITY_ORDER: FindingSeverity[] = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'] as FindingSeverity[];
+
+export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(
+ request,
+ { permission: 'reconciliation:read', parseBody: false },
+ async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const url = new URL(request.url);
+ const statusParam = url.searchParams.get('status');
+ const severityParam = url.searchParams.get('severity');
+ const limit = Math.min(
+ Math.max(parseInt(url.searchParams.get('limit') || '50', 10) || 50, 1),
+ 200
+ );
+
+ if (statusParam && !(Object.values(FindingStatus) as string[]).includes(statusParam)) {
+ return NextResponse.json({ error: `Unknown status "${statusParam}".` }, { status: 400 });
+ }
+ if (severityParam && !(Object.values(FindingSeverity) as string[]).includes(severityParam)) {
+ return NextResponse.json({ error: `Unknown severity "${severityParam}".` }, { status: 400 });
+ }
+
+ const findings = await prisma.reconciliationFinding.findMany({
+ where: {
+ orgId: ctx.orgId,
+ // Unresolved by default: a findings queue defaults to "what still needs
+ // attention", not to a historical archive.
+ ...(statusParam
+ ? { status: statusParam as FindingStatus }
+ : { status: { not: FindingStatus.RESOLVED } }),
+ ...(severityParam ? { severity: severityParam as FindingSeverity } : {}),
+ },
+ orderBy: [{ severity: 'asc' }, { detectedAt: 'asc' }],
+ take: limit,
+ include: {
+ payment: {
+ select: {
+ id: true, recipientAddress: true, amountBaseUnits: true,
+ assetDecimals: true, assetCode: true, state: true,
+ batch: { select: { id: true, reference: true } },
+ },
+ },
+ run: { select: { correlationId: true, startedAt: true } },
+ },
+ });
+
+ // Severity enum order is alphabetical in Prisma, not by urgency.
+ const ordered = [...findings].sort(
+ (a, b) => SEVERITY_ORDER.indexOf(a.severity) - SEVERITY_ORDER.indexOf(b.severity)
+ );
+
+ return NextResponse.json({
+ findings: ordered.map((f) => ({
+ id: f.id,
+ kind: f.kind,
+ status: f.status,
+ severity: f.severity,
+ detail: f.detail,
+ /** What to actually do. A finding without this is a puzzle. */
+ remediation: f.remediation,
+ dbState: f.dbState,
+ chainState: f.chainState,
+ escrowOnChainId: f.escrowOnChainId,
+ paymentIndex: f.paymentIndex,
+ transaction: f.txHash
+ ? { hash: f.txHash, explorerUrl: txUrl(f.txHash) }
+ : null,
+ payment: f.payment
+ ? {
+ id: f.payment.id,
+ recipient: f.payment.recipientAddress,
+ amount: formatAmountWithSeparators(
+ f.payment.amountBaseUnits,
+ f.payment.assetDecimals
+ ),
+ assetCode: f.payment.assetCode,
+ state: f.payment.state,
+ batch: f.payment.batch,
+ }
+ : null,
+ detectedAt: f.detectedAt.toISOString(),
+ lastObservedAt: f.lastObservedAt.toISOString(),
+ observationCount: f.observationCount,
+ acknowledgedBy: f.acknowledgedBy,
+ acknowledgedAt: f.acknowledgedAt?.toISOString() ?? null,
+ resolvedBy: f.resolvedBy,
+ resolvedAt: f.resolvedAt?.toISOString() ?? null,
+ resolution: f.resolution,
+ detectedByRun: f.run?.correlationId ?? null,
+ })),
+ });
+ }
+ );
+}
diff --git a/src/app/api/organizations/[id]/invitations/[invitationId]/route.ts b/src/app/api/organizations/[id]/invitations/[invitationId]/route.ts
new file mode 100644
index 0000000..0002332
--- /dev/null
+++ b/src/app/api/organizations/[id]/invitations/[invitationId]/route.ts
@@ -0,0 +1,59 @@
+/**
+ * DELETE /api/organizations/:id/invitations/:invitationId β revoke an invitation.
+ *
+ * Revocation is recorded (`revokedAt`), not deleted. Deleting it would erase the
+ * fact that someone was once invited, which is exactly what an access review
+ * needs to see. `revokedAt` is kept distinct from `usedAt` so "withdrawn" is never
+ * mistaken for "accepted".
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant } from '@/lib/tenancy/http';
+import { writeMembershipAudit } from '@/lib/tenancy/membership';
+
+export async function DELETE(
+ request: NextRequest,
+ { params }: { params: { id: string; invitationId: string } }
+) {
+ return withTenant(request, { permission: 'member:invite', parseBody: false }, async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ // Scoped by organization: an invitation id from another tenant is a 404, not
+ // a revocation of their invitation.
+ const invitation = await prisma.invitation.findFirst({
+ where: { id: params.invitationId, orgId: ctx.orgId },
+ });
+ if (!invitation) {
+ return NextResponse.json({ error: 'Invitation not found.' }, { status: 404 });
+ }
+ if (invitation.usedAt) {
+ return NextResponse.json(
+ {
+ error:
+ 'That invitation has already been accepted. Suspend or remove the ' +
+ 'member instead.',
+ code: 'ALREADY_ACCEPTED',
+ },
+ { status: 409 }
+ );
+ }
+
+ await prisma.$transaction(async (tx) => {
+ await tx.invitation.update({
+ where: { id: invitation.id },
+ data: { revokedAt: new Date(), revokedBy: ctx.walletAddress },
+ });
+ await writeMembershipAudit(tx, {
+ orgId: ctx.orgId,
+ type: 'invitation.revoked',
+ actorAddress: ctx.walletAddress,
+ metadata: { invitationId: invitation.id, email: invitation.email },
+ });
+ });
+
+ return NextResponse.json({ revoked: true });
+ });
+}
diff --git a/src/app/api/organizations/[id]/invitations/route.ts b/src/app/api/organizations/[id]/invitations/route.ts
new file mode 100644
index 0000000..f6bb9c3
--- /dev/null
+++ b/src/app/api/organizations/[id]/invitations/route.ts
@@ -0,0 +1,140 @@
+/**
+ * GET /api/organizations/:id/invitations β list pending invitations
+ * POST /api/organizations/:id/invitations β invite someone
+ *
+ * The invited ROLE is validated against what the inviter may delegate. An
+ * invitation is the easiest place to smuggle a privilege escalation: without that
+ * check, an ADMIN could invite an OWNER and take the organization, or a MANAGER
+ * could invite a FINANCE approver and manufacture the second signature they are
+ * forbidden from giving.
+ *
+ * The plaintext token is returned ONCE, in the creation response. Only its hash is
+ * stored, so it cannot be recovered later β a database dump must not hand over
+ * working invitations.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { OrgRole } from '@prisma/client';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { assignableRoles } from '@/lib/tenancy/rbac';
+import {
+ generateInvitationToken, hashInvitationToken,
+ checkRoleAssignment, writeMembershipAudit, INVITATION_TTL_DAYS,
+} from '@/lib/tenancy/membership';
+
+const EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+
+export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'member:read', parseBody: false }, async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ // The path names one organization and the resolved membership another.
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const invitations = await prisma.invitation.findMany({
+ where: { orgId: ctx.orgId },
+ orderBy: { createdAt: 'desc' },
+ select: {
+ id: true, email: true, orgRole: true, expiresAt: true,
+ usedAt: true, revokedAt: true, invitedBy: true, createdAt: true,
+ },
+ });
+
+ return NextResponse.json({
+ // tokenHash is deliberately absent: it is a credential, not metadata.
+ invitations: invitations.map((i) => ({
+ ...i,
+ status: i.revokedAt ? 'REVOKED'
+ : i.usedAt ? 'ACCEPTED'
+ : i.expiresAt.getTime() <= Date.now() ? 'EXPIRED'
+ : 'PENDING',
+ })),
+ /** What this caller may invite, so the UI need not re-derive the rules. */
+ assignableRoles: assignableRoles(ctx.role),
+ });
+ });
+}
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'member:invite' }, async ({ ctx, body }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const email = String(body?.email ?? '').trim().toLowerCase();
+ if (!EMAIL.test(email)) {
+ return NextResponse.json({ error: 'A valid email address is required.' }, { status: 400 });
+ }
+
+ const requested = body?.orgRole;
+ if (!requested || !(Object.values(OrgRole) as string[]).includes(requested)) {
+ return NextResponse.json(
+ { error: `orgRole must be one of ${Object.values(OrgRole).join(', ')}.` },
+ { status: 400 }
+ );
+ }
+ const orgRole = requested as OrgRole;
+
+ // The escalation guard.
+ const denied = checkRoleAssignment(ctx, orgRole);
+ if (denied) return denialResponse(denied);
+
+ const token = generateInvitationToken();
+ const tokenHash = hashInvitationToken(token);
+ const expiresAt = new Date(Date.now() + INVITATION_TTL_DAYS * 86_400_000);
+
+ try {
+ const invitation = await prisma.$transaction(async (tx) => {
+ // Re-inviting the same address replaces the outstanding invitation rather
+ // than erroring, so a lost email is recoverable. The previous token stops
+ // working, which is the point: two live tokens for one seat is one too
+ // many.
+ const created = await tx.invitation.upsert({
+ where: { orgId_email: { orgId: ctx.orgId, email } },
+ create: {
+ orgId: ctx.orgId, email, orgRole, tokenHash, expiresAt,
+ invitedBy: ctx.walletAddress,
+ },
+ update: {
+ orgRole, tokenHash, expiresAt,
+ usedAt: null, revokedAt: null, revokedBy: null,
+ invitedBy: ctx.walletAddress,
+ },
+ });
+
+ await writeMembershipAudit(tx, {
+ orgId: ctx.orgId,
+ type: 'invitation.sent',
+ actorAddress: ctx.walletAddress,
+ metadata: { email, orgRole, invitationId: created.id },
+ });
+
+ return created;
+ });
+
+ return NextResponse.json(
+ {
+ invitation: {
+ id: invitation.id,
+ email: invitation.email,
+ orgRole: invitation.orgRole,
+ expiresAt: invitation.expiresAt,
+ },
+ /** Shown once. Not recoverable β only the hash is stored. */
+ token,
+ acceptUrl: `/invite/${token}`,
+ },
+ { status: 201 }
+ );
+ } catch (e: any) {
+ if (e?.code === 'P2002') {
+ return NextResponse.json(
+ { error: 'An invitation for that address already exists.' },
+ { status: 409 }
+ );
+ }
+ throw e;
+ }
+ });
+}
diff --git a/src/app/api/organizations/[id]/members/[memberId]/route.ts b/src/app/api/organizations/[id]/members/[memberId]/route.ts
new file mode 100644
index 0000000..3e5870f
--- /dev/null
+++ b/src/app/api/organizations/[id]/members/[memberId]/route.ts
@@ -0,0 +1,201 @@
+/**
+ * PATCH /api/organizations/:id/members/:memberId β change role or status
+ * DELETE /api/organizations/:id/members/:memberId β remove from the organization
+ *
+ * Business actions, not a generic field setter: the accepted inputs are a `role`
+ * to grant and a `status` transition, each validated against the membership state
+ * machine and the delegation rules. A caller cannot write arbitrary columns.
+ *
+ * Three refusals are enforced here because each is a plausible mistake:
+ * - granting a role above your own, or one you may not exercise
+ * - changing your OWN role or status
+ * - removing or suspending the last active administrator
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { OrgRole, MembershipStatus } from '@prisma/client';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { can } from '@/lib/tenancy/rbac';
+import {
+ checkRoleAssignment, checkNotSelf, checkNotLastAdministrator,
+ canTransitionMembership, membershipTransitionsFrom, writeMembershipAudit,
+} from '@/lib/tenancy/membership';
+
+async function loadMember(orgId: string, memberId: string) {
+ // Scoped by organization: a member id from another tenant is a 404.
+ return prisma.orgMember.findFirst({ where: { id: memberId, orgId } });
+}
+
+export async function PATCH(
+ request: NextRequest,
+ { params }: { params: { id: string; memberId: string } }
+) {
+ return withTenant(request, {}, async ({ ctx, body }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const member = await loadMember(ctx.orgId, params.memberId);
+ if (!member) {
+ return NextResponse.json({ error: 'Member not found.' }, { status: 404 });
+ }
+
+ const selfDenial = checkNotSelf(ctx, member.userId);
+ if (selfDenial) return denialResponse(selfDenial);
+
+ const wantsRole = body?.role as OrgRole | undefined;
+ const wantsStatus = body?.status as MembershipStatus | undefined;
+
+ if (!wantsRole && !wantsStatus) {
+ return NextResponse.json(
+ { error: 'Provide a `role` to grant or a `status` transition.' },
+ { status: 400 }
+ );
+ }
+
+ // ββ Role change ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ if (wantsRole) {
+ if (!(Object.values(OrgRole) as string[]).includes(wantsRole)) {
+ return NextResponse.json({ error: `Unknown role "${wantsRole}".` }, { status: 400 });
+ }
+ const denied = checkRoleAssignment(ctx, wantsRole);
+ if (denied) return denialResponse(denied);
+
+ // Demoting the last administrator strands the organization just as surely
+ // as removing them.
+ if (member.role !== wantsRole) {
+ const lastAdmin = await checkNotLastAdministrator(prisma, ctx.orgId, member);
+ if (lastAdmin && !['OWNER', 'ADMIN'].includes(wantsRole)) {
+ return denialResponse(lastAdmin);
+ }
+ }
+ }
+
+ // ββ Status change ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ if (wantsStatus) {
+ if (!(Object.values(MembershipStatus) as string[]).includes(wantsStatus)) {
+ return NextResponse.json({ error: `Unknown status "${wantsStatus}".` }, { status: 400 });
+ }
+ if (!canTransitionMembership(member.status, wantsStatus)) {
+ return NextResponse.json(
+ {
+ error:
+ `A ${member.status} membership cannot become ${wantsStatus}. ` +
+ `Valid next states: ${membershipTransitionsFrom(member.status).join(', ') || 'none'}.`,
+ code: 'INVALID_MEMBERSHIP_TRANSITION',
+ },
+ { status: 409 }
+ );
+ }
+ const suspendGuard = requiresAdminCover(wantsStatus)
+ ? await checkNotLastAdministrator(prisma, ctx.orgId, member)
+ : null;
+ if (suspendGuard) return denialResponse(suspendGuard);
+
+ const permission = wantsStatus === MembershipStatus.REMOVED ? 'member:remove' : 'member:suspend';
+ if (!can(ctx.role, permission)) {
+ return NextResponse.json(
+ { error: `Your role (${ctx.role}) cannot perform this action.`, code: 'PERMISSION_DENIED' },
+ { status: 403 }
+ );
+ }
+ }
+
+ const now = new Date();
+ const updated = await prisma.$transaction(async (tx) => {
+ const row = await tx.orgMember.update({
+ where: { id: member.id },
+ data: {
+ ...(wantsRole ? { role: wantsRole } : {}),
+ ...(wantsStatus
+ ? {
+ status: wantsStatus,
+ ...(wantsStatus === MembershipStatus.ACTIVE
+ ? { activatedAt: now, suspendedAt: null }
+ : {}),
+ ...(wantsStatus === MembershipStatus.SUSPENDED ? { suspendedAt: now } : {}),
+ ...(wantsStatus === MembershipStatus.REMOVED ? { removedAt: now } : {}),
+ }
+ : {}),
+ },
+ });
+
+ if (wantsRole && wantsRole !== member.role) {
+ await writeMembershipAudit(tx, {
+ orgId: ctx.orgId,
+ type: 'member.role.changed',
+ actorAddress: ctx.walletAddress,
+ targetUserId: member.userId,
+ metadata: { from: member.role, to: wantsRole, memberId: member.id },
+ });
+ }
+ if (wantsStatus && wantsStatus !== member.status) {
+ await writeMembershipAudit(tx, {
+ orgId: ctx.orgId,
+ type: `member.${String(wantsStatus).toLowerCase()}`,
+ actorAddress: ctx.walletAddress,
+ targetUserId: member.userId,
+ metadata: { from: member.status, to: wantsStatus, memberId: member.id },
+ });
+ }
+ return row;
+ });
+
+ return NextResponse.json({
+ member: { id: updated.id, role: updated.role, status: updated.status },
+ });
+ });
+}
+
+export async function DELETE(
+ request: NextRequest,
+ { params }: { params: { id: string; memberId: string } }
+) {
+ return withTenant(request, { permission: 'member:remove', parseBody: false }, async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const member = await loadMember(ctx.orgId, params.memberId);
+ if (!member) {
+ return NextResponse.json({ error: 'Member not found.' }, { status: 404 });
+ }
+
+ const selfDenial = checkNotSelf(ctx, member.userId);
+ if (selfDenial) return denialResponse(selfDenial);
+
+ const lastAdmin = await checkNotLastAdministrator(prisma, ctx.orgId, member);
+ if (lastAdmin) return denialResponse(lastAdmin);
+
+ if (!canTransitionMembership(member.status, MembershipStatus.REMOVED)) {
+ return NextResponse.json(
+ { error: 'That membership is already removed.', code: 'INVALID_MEMBERSHIP_TRANSITION' },
+ { status: 409 }
+ );
+ }
+
+ await prisma.$transaction(async (tx) => {
+ // Soft removal. Hard-deleting the row would erase who held approval
+ // authority and when β the first thing an access review asks for.
+ await tx.orgMember.update({
+ where: { id: member.id },
+ data: { status: MembershipStatus.REMOVED, removedAt: new Date() },
+ });
+ await writeMembershipAudit(tx, {
+ orgId: ctx.orgId,
+ type: 'member.removed',
+ actorAddress: ctx.walletAddress,
+ targetUserId: member.userId,
+ metadata: { role: member.role, memberId: member.id },
+ });
+ });
+
+ return NextResponse.json({ removed: true });
+ });
+}
+
+/** SUSPENDED and REMOVED both reduce the pool of usable administrators. */
+function requiresAdminCover(status: MembershipStatus): boolean {
+ return status === MembershipStatus.SUSPENDED || status === MembershipStatus.REMOVED;
+}
diff --git a/src/app/api/organizations/[id]/members/route.ts b/src/app/api/organizations/[id]/members/route.ts
new file mode 100644
index 0000000..787d50f
--- /dev/null
+++ b/src/app/api/organizations/[id]/members/route.ts
@@ -0,0 +1,42 @@
+/**
+ * GET /api/organizations/:id/members β the organization's roster.
+ *
+ * Scoped to the caller's own organization. A member list is sensitive: it names
+ * who holds approval authority, which is the information an attacker wants before
+ * choosing a target.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant } from '@/lib/tenancy/http';
+import { assignableRoles } from '@/lib/tenancy/rbac';
+
+export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'member:read', parseBody: false }, async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const members = await prisma.orgMember.findMany({
+ where: { orgId: ctx.orgId },
+ include: { user: { select: { id: true, walletAddress: true } } },
+ orderBy: [{ role: 'asc' }, { createdAt: 'asc' }],
+ });
+
+ return NextResponse.json({
+ members: members.map((m) => ({
+ id: m.id,
+ userId: m.userId,
+ walletAddress: m.user.walletAddress,
+ role: m.role,
+ status: m.status,
+ isYou: m.userId === ctx.userId,
+ invitedAt: m.invitedAt,
+ activatedAt: m.activatedAt,
+ suspendedAt: m.suspendedAt,
+ removedAt: m.removedAt,
+ })),
+ assignableRoles: assignableRoles(ctx.role),
+ });
+ });
+}
diff --git a/src/app/api/organizations/[id]/reconciliation/route.ts b/src/app/api/organizations/[id]/reconciliation/route.ts
new file mode 100644
index 0000000..6f02dad
--- /dev/null
+++ b/src/app/api/organizations/[id]/reconciliation/route.ts
@@ -0,0 +1,87 @@
+/**
+ * GET /api/organizations/:id/reconciliation β operational health
+ * POST /api/organizations/:id/reconciliation β trigger a run for this organization
+ *
+ * Membership-scoped. A run is a read-heavy operation that can also correct the
+ * projection, so triggering it requires `reconciliation:resolve` rather than mere
+ * read access.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant } from '@/lib/tenancy/http';
+import { STELLAR_CONFIG } from '@/lib/config';
+import { reconciliationHealth, runReconciliation } from '@/lib/reconciliation/scheduler';
+
+export const maxDuration = 300;
+
+export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(
+ request,
+ { permission: 'reconciliation:read', parseBody: false },
+ async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const health = await reconciliationHealth(prisma, ctx.orgId);
+
+ const recentRuns = await prisma.reconciliationRun.findMany({
+ where: { orgId: ctx.orgId },
+ orderBy: { startedAt: 'desc' },
+ take: 10,
+ select: {
+ id: true, correlationId: true, status: true, scope: true,
+ startedAt: true, completedAt: true,
+ escrowsExamined: true, paymentsExamined: true,
+ agreed: true, mismatched: true, unreadable: true,
+ chainAhead: true, databaseAhead: true,
+ findingsOpened: true, correctionsApplied: true, errorMessage: true,
+ },
+ });
+
+ const bySeverity = await prisma.reconciliationFinding.groupBy({
+ by: ['severity'],
+ where: { orgId: ctx.orgId, status: { not: 'RESOLVED' } },
+ _count: true,
+ });
+
+ return NextResponse.json({
+ health,
+ recentRuns,
+ openBySeverity: Object.fromEntries(
+ bySeverity.map((r: any) => [r.severity, r._count])
+ ),
+ });
+ }
+ );
+}
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(
+ request,
+ { permission: 'reconciliation:resolve' },
+ async ({ ctx }) => {
+ if (ctx.orgId !== params.id) {
+ return NextResponse.json({ error: 'Organization not found.' }, { status: 404 });
+ }
+
+ const result = await runReconciliation(prisma, ctx.orgId, {
+ contractId: STELLAR_CONFIG.contract.id || undefined,
+ network: STELLAR_CONFIG.contract.network,
+ });
+
+ if ('skipped' in result) {
+ return NextResponse.json(
+ {
+ skipped: true,
+ reason: 'A reconciliation run is already in progress for this organization.',
+ runId: result.runId,
+ },
+ { status: 409 }
+ );
+ }
+ return NextResponse.json(result, { status: 200 });
+ }
+ );
+}
diff --git a/src/app/api/organizations/__tests__/invitations.route.test.ts b/src/app/api/organizations/__tests__/invitations.route.test.ts
new file mode 100644
index 0000000..501076c
--- /dev/null
+++ b/src/app/api/organizations/__tests__/invitations.route.test.ts
@@ -0,0 +1,219 @@
+// @vitest-environment node
+/**
+ * Org-scoped invitation route tests.
+ *
+ * Replaces the previous platform-admin invitation tests: that endpoint had no
+ * organization scope, so "is this admin allowed to revoke this invitation" had no
+ * answer beyond "they are an admin somewhere".
+ *
+ * The intent of the old tests is preserved (401 unauthenticated, 403 wrong role,
+ * 404 missing, success path) and extended with the cases that only exist once
+ * tenancy does: cross-tenant revocation, and role escalation via invitation.
+ */
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+import { OrgRole, MembershipStatus } from '@prisma/client';
+
+// Defined inside the factory: vi.mock is hoisted above any top-level variable.
+vi.mock('@/lib/db/prisma', () => {
+ const prisma: any = {
+ orgMember: { findUnique: vi.fn(), findMany: vi.fn() },
+ organization: { findUnique: vi.fn() },
+ invitation: { findMany: vi.fn(), findFirst: vi.fn(), upsert: vi.fn(), update: vi.fn() },
+ auditEvent: { create: vi.fn() },
+ };
+ prisma.$transaction = vi.fn(async (fn: any) => fn(prisma));
+ return { default: prisma };
+});
+vi.mock('@/lib/auth', () => ({ getUserFromRequest: vi.fn() }));
+
+import { GET, POST } from '../[id]/invitations/route';
+import { DELETE } from '../[id]/invitations/[invitationId]/route';
+import { getUserFromRequest } from '@/lib/auth';
+import prismaDefault from '@/lib/db/prisma';
+
+const prismaMock = prismaDefault as any;
+
+const mockUser = getUserFromRequest as unknown as ReturnType;
+const ORG = 'orgA';
+
+function signedInAs(role: OrgRole, userId = 'u1', orgId = ORG) {
+ mockUser.mockResolvedValue({ userId, walletAddress: 'G' + 'A'.repeat(55), role: 'EMPLOYEE' });
+ prismaMock.orgMember.findUnique.mockResolvedValue({
+ orgId, userId, role, status: MembershipStatus.ACTIVE,
+ org: { id: orgId, name: 'Org A', slug: 'org-a' },
+ user: { walletAddress: 'G' + 'A'.repeat(55) },
+ });
+ prismaMock.orgMember.findMany.mockResolvedValue([{ orgId, role }]);
+}
+
+function req(body?: unknown, orgId = ORG) {
+ return new Request(`http://localhost/api/organizations/${orgId}/invitations`, {
+ method: body ? 'POST' : 'GET',
+ headers: { 'Content-Type': 'application/json', 'x-organization-id': orgId },
+ ...(body ? { body: JSON.stringify(body) } : {}),
+ }) as any;
+}
+
+beforeEach(() => {
+ vi.clearAllMocks();
+ prismaMock.invitation.findMany.mockResolvedValue([]);
+ prismaMock.organization.findUnique.mockResolvedValue({ id: ORG, name: 'Org A', slug: 'org-a' });
+});
+
+describe('POST /api/organizations/:id/invitations', () => {
+ it('401 when unauthenticated', async () => {
+ mockUser.mockResolvedValue(null);
+ const res = await POST(req({ email: 'a@b.com', orgRole: 'VIEWER' }), { params: { id: ORG } });
+ expect(res.status).toBe(401);
+ });
+
+ it('403 for a role that cannot invite', async () => {
+ signedInAs(OrgRole.VIEWER);
+ const res = await POST(req({ email: 'a@b.com', orgRole: 'VIEWER' }), { params: { id: ORG } });
+ expect(res.status).toBe(403);
+ });
+
+ it('creates an invitation and returns the token exactly once', async () => {
+ signedInAs(OrgRole.ADMIN);
+ prismaMock.invitation.upsert.mockResolvedValue({
+ id: 'inv1', email: 'a@b.com', orgRole: OrgRole.MANAGER, expiresAt: new Date(),
+ });
+
+ const res = await POST(req({ email: 'A@B.com', orgRole: 'MANAGER' }), { params: { id: ORG } });
+ const body = await res.json();
+
+ expect(res.status).toBe(201);
+ expect(body.token).toBeTruthy();
+ expect(body.acceptUrl).toContain(body.token);
+
+ // Only the HASH is persisted β a database dump must not yield live tokens.
+ const stored = prismaMock.invitation.upsert.mock.calls[0][0];
+ expect(stored.create.tokenHash).toBeTruthy();
+ expect(stored.create.tokenHash).not.toBe(body.token);
+ expect(JSON.stringify(stored)).not.toContain(body.token);
+ // Email normalized, so re-inviting the same person is recognised as such.
+ expect(stored.where.orgId_email.email).toBe('a@b.com');
+ });
+
+ it('refuses an ADMIN inviting an OWNER', async () => {
+ // Otherwise an admin can hand themselves, or an accomplice, the organization.
+ signedInAs(OrgRole.ADMIN);
+ const res = await POST(req({ email: 'a@b.com', orgRole: 'OWNER' }), { params: { id: ORG } });
+ const body = await res.json();
+
+ expect(res.status).toBe(403);
+ expect(body.code).toBe('ROLE_ESCALATION_REFUSED');
+ expect(prismaMock.invitation.upsert).not.toHaveBeenCalled();
+ });
+
+ it('refuses an invitation naming a different organization than the callerβs', async () => {
+ signedInAs(OrgRole.ADMIN, 'u1', ORG);
+ const res = await POST(req({ email: 'a@b.com', orgRole: 'VIEWER' }, ORG), {
+ params: { id: 'orgB' },
+ });
+ expect(res.status).toBe(404);
+ expect(prismaMock.invitation.upsert).not.toHaveBeenCalled();
+ });
+
+ it('rejects a malformed email and an unknown role', async () => {
+ signedInAs(OrgRole.ADMIN);
+ expect((await POST(req({ email: 'nope', orgRole: 'VIEWER' }), { params: { id: ORG } })).status).toBe(400);
+ expect((await POST(req({ email: 'a@b.com', orgRole: 'GOD' }), { params: { id: ORG } })).status).toBe(400);
+ });
+});
+
+describe('GET /api/organizations/:id/invitations', () => {
+ it('never returns the token hash', async () => {
+ signedInAs(OrgRole.ADMIN);
+ prismaMock.invitation.findMany.mockResolvedValue([{
+ id: 'inv1', email: 'a@b.com', orgRole: OrgRole.VIEWER,
+ expiresAt: new Date(Date.now() + 86400000), usedAt: null, revokedAt: null,
+ invitedBy: 'GX', createdAt: new Date(),
+ }]);
+
+ const body = await (await GET(req(), { params: { id: ORG } })).json();
+
+ expect(body.invitations[0].status).toBe('PENDING');
+ expect(JSON.stringify(body)).not.toContain('tokenHash');
+ });
+
+ it('labels expired, accepted and revoked invitations distinctly', async () => {
+ signedInAs(OrgRole.ADMIN);
+ prismaMock.invitation.findMany.mockResolvedValue([
+ { id: '1', email: 'a@b.com', orgRole: 'VIEWER', expiresAt: new Date(Date.now() - 1000), usedAt: null, revokedAt: null, createdAt: new Date() },
+ { id: '2', email: 'c@b.com', orgRole: 'VIEWER', expiresAt: new Date(Date.now() + 1000), usedAt: new Date(), revokedAt: null, createdAt: new Date() },
+ { id: '3', email: 'd@b.com', orgRole: 'VIEWER', expiresAt: new Date(Date.now() + 1000), usedAt: null, revokedAt: new Date(), createdAt: new Date() },
+ ]);
+
+ const body = await (await GET(req(), { params: { id: ORG } })).json();
+ expect(body.invitations.map((i: any) => i.status)).toEqual(['EXPIRED', 'ACCEPTED', 'REVOKED']);
+ });
+
+ it('tells the caller which roles they may invite', async () => {
+ signedInAs(OrgRole.ADMIN);
+ const body = await (await GET(req(), { params: { id: ORG } })).json();
+ expect(body.assignableRoles).not.toContain(OrgRole.OWNER);
+ expect(body.assignableRoles).toContain(OrgRole.MANAGER);
+ });
+});
+
+describe('DELETE /api/organizations/:id/invitations/:invitationId', () => {
+ const delReq = (orgId = ORG) =>
+ new Request(`http://localhost/api/organizations/${orgId}/invitations/inv1`, {
+ method: 'DELETE',
+ headers: { 'x-organization-id': orgId },
+ }) as any;
+
+ it('401 when unauthenticated', async () => {
+ mockUser.mockResolvedValue(null);
+ const res = await DELETE(delReq(), { params: { id: ORG, invitationId: 'inv1' } });
+ expect(res.status).toBe(401);
+ });
+
+ it('403 for a role that cannot invite', async () => {
+ signedInAs(OrgRole.VIEWER);
+ const res = await DELETE(delReq(), { params: { id: ORG, invitationId: 'inv1' } });
+ expect(res.status).toBe(403);
+ });
+
+ it('404 when the invitation does not exist in this organization', async () => {
+ signedInAs(OrgRole.ADMIN);
+ prismaMock.invitation.findFirst.mockResolvedValue(null);
+ const res = await DELETE(delReq(), { params: { id: ORG, invitationId: 'inv1' } });
+ expect(res.status).toBe(404);
+ });
+
+ it('revokes rather than deletes, preserving the record', async () => {
+ // Deleting would erase that someone was ever invited β the first thing an
+ // access review asks for.
+ signedInAs(OrgRole.ADMIN);
+ prismaMock.invitation.findFirst.mockResolvedValue({
+ id: 'inv1', orgId: ORG, email: 'a@b.com', usedAt: null,
+ });
+
+ const res = await DELETE(delReq(), { params: { id: ORG, invitationId: 'inv1' } });
+
+ expect(res.status).toBe(200);
+ expect(prismaMock.invitation.update).toHaveBeenCalled();
+ expect(prismaMock.invitation.update.mock.calls[0][0].data.revokedAt).toBeInstanceOf(Date);
+ expect(prismaMock.auditEvent.create).toHaveBeenCalled();
+ });
+
+ it('refuses to revoke an already-accepted invitation', async () => {
+ signedInAs(OrgRole.ADMIN);
+ prismaMock.invitation.findFirst.mockResolvedValue({
+ id: 'inv1', orgId: ORG, email: 'a@b.com', usedAt: new Date(),
+ });
+ const res = await DELETE(delReq(), { params: { id: ORG, invitationId: 'inv1' } });
+ const body = await res.json();
+ expect(res.status).toBe(409);
+ expect(body.code).toBe('ALREADY_ACCEPTED');
+ });
+
+ it('refuses a cross-tenant revocation', async () => {
+ signedInAs(OrgRole.ADMIN, 'u1', ORG);
+ const res = await DELETE(delReq(ORG), { params: { id: 'orgB', invitationId: 'inv1' } });
+ expect(res.status).toBe(404);
+ expect(prismaMock.invitation.update).not.toHaveBeenCalled();
+ });
+});
diff --git a/src/app/api/organizations/route.ts b/src/app/api/organizations/route.ts
new file mode 100644
index 0000000..89c444b
--- /dev/null
+++ b/src/app/api/organizations/route.ts
@@ -0,0 +1,123 @@
+/**
+ * GET /api/organizations β the caller's workspaces
+ * POST /api/organizations β create one, becoming its first OWNER
+ *
+ * Creation is the only place a user may grant themselves a privileged role, and
+ * it is safe precisely because the organization does not exist yet: there is no
+ * existing tenant whose authority is being escalated. Every later grant goes
+ * through the delegation rules in tenancy/rbac.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { OrgRole, MembershipStatus } from '@prisma/client';
+import prisma from '@/lib/db/prisma';
+import { getUserFromRequest } from '@/lib/auth';
+import { listTenants } from '@/lib/tenancy/resolve';
+import { permissionsFor } from '@/lib/tenancy/rbac';
+import { writeMembershipAudit } from '@/lib/tenancy/membership';
+
+/** Lowercase, hyphenated, no leading/trailing hyphen. */
+function slugify(name: string): string {
+ return name
+ .toLowerCase()
+ .normalize('NFKD')
+ .replace(/[^\p{Letter}\p{Number}]+/gu, '-')
+ .replace(/^-+|-+$/g, '')
+ .slice(0, 48);
+}
+
+export async function GET(request: NextRequest) {
+ const user = await getUserFromRequest(request);
+ if (!user) {
+ return NextResponse.json({ error: 'Authentication required.' }, { status: 401 });
+ }
+
+ const orgs = await listTenants(prisma, user.userId);
+ return NextResponse.json({
+ organizations: orgs.map((o) => ({
+ ...o,
+ // The UI renders from permissions, never the reverse. Shipping them here
+ // keeps the client from re-deriving the rules and drifting from the server.
+ permissions: permissionsFor(o.role),
+ })),
+ });
+}
+
+export async function POST(request: NextRequest) {
+ const user = await getUserFromRequest(request);
+ if (!user) {
+ return NextResponse.json({ error: 'Authentication required.' }, { status: 401 });
+ }
+
+ const body = await request.json().catch(() => ({}));
+ const name = String(body?.name ?? '').trim();
+
+ if (name.length < 2 || name.length > 80) {
+ return NextResponse.json(
+ { error: 'Organization name must be between 2 and 80 characters.' },
+ { status: 400 }
+ );
+ }
+
+ const base = slugify(name);
+ if (!base) {
+ return NextResponse.json(
+ { error: 'Organization name must contain at least one letter or number.' },
+ { status: 400 }
+ );
+ }
+
+ try {
+ const result = await prisma.$transaction(async (tx) => {
+ // Slugs are public-ish identifiers, so a collision gets a suffix rather
+ // than revealing that some other tenant already took the name.
+ let slug = base;
+ for (let i = 2; i < 50; i++) {
+ const taken = await tx.organization.findUnique({ where: { slug } });
+ if (!taken) break;
+ slug = `${base}-${i}`;
+ }
+
+ const org = await tx.organization.create({ data: { name, slug } });
+
+ const member = await tx.orgMember.create({
+ data: {
+ orgId: org.id,
+ userId: user.userId,
+ role: OrgRole.OWNER,
+ status: MembershipStatus.ACTIVE,
+ activatedAt: new Date(),
+ },
+ });
+
+ await writeMembershipAudit(tx, {
+ orgId: org.id,
+ type: 'organization.created',
+ actorAddress: user.walletAddress,
+ targetUserId: user.userId,
+ metadata: { name, slug, role: OrgRole.OWNER },
+ });
+
+ return { org, member };
+ });
+
+ return NextResponse.json(
+ {
+ organization: {
+ id: result.org.id,
+ name: result.org.name,
+ slug: result.org.slug,
+ },
+ role: result.member.role,
+ permissions: permissionsFor(result.member.role),
+ },
+ { status: 201 }
+ );
+ } catch (e: any) {
+ console.error('[organizations] create failed:', e?.message);
+ return NextResponse.json(
+ { error: 'The organization could not be created.' },
+ { status: 500 }
+ );
+ }
+}
diff --git a/src/app/api/payments/[id]/approve/route.ts b/src/app/api/payments/[id]/approve/route.ts
new file mode 100644
index 0000000..8f1e67d
--- /dev/null
+++ b/src/app/api/payments/[id]/approve/route.ts
@@ -0,0 +1,17 @@
+/**
+ * POST /api/payments/:id/approve
+ *
+ * A business action. The server decides the resulting state β see
+ * src/lib/payments/state-machine.ts for the transition table, and
+ * docs/PAYMENT_STATE_MACHINE.md for who may do what.
+ */
+import { NextRequest } from 'next/server';
+import { approvePayment } from '@/lib/payments/actions';
+import { runPaymentAction } from '@/lib/payments/http';
+
+export async function POST(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ return runPaymentAction(request, params.id, approvePayment);
+}
diff --git a/src/app/api/payments/[id]/cancel/route.ts b/src/app/api/payments/[id]/cancel/route.ts
new file mode 100644
index 0000000..c825795
--- /dev/null
+++ b/src/app/api/payments/[id]/cancel/route.ts
@@ -0,0 +1,17 @@
+/**
+ * POST /api/payments/:id/cancel
+ *
+ * A business action. The server decides the resulting state β see
+ * src/lib/payments/state-machine.ts for the transition table, and
+ * docs/PAYMENT_STATE_MACHINE.md for who may do what.
+ */
+import { NextRequest } from 'next/server';
+import { cancelPayment } from '@/lib/payments/actions';
+import { runPaymentAction } from '@/lib/payments/http';
+
+export async function POST(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ return runPaymentAction(request, params.id, cancelPayment);
+}
diff --git a/src/app/api/payments/[id]/reconcile/route.ts b/src/app/api/payments/[id]/reconcile/route.ts
new file mode 100644
index 0000000..8aa9f81
--- /dev/null
+++ b/src/app/api/payments/[id]/reconcile/route.ts
@@ -0,0 +1,17 @@
+/**
+ * POST /api/payments/:id/reconcile
+ *
+ * A business action. The server decides the resulting state β see
+ * src/lib/payments/state-machine.ts for the transition table, and
+ * docs/PAYMENT_STATE_MACHINE.md for who may do what.
+ */
+import { NextRequest } from 'next/server';
+import { flagForReconciliation } from '@/lib/payments/actions';
+import { runPaymentAction } from '@/lib/payments/http';
+
+export async function POST(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ return runPaymentAction(request, params.id, flagForReconciliation);
+}
diff --git a/src/app/api/payments/[id]/reject/route.ts b/src/app/api/payments/[id]/reject/route.ts
new file mode 100644
index 0000000..a53ad87
--- /dev/null
+++ b/src/app/api/payments/[id]/reject/route.ts
@@ -0,0 +1,17 @@
+/**
+ * POST /api/payments/:id/reject
+ *
+ * A business action. The server decides the resulting state β see
+ * src/lib/payments/state-machine.ts for the transition table, and
+ * docs/PAYMENT_STATE_MACHINE.md for who may do what.
+ */
+import { NextRequest } from 'next/server';
+import { rejectPayment } from '@/lib/payments/actions';
+import { runPaymentAction } from '@/lib/payments/http';
+
+export async function POST(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ return runPaymentAction(request, params.id, rejectPayment);
+}
diff --git a/src/app/api/payments/[id]/retry/route.ts b/src/app/api/payments/[id]/retry/route.ts
new file mode 100644
index 0000000..91c2329
--- /dev/null
+++ b/src/app/api/payments/[id]/retry/route.ts
@@ -0,0 +1,17 @@
+/**
+ * POST /api/payments/:id/retry
+ *
+ * A business action. The server decides the resulting state β see
+ * src/lib/payments/state-machine.ts for the transition table, and
+ * docs/PAYMENT_STATE_MACHINE.md for who may do what.
+ */
+import { NextRequest } from 'next/server';
+import { retryPayment } from '@/lib/payments/actions';
+import { runPaymentAction } from '@/lib/payments/http';
+
+export async function POST(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ return runPaymentAction(request, params.id, retryPayment);
+}
diff --git a/src/app/api/payments/[id]/route.ts b/src/app/api/payments/[id]/route.ts
new file mode 100644
index 0000000..64014f4
--- /dev/null
+++ b/src/app/api/payments/[id]/route.ts
@@ -0,0 +1,126 @@
+/**
+ * GET /api/payments/:id β one payment, with its full history.
+ *
+ * Returns the audit trail alongside current state. A "current status only" view
+ * cannot answer how a payment reached that status, which is the question asked
+ * whenever something has gone wrong.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { getUserFromRequest } from '@/lib/auth';
+import { resolveMembership, canRead, findPaymentForMember } from '@/lib/payments/authz';
+import { describeState, transitionsFrom } from '@/lib/payments/state-machine';
+import { formatAmountWithSeparators } from '@/lib/money';
+
+export async function GET(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ const user = await getUserFromRequest(request);
+ if (!user) {
+ return NextResponse.json({ error: 'Authentication required.' }, { status: 401 });
+ }
+
+ const url = new URL(request.url);
+ const orgId = request.headers.get('x-organization-id') ?? url.searchParams.get('orgId');
+ if (!orgId) {
+ return NextResponse.json(
+ { error: 'An organization is required (X-Organization-Id header or ?orgId).' },
+ { status: 400 }
+ );
+ }
+
+ const membership = await resolveMembership(prisma, user.userId, orgId);
+ if (!membership.ok) {
+ return NextResponse.json({ error: membership.message }, { status: membership.status });
+ }
+ if (!canRead(membership.value.role)) {
+ return NextResponse.json({ error: 'Your role cannot read payment data.' }, { status: 403 });
+ }
+
+ const found = await findPaymentForMember(prisma, membership.value, params.id, {
+ batch: true,
+ escrow: true,
+ worker: true,
+ approvals: { orderBy: { createdAt: 'asc' } },
+ attestations: { orderBy: { createdAt: 'asc' } },
+ transactions: { orderBy: { createdAt: 'asc' } },
+ auditEvents: { orderBy: { createdAt: 'asc' } },
+ findings: { orderBy: { detectedAt: 'desc' } },
+ });
+ if (!found.ok) {
+ return NextResponse.json({ error: found.message }, { status: found.status });
+ }
+
+ const p = found.value;
+ const d = describeState(p.state);
+
+ return NextResponse.json({
+ payment: {
+ id: p.id,
+ recipient: p.recipientAddress,
+ onChainPaymentIndex: p.onChainPaymentIndex,
+ asset: { code: p.assetCode, contractId: p.assetContractId, decimals: p.assetDecimals },
+ amount: formatAmountWithSeparators(p.amountBaseUnits, p.assetDecimals),
+ amountBaseUnits: p.amountBaseUnits.toString(),
+ rateBaseUnits: p.rateBaseUnits.toString(),
+ hours: p.hours.toString(),
+ periodStart: p.periodStart?.toISOString() ?? null,
+ periodEnd: p.periodEnd?.toISOString() ?? null,
+ state: p.state,
+ stateLabel: d.label,
+ stateDescription: d.description,
+ tone: d.tone,
+ needsAttention: d.needsAttention,
+ stateReason: p.stateReason,
+ transactionHash: d.mayHaveTransaction ? p.settlementTxHash : null,
+ settledAt: p.settledAt?.toISOString() ?? null,
+ createdAt: p.createdAt.toISOString(),
+ },
+ batch: p.batch
+ ? { id: p.batch.id, reference: p.batch.reference }
+ : null,
+ escrow: p.escrow
+ ? {
+ id: p.escrow.id,
+ onChainId: p.escrow.onChainId,
+ contractId: p.escrow.contractId,
+ network: p.escrow.network,
+ managerApproved: p.escrow.managerApproved,
+ financeApproved: p.escrow.financeApproved,
+ cancelled: p.escrow.cancelled,
+ }
+ : null,
+ approvals: p.approvals,
+ attestations: p.attestations.map((a: any) => ({
+ id: a.id,
+ schema: a.schema,
+ hours: a.hours.toString(),
+ nonce: a.nonce.toString(),
+ preimageSha256: a.preimageSha256,
+ createdAt: a.createdAt.toISOString(),
+ })),
+ transactions: p.transactions.map((t: any) => ({
+ id: t.id, kind: t.kind, status: t.status, hash: t.hash,
+ attempt: t.attempt, ledger: t.ledger, errorMessage: t.errorMessage,
+ createdAt: t.createdAt.toISOString(),
+ })),
+ history: p.auditEvents.map((e: any) => ({
+ id: e.id, type: e.type,
+ actor: e.actorAddress ?? e.actorSystem,
+ previousState: e.previousState, newState: e.newState,
+ txHash: e.txHash, metadata: e.metadata,
+ at: e.createdAt.toISOString(),
+ })),
+ findings: p.findings.map((f: any) => ({
+ id: f.id, kind: f.kind, dbState: f.dbState, chainState: f.chainState,
+ detail: f.detail, detectedAt: f.detectedAt.toISOString(),
+ resolvedAt: f.resolvedAt?.toISOString() ?? null,
+ })),
+ /** What this caller may do next, so the UI need not re-derive the rules. */
+ availableActions: transitionsFrom(p.state)
+ .filter((t) => t.actors.includes('user') && t.roles?.includes(membership.value.role))
+ .map((t) => ({ to: t.to, reason: t.reason })),
+ });
+}
diff --git a/src/app/api/payments/[id]/submit/route.ts b/src/app/api/payments/[id]/submit/route.ts
new file mode 100644
index 0000000..c4bd773
--- /dev/null
+++ b/src/app/api/payments/[id]/submit/route.ts
@@ -0,0 +1,17 @@
+/**
+ * POST /api/payments/:id/submit
+ *
+ * A business action. The server decides the resulting state β see
+ * src/lib/payments/state-machine.ts for the transition table, and
+ * docs/PAYMENT_STATE_MACHINE.md for who may do what.
+ */
+import { NextRequest } from 'next/server';
+import { submitPaymentForSettlement } from '@/lib/payments/actions';
+import { runPaymentAction } from '@/lib/payments/http';
+
+export async function POST(
+ request: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ return runPaymentAction(request, params.id, submitPaymentForSettlement);
+}
diff --git a/src/app/api/payments/route.ts b/src/app/api/payments/route.ts
new file mode 100644
index 0000000..dd0fb92
--- /dev/null
+++ b/src/app/api/payments/route.ts
@@ -0,0 +1,101 @@
+/**
+ * GET /api/payments β list payments, scoped to the caller's organization.
+ *
+ * Tenant scoping is part of the query, not a check after the fact: a payment id
+ * belonging to another organization is indistinguishable from one that does not
+ * exist.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { PaymentState } from '@prisma/client';
+import prisma from '@/lib/db/prisma';
+import { getUserFromRequest } from '@/lib/auth';
+import { resolveMembership, canRead } from '@/lib/payments/authz';
+import { describeState } from '@/lib/payments/state-machine';
+import { formatAmountWithSeparators } from '@/lib/money';
+
+const VALID_STATES = new Set(Object.values(PaymentState));
+
+export async function GET(request: NextRequest) {
+ const user = await getUserFromRequest(request);
+ if (!user) {
+ return NextResponse.json({ error: 'Authentication required.' }, { status: 401 });
+ }
+
+ const url = new URL(request.url);
+ const orgId = request.headers.get('x-organization-id') ?? url.searchParams.get('orgId');
+ if (!orgId) {
+ return NextResponse.json(
+ { error: 'An organization is required (X-Organization-Id header or ?orgId).' },
+ { status: 400 }
+ );
+ }
+
+ const membership = await resolveMembership(prisma, user.userId, orgId);
+ if (!membership.ok) {
+ return NextResponse.json({ error: membership.message }, { status: membership.status });
+ }
+ if (!canRead(membership.value.role)) {
+ return NextResponse.json(
+ { error: 'Your role cannot read payment data.' },
+ { status: 403 }
+ );
+ }
+
+ const stateParam = url.searchParams.get('state');
+ if (stateParam && !VALID_STATES.has(stateParam)) {
+ return NextResponse.json({ error: `Unknown state "${stateParam}".` }, { status: 400 });
+ }
+
+ const limit = Math.min(parseInt(url.searchParams.get('limit') || '50', 10), 200);
+ const batchId = url.searchParams.get('batchId');
+
+ const payments = await prisma.payment.findMany({
+ where: {
+ orgId: membership.value.orgId,
+ ...(stateParam ? { state: stateParam as PaymentState } : {}),
+ ...(batchId ? { batchId } : {}),
+ },
+ orderBy: [{ createdAt: 'desc' }],
+ take: limit,
+ include: {
+ batch: { select: { id: true, reference: true } },
+ escrow: { select: { onChainId: true, contractId: true, network: true } },
+ approvals: { select: { role: true, decision: true, actorAddress: true, createdAt: true } },
+ _count: { select: { attestations: true, transactions: true } },
+ },
+ });
+
+ return NextResponse.json({
+ payments: payments.map((p) => {
+ const d = describeState(p.state);
+ return {
+ id: p.id,
+ batch: p.batch,
+ escrowOnChainId: p.escrow?.onChainId ?? null,
+ network: p.escrow?.network ?? null,
+ recipient: p.recipientAddress,
+ onChainPaymentIndex: p.onChainPaymentIndex,
+ asset: { code: p.assetCode, contractId: p.assetContractId, decimals: p.assetDecimals },
+ amount: formatAmountWithSeparators(p.amountBaseUnits, p.assetDecimals),
+ amountBaseUnits: p.amountBaseUnits.toString(),
+ rateBaseUnits: p.rateBaseUnits.toString(),
+ hours: p.hours.toString(),
+ state: p.state,
+ stateLabel: d.label,
+ stateDescription: d.description,
+ tone: d.tone,
+ needsAttention: d.needsAttention,
+ stateReason: p.stateReason,
+ // A transaction reference is surfaced only where one can actually exist.
+ // Showing an explorer link for an unsubmitted payment invites a reader to
+ // believe something settled.
+ transactionHash: d.mayHaveTransaction ? p.settlementTxHash : null,
+ settledAt: p.settledAt?.toISOString() ?? null,
+ approvals: p.approvals,
+ counts: p._count,
+ createdAt: p.createdAt.toISOString(),
+ };
+ }),
+ });
+}
diff --git a/src/app/api/payroll/__tests__/batches.route.test.ts b/src/app/api/payroll/__tests__/batches.route.test.ts
new file mode 100644
index 0000000..5e953e3
--- /dev/null
+++ b/src/app/api/payroll/__tests__/batches.route.test.ts
@@ -0,0 +1,781 @@
+// @vitest-environment node
+/**
+ * Bulk Pay route tests.
+ *
+ * These are UNIT tests. The Prisma client is replaced by the in-memory fake, which
+ * enforces the unique constraints and required columns that carry the idempotency
+ * and tenancy guarantees β so a test can observe those being relied upon rather
+ * than trusting a canned return value.
+ *
+ * They do NOT constitute database-backed validation. No migration has been applied
+ * and no real Postgres has seen these queries; composite foreign keys, partial
+ * indexes and column types remain unverified against a real database. That work is
+ * BLOCKED on a local development database.
+ */
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+import { OrgRole, MembershipStatus, PaymentState, ApprovalDecision } from '@prisma/client';
+import type { FakeDb } from '@/lib/payments/__tests__/fake-db';
+
+// The factory is HOISTED above every import, so it must not close over a module
+// variable β `const db = createFakeDb()` above this line is not yet initialized
+// when the factory runs. The fake is therefore built inside the factory and read
+// back from the mocked module afterwards.
+vi.mock('@/lib/db/prisma', async () => {
+ const { createFakeDb } = await import('@/lib/payments/__tests__/fake-db');
+ return { default: createFakeDb() };
+});
+vi.mock('@/lib/auth', () => ({ getUserFromRequest: vi.fn() }));
+
+import { POST as createBatchRoute, GET as listBatchesRoute } from '../batches/route';
+import { POST as validateCsvRoute } from '../batches/validate/route';
+import { GET as getBatchRoute } from '../batches/[id]/route';
+import { POST as revalidateRoute } from '../batches/[id]/validate/route';
+import { POST as approveBatchRoute } from '../batches/[id]/approve/route';
+import { getUserFromRequest } from '@/lib/auth';
+import { __resetRateLimiter } from '@/lib/ratelimit';
+import prismaDefault from '@/lib/db/prisma';
+
+/** The same instance the routes use, so assertions read the rows they wrote. */
+const db = prismaDefault as unknown as FakeDb;
+
+const mockUser = getUserFromRequest as unknown as ReturnType;
+
+const ORG_A = 'orgA';
+const ORG_B = 'orgB';
+const TOKEN = 'CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M';
+
+function addr(tag: string): string {
+ return ('G' + tag.toUpperCase().replace(/[^A-Z2-7]/g, '')).padEnd(56, 'A');
+}
+
+const HEADER = 'recipient,amount,asset,hours,rate,period_start,period_end';
+/** A pay period, required because the oracle attests to it. */
+const PERIOD = '2026-09-01,2026-09-15';
+const GOOD_CSV = [
+ HEADER,
+ `${addr('alice')},1000,USDC,40,25,${PERIOD}`,
+ `${addr('bob')},1600,USDC,80,20,${PERIOD}`,
+ `${addr('carol')},260,USDC,20,13,${PERIOD}`,
+].join('\n');
+
+/** Seed an organization and a member. */
+function seedMember(orgId: string, userId: string, role: OrgRole, wallet: string) {
+ if (!db.__tables.organization.rows.some((o) => o.id === orgId)) {
+ db.__tables.organization.rows.push({ id: orgId, name: orgId, slug: orgId });
+ }
+ if (!db.__tables.user.rows.some((u) => u.id === userId)) {
+ db.__tables.user.rows.push({ id: userId, walletAddress: wallet, role: 'EMPLOYEE' });
+ }
+ db.__tables.orgMember.rows.push({
+ id: `ogm_${orgId}_${userId}`,
+ orgId,
+ userId,
+ role,
+ status: MembershipStatus.ACTIVE,
+ createdAt: new Date(),
+ });
+}
+
+function signedInAs(userId: string, wallet: string) {
+ mockUser.mockResolvedValue({ userId, walletAddress: wallet, role: 'EMPLOYEE' });
+}
+
+function post(url: string, body: unknown, headers: Record = {}): any {
+ return new Request(url, {
+ method: 'POST',
+ headers: { 'content-type': 'application/json', ...headers },
+ body: JSON.stringify(body),
+ });
+}
+
+function get(url: string, headers: Record = {}): any {
+ return new Request(url, { method: 'GET', headers });
+}
+
+/** JSON.stringify refuses bigint, and every monetary column is one. */
+function snapshotRows(rows: readonly Record[]): string {
+ return JSON.stringify(rows, (_k, v) => (typeof v === 'bigint' ? v.toString() : v));
+}
+
+const URL_BATCHES = 'https://app.test/api/payroll/batches';
+
+beforeEach(() => {
+ vi.clearAllMocks();
+ __resetRateLimiter();
+ for (const t of Object.values(db.__tables)) t.rows.length = 0;
+
+ process.env.NEXT_PUBLIC_STELLAR_TOKEN_ID = TOKEN;
+ process.env.NEXT_PUBLIC_SETTLEMENT_ASSET_CODE = 'USDC';
+
+ // Two organizations, so every test can check isolation rather than assuming it.
+ seedMember(ORG_A, 'u_admin_a', OrgRole.ADMIN, addr('adminA'));
+ seedMember(ORG_A, 'u_manager_a', OrgRole.MANAGER, addr('managerA'));
+ seedMember(ORG_A, 'u_finance_a', OrgRole.FINANCE, addr('financeA'));
+ seedMember(ORG_A, 'u_worker_a', OrgRole.WORKER, addr('workerA'));
+ seedMember(ORG_A, 'u_viewer_a', OrgRole.VIEWER, addr('viewerA'));
+ seedMember(ORG_B, 'u_admin_b', OrgRole.ADMIN, addr('adminB'));
+});
+
+// ---------------------------------------------------------------------------
+
+describe('POST /api/payroll/batches β authentication and authorization', () => {
+ it('refuses an unauthenticated request', async () => {
+ mockUser.mockResolvedValue(null);
+ const res = await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }));
+ expect(res.status).toBe(401);
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ });
+
+ it('refuses a role without payroll:create', async () => {
+ signedInAs('u_viewer_a', addr('viewerA'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(403);
+ expect((await res.json()).code).toBe('PERMISSION_DENIED');
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ });
+
+ it('refuses a WORKER, who holds no organization permissions at all', async () => {
+ signedInAs('u_worker_a', addr('workerA'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(403);
+ });
+
+ it('does not let a member of org B create a batch in org A', async () => {
+ signedInAs('u_admin_b', addr('adminB'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ // A non-enumerating 404: naming an organization you do not belong to is
+ // indistinguishable from naming one that does not exist.
+ expect(res.status).toBe(404);
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ });
+});
+
+describe('POST /api/payroll/batches β request validation', () => {
+ beforeEach(() => signedInAs('u_admin_a', addr('adminA')));
+
+ it('rejects a non-JSON content type before reading the body', async () => {
+ const res = await createBatchRoute(
+ new Request(URL_BATCHES, {
+ method: 'POST',
+ headers: { 'content-type': 'text/csv', 'x-organization-id': ORG_A },
+ body: GOOD_CSV,
+ }) as any,
+ );
+ expect(res.status).toBe(400);
+ expect((await res.json()).code).toBe('UNSUPPORTED_CONTENT_TYPE');
+ });
+
+ it('rejects an oversized declared body', async () => {
+ const req = new Request(URL_BATCHES, {
+ method: 'POST',
+ headers: {
+ 'content-type': 'application/json',
+ 'content-length': String(50 * 1024 * 1024),
+ 'x-organization-id': ORG_A,
+ },
+ body: JSON.stringify({ csv: GOOD_CSV }),
+ });
+ const res = await createBatchRoute(req as any);
+ expect(res.status).toBe(400);
+ expect((await res.json()).code).toBe('PAYLOAD_TOO_LARGE');
+ });
+
+ it('rejects unknown fields rather than ignoring them', async () => {
+ const res = await createBatchRoute(
+ post(
+ URL_BATCHES,
+ { csv: GOOD_CSV, state: 'PAID', role: 'FINANCE' },
+ { 'x-organization-id': ORG_A },
+ ),
+ );
+ expect(res.status).toBe(400);
+ const body = await res.json();
+ expect(body.code).toBe('MALFORMED_REQUEST');
+ // Silently dropping these would teach a client that they were honoured.
+ expect(JSON.stringify(body.details)).toContain('UNKNOWN_FIELD');
+ expect(db.__tables.payment.rows).toHaveLength(0);
+ });
+
+ it('rejects a missing csv field', async () => {
+ const res = await createBatchRoute(post(URL_BATCHES, {}, { 'x-organization-id': ORG_A }));
+ expect(res.status).toBe(400);
+ });
+
+ it('rejects a reference containing control characters', async () => {
+ const res = await createBatchRoute(
+ post(
+ URL_BATCHES,
+ { csv: GOOD_CSV, reference: 'A' + String.fromCharCode(7) + 'B' },
+ { 'x-organization-id': ORG_A },
+ ),
+ );
+ expect(res.status).toBe(400);
+ expect(JSON.stringify((await res.json()).details)).toContain('control characters');
+ });
+
+ it('rejects a projectId belonging to another organization', async () => {
+ db.__tables.project.rows.push({ id: 'prjb', orgId: ORG_B, code: 'B1', name: 'Other' });
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV, projectId: 'prjb' }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(404);
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ });
+});
+
+describe('POST /api/payroll/batches β CSV validation', () => {
+ beforeEach(() => signedInAs('u_admin_a', addr('adminA')));
+
+ it('creates one payment per row and returns 201', async () => {
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV, filename: 'sept.csv' }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(201);
+ const body = await res.json();
+ expect(body.created).toBe(true);
+ expect(body.batch.paymentCount).toBe(3);
+ expect(body.batch.totalBaseUnits).toBe('28600000000');
+ expect(body.batch.asset).toBe('USDC');
+
+ expect(db.__tables.payment.rows).toHaveLength(3);
+ expect(db.__tables.payment.rows.every((p) => p.state === PaymentState.DRAFT)).toBe(true);
+ expect(db.__tables.payment.rows.every((p) => p.orgId === ORG_A)).toBe(true);
+ });
+
+ it('returns 422 with per-row errors for an invalid file, and writes nothing', async () => {
+ const csv = [
+ HEADER,
+ `${addr('ok')},1000,USDC,40,25,${PERIOD}`,
+ `NOTANADDRESS,100,USDC,10,10,${PERIOD}`,
+ `${addr('sci')},1e3,USDC,10,10,${PERIOD}`,
+ `${addr('frac')},100,USDC,7.5,10,${PERIOD}`,
+ ].join('\n');
+
+ const res = await createBatchRoute(post(URL_BATCHES, { csv }, { 'x-organization-id': ORG_A }));
+ expect(res.status).toBe(422);
+ const body = await res.json();
+ expect(body.code).toBe('CSV_INVALID');
+
+ const codes = body.details.errors.map((e: any) => e.code).sort();
+ expect(codes).toEqual(['AMBIGUOUS_NUMBER', 'FRACTIONAL_HOURS', 'INVALID_ADDRESS']);
+ // Each error names the line the uploader sees.
+ expect(body.details.errors.every((e: any) => typeof e.row === 'number')).toBe(true);
+ // Nothing partial: a batch is created only from a wholly valid file.
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ expect(db.__tables.payment.rows).toHaveLength(0);
+ });
+
+ it('rejects an asset this deployment cannot settle', async () => {
+ const csv = [HEADER, `${addr('x')},100,XLM,10,10,${PERIOD}`].join('\n');
+ const res = await createBatchRoute(post(URL_BATCHES, { csv }, { 'x-organization-id': ORG_A }));
+ expect(res.status).toBe(422);
+ const body = await res.json();
+ expect(body.details.errors[0].code).toBe('UNSUPPORTED_ASSET');
+ expect(body.details.errors[0].message).toContain('settles: USDC');
+ });
+
+ it('rejects a row whose amount does not equal hours x rate', async () => {
+ const csv = [HEADER, `${addr('x')},1000,USDC,40,20,${PERIOD}`].join('\n');
+ const res = await createBatchRoute(post(URL_BATCHES, { csv }, { 'x-organization-id': ORG_A }));
+ expect(res.status).toBe(422);
+ expect((await res.json()).details.errors[0].code).toBe('HOURS_RATE_MISMATCH');
+ });
+
+ it('rejects a file with a header but no rows', async () => {
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: HEADER }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(422);
+ });
+});
+
+describe('POST /api/payroll/batches β idempotency', () => {
+ beforeEach(() => signedInAs('u_admin_a', addr('adminA')));
+
+ const KEY = 'idem-sept-2026';
+
+ it('replays the first outcome for a repeated request (double-click, retry)', async () => {
+ const headers = { 'x-organization-id': ORG_A, 'idempotency-key': KEY };
+ const first = await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+ const second = await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+
+ expect(first.status).toBe(201);
+ expect(second.status).toBe(200);
+ const a = await first.json();
+ const b = await second.json();
+ expect(b.created).toBe(false);
+ expect(b.batch.id).toBe(a.batch.id);
+
+ // The property that matters: three payments, not six.
+ expect(db.__tables.payrollBatch.rows).toHaveLength(1);
+ expect(db.__tables.payment.rows).toHaveLength(3);
+ });
+
+ it('is deterministic across several concurrent identical requests', async () => {
+ const headers = { 'x-organization-id': ORG_A, 'idempotency-key': KEY };
+ const results = await Promise.all([
+ createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers)),
+ createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers)),
+ createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers)),
+ ]);
+ const bodies = await Promise.all(results.map((r) => r.json()));
+ const ids = new Set(bodies.map((b) => b.batch.id));
+
+ expect(ids.size).toBe(1);
+ expect(bodies.filter((b) => b.created)).toHaveLength(1);
+ expect(db.__tables.payrollBatch.rows).toHaveLength(1);
+ expect(db.__tables.payment.rows).toHaveLength(3);
+ });
+
+ it('refuses the same key with a different payload instead of replaying the wrong batch', async () => {
+ const headers = { 'x-organization-id': ORG_A, 'idempotency-key': KEY };
+ await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+
+ const differentCsv = [HEADER, `${addr('dave')},500,USDC,25,20,${PERIOD}`].join('\n');
+ const res = await createBatchRoute(post(URL_BATCHES, { csv: differentCsv }, headers));
+
+ expect(res.status).toBe(409);
+ expect((await res.json()).code).toBe('IDEMPOTENCY_KEY_REUSED');
+ // Neither payroll was altered, and no second one was created.
+ expect(db.__tables.payrollBatch.rows).toHaveLength(1);
+ expect(db.__tables.payment.rows).toHaveLength(3);
+ });
+
+ it('does not tie together two deliberate uploads without a key', async () => {
+ const headers = { 'x-organization-id': ORG_A };
+ await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+ await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+ expect(db.__tables.payrollBatch.rows).toHaveLength(2);
+ expect(db.__tables.payment.rows).toHaveLength(6);
+ });
+
+ it('warns about a byte-identical recent upload rather than blocking it', async () => {
+ const headers = { 'x-organization-id': ORG_A };
+ await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+ const res = await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, headers));
+ const body = await res.json();
+ expect(res.status).toBe(201);
+ expect(body.possibleDuplicateOf?.reference).toBe('CF-00001');
+ });
+
+ it('scopes an idempotency key to the organization', async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A, 'idempotency-key': KEY }),
+ );
+ signedInAs('u_admin_b', addr('adminB'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_B, 'idempotency-key': KEY }),
+ );
+ expect(res.status).toBe(201);
+ expect((await res.json()).created).toBe(true);
+ });
+});
+
+describe('POST /api/payroll/batches/validate', () => {
+ const URL_VALIDATE = `${URL_BATCHES}/validate`;
+ beforeEach(() => signedInAs('u_admin_a', addr('adminA')));
+
+ it('reports a valid file without creating anything', async () => {
+ const res = await validateCsvRoute(
+ post(URL_VALIDATE, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(200);
+ const body = await res.json();
+ expect(body.valid).toBe(true);
+ expect(body.summary.paymentsToCreate).toBe(3);
+ expect(body.summary.totalHours).toBe('140');
+
+ // The whole point of the endpoint: no writes at all.
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ expect(db.__tables.payment.rows).toHaveLength(0);
+ expect(db.__tables.auditEvent.rows).toHaveLength(0);
+ });
+
+ it('returns 200 with structured row errors for an invalid file', async () => {
+ const csv = [HEADER, `BADADDRESS,100,USDC,10,10,${PERIOD}`].join('\n');
+ const res = await validateCsvRoute(
+ post(URL_VALIDATE, { csv }, { 'x-organization-id': ORG_A }),
+ );
+ // The CALL succeeded; the file is what is wrong. A reviewer iterating on a
+ // preview is not making failing requests.
+ expect(res.status).toBe(200);
+ const body = await res.json();
+ expect(body.valid).toBe(false);
+ expect(body.errors[0]).toMatchObject({ row: 2, field: 'recipient', code: 'INVALID_ADDRESS' });
+ });
+
+ it('is safe to call repeatedly', async () => {
+ const req = () =>
+ validateCsvRoute(post(URL_VALIDATE, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }));
+ for (let i = 0; i < 5; i++) expect((await req()).status).toBe(200);
+ expect(db.__tables.payrollBatch.rows).toHaveLength(0);
+ expect(db.__tables.payment.rows).toHaveLength(0);
+ });
+
+ it('reports an unconfigured settlement asset without failing the call', async () => {
+ delete process.env.NEXT_PUBLIC_STELLAR_TOKEN_ID;
+ const res = await validateCsvRoute(
+ post(URL_VALIDATE, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ const body = await res.json();
+ expect(body.asset.configured).toBe(false);
+ expect(body.asset.contractId).toBeNull();
+ });
+
+ it('refuses an unauthenticated caller', async () => {
+ mockUser.mockResolvedValue(null);
+ const res = await validateCsvRoute(post(URL_VALIDATE, { csv: GOOD_CSV }));
+ expect(res.status).toBe(401);
+ });
+});
+
+describe('GET /api/payroll/batches', () => {
+ beforeEach(async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }));
+ signedInAs('u_admin_b', addr('adminB'));
+ await createBatchRoute(post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_B }));
+ });
+
+ it('lists only the caller organization batches', async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ const res = await listBatchesRoute(get(URL_BATCHES, { 'x-organization-id': ORG_A }));
+ expect(res.status).toBe(200);
+ const body = await res.json();
+ expect(body.batches).toHaveLength(1);
+ expect(body.batches[0].paymentCount).toBe(3);
+ expect(body.batches[0].totalBaseUnits).toBe('28600000000');
+ // Standing is derived on read, not stored.
+ expect(body.batches[0].headline).toBeDefined();
+ });
+
+ it('rejects an unknown query parameter', async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ const res = await listBatchesRoute(
+ get(`${URL_BATCHES}?sneaky=1`, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(400);
+ });
+
+ it('rejects a limit outside the allowed range', async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ const res = await listBatchesRoute(
+ get(`${URL_BATCHES}?limit=5000`, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(400);
+ });
+});
+
+describe('GET /api/payroll/batches/:id', () => {
+ let batchId: string;
+
+ beforeEach(async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ batchId = (await res.json()).batch.id;
+ });
+
+ it('returns the batch with its payments and derived standing', async () => {
+ const res = await getBatchRoute(get(`${URL_BATCHES}/${batchId}`, { 'x-organization-id': ORG_A }), {
+ params: { id: batchId },
+ });
+ expect(res.status).toBe(200);
+ const { batch } = await res.json();
+ expect(batch.paymentCount).toBe(3);
+ expect(batch.payments).toHaveLength(3);
+ expect(batch.standing.totalAmountBaseUnits).toBe('28600000000');
+ expect(batch.standing.paidAmountBaseUnits).toBe('0');
+ // No transaction link on a payment that cannot have one.
+ expect(batch.payments.every((p: any) => p.transactionHash === null)).toBe(true);
+ });
+
+ it('returns a non-enumerating 404 for another organization batch', async () => {
+ signedInAs('u_admin_b', addr('adminB'));
+ const res = await getBatchRoute(get(`${URL_BATCHES}/${batchId}`, { 'x-organization-id': ORG_B }), {
+ params: { id: batchId },
+ });
+ expect(res.status).toBe(404);
+ // Identical to a batch that truly does not exist, so an id cannot be probed.
+ const absent = await getBatchRoute(
+ get(`${URL_BATCHES}/batnope`, { 'x-organization-id': ORG_B }),
+ { params: { id: 'batnope' } },
+ );
+ expect(absent.status).toBe(404);
+ expect(await res.json()).toEqual(await absent.json());
+ });
+});
+
+describe('POST /api/payroll/batches/:id/validate', () => {
+ let batchId: string;
+
+ beforeEach(async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ batchId = (await res.json()).batch.id;
+ });
+
+ it('confirms a sound draft without changing anything', async () => {
+ const before = snapshotRows(db.__tables.payment.rows);
+ const res = await revalidateRoute(
+ post(`${URL_BATCHES}/${batchId}/validate`, {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(200);
+ expect((await res.json()).valid).toBe(true);
+ expect(snapshotRows(db.__tables.payment.rows)).toBe(before);
+ });
+
+ it('reports a batch denominated in an asset no longer settleable', async () => {
+ // Configuration moved under the batch, as it would if the operator switched
+ // the settlement asset between drafting and funding.
+ process.env.NEXT_PUBLIC_SETTLEMENT_ASSET_CODE = 'EURC';
+ const res = await revalidateRoute(
+ post(`${URL_BATCHES}/${batchId}/validate`, {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ const body = await res.json();
+ expect(body.valid).toBe(false);
+ expect(body.errors.some((e: any) => e.code === 'ASSET_NOT_SETTLEABLE')).toBe(true);
+ });
+
+ it('reports an unconfigured settlement contract', async () => {
+ delete process.env.NEXT_PUBLIC_STELLAR_TOKEN_ID;
+ const res = await revalidateRoute(
+ post(`${URL_BATCHES}/${batchId}/validate`, {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ const body = await res.json();
+ expect(body.errors.some((e: any) => e.code === 'SETTLEMENT_ASSET_UNCONFIGURED')).toBe(true);
+ });
+
+ it('gives another organization a non-enumerating 404', async () => {
+ signedInAs('u_admin_b', addr('adminB'));
+ const res = await revalidateRoute(
+ post(`${URL_BATCHES}/${batchId}/validate`, {}, { 'x-organization-id': ORG_B }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(404);
+ });
+});
+
+describe('POST /api/payroll/batches/:id/approve', () => {
+ let batchId: string;
+ let paymentIds: string[];
+
+ beforeEach(async () => {
+ signedInAs('u_admin_a', addr('adminA'));
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ batchId = (await res.json()).batch.id;
+ paymentIds = db.__tables.payment.rows.map((p) => p.id);
+ });
+
+ const approveUrl = () => `${URL_BATCHES}/${batchId}/approve`;
+
+ it('derives the approval role from membership, ignoring a client-sent role', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ // `role` is not in the schema, so sending it is refused outright rather than
+ // quietly dropped β a manager cannot nominate themselves as finance.
+ const res = await approveBatchRoute(
+ post(approveUrl(), { role: 'FINANCE' }, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(400);
+ expect(JSON.stringify((await res.json()).details)).toContain('UNKNOWN_FIELD');
+ expect(db.__tables.approval.rows).toHaveLength(0);
+ });
+
+ it('records a MANAGER approval on every payment in the batch', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(200);
+ const body = await res.json();
+ expect(body.approvalRole).toBe(OrgRole.MANAGER);
+ expect(body.recorded).toBe(3);
+ expect(body.failed).toBe(0);
+
+ expect(db.__tables.approval.rows).toHaveLength(3);
+ expect(db.__tables.approval.rows.every((a) => a.role === OrgRole.MANAGER)).toBe(true);
+ expect(db.__tables.approval.rows.every((a) => a.orgId === ORG_A)).toBe(true);
+ expect(
+ db.__tables.approval.rows.every((a) => a.decision === ApprovalDecision.APPROVED),
+ ).toBe(true);
+ });
+
+ it('records an audit event per approval', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ await approveBatchRoute(post(approveUrl(), {}, { 'x-organization-id': ORG_A }), {
+ params: { id: batchId },
+ });
+ const granted = db.__tables.auditEvent.rows.filter((e) => e.type === 'approval.granted');
+ expect(granted).toHaveLength(3);
+ expect(granted.every((e) => e.actorAddress === addr('managerA'))).toBe(true);
+ });
+
+ it('is idempotent: a repeated approval records nothing further', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ const headers = { 'x-organization-id': ORG_A };
+ await approveBatchRoute(post(approveUrl(), {}, headers), { params: { id: batchId } });
+ const res = await approveBatchRoute(post(approveUrl(), {}, headers), {
+ params: { id: batchId },
+ });
+ const body = await res.json();
+
+ expect(res.status).toBe(200);
+ expect(body.recorded).toBe(0);
+ expect(body.alreadyRecorded).toBe(3);
+ // One decision per role per payment. A second manager approval is a
+ // duplicate, not a new fact.
+ expect(db.__tables.approval.rows).toHaveLength(3);
+ });
+
+ it('keeps manager and finance as two distinct decisions', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ await approveBatchRoute(post(approveUrl(), {}, { 'x-organization-id': ORG_A }), {
+ params: { id: batchId },
+ });
+ signedInAs('u_finance_a', addr('financeA'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ const body = await res.json();
+
+ expect(body.approvalRole).toBe(OrgRole.FINANCE);
+ expect(body.recorded).toBe(3);
+ expect(db.__tables.approval.rows).toHaveLength(6);
+ const roles = new Set(db.__tables.approval.rows.map((a) => a.role));
+ expect(roles).toEqual(new Set([OrgRole.MANAGER, OrgRole.FINANCE]));
+ // Two distinct wallets, never one standing in for both.
+ const wallets = new Set(db.__tables.approval.rows.map((a) => a.actorAddress));
+ expect(wallets.size).toBe(2);
+ });
+
+ it('refuses to let one wallet supply both halves of the gate', async () => {
+ // An ADMIN holds both permissions, so separation of duties has to be enforced
+ // by the approval logic rather than by the permission check.
+ signedInAs('u_admin_a', addr('adminA'));
+ const headers = { 'x-organization-id': ORG_A };
+ const first = await approveBatchRoute(post(approveUrl(), {}, headers), {
+ params: { id: batchId },
+ });
+ expect((await first.json()).recorded).toBe(3);
+
+ const second = await approveBatchRoute(post(approveUrl(), {}, headers), {
+ params: { id: batchId },
+ });
+ const body = await second.json();
+ // The second attempt finds its own role already recorded and adds nothing.
+ expect(body.recorded).toBe(0);
+ expect(db.__tables.approval.rows).toHaveLength(3);
+ });
+
+ it('refuses a role that cannot approve at all', async () => {
+ signedInAs('u_viewer_a', addr('viewerA'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(403);
+ expect(db.__tables.approval.rows).toHaveLength(0);
+ });
+
+ it('does not approve another organization batch', async () => {
+ signedInAs('u_admin_b', addr('adminB'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': ORG_B }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(404);
+ expect(db.__tables.approval.rows).toHaveLength(0);
+ });
+
+ it('approves only the named payments', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), { paymentIds: [paymentIds[0]] }, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect((await res.json()).recorded).toBe(1);
+ expect(db.__tables.approval.rows).toHaveLength(1);
+ expect(db.__tables.approval.rows[0].paymentId).toBe(paymentIds[0]);
+ });
+
+ it('refuses a payment id that is not in this batch', async () => {
+ signedInAs('u_manager_a', addr('managerA'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), { paymentIds: ['payelsewhere'] }, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(404);
+ expect(db.__tables.approval.rows).toHaveLength(0);
+ });
+
+ it('reports a conflict when no payment is awaiting a decision', async () => {
+ for (const p of db.__tables.payment.rows) p.state = PaymentState.PAID;
+ signedInAs('u_manager_a', addr('managerA'));
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': ORG_A }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(409);
+ expect((await res.json()).code).toBe('STATE_CONFLICT');
+ expect(db.__tables.approval.rows).toHaveLength(0);
+ });
+
+ it('never changes payment state, settlement hash or amount', async () => {
+ const snapshot = () =>
+ db.__tables.payment.rows.map((p) => ({
+ state: p.state,
+ settlementTxHash: p.settlementTxHash ?? null,
+ amount: p.amountBaseUnits,
+ recipient: p.recipientAddress,
+ }));
+ const before = snapshot();
+ signedInAs('u_manager_a', addr('managerA'));
+ await approveBatchRoute(post(approveUrl(), {}, { 'x-organization-id': ORG_A }), {
+ params: { id: batchId },
+ });
+ // Recording an approval is not settlement. Nothing financial moves here.
+ expect(snapshot()).toEqual(before);
+ expect(snapshot().every((p) => p.state === PaymentState.DRAFT)).toBe(true);
+ });
+});
+
+describe('error sanitization', () => {
+ beforeEach(() => signedInAs('u_admin_a', addr('adminA')));
+
+ it('returns an opaque 500 and leaks no internals when a write fails', async () => {
+ const spy = vi.spyOn(console, 'error').mockImplementation(() => {});
+ db.__failOn('payrollBatch', 'create', 1);
+
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: GOOD_CSV }, { 'x-organization-id': ORG_A }),
+ );
+ expect(res.status).toBe(500);
+ const raw = JSON.stringify(await res.json());
+
+ // None of this may cross the boundary.
+ expect(raw).not.toContain('fake-db');
+ expect(raw).not.toContain('payrollBatch');
+ expect(raw).not.toContain('prisma');
+ expect(raw).not.toMatch(/at \w+ \(/);
+ expect(db.__tables.payment.rows).toHaveLength(0);
+ spy.mockRestore();
+ });
+});
diff --git a/src/app/api/payroll/__tests__/bulk-pay.integration.test.ts b/src/app/api/payroll/__tests__/bulk-pay.integration.test.ts
new file mode 100644
index 0000000..ca23a3c
--- /dev/null
+++ b/src/app/api/payroll/__tests__/bulk-pay.integration.test.ts
@@ -0,0 +1,673 @@
+/**
+ * Bulk Pay against real PostgreSQL.
+ *
+ * The same route handlers the unit suite exercises, but with the real Prisma client
+ * and a real database: composite foreign keys, unique indexes, bigint columns and
+ * genuine transaction isolation.
+ *
+ * Only authentication is substituted. Wallet challenge/signature verification has
+ * its own tests and cannot be performed headlessly; everything downstream of the
+ * authenticated identity β membership, role, permission, tenant scope β is resolved
+ * from this database on every request, exactly as in production.
+ */
+
+import { describe, it, expect, beforeAll, beforeEach, afterAll, vi } from 'vitest';
+import { OrgRole, PaymentState, ApprovalDecision } from '@prisma/client';
+
+vi.mock('@/lib/auth', () => ({ getUserFromRequest: vi.fn() }));
+
+import prisma from '@/lib/db/prisma';
+import { getUserFromRequest } from '@/lib/auth';
+import { __resetRateLimiter } from '@/lib/ratelimit';
+import { POST as createBatchRoute, GET as listBatchesRoute } from '../batches/route';
+import { POST as validateCsvRoute } from '../batches/validate/route';
+import { GET as getBatchRoute } from '../batches/[id]/route';
+import { POST as revalidateRoute } from '../batches/[id]/validate/route';
+import { POST as approveBatchRoute } from '../batches/[id]/approve/route';
+import {
+ assertLocalDatabase,
+ resetDatabase,
+ seedOrganization,
+ seedWorker,
+ payeeWallet,
+ payrollCsv,
+ type SeededOrg,
+} from '@/lib/db/__tests__/helpers';
+
+assertLocalDatabase();
+
+const mockUser = getUserFromRequest as unknown as ReturnType;
+const URL_BATCHES = 'https://app.test/api/payroll/batches';
+
+let orgA: SeededOrg;
+let orgB: SeededOrg;
+
+/** Three contractors whose rows satisfy hours x rate == amount exactly. */
+const THREE_CONTRACTORS = payrollCsv([
+ { tag: 'alice', amount: '1000', hours: 40, rate: '25' },
+ { tag: 'bob', amount: '1600', hours: 80, rate: '20' },
+ { tag: 'carol', amount: '260', hours: 20, rate: '13' },
+]);
+const THREE_TOTAL = 28_600_000_000n; // 2,860.00 USDC in base units
+
+function signedInAs(org: SeededOrg, role: OrgRole) {
+ const m = org.members[role];
+ mockUser.mockResolvedValue({ userId: m.userId, walletAddress: m.wallet, role: 'EMPLOYEE' });
+ return m;
+}
+
+function post(url: string, body: unknown, headers: Record = {}): any {
+ return new Request(url, {
+ method: 'POST',
+ headers: { 'content-type': 'application/json', ...headers },
+ body: JSON.stringify(body),
+ });
+}
+
+function get(url: string, headers: Record = {}): any {
+ return new Request(url, { method: 'GET', headers });
+}
+
+beforeAll(async () => {
+ process.env.NEXT_PUBLIC_STELLAR_TOKEN_ID =
+ 'CBW2ZKFBHLHNNVCZ7JP4AXHQOOC3S6NLAMORXOAIWQNWMKUVJS743Q5M';
+ process.env.NEXT_PUBLIC_SETTLEMENT_ASSET_CODE = 'USDC';
+ await prisma.$connect();
+});
+
+afterAll(async () => {
+ await prisma.$disconnect();
+});
+
+beforeEach(async () => {
+ vi.clearAllMocks();
+ __resetRateLimiter();
+ await resetDatabase(prisma);
+ orgA = await seedOrganization(prisma, 'orga');
+ orgB = await seedOrganization(prisma, 'orgb');
+});
+
+async function createThreePaymentBatch(org: SeededOrg, headers: Record = {}) {
+ signedInAs(org, OrgRole.ADMIN);
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: THREE_CONTRACTORS, filename: 'september.csv' }, {
+ 'x-organization-id': org.orgId,
+ ...headers,
+ }),
+ );
+ const body = await res.json();
+ return { res, body };
+}
+
+// ---------------------------------------------------------------------------
+// The realistic path: CSV -> parser -> validation -> batch -> payments -> audit
+// ---------------------------------------------------------------------------
+
+describe('CSV to persisted payroll', () => {
+ it('creates one PayrollBatch and exactly three Payment rows', async () => {
+ const { res, body } = await createThreePaymentBatch(orgA);
+ expect(res.status).toBe(201);
+ expect(body.created).toBe(true);
+
+ // Read back from the database, not from the response.
+ const batches = await prisma.payrollBatch.findMany({ where: { orgId: orgA.orgId } });
+ expect(batches).toHaveLength(1);
+ expect(batches[0].reference).toBe('CF-00001');
+ expect(batches[0].sourceFilename).toBe('september.csv');
+ expect(batches[0].sourceRowCount).toBe(3);
+ expect(batches[0].sourceChecksum).toMatch(/^[0-9a-f]{64}$/);
+
+ const payments = await prisma.payment.findMany({
+ where: { orgId: orgA.orgId },
+ orderBy: { amountBaseUnits: 'asc' },
+ });
+ // Three payees, three rows. No aggregate shortcut.
+ expect(payments).toHaveLength(3);
+ expect(payments.every((p) => p.batchId === batches[0].id)).toBe(true);
+ expect(payments.every((p) => p.state === PaymentState.DRAFT)).toBe(true);
+ expect(payments.every((p) => p.orgId === orgA.orgId)).toBe(true);
+ });
+
+ it('persists exact bigint amounts, rates and hours', async () => {
+ await createThreePaymentBatch(orgA);
+ const payments = await prisma.payment.findMany({
+ where: { orgId: orgA.orgId },
+ orderBy: { amountBaseUnits: 'asc' },
+ });
+
+ expect(payments.map((p) => p.amountBaseUnits)).toEqual([
+ 2_600_000_000n,
+ 10_000_000_000n,
+ 16_000_000_000n,
+ ]);
+ expect(payments.map((p) => p.rateBaseUnits)).toEqual([
+ 130_000_000n,
+ 250_000_000n,
+ 200_000_000n,
+ ]);
+ expect(payments.map((p) => p.hours)).toEqual([20n, 40n, 80n]);
+
+ // The contract's invariant, as actually stored.
+ for (const p of payments) {
+ expect(p.hours * p.rateBaseUnits).toBe(p.amountBaseUnits);
+ }
+
+ const sum = payments.reduce((a, p) => a + p.amountBaseUnits, 0n);
+ expect(sum).toBe(THREE_TOTAL);
+ });
+
+ it('links a payee with an existing worker record and leaves the rest unlinked', async () => {
+ const worker = await seedWorker(prisma, orgA.orgId, 'alice');
+ const { body } = await createThreePaymentBatch(orgA);
+ expect(body.batch.unlinkedRecipients).toBe(2);
+
+ const linked = await prisma.payment.findFirstOrThrow({
+ where: { orgId: orgA.orgId, recipientAddress: worker.walletAddress },
+ select: { workerId: true },
+ });
+ expect(linked.workerId).toBe(worker.id);
+
+ const unlinked = await prisma.payment.count({
+ where: { orgId: orgA.orgId, workerId: null },
+ });
+ expect(unlinked).toBe(2);
+ });
+
+ it('writes one batch-level audit event carrying money as a string', async () => {
+ await createThreePaymentBatch(orgA);
+ const events = await prisma.auditEvent.findMany({ where: { orgId: orgA.orgId } });
+ expect(events).toHaveLength(1);
+ expect(events[0].type).toBe('payroll.batch.created');
+ const meta = events[0].metadata as any;
+ expect(meta.paymentCount).toBe(3);
+ expect(meta.totalBaseUnits).toBe(THREE_TOTAL.toString());
+ expect(typeof meta.totalBaseUnits).toBe('string');
+ });
+
+ it('stores a neutralized reference so a formula cannot reach a spreadsheet', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const csv = [
+ 'recipient,amount,asset,hours,rate,period_start,period_end,reference',
+ `${payeeWallet('inj')},100,USDC,10,10,2026-09-01,2026-09-15,"=HYPERLINK(""http://evil"",""click"")"`,
+ ].join('\n');
+ await createBatchRoute(post(URL_BATCHES, { csv }, { 'x-organization-id': orgA.orgId }));
+
+ const payment = await prisma.payment.findFirstOrThrow({
+ where: { orgId: orgA.orgId },
+ select: { sourceReference: true },
+ });
+ expect(payment.sourceReference?.startsWith("'=")).toBe(true);
+ });
+
+ it('writes nothing at all for an invalid file', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const csv = payrollCsv([{ tag: 'bad', amount: '1000', hours: 40, rate: '20' }]);
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv }, { 'x-organization-id': orgA.orgId }),
+ );
+ expect(res.status).toBe(422);
+ expect((await res.json()).details.errors[0].code).toBe('HOURS_RATE_MISMATCH');
+
+ expect(await prisma.payrollBatch.count()).toBe(0);
+ expect(await prisma.payment.count()).toBe(0);
+ expect(await prisma.auditEvent.count()).toBe(0);
+ });
+
+ it('validates without writing, repeatedly', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ for (let i = 0; i < 3; i++) {
+ const res = await validateCsvRoute(
+ post(`${URL_BATCHES}/validate`, { csv: THREE_CONTRACTORS }, {
+ 'x-organization-id': orgA.orgId,
+ }),
+ );
+ expect(res.status).toBe(200);
+ expect((await res.json()).valid).toBe(true);
+ }
+ expect(await prisma.payrollBatch.count()).toBe(0);
+ expect(await prisma.payment.count()).toBe(0);
+ expect(await prisma.auditEvent.count()).toBe(0);
+ });
+});
+
+// ---------------------------------------------------------------------------
+// Transactional integrity (item 9)
+// ---------------------------------------------------------------------------
+
+describe('Transactional integrity', () => {
+ it('leaves zero partial records when a payment write fails mid-batch', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const spy = vi.spyOn(console, 'error').mockImplementation(() => {});
+
+ // The fault is injected INSIDE the real transaction, so PostgreSQL performs the
+ // rollback. Spying on `prisma.payment.create` would not work: the service writes
+ // through the transaction client, which is a different object β and a test that
+ // quietly intercepted nothing would have reported success.
+ const realTransaction = prisma.$transaction.bind(prisma);
+ const txSpy = vi.spyOn(prisma, '$transaction').mockImplementation(((fn: any, opts: any) =>
+ realTransaction(async (tx: any) => {
+ let writes = 0;
+ const proxied = new Proxy(tx, {
+ get(target: any, prop: string | symbol) {
+ if (prop !== 'payment') return target[prop];
+ return {
+ create: (args: any) => {
+ writes += 1;
+ // Fail the THIRD row, so the batch and two payments are already
+ // written inside the transaction when it breaks.
+ if (writes === 3) return Promise.reject(new Error('simulated failure on row 3'));
+ return target.payment.create(args);
+ },
+ };
+ },
+ });
+ return fn(proxied);
+ }, opts)) as any);
+
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: THREE_CONTRACTORS }, { 'x-organization-id': orgA.orgId }),
+ );
+ txSpy.mockRestore();
+
+ expect(res.status).toBe(500);
+ // The client learns nothing about why.
+ const body = JSON.stringify(await res.json());
+ expect(body).not.toContain('simulated');
+ expect(body).not.toContain('payment');
+
+ // Real PostgreSQL rollback. A batch that looked complete while missing its third
+ // payment would quietly underpay a contractor.
+ expect(await prisma.payrollBatch.count()).toBe(0);
+ expect(await prisma.payment.count()).toBe(0);
+ expect(await prisma.auditEvent.count()).toBe(0);
+
+ spy.mockRestore();
+ });
+});
+
+// ---------------------------------------------------------------------------
+// Concurrency and idempotency (items 5C, 5D, 10)
+// ---------------------------------------------------------------------------
+
+describe('Idempotency against the real unique index', () => {
+ const KEY = 'integration-key-september';
+
+ it('C. three concurrent identical requests produce exactly one batch', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const headers = { 'x-organization-id': orgA.orgId, 'idempotency-key': KEY };
+
+ const responses = await Promise.all([
+ createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers)),
+ createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers)),
+ createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers)),
+ ]);
+ const bodies = await Promise.all(responses.map((r) => r.json()));
+
+ // Exactly one request created it; the rest replayed the original.
+ expect(bodies.filter((b) => b.created === true)).toHaveLength(1);
+ expect(bodies.filter((b) => b.created === false)).toHaveLength(2);
+ expect(new Set(bodies.map((b) => b.batch.id)).size).toBe(1);
+
+ // The database is the authority here, not the pre-check.
+ expect(await prisma.payrollBatch.count()).toBe(1);
+ expect(await prisma.payment.count()).toBe(3);
+
+ // Every replay reports the same money as the original.
+ for (const b of bodies) expect(b.batch.totalBaseUnits).toBe(THREE_TOTAL.toString());
+ });
+
+ it('replays a sequential retry rather than creating a second payroll', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const headers = { 'x-organization-id': orgA.orgId, 'idempotency-key': KEY };
+ const first = await createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers));
+ const second = await createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers));
+
+ expect(first.status).toBe(201);
+ expect(second.status).toBe(200);
+ expect((await second.json()).batch.id).toBe((await first.json()).batch.id);
+ expect(await prisma.payment.count()).toBe(3);
+ });
+
+ it('D. refuses the same key with a different payload', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const headers = { 'x-organization-id': orgA.orgId, 'idempotency-key': KEY };
+ await createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers));
+
+ const different = payrollCsv([{ tag: 'dave', amount: '500', hours: 25, rate: '20' }]);
+ const res = await createBatchRoute(post(URL_BATCHES, { csv: different }, headers));
+
+ expect(res.status).toBe(409);
+ expect((await res.json()).code).toBe('IDEMPOTENCY_KEY_REUSED');
+ // The original payroll is untouched and no second one exists.
+ expect(await prisma.payrollBatch.count()).toBe(1);
+ expect(await prisma.payment.count()).toBe(3);
+ });
+
+ it('keeps keys distinct per organization', async () => {
+ const headers = (org: SeededOrg) => ({
+ 'x-organization-id': org.orgId,
+ 'idempotency-key': KEY,
+ });
+ signedInAs(orgA, OrgRole.ADMIN);
+ await createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers(orgA)));
+ signedInAs(orgB, OrgRole.ADMIN);
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers(orgB)),
+ );
+ expect(res.status).toBe(201);
+ expect(await prisma.payrollBatch.count()).toBe(2);
+ });
+
+ it('allocates distinct sequential references under concurrency', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const headers = { 'x-organization-id': orgA.orgId };
+ // No idempotency key: three deliberate payrolls racing for a reference. The
+ // unique index on (orgId, reference) forces the retry path to resolve them.
+ const responses = await Promise.all([
+ createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers)),
+ createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers)),
+ createBatchRoute(post(URL_BATCHES, { csv: THREE_CONTRACTORS }, headers)),
+ ]);
+ const ok = responses.filter((r) => r.status === 201);
+ expect(ok).toHaveLength(3);
+
+ const refs = (await prisma.payrollBatch.findMany({ select: { reference: true } })).map(
+ (b) => b.reference,
+ );
+ expect(new Set(refs).size).toBe(3);
+ expect(await prisma.payment.count()).toBe(9);
+ });
+});
+
+// ---------------------------------------------------------------------------
+// Approval (item 13, partial β off-chain decision only)
+// ---------------------------------------------------------------------------
+
+describe('Approval against the real database', () => {
+ let batchId: string;
+
+ beforeEach(async () => {
+ const { body } = await createThreePaymentBatch(orgA);
+ batchId = body.batch.id;
+ });
+
+ const approveUrl = () => `${URL_BATCHES}/${batchId}/approve`;
+
+ it('records a manager decision per payment, with its tenant', async () => {
+ const manager = signedInAs(orgA, OrgRole.MANAGER);
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': orgA.orgId }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(200);
+ expect((await res.json()).recorded).toBe(3);
+
+ const approvals = await prisma.approval.findMany({ where: { orgId: orgA.orgId } });
+ expect(approvals).toHaveLength(3);
+ // The composite FK requires orgId; this is the write that previously failed.
+ expect(approvals.every((a) => a.orgId === orgA.orgId)).toBe(true);
+ expect(approvals.every((a) => a.role === OrgRole.MANAGER)).toBe(true);
+ expect(approvals.every((a) => a.decision === ApprovalDecision.APPROVED)).toBe(true);
+ expect(approvals.every((a) => a.actorAddress === manager.wallet)).toBe(true);
+
+ const audit = await prisma.auditEvent.findMany({
+ where: { orgId: orgA.orgId, type: 'approval.granted' },
+ });
+ expect(audit).toHaveLength(3);
+ });
+
+ it('records manager and finance as two distinct decisions by two wallets', async () => {
+ const manager = signedInAs(orgA, OrgRole.MANAGER);
+ await approveBatchRoute(post(approveUrl(), {}, { 'x-organization-id': orgA.orgId }), {
+ params: { id: batchId },
+ });
+ const finance = signedInAs(orgA, OrgRole.FINANCE);
+ await approveBatchRoute(post(approveUrl(), {}, { 'x-organization-id': orgA.orgId }), {
+ params: { id: batchId },
+ });
+
+ const approvals = await prisma.approval.findMany({ where: { orgId: orgA.orgId } });
+ expect(approvals).toHaveLength(6);
+ expect(new Set(approvals.map((a) => a.role))).toEqual(
+ new Set([OrgRole.MANAGER, OrgRole.FINANCE]),
+ );
+ expect(new Set(approvals.map((a) => a.actorAddress))).toEqual(
+ new Set([manager.wallet, finance.wallet]),
+ );
+ });
+
+ it('is idempotent, enforced by the unique index on (paymentId, role)', async () => {
+ signedInAs(orgA, OrgRole.MANAGER);
+ const headers = { 'x-organization-id': orgA.orgId };
+ await approveBatchRoute(post(approveUrl(), {}, headers), { params: { id: batchId } });
+ const again = await approveBatchRoute(post(approveUrl(), {}, headers), {
+ params: { id: batchId },
+ });
+ const body = await again.json();
+ expect(body.recorded).toBe(0);
+ expect(body.alreadyRecorded).toBe(3);
+ expect(await prisma.approval.count()).toBe(3);
+ });
+
+ it('does not let one wallet satisfy both halves of the gate', async () => {
+ // ADMIN holds both approval permissions, so only the approval logic stands
+ // between one wallet and a fully approved payroll.
+ signedInAs(orgA, OrgRole.ADMIN);
+ const headers = { 'x-organization-id': orgA.orgId };
+ await approveBatchRoute(post(approveUrl(), {}, headers), { params: { id: batchId } });
+ await approveBatchRoute(post(approveUrl(), {}, headers), { params: { id: batchId } });
+
+ const approvals = await prisma.approval.findMany();
+ expect(approvals).toHaveLength(3);
+ expect(new Set(approvals.map((a) => a.role))).toEqual(new Set([OrgRole.MANAGER]));
+ });
+
+ it('changes no payment state, amount, recipient or settlement hash', async () => {
+ const before = await prisma.payment.findMany({
+ where: { orgId: orgA.orgId },
+ orderBy: { id: 'asc' },
+ select: {
+ id: true,
+ state: true,
+ amountBaseUnits: true,
+ recipientAddress: true,
+ settlementTxHash: true,
+ settledAt: true,
+ },
+ });
+
+ signedInAs(orgA, OrgRole.MANAGER);
+ await approveBatchRoute(post(approveUrl(), {}, { 'x-organization-id': orgA.orgId }), {
+ params: { id: batchId },
+ });
+
+ const after = await prisma.payment.findMany({
+ where: { orgId: orgA.orgId },
+ orderBy: { id: 'asc' },
+ select: {
+ id: true,
+ state: true,
+ amountBaseUnits: true,
+ recipientAddress: true,
+ settlementTxHash: true,
+ settledAt: true,
+ },
+ });
+
+ // Recording an approval is not settlement. Nothing financial moves.
+ expect(after).toEqual(before);
+ expect(after.every((p) => p.state === PaymentState.DRAFT)).toBe(true);
+ expect(after.every((p) => p.settlementTxHash === null)).toBe(true);
+ });
+
+ it('refuses a role that cannot approve', async () => {
+ signedInAs(orgA, OrgRole.VIEWER);
+ const res = await approveBatchRoute(
+ post(approveUrl(), {}, { 'x-organization-id': orgA.orgId }),
+ { params: { id: batchId } },
+ );
+ expect(res.status).toBe(403);
+ expect(await prisma.approval.count()).toBe(0);
+ });
+});
+
+// ---------------------------------------------------------------------------
+// Tenant isolation (item 11)
+// ---------------------------------------------------------------------------
+
+describe('Tenant isolation through the API and the database', () => {
+ let batchA: string;
+ let batchB: string;
+
+ beforeEach(async () => {
+ batchA = (await createThreePaymentBatch(orgA)).body.batch.id;
+ batchB = (await createThreePaymentBatch(orgB)).body.batch.id;
+ });
+
+ it('lists only the caller own batches', async () => {
+ signedInAs(orgA, OrgRole.ADMIN);
+ const a = await listBatchesRoute(get(URL_BATCHES, { 'x-organization-id': orgA.orgId }));
+ const bodyA = await a.json();
+ expect(bodyA.batches).toHaveLength(1);
+ expect(bodyA.batches[0].id).toBe(batchA);
+
+ signedInAs(orgB, OrgRole.ADMIN);
+ const b = await listBatchesRoute(get(URL_BATCHES, { 'x-organization-id': orgB.orgId }));
+ const bodyB = await b.json();
+ expect(bodyB.batches).toHaveLength(1);
+ expect(bodyB.batches[0].id).toBe(batchB);
+
+ // Six payments exist; each organization sees three.
+ expect(await prisma.payment.count()).toBe(6);
+ });
+
+ it('gives a cross-tenant batch read the same 404 as a non-existent one', async () => {
+ signedInAs(orgB, OrgRole.ADMIN);
+ const foreign = await getBatchRoute(
+ get(`${URL_BATCHES}/${batchA}`, { 'x-organization-id': orgB.orgId }),
+ { params: { id: batchA } },
+ );
+ const absent = await getBatchRoute(
+ get(`${URL_BATCHES}/cmdoesnotexist000000000`, { 'x-organization-id': orgB.orgId }),
+ { params: { id: 'cmdoesnotexist000000000' } },
+ );
+ expect(foreign.status).toBe(404);
+ expect(absent.status).toBe(404);
+ // Byte-identical, so an id cannot be probed for existence.
+ expect(await foreign.json()).toEqual(await absent.json());
+ });
+
+ it('refuses to approve, re-validate or name another tenant batch', async () => {
+ signedInAs(orgB, OrgRole.MANAGER);
+ const approve = await approveBatchRoute(
+ post(`${URL_BATCHES}/${batchA}/approve`, {}, { 'x-organization-id': orgB.orgId }),
+ { params: { id: batchA } },
+ );
+ const revalidate = await revalidateRoute(
+ post(`${URL_BATCHES}/${batchA}/validate`, {}, { 'x-organization-id': orgB.orgId }),
+ { params: { id: batchA } },
+ );
+ expect(approve.status).toBe(404);
+ expect(revalidate.status).toBe(404);
+ expect(await prisma.approval.count()).toBe(0);
+ });
+
+ it('refuses to act in an organization the caller does not belong to', async () => {
+ // Authenticated as an org B member, naming org A.
+ signedInAs(orgB, OrgRole.ADMIN);
+ const res = await createBatchRoute(
+ post(URL_BATCHES, { csv: THREE_CONTRACTORS }, { 'x-organization-id': orgA.orgId }),
+ );
+ expect(res.status).toBe(404);
+ expect(await prisma.payrollBatch.count({ where: { orgId: orgA.orgId } })).toBe(1);
+ });
+
+ it('isolates workers, projects, audit events and findings by tenant', async () => {
+ await seedWorker(prisma, orgA.orgId, 'wa');
+ await seedWorker(prisma, orgB.orgId, 'wb');
+ await prisma.project.create({ data: { orgId: orgA.orgId, code: 'PA', name: 'A' } });
+ await prisma.project.create({ data: { orgId: orgB.orgId, code: 'PB', name: 'B' } });
+ const paymentA = await prisma.payment.findFirstOrThrow({
+ where: { orgId: orgA.orgId },
+ select: { id: true },
+ });
+ await prisma.reconciliationFinding.create({
+ data: {
+ orgId: orgA.orgId,
+ paymentId: paymentA.id,
+ kind: 'ASSET_MISMATCH',
+ detail: 'fixture',
+ severity: 'HIGH',
+ },
+ });
+
+ for (const [org, other] of [
+ [orgA, orgB],
+ [orgB, orgA],
+ ] as const) {
+ const scoped = { orgId: org.orgId };
+ expect(await prisma.worker.count({ where: scoped })).toBe(1);
+ expect(await prisma.project.count({ where: scoped })).toBe(1);
+ expect(await prisma.payment.count({ where: scoped })).toBe(3);
+ // And nothing of the other tenant's leaks into the same filter.
+ const workers = await prisma.worker.findMany({ where: scoped });
+ expect(workers.every((w) => w.orgId !== other.orgId)).toBe(true);
+ }
+
+ expect(await prisma.reconciliationFinding.count({ where: { orgId: orgB.orgId } })).toBe(0);
+ expect(await prisma.reconciliationFinding.count({ where: { orgId: orgA.orgId } })).toBe(1);
+ });
+});
+
+// ---------------------------------------------------------------------------
+// Reads and re-validation
+// ---------------------------------------------------------------------------
+
+describe('Batch reads', () => {
+ it('derives standing from the payments on every read', async () => {
+ const { body } = await createThreePaymentBatch(orgA);
+ signedInAs(orgA, OrgRole.ADMIN);
+
+ const res = await getBatchRoute(
+ get(`${URL_BATCHES}/${body.batch.id}`, { 'x-organization-id': orgA.orgId }),
+ { params: { id: body.batch.id } },
+ );
+ const { batch } = await res.json();
+
+ expect(batch.paymentCount).toBe(3);
+ expect(batch.standing.totalAmountBaseUnits).toBe(THREE_TOTAL.toString());
+ expect(batch.standing.paidAmountBaseUnits).toBe('0');
+ expect(batch.payments.every((p: any) => p.transactionHash === null)).toBe(true);
+
+ // There is no stored status column for the standing to drift from.
+ const columns = await prisma.$queryRawUnsafe<{ column_name: string }[]>(
+ `SELECT column_name FROM information_schema.columns
+ WHERE table_name = 'PayrollBatch' AND column_name IN ('status','state')`,
+ );
+ expect(columns).toHaveLength(0);
+ });
+
+ it('reports a draft whose asset is no longer settleable', async () => {
+ const { body } = await createThreePaymentBatch(orgA);
+ signedInAs(orgA, OrgRole.ADMIN);
+ process.env.NEXT_PUBLIC_SETTLEMENT_ASSET_CODE = 'EURC';
+ try {
+ const res = await revalidateRoute(
+ post(`${URL_BATCHES}/${body.batch.id}/validate`, {}, {
+ 'x-organization-id': orgA.orgId,
+ }),
+ { params: { id: body.batch.id } },
+ );
+ const report = await res.json();
+ expect(report.valid).toBe(false);
+ expect(report.errors.some((e: any) => e.code === 'ASSET_NOT_SETTLEABLE')).toBe(true);
+ } finally {
+ process.env.NEXT_PUBLIC_SETTLEMENT_ASSET_CODE = 'USDC';
+ }
+
+ // A read-only check: the payments are untouched.
+ const payments = await prisma.payment.findMany({ where: { orgId: orgA.orgId } });
+ expect(payments.every((p) => p.assetCode === 'USDC')).toBe(true);
+ expect(payments.every((p) => p.state === PaymentState.DRAFT)).toBe(true);
+ });
+});
diff --git a/src/app/api/payroll/batches/[id]/approve/route.ts b/src/app/api/payroll/batches/[id]/approve/route.ts
new file mode 100644
index 0000000..3fd3c19
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/approve/route.ts
@@ -0,0 +1,69 @@
+/**
+ * POST /api/payroll/batches/:id/approve β record the caller's approval
+ *
+ * The request does NOT say which role is approving. That is derived from the
+ * caller's membership, because a body-supplied role would let one manager send
+ * `{"role":"FINANCE"}` and satisfy both halves of the dual-approval gate alone β
+ * exactly what the contract refuses with SignersNotDistinct.
+ *
+ * Nor does the request name a destination state. This records an off-chain
+ * approval DECISION; the authoritative approval is the on-chain signature the
+ * indexer observes. Recording a decision here does not settle anything, and
+ * cannot.
+ *
+ * Per-payment outcomes are reported individually: "11 approved, 1 needs
+ * attention" is the normal result of a real batch.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch, requireAnyPermission } from '@/lib/tenancy/resolve';
+import { errorResponse, handleRouteError } from '@/lib/api/errors';
+import { approveBatch } from '@/lib/payroll/api';
+import { approveBatchRequest, zodIssues } from '@/lib/payroll/schemas';
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ // No `permission` here: either half of the gate is a legitimate approver, and
+ // gating on one would reject the other. The central helper checks for either,
+ // and the caller's ROLE still decides which half they exercise.
+ return withTenant(request, {}, async ({ ctx, body, idempotencyKey }) => {
+ const denied = requireAnyPermission(ctx, [
+ 'payment:approve:manager',
+ 'payment:approve:finance',
+ ]);
+ if (denied) return denialResponse(denied);
+
+ const parsed = approveBatchRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ const found = await findBatch(prisma, ctx, params.id, {
+ payments: { select: { id: true, state: true } },
+ });
+ if (!found.ok) return denialResponse(found);
+
+ const outcome = await approveBatch(
+ prisma,
+ ctx,
+ { id: found.value.id, payments: found.value.payments },
+ {
+ paymentIds: parsed.data.paymentIds,
+ reason: parsed.data.reason,
+ idempotencyKey: idempotencyKey ?? parsed.data.idempotencyKey,
+ },
+ );
+
+ // 200 even when some payments failed: the batch-level request succeeded and
+ // the body reports each outcome. A blanket 4xx would discard the approvals
+ // that were legitimately recorded.
+ return NextResponse.json(outcome, { status: 200 });
+ } catch (e) {
+ return handleRouteError('payroll.batch.approve.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/funding/abandon/route.ts b/src/app/api/payroll/batches/[id]/funding/abandon/route.ts
new file mode 100644
index 0000000..22e50e3
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/funding/abandon/route.ts
@@ -0,0 +1,51 @@
+/**
+ * POST /api/payroll/batches/:id/funding/abandon
+ *
+ * Closes an attempt that did not reach the network β a declined signature, a
+ * simulation failure β so the batch is not blocked forever.
+ *
+ * Narrowly defined on purpose. It never asserts that an on-chain escrow does not
+ * exist: payments return to DRAFT only when NOTHING was submitted. Once a
+ * transaction hash exists the money may have moved, and manufacturing a "not
+ * funded" state would invite funding a second escrow.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { assertJsonContentType, errorResponse, handleRouteError } from '@/lib/api/errors';
+import { failFundingIntent } from '@/lib/funding/service';
+import { fundingAbandonRequest, zodIssues } from '@/lib/payroll/schemas';
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ try {
+ assertJsonContentType(request);
+ } catch (e) {
+ return handleRouteError('funding.abandon.POST', e);
+ }
+
+ return withTenant(request, { permission: 'escrow:create' }, async ({ ctx, body }) => {
+ const parsed = fundingAbandonRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ const found = await findBatch(prisma, ctx, params.id, undefined);
+ if (!found.ok) return denialResponse(found);
+
+ const attempt = await failFundingIntent(prisma, ctx, {
+ attemptId: parsed.data.attemptId,
+ reason: parsed.data.reason,
+ userRejected: parsed.data.userRejected,
+ batchId: found.value.id,
+ });
+ return NextResponse.json({ attempt });
+ } catch (e) {
+ return handleRouteError('funding.abandon.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/funding/confirm/route.ts b/src/app/api/payroll/batches/[id]/funding/confirm/route.ts
new file mode 100644
index 0000000..655e4da
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/funding/confirm/route.ts
@@ -0,0 +1,62 @@
+/**
+ * POST /api/payroll/batches/:id/funding/confirm
+ *
+ * Independent chain verification. Four outcomes, deliberately never collapsed:
+ *
+ * CONFIRMED the chain agrees with the frozen plan, payment by payment, and a
+ * transfer of the exact total reached custody in that transaction
+ * FAILED the chain says the transaction failed; nothing moved
+ * UNVERIFIABLE the chain could not be read. NOT a failure β an RPC outage does
+ * not prove anything about the transaction
+ * MISMATCH we read the chain and it disagrees with the plan. The escrow is
+ * NOT adopted, and a CRITICAL finding preserves the evidence
+ *
+ * Safe to call repeatedly: a confirmed attempt replays its answer.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { assertJsonContentType, errorResponse, handleRouteError } from '@/lib/api/errors';
+import { confirmFunding } from '@/lib/funding/service';
+import { createRpcVerifier } from '@/lib/reconciliation/chain-verifier';
+import { fundingConfirmRequest, zodIssues } from '@/lib/payroll/schemas';
+
+/** Reading the chain can be slow; this must not be cut short mid-verification. */
+export const maxDuration = 120;
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ try {
+ assertJsonContentType(request);
+ } catch (e) {
+ return handleRouteError('funding.confirm.POST', e);
+ }
+
+ return withTenant(request, { permission: 'escrow:create' }, async ({ ctx, body }) => {
+ const parsed = fundingConfirmRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ const found = await findBatch(prisma, ctx, params.id, undefined);
+ if (!found.ok) return denialResponse(found);
+
+ const result = await confirmFunding(prisma, ctx, createRpcVerifier(), {
+ attemptId: parsed.data.attemptId,
+ onChainEscrowId: parsed.data.onChainEscrowId,
+ batchId: found.value.id,
+ });
+
+ // 200 for every outcome: the verification REQUEST succeeded, and the body
+ // says what the chain showed. A 4xx would conflate "we could not check" with
+ // "your request was wrong".
+ return NextResponse.json(result);
+ } catch (e) {
+ return handleRouteError('funding.confirm.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/funding/intent/route.ts b/src/app/api/payroll/batches/[id]/funding/intent/route.ts
new file mode 100644
index 0000000..ec09e19
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/funding/intent/route.ts
@@ -0,0 +1,52 @@
+/**
+ * POST /api/payroll/batches/:id/funding/intent
+ *
+ * Opens the funding intent and freezes the plan, BEFORE any wallet is shown.
+ *
+ * This is the anti-double-funding boundary. `initialize_multi_sig_escrow` creates
+ * the escrow and moves custody in one atomic invocation and offers no idempotency,
+ * so a second submission would fund a second escrow. The unique index on the
+ * attempt's idempotency key is what prevents that β not a disabled button, not
+ * client state. A second call while an attempt is open returns THAT attempt.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { assertJsonContentType, errorResponse, handleRouteError } from '@/lib/api/errors';
+import { openFundingIntent } from '@/lib/funding/service';
+import { fundingIntentRequest, zodIssues } from '@/lib/payroll/schemas';
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ try {
+ assertJsonContentType(request);
+ } catch (e) {
+ return handleRouteError('funding.intent.POST', e);
+ }
+
+ return withTenant(request, { permission: 'escrow:create' }, async ({ ctx, body }) => {
+ const parsed = fundingIntentRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ const found = await findBatch(prisma, ctx, params.id, undefined);
+ if (!found.ok) return denialResponse(found);
+
+ const result = await openFundingIntent(prisma, ctx, {
+ id: found.value.id,
+ reference: found.value.reference,
+ });
+
+ // 201 only when an attempt was actually opened. A recovered attempt returns
+ // 200, so a client can tell "I started this" from "this was already open".
+ return NextResponse.json(result, { status: result.created ? 201 : 200 });
+ } catch (e) {
+ return handleRouteError('funding.intent.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/funding/route.ts b/src/app/api/payroll/batches/[id]/funding/route.ts
new file mode 100644
index 0000000..7f44c53
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/funding/route.ts
@@ -0,0 +1,31 @@
+/**
+ * GET /api/payroll/batches/:id/funding β may this batch be funded, and with what?
+ *
+ * Read-only, and safe to poll. Returns every blocker at once, plus the exact plan
+ * when the batch is fundable β which is the disclosure the signer is entitled to
+ * see before a wallet opens.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { handleRouteError } from '@/lib/api/errors';
+import { getFundingState } from '@/lib/funding/service';
+
+export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'escrow:read', parseBody: false }, async ({ ctx }) => {
+ try {
+ const found = await findBatch(prisma, ctx, params.id, undefined);
+ if (!found.ok) return denialResponse(found);
+
+ const state = await getFundingState(prisma, ctx, {
+ id: found.value.id,
+ reference: found.value.reference,
+ });
+ return NextResponse.json(state);
+ } catch (e) {
+ return handleRouteError('funding.GET', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/funding/submitted/route.ts b/src/app/api/payroll/batches/[id]/funding/submitted/route.ts
new file mode 100644
index 0000000..5c8f191
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/funding/submitted/route.ts
@@ -0,0 +1,48 @@
+/**
+ * POST /api/payroll/batches/:id/funding/submitted
+ *
+ * Records that a signed transaction reached the network. It does NOT mark the
+ * escrow funded: a submitted transaction is not a settled one, and the only thing
+ * that establishes funding is reading the chain back.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { assertJsonContentType, errorResponse, handleRouteError } from '@/lib/api/errors';
+import { recordFundingSubmitted } from '@/lib/funding/service';
+import { fundingSubmittedRequest, zodIssues } from '@/lib/payroll/schemas';
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ try {
+ assertJsonContentType(request);
+ } catch (e) {
+ return handleRouteError('funding.submitted.POST', e);
+ }
+
+ return withTenant(request, { permission: 'escrow:create' }, async ({ ctx, body }) => {
+ const parsed = fundingSubmittedRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ // The batch is resolved within the tenant first, so an attempt id from another
+ // organization cannot be reached by naming it.
+ const found = await findBatch(prisma, ctx, params.id, undefined);
+ if (!found.ok) return denialResponse(found);
+
+ const attempt = await recordFundingSubmitted(prisma, ctx, {
+ attemptId: parsed.data.attemptId,
+ transactionHash: parsed.data.transactionHash,
+ batchId: found.value.id,
+ });
+ return NextResponse.json({ attempt });
+ } catch (e) {
+ return handleRouteError('funding.submitted.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/route.ts b/src/app/api/payroll/batches/[id]/route.ts
new file mode 100644
index 0000000..ed75346
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/route.ts
@@ -0,0 +1,60 @@
+/**
+ * GET /api/payroll/batches/:id β one batch, with its payments
+ *
+ * The batch's standing is DERIVED from its payments on every read. There is no
+ * stored status column to disagree with the rows it summarizes.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { handleRouteError } from '@/lib/api/errors';
+import { presentBatch, presentActivity, presentFindings } from '@/lib/payroll/api';
+
+export async function GET(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'payroll:read', parseBody: false }, async ({ ctx }) => {
+ try {
+ // Tenant-scoped lookup. A batch in another organization returns the same
+ // 404 as one that does not exist, so an id cannot be probed for existence.
+ const found = await findBatch(prisma, ctx, params.id, {
+ payments: {
+ orderBy: [{ createdAt: 'asc' }, { id: 'asc' }],
+ include: {
+ approvals: {
+ select: { role: true, decision: true, actorAddress: true, createdAt: true },
+ },
+ },
+ },
+ });
+ if (!found.ok) return denialResponse(found);
+
+ // The activity timeline and any findings, both tenant-scoped by the same
+ // organization filter the batch itself was resolved with.
+ const [events, findings] = await Promise.all([
+ prisma.auditEvent.findMany({
+ where: { orgId: ctx.orgId, batchId: found.value.id },
+ orderBy: [{ createdAt: 'asc' }],
+ take: 200,
+ }),
+ prisma.reconciliationFinding.findMany({
+ where: {
+ orgId: ctx.orgId,
+ status: { not: 'RESOLVED' },
+ paymentId: { in: found.value.payments.map((p: { id: string }) => p.id) },
+ },
+ orderBy: [{ detectedAt: 'desc' }],
+ take: 50,
+ }),
+ ]);
+
+ return NextResponse.json({
+ batch: presentBatch(found.value),
+ activity: presentActivity(events),
+ findings: presentFindings(findings),
+ });
+ } catch (e) {
+ return handleRouteError('payroll.batch.GET', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/[id]/validate/route.ts b/src/app/api/payroll/batches/[id]/validate/route.ts
new file mode 100644
index 0000000..d75cbd4
--- /dev/null
+++ b/src/app/api/payroll/batches/[id]/validate/route.ts
@@ -0,0 +1,54 @@
+/**
+ * POST /api/payroll/batches/:id/validate β re-check an existing draft
+ *
+ * Configuration can move under a batch: a payroll reviewed on Monday and funded
+ * on Wednesday may have been denominated in an asset this deployment no longer
+ * settles. This catches that before a wallet is opened.
+ *
+ * Read-only. It reports, and changes nothing β no state transition, no approval,
+ * no transaction. Safe to call repeatedly.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { findBatch } from '@/lib/tenancy/resolve';
+import { errorResponse, handleRouteError } from '@/lib/api/errors';
+import { revalidateBatch } from '@/lib/payroll/api';
+import { revalidateBatchRequest, zodIssues } from '@/lib/payroll/schemas';
+
+export async function POST(request: NextRequest, { params }: { params: { id: string } }) {
+ return withTenant(request, { permission: 'payroll:read' }, async ({ ctx, body }) => {
+ const parsed = revalidateBatchRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ const found = await findBatch(prisma, ctx, params.id, {
+ payments: {
+ select: {
+ recipientAddress: true,
+ assetCode: true,
+ assetDecimals: true,
+ amountBaseUnits: true,
+ rateBaseUnits: true,
+ hours: true,
+ },
+ },
+ });
+ if (!found.ok) return denialResponse(found);
+
+ const report = await revalidateBatch(prisma, ctx, {
+ id: found.value.id,
+ reference: found.value.reference,
+ payments: found.value.payments,
+ });
+ return NextResponse.json(report, { status: 200 });
+ } catch (e) {
+ return handleRouteError('payroll.batch.validate.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/route.ts b/src/app/api/payroll/batches/route.ts
new file mode 100644
index 0000000..f7bd7dc
--- /dev/null
+++ b/src/app/api/payroll/batches/route.ts
@@ -0,0 +1,150 @@
+/**
+ * POST /api/payroll/batches β create a draft batch from an uploaded CSV
+ * GET /api/payroll/batches β list this organization's batches
+ *
+ * Creation produces one DRAFT Payment per valid CSV row. It does NOT touch the
+ * chain, fund custody, or advance any payment toward settlement: a draft is a
+ * reviewable intention, and every step after it is a separate, explicit action.
+ *
+ * The route decodes and renders. Every rule lives in the domain services it calls.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import prisma from '@/lib/db/prisma';
+import { withTenant, denialResponse } from '@/lib/tenancy/http';
+import { assertProjectInTenant } from '@/lib/tenancy/resolve';
+import {
+ assertDeclaredSizeWithin,
+ assertJsonContentType,
+ errorResponse,
+ handleRouteError,
+} from '@/lib/api/errors';
+import { rateLimit, clientIp } from '@/lib/ratelimit';
+import { createBatch } from '@/lib/payroll/api';
+import { createBatchRequest, listBatchesQuery, zodIssues } from '@/lib/payroll/schemas';
+import { MAX_CSV_BYTES } from '@/lib/payroll/csv';
+import { rollupBatch } from '@/lib/payments/service';
+import { formatAmountWithSeparators } from '@/lib/money';
+
+/** The JSON envelope around a 1 MB file, plus headroom for escaping. */
+const MAX_REQUEST_BYTES = MAX_CSV_BYTES + 64 * 1024;
+
+/**
+ * Parsing a megabyte of caller-chosen text is the expensive part of this route,
+ * so the brake is applied before the body is read rather than after.
+ */
+const UPLOAD_LIMIT = 20;
+const UPLOAD_WINDOW_MS = 60_000;
+
+export async function POST(request: NextRequest) {
+ try {
+ assertJsonContentType(request);
+ assertDeclaredSizeWithin(request, MAX_REQUEST_BYTES);
+ } catch (e) {
+ return handleRouteError('payroll.batches.POST', e);
+ }
+
+ const limit = rateLimit(`payroll:create:${clientIp(request)}`, UPLOAD_LIMIT, UPLOAD_WINDOW_MS);
+ if (!limit.ok) {
+ return NextResponse.json(
+ {
+ error: `Too many payroll uploads. Try again in ${limit.retryAfter} seconds.`,
+ code: 'RATE_LIMITED',
+ },
+ { status: 429, headers: { 'Retry-After': String(limit.retryAfter) } },
+ );
+ }
+
+ return withTenant(
+ request,
+ { permission: 'payroll:create' },
+ async ({ ctx, body, idempotencyKey }) => {
+ const parsed = createBatchRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+ const input = parsed.data;
+
+ // A project id is an id, not a grant. Resolved within the tenant, so naming
+ // another organization's project is a non-enumerating miss.
+ const projectDenial = await assertProjectInTenant(prisma, ctx, input.projectId);
+ if (projectDenial) return denialResponse(projectDenial);
+
+ try {
+ const outcome = await createBatch(prisma, ctx, {
+ csv: input.csv,
+ filename: input.filename ?? null,
+ reference: input.reference ?? null,
+ projectId: input.projectId ?? null,
+ rejectDuplicateRecipients: input.rejectDuplicateRecipients,
+ // Header wins over body: the header is the HTTP-level retry key a proxy
+ // or client library will reuse automatically.
+ idempotencyKey: idempotencyKey ?? input.idempotencyKey ?? null,
+ });
+
+ // 201 only when something was actually created. A replayed retry returns
+ // 200, so a client can tell "I made this" from "this already existed".
+ return NextResponse.json(outcome, { status: outcome.created ? 201 : 200 });
+ } catch (e) {
+ return handleRouteError('payroll.batches.POST', e);
+ }
+ },
+ );
+}
+
+export async function GET(request: NextRequest) {
+ return withTenant(request, { permission: 'payroll:read', parseBody: false }, async ({ ctx }) => {
+ const query = listBatchesQuery.safeParse(
+ Object.fromEntries(new URL(request.url).searchParams.entries()),
+ );
+ if (!query.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The query could not be read.', {
+ errors: zodIssues(query.error),
+ });
+ }
+ const { limit = 25, cursor, projectId } = query.data;
+
+ try {
+ const rows = await prisma.payrollBatch.findMany({
+ // orgId is part of the QUERY, not a check afterwards: another tenant's
+ // batch is indistinguishable from one that does not exist.
+ where: { orgId: ctx.orgId, ...(projectId ? { projectId } : {}) },
+ orderBy: [{ createdAt: 'desc' }, { id: 'desc' }],
+ take: limit + 1,
+ ...(cursor ? { cursor: { id: cursor }, skip: 1 } : {}),
+ include: {
+ payments: { select: { state: true, amountBaseUnits: true, assetCode: true, assetDecimals: true } },
+ },
+ });
+
+ const page = rows.slice(0, limit);
+ return NextResponse.json({
+ batches: page.map((b) => {
+ const standing = rollupBatch(b.payments);
+ const decimals = b.payments[0]?.assetDecimals ?? 7;
+ return {
+ id: b.id,
+ reference: b.reference,
+ projectId: b.projectId,
+ createdAt: b.createdAt.toISOString(),
+ periodStart: b.periodStart?.toISOString() ?? null,
+ periodEnd: b.periodEnd?.toISOString() ?? null,
+ paymentCount: b.payments.length,
+ asset: b.payments[0]?.assetCode ?? null,
+ total: formatAmountWithSeparators(standing.totalAmountBaseUnits, decimals),
+ totalBaseUnits: standing.totalAmountBaseUnits.toString(),
+ // Derived on read. There is no stored status column to drift.
+ headline: standing.headline,
+ needsAttention: standing.needsAttention,
+ source: { filename: b.sourceFilename, rowsSeen: b.sourceRowCount },
+ };
+ }),
+ nextCursor: rows.length > limit ? page[page.length - 1].id : null,
+ });
+ } catch (e) {
+ return handleRouteError('payroll.batches.GET', e);
+ }
+ });
+}
diff --git a/src/app/api/payroll/batches/validate/route.ts b/src/app/api/payroll/batches/validate/route.ts
new file mode 100644
index 0000000..a731906
--- /dev/null
+++ b/src/app/api/payroll/batches/validate/route.ts
@@ -0,0 +1,83 @@
+/**
+ * POST /api/payroll/batches/validate β check a CSV without creating anything
+ *
+ * A dry run, and safe to call repeatedly. It writes NOTHING: no batch, no
+ * payment, no approval, no transaction, no state change. That is the whole point
+ * β an uploader must be able to see every problem in a file and fix them before
+ * any record exists.
+ *
+ * Returns 200 with `valid: false` for an invalid file. The CALL succeeded; the
+ * file is the thing that is wrong, and a reviewer refreshing a preview is not
+ * making failing requests. Creation, by contrast, rejects an invalid file with
+ * 422 β there the content being wrong does mean the request cannot be honoured.
+ *
+ * Distinct from POST /api/payroll/batches/:id/validate, which re-checks an
+ * EXISTING draft against current configuration.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { withTenant } from '@/lib/tenancy/http';
+import {
+ assertDeclaredSizeWithin,
+ assertJsonContentType,
+ errorResponse,
+ handleRouteError,
+} from '@/lib/api/errors';
+import { rateLimit, clientIp } from '@/lib/ratelimit';
+import { validateCsv } from '@/lib/payroll/api';
+import { validateCsvRequest, zodIssues } from '@/lib/payroll/schemas';
+import { MAX_CSV_BYTES } from '@/lib/payroll/csv';
+
+const MAX_REQUEST_BYTES = MAX_CSV_BYTES + 64 * 1024;
+
+/**
+ * Looser than creation's limit: a preview is meant to be called as an uploader
+ * iterates on a file, and throttling that would push them toward guessing.
+ */
+const VALIDATE_LIMIT = 60;
+const VALIDATE_WINDOW_MS = 60_000;
+
+export async function POST(request: NextRequest) {
+ try {
+ assertJsonContentType(request);
+ assertDeclaredSizeWithin(request, MAX_REQUEST_BYTES);
+ } catch (e) {
+ return handleRouteError('payroll.validate.POST', e);
+ }
+
+ const limit = rateLimit(
+ `payroll:validate:${clientIp(request)}`,
+ VALIDATE_LIMIT,
+ VALIDATE_WINDOW_MS,
+ );
+ if (!limit.ok) {
+ return NextResponse.json(
+ {
+ error: `Too many validation requests. Try again in ${limit.retryAfter} seconds.`,
+ code: 'RATE_LIMITED',
+ },
+ { status: 429, headers: { 'Retry-After': String(limit.retryAfter) } },
+ );
+ }
+
+ // `payroll:create` rather than `payroll:read`: this is the preflight for
+ // creating a payroll, so the people entitled to run it are the ones entitled
+ // to create one.
+ return withTenant(request, { permission: 'payroll:create' }, async ({ body }) => {
+ const parsed = validateCsvRequest.safeParse(body ?? {});
+ if (!parsed.success) {
+ return errorResponse(400, 'MALFORMED_REQUEST', 'The request could not be read.', {
+ errors: zodIssues(parsed.error),
+ });
+ }
+
+ try {
+ const { report } = validateCsv(parsed.data.csv, {
+ rejectDuplicateRecipients: parsed.data.rejectDuplicateRecipients,
+ });
+ return NextResponse.json(report, { status: 200 });
+ } catch (e) {
+ return handleRouteError('payroll.validate.POST', e);
+ }
+ });
+}
diff --git a/src/app/api/reconciliation/__tests__/routes.test.ts b/src/app/api/reconciliation/__tests__/routes.test.ts
new file mode 100644
index 0000000..fdee07a
--- /dev/null
+++ b/src/app/api/reconciliation/__tests__/routes.test.ts
@@ -0,0 +1,329 @@
+// @vitest-environment node
+/**
+ * Reconciliation route tests.
+ *
+ * Two security properties dominate: the cross-organization cron trigger must not
+ * be reachable without the shared secret, and resolving a finding must not be a
+ * way to alter financial state or to dismiss a discrepancy silently.
+ */
+import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
+import { OrgRole, MembershipStatus, FindingStatus, FindingSeverity, FindingKind } from '@prisma/client';
+
+vi.mock('@/lib/db/prisma', () => {
+ const prisma: any = {
+ organization: { findMany: vi.fn() },
+ orgMember: { findUnique: vi.fn(), findMany: vi.fn() },
+ reconciliationFinding: { findFirst: vi.fn(), findMany: vi.fn(), update: vi.fn(), groupBy: vi.fn() },
+ reconciliationRun: { findFirst: vi.fn(), findMany: vi.fn() },
+ auditEvent: { create: vi.fn() },
+ };
+ prisma.$transaction = vi.fn(async (fn: any) => fn(prisma));
+ return { default: prisma };
+});
+vi.mock('@/lib/auth', () => ({ getUserFromRequest: vi.fn() }));
+vi.mock('@/lib/reconciliation/scheduler', () => ({
+ runReconciliation: vi.fn(async () => ({
+ runId: 'r1', correlationId: 'rec_x', status: 'COMPLETED',
+ escrowsExamined: 1, paymentsExamined: 3, agreed: 3, mismatched: 0,
+ unreadable: 0, chainAhead: 0, databaseAhead: 0,
+ findingsOpened: 0, correctionsApplied: 0,
+ })),
+ reconciliationHealth: vi.fn(async () => ({
+ lastRun: null, openFindings: 0, criticalFindings: 0,
+ oldestUnresolvedHours: null, degraded: true,
+ degradedReason: 'Reconciliation has never run for this organization.',
+ })),
+}));
+vi.mock('@/lib/explorer', () => ({ txUrl: (h: string) => `https://explorer/tx/${h}` }));
+
+import { POST as cronRun } from '../run/route';
+import { PATCH as patchFinding } from '../../organizations/[id]/findings/[findingId]/route';
+import { GET as listFindings } from '../../organizations/[id]/findings/route';
+import { getUserFromRequest } from '@/lib/auth';
+import { runReconciliation } from '@/lib/reconciliation/scheduler';
+import prismaDefault from '@/lib/db/prisma';
+
+const prismaMock = prismaDefault as any;
+const mockUser = getUserFromRequest as unknown as ReturnType;
+const ORG = 'orgA';
+const SECRET = 'a-sufficiently-long-cron-secret';
+
+function signedInAs(role: OrgRole, orgId = ORG) {
+ mockUser.mockResolvedValue({ userId: 'u1', walletAddress: 'G' + 'A'.repeat(55), role: 'EMPLOYEE' });
+ prismaMock.orgMember.findUnique.mockResolvedValue({
+ orgId, userId: 'u1', role, status: MembershipStatus.ACTIVE,
+ org: { id: orgId, name: 'Org A', slug: 'org-a' },
+ user: { walletAddress: 'G' + 'A'.repeat(55) },
+ });
+ prismaMock.orgMember.findMany.mockResolvedValue([{ orgId, role }]);
+}
+
+beforeEach(() => {
+ vi.clearAllMocks();
+ process.env.CRON_SECRET = SECRET;
+ prismaMock.reconciliationFinding.findMany.mockResolvedValue([]);
+ prismaMock.reconciliationFinding.groupBy.mockResolvedValue([]);
+ prismaMock.organization.findMany.mockResolvedValue([{ id: ORG, slug: 'org-a' }]);
+});
+afterEach(() => {
+ delete process.env.CRON_SECRET;
+ delete process.env.INDEXER_SECRET;
+});
+
+describe('POST /api/reconciliation/run β the scheduled trigger', () => {
+ const req = (auth?: string) =>
+ new Request('http://localhost/api/reconciliation/run', {
+ method: 'POST',
+ headers: { 'x-forwarded-for': '203.0.113.5', ...(auth ? { authorization: auth } : {}) },
+ }) as any;
+
+ it('runs for every organization with the correct secret', async () => {
+ const res = await cronRun(req(`Bearer ${SECRET}`));
+ expect(res.status).toBe(200);
+ expect(runReconciliation).toHaveBeenCalledTimes(1);
+ });
+
+ it('404s without the secret, revealing nothing about the endpoint', async () => {
+ const res = await cronRun(req());
+ expect(res.status).toBe(404);
+ expect(runReconciliation).not.toHaveBeenCalled();
+ });
+
+ it('404s with a wrong secret', async () => {
+ const res = await cronRun(req('Bearer not-the-secret-at-all-really'));
+ expect(res.status).toBe(404);
+ expect(runReconciliation).not.toHaveBeenCalled();
+ });
+
+ it('404s when no secret is configured', async () => {
+ delete process.env.CRON_SECRET;
+ const res = await cronRun(req('Bearer anything'));
+ expect(res.status).toBe(404);
+ });
+
+ it('refuses to run behind a secret too short to resist guessing', async () => {
+ // A short secret reads as protection while providing none.
+ process.env.CRON_SECRET = 'short';
+ const res = await cronRun(req('Bearer short'));
+ expect(res.status).toBe(404);
+ expect(runReconciliation).not.toHaveBeenCalled();
+ });
+
+ it('continues the sweep when one organization fails', async () => {
+ // One tenant's RPC trouble must not stop another's reconciliation.
+ prismaMock.organization.findMany.mockResolvedValue([
+ { id: 'o1', slug: 's1' }, { id: 'o2', slug: 's2' },
+ ]);
+ (runReconciliation as any)
+ .mockRejectedValueOnce(new Error('rpc down for o1'))
+ .mockResolvedValueOnce({ runId: 'r2', correlationId: 'c2', status: 'COMPLETED' });
+
+ const res = await cronRun(req(`Bearer ${SECRET}`));
+ const body = await res.json();
+
+ expect(res.status).toBe(200);
+ expect(body.results).toHaveLength(2);
+ expect(body.results[0].error).toMatch(/rpc down/);
+ expect(body.results[1].status).toBe('COMPLETED');
+ });
+});
+
+describe('PATCH finding lifecycle', () => {
+ const req = (body: unknown, orgId = ORG) =>
+ new Request(`http://localhost/api/organizations/${orgId}/findings/f1`, {
+ method: 'PATCH',
+ headers: { 'Content-Type': 'application/json', 'x-organization-id': orgId },
+ body: JSON.stringify(body),
+ }) as any;
+
+ const openFinding = {
+ id: 'f1', orgId: ORG, status: FindingStatus.OPEN,
+ severity: FindingSeverity.CRITICAL, kind: FindingKind.DB_PAID_CHAIN_NOT,
+ paymentId: 'pay1', txHash: 'HASH',
+ };
+
+ it('401s when unauthenticated', async () => {
+ mockUser.mockResolvedValue(null);
+ const res = await patchFinding(req({ status: 'ACKNOWLEDGED' }), { params: { id: ORG, findingId: 'f1' } });
+ expect(res.status).toBe(401);
+ });
+
+ it('403s a role that cannot resolve findings', async () => {
+ signedInAs(OrgRole.VIEWER);
+ const res = await patchFinding(req({ status: 'ACKNOWLEDGED' }), { params: { id: ORG, findingId: 'f1' } });
+ expect(res.status).toBe(403);
+ });
+
+ it('404s a finding belonging to another organization', async () => {
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findFirst.mockResolvedValue(null);
+ const res = await patchFinding(req({ status: 'ACKNOWLEDGED' }), { params: { id: ORG, findingId: 'f1' } });
+ expect(res.status).toBe(404);
+ expect(prismaMock.reconciliationFinding.update).not.toHaveBeenCalled();
+ });
+
+ it('acknowledges a finding and records who did it', async () => {
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findFirst.mockResolvedValue(openFinding);
+ prismaMock.reconciliationFinding.update.mockResolvedValue({
+ ...openFinding, status: FindingStatus.ACKNOWLEDGED, acknowledgedBy: 'G' + 'A'.repeat(55),
+ });
+
+ const res = await patchFinding(req({ status: 'ACKNOWLEDGED' }), { params: { id: ORG, findingId: 'f1' } });
+
+ expect(res.status).toBe(200);
+ const data = prismaMock.reconciliationFinding.update.mock.calls[0][0].data;
+ expect(data.acknowledgedBy).toBe('G' + 'A'.repeat(55));
+ expect(prismaMock.auditEvent.create).toHaveBeenCalled();
+ });
+
+ it('refuses to resolve without a substantive explanation', async () => {
+ // A "mark resolved" button with no reason turns the queue into a dismiss
+ // button, and the next reader during an incident learns nothing.
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findFirst.mockResolvedValue(openFinding);
+
+ for (const resolution of [undefined, '', 'ok', 'fixed']) {
+ const res = await patchFinding(
+ req({ status: 'RESOLVED', resolution }),
+ { params: { id: ORG, findingId: 'f1' } }
+ );
+ const body = await res.json();
+ expect(res.status).toBe(400);
+ expect(body.code).toBe('RESOLUTION_REASON_REQUIRED');
+ }
+ expect(prismaMock.reconciliationFinding.update).not.toHaveBeenCalled();
+ });
+
+ it('resolves with an explanation, recording actor and reason', async () => {
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findFirst.mockResolvedValue(openFinding);
+ prismaMock.reconciliationFinding.update.mockResolvedValue({
+ ...openFinding, status: FindingStatus.RESOLVED,
+ });
+
+ const reason = 'Confirmed on the explorer that tx HASH settled; indexer had lagged.';
+ const res = await patchFinding(
+ req({ status: 'RESOLVED', resolution: reason }),
+ { params: { id: ORG, findingId: 'f1' } }
+ );
+
+ expect(res.status).toBe(200);
+ const data = prismaMock.reconciliationFinding.update.mock.calls[0][0].data;
+ expect(data.resolution).toBe(reason);
+ expect(data.resolvedBy).toBe('G' + 'A'.repeat(55));
+ const audit = prismaMock.auditEvent.create.mock.calls[0][0].data;
+ expect(audit.type).toBe('reconciliation.finding.resolved');
+ expect(audit.metadata.resolution).toBe(reason);
+ });
+
+ it('refuses an invalid lifecycle move', async () => {
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findFirst.mockResolvedValue({
+ ...openFinding, status: FindingStatus.RESOLVED,
+ });
+ const res = await patchFinding(
+ req({ status: 'OPEN' }),
+ { params: { id: ORG, findingId: 'f1' } }
+ );
+ const body = await res.json();
+ expect(res.status).toBe(409);
+ expect(body.code).toBe('INVALID_FINDING_TRANSITION');
+ });
+
+ it('cannot alter payment state, amount or transaction hash', async () => {
+ // Resolving records a judgement ABOUT a discrepancy; it must not be a channel
+ // for writing financial fields.
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findFirst.mockResolvedValue(openFinding);
+ prismaMock.reconciliationFinding.update.mockResolvedValue({
+ ...openFinding, status: FindingStatus.RESOLVED,
+ });
+
+ await patchFinding(
+ req({
+ status: 'RESOLVED',
+ resolution: 'Investigated and confirmed settled on chain.',
+ // All of these are attempts to smuggle financial mutations through.
+ paymentState: 'PAID',
+ amountBaseUnits: '999999',
+ txHash: 'FORGED_HASH',
+ severity: 'LOW',
+ orgId: 'orgB',
+ }),
+ { params: { id: ORG, findingId: 'f1' } }
+ );
+
+ const data = prismaMock.reconciliationFinding.update.mock.calls[0][0].data;
+ // Only lifecycle fields were written.
+ expect(Object.keys(data).sort()).toEqual(['resolution', 'resolvedAt', 'resolvedBy', 'status']);
+ expect(data.txHash).toBeUndefined();
+ expect(data.severity).toBeUndefined();
+ });
+});
+
+describe('GET findings', () => {
+ const req = (qs = '') =>
+ new Request(`http://localhost/api/organizations/${ORG}/findings${qs}`, {
+ headers: { 'x-organization-id': ORG },
+ }) as any;
+
+ it('403s a role without reconciliation read access', async () => {
+ signedInAs(OrgRole.WORKER);
+ const res = await listFindings(req(), { params: { id: ORG } });
+ expect(res.status).toBe(403);
+ });
+
+ it('scopes the query to the callerβs organization', async () => {
+ signedInAs(OrgRole.OWNER);
+ await listFindings(req(), { params: { id: ORG } });
+ const where = prismaMock.reconciliationFinding.findMany.mock.calls[0][0].where;
+ expect(where.orgId).toBe(ORG);
+ });
+
+ it('defaults to unresolved findings', async () => {
+ signedInAs(OrgRole.OWNER);
+ await listFindings(req(), { params: { id: ORG } });
+ const where = prismaMock.reconciliationFinding.findMany.mock.calls[0][0].where;
+ expect(where.status).toEqual({ not: FindingStatus.RESOLVED });
+ });
+
+ it('rejects an unknown status filter', async () => {
+ signedInAs(OrgRole.OWNER);
+ const res = await listFindings(req('?status=NONSENSE'), { params: { id: ORG } });
+ expect(res.status).toBe(400);
+ });
+
+ it('404s when the path organization differs from the resolved membership', async () => {
+ signedInAs(OrgRole.OWNER, ORG);
+ const res = await listFindings(req(), { params: { id: 'orgB' } });
+ expect(res.status).toBe(404);
+ });
+
+ it('surfaces remediation and an explorer link', async () => {
+ signedInAs(OrgRole.OWNER);
+ prismaMock.reconciliationFinding.findMany.mockResolvedValue([{
+ id: 'f1', kind: FindingKind.DB_PAID_CHAIN_NOT, status: FindingStatus.OPEN,
+ severity: FindingSeverity.CRITICAL, detail: 'mismatch',
+ remediation: 'Do not rely on the payment record.',
+ dbState: 'PAID', chainState: 'no settlement', txHash: 'HASH',
+ escrowOnChainId: 3, paymentIndex: 0,
+ detectedAt: new Date(), lastObservedAt: new Date(), observationCount: 2,
+ acknowledgedBy: null, acknowledgedAt: null,
+ resolvedBy: null, resolvedAt: null, resolution: null,
+ payment: {
+ id: 'pay1', recipientAddress: 'GW', amountBaseUnits: 10_000_000_000n,
+ assetDecimals: 7, assetCode: 'USDC', state: 'PAID',
+ batch: { id: 'b1', reference: 'CF-00001' },
+ },
+ run: { correlationId: 'rec_1', startedAt: new Date() },
+ }]);
+
+ const body = await (await listFindings(req(), { params: { id: ORG } })).json();
+ const f = body.findings[0];
+ expect(f.remediation).toMatch(/Do not rely/);
+ expect(f.transaction.explorerUrl).toBe('https://explorer/tx/HASH');
+ expect(f.payment.amount).toBe('1,000.00');
+ expect(f.observationCount).toBe(2);
+ });
+});
diff --git a/src/app/api/reconciliation/run/route.ts b/src/app/api/reconciliation/run/route.ts
new file mode 100644
index 0000000..653efee
--- /dev/null
+++ b/src/app/api/reconciliation/run/route.ts
@@ -0,0 +1,87 @@
+/**
+ * POST /api/reconciliation/run β the scheduled reconciliation trigger.
+ *
+ * ββ Why this is not a user endpoint ββββββββββββββββββββββββββββββββββββββββββ
+ * This runs across organizations, so it cannot be authorized by organization
+ * membership. It is protected by a shared secret the way the indexer trigger is,
+ * and is intended for a platform scheduler (Vercel Cron) β not for people.
+ * Operators trigger a single-organization run through
+ * `POST /api/organizations/:id/reconciliation`, which IS membership-scoped.
+ *
+ * Each organization is reconciled in its own run, with its own lock. One tenant's
+ * RPC trouble must not stop another's reconciliation from happening.
+ */
+
+import { NextRequest, NextResponse } from 'next/server';
+import { timingSafeEqual, createHash } from 'crypto';
+import prisma from '@/lib/db/prisma';
+import { STELLAR_CONFIG } from '@/lib/config';
+import { runReconciliation } from '@/lib/reconciliation/scheduler';
+import { rateLimit, clientIp } from '@/lib/ratelimit';
+
+export const runtime = 'nodejs';
+export const dynamic = 'force-dynamic';
+/** Reconciliation is RPC-bound; give it room without running unbounded. */
+export const maxDuration = 300;
+
+const MIN_SECRET_LENGTH = 16;
+
+function secretsMatch(provided: string, expected: string): boolean {
+ const a = createHash('sha256').update(provided).digest();
+ const b = createHash('sha256').update(expected).digest();
+ return timingSafeEqual(a, b);
+}
+
+export async function POST(request: NextRequest) {
+ // Vercel Cron sends `Authorization: Bearer $CRON_SECRET`.
+ const expected = process.env.CRON_SECRET || process.env.INDEXER_SECRET || '';
+ if (!expected || expected.trim().length < MIN_SECRET_LENGTH) {
+ // A short or absent secret is not protection. Refuse to expose the endpoint
+ // rather than running on a guessable credential.
+ return NextResponse.json({ error: 'Not available' }, { status: 404 });
+ }
+
+ const rl = rateLimit(`reconcile-trigger:${clientIp(request)}`, 10, 60_000);
+ if (!rl.ok) return NextResponse.json({ error: 'Not available' }, { status: 404 });
+
+ const header = request.headers.get('authorization') ?? '';
+ const bearer = header.startsWith('Bearer ') ? header.slice(7) : '';
+ const provided = bearer || request.headers.get('x-cron-secret') || '';
+ if (!provided || !secretsMatch(provided, expected)) {
+ return NextResponse.json({ error: 'Not available' }, { status: 404 });
+ }
+
+ const url = new URL(request.url);
+ const onlyOrg = url.searchParams.get('orgId');
+ const maxEscrows = Math.min(
+ Math.max(parseInt(url.searchParams.get('maxEscrows') || '50', 10) || 50, 1),
+ 500
+ );
+
+ const orgs = await prisma.organization.findMany({
+ where: onlyOrg ? { id: onlyOrg } : {},
+ select: { id: true, slug: true },
+ // Bounded: a platform-wide sweep must not grow without limit as tenants are
+ // added. The scheduler runs again shortly; unfinished tenants are picked up
+ // by the next tick rather than making one invocation unbounded.
+ take: 50,
+ });
+
+ const results: unknown[] = [];
+ for (const org of orgs) {
+ try {
+ const r = await runReconciliation(prisma, org.id, {
+ contractId: STELLAR_CONFIG.contract.id || undefined,
+ network: STELLAR_CONFIG.contract.network,
+ maxEscrows,
+ });
+ results.push({ orgId: org.id, slug: org.slug, ...r });
+ } catch (e: any) {
+ // One tenant's failure must not abort the sweep.
+ console.error(`[reconcile] org ${org.id} failed: ${e?.message}`);
+ results.push({ orgId: org.id, slug: org.slug, error: e?.message ?? 'failed' });
+ }
+ }
+
+ return NextResponse.json({ organizations: orgs.length, results });
+}
diff --git a/src/app/api/submit-batch/route.ts b/src/app/api/submit-batch/route.ts
index 132197a..2f158b0 100644
--- a/src/app/api/submit-batch/route.ts
+++ b/src/app/api/submit-batch/route.ts
@@ -10,11 +10,27 @@
*
* The client submits each signature via `submit_hours_proof`, then the two
* signers approve, then anyone calls `pay_batch`.
+ *
+ * AUTHORIZATION β why this endpoint is gated twice:
+ * The oracle's signature is the only thing standing between "a payment row
+ * exists" and "the contract will move funds for it" (`pay_batch` refuses any
+ * payment whose `proof_verified` is false). An unauthenticated signer would
+ * therefore let anyone on the internet manufacture the proof-of-work half of
+ * the security model, which is exactly the property the product claims to
+ * enforce. So we require (1) a valid CoreFlow session, and (2) that the caller
+ * is the escrow's on-chain manager β read live from the contract, not from a
+ * client-supplied field. A worker cannot attest to their own hours.
*/
-import { NextResponse } from 'next/server';
-import { getOraclePublicKeyHex, signHoursProof } from '@/lib/oracle';
+import { NextRequest, NextResponse } from 'next/server';
+import { getOraclePublicKeyHex, signHoursProof, type ProofContext } from '@/lib/oracle';
+import { STELLAR_CONFIG } from '@/lib/config';
import { CoreFlowClient } from '@/lib/contracts';
+import prisma from '@/lib/db/prisma';
+import { getUserFromRequest } from '@/lib/auth';
+import { resolveTenant, findEscrowByOnChainId, requirePermission } from '@/lib/tenancy/resolve';
+import { rateLimit } from '@/lib/ratelimit';
+import { audit } from '@/lib/audit';
export const runtime = 'nodejs';
export const dynamic = 'force-dynamic';
@@ -27,7 +43,25 @@ interface PayeeInput {
const G_ADDRESS = /^G[A-Z2-7]{55}$/;
-export async function POST(request: Request) {
+export async function POST(request: NextRequest) {
+ // ---- Gate 1: authenticated session -------------------------------------
+ const user = await getUserFromRequest(request);
+ if (!user) {
+ return NextResponse.json(
+ { error: 'Sign in with your Stellar wallet to request oracle attestations.' },
+ { status: 401 }
+ );
+ }
+
+ // Signing is CPU-bound and security-sensitive; brake it per wallet.
+ const rl = rateLimit(`submit-batch:${user.walletAddress}`, 10, 60_000);
+ if (!rl.ok) {
+ return NextResponse.json(
+ { error: 'Too many attestation requests. Try again shortly.' },
+ { status: 429, headers: { 'Retry-After': String(rl.retryAfter) } }
+ );
+ }
+
let body: { escrow_id?: number; payees?: PayeeInput[] };
try {
@@ -65,12 +99,67 @@ export async function POST(request: Request) {
return NextResponse.json({ error: 'Oracle is not configured' }, { status: 503 });
}
+ // ---- Gate 1b: the escrow must belong to an organization the caller is in --
+ // The on-chain manager check below proves control of a key, but not that this
+ // escrow is part of the caller's workspace. Both are required: a wallet can be
+ // the manager of an escrow recorded under a different tenant, and attestations
+ // must not cross that line.
+ const orgId =
+ request.headers.get('x-organization-id') ??
+ new URL(request.url).searchParams.get('orgId') ??
+ (await prisma.orgMember
+ .findMany({ where: { userId: user.userId, status: 'ACTIVE' }, select: { orgId: true }, take: 2 })
+ .then((m) => (m.length === 1 ? m[0].orgId : null)));
+
+ const tenant = await resolveTenant(prisma, user.userId, orgId);
+ if (!tenant.ok) {
+ return NextResponse.json({ error: tenant.message }, { status: tenant.status });
+ }
+ const permissionDenied = requirePermission(tenant.value, 'oracle:attest:request');
+ if (permissionDenied) {
+ return NextResponse.json(
+ { error: permissionDenied.message, code: permissionDenied.code },
+ { status: 403 }
+ );
+ }
+ const ownedEscrow = await findEscrowByOnChainId(prisma, tenant.value, escrowId);
+ if (!ownedEscrow.ok) {
+ return NextResponse.json({ error: ownedEscrow.message }, { status: ownedEscrow.status });
+ }
+
+ const client = new CoreFlowClient();
+
+ // ---- Gate 2: caller must be the escrow's on-chain manager ---------------
+ // Read from the contract so the check cannot be spoofed by request content.
+ let escrow: Awaited>;
+ try {
+ escrow = await client.getEscrow(escrowId);
+ } catch {
+ return NextResponse.json(
+ { error: `Could not read escrow ${escrowId}. Does it exist on this network?` },
+ { status: 502 }
+ );
+ }
+ const onChainManager = escrow.manager;
+
+ if (user.walletAddress !== onChainManager) {
+ await audit('oracle.attest.denied', {
+ actor: user.walletAddress,
+ target: String(escrowId),
+ metadata: { reason: 'caller is not the on-chain manager' },
+ });
+ return NextResponse.json(
+ { error: 'Only the escrow manager can request attestations for this batch.' },
+ { status: 403 }
+ );
+ }
+
// The contract accepts only the next expected nonce, so signatures must start
// from the live on-chain watermark rather than zero β a batch signed from 0
// against an escrow that already has proofs would be rejected with #9.
let startNonce = 0;
try {
- startNonce = await new CoreFlowClient().getNonce(escrowId);
+ startNonce = await client.getNonce(escrowId);
} catch {
return NextResponse.json(
{ error: `Could not read nonce for escrow ${escrowId}. Does it exist on this network?` },
@@ -78,20 +167,67 @@ export async function POST(request: Request) {
);
}
- const signatures = payees.map((payee, i) => {
+ // The uploaded CSV must describe the escrow that was actually funded. The
+ // signed preimage is built from ON-CHAIN payment rows, so a mismatched CSV
+ // would otherwise produce signatures that silently attest to something the
+ // uploader never reviewed. Reject rather than sign the discrepancy.
+ if (payees.length !== escrow.payments.length) {
+ return NextResponse.json(
+ {
+ error:
+ `This file has ${payees.length} payee(s) but escrow ${escrowId} was funded ` +
+ `for ${escrow.payments.length}. Upload the file this escrow was created from.`,
+ },
+ { status: 409 }
+ );
+ }
+
+ for (const [i, payee] of payees.entries()) {
+ const row = escrow.payments[i];
+ if (row.worker !== payee.address) {
+ return NextResponse.json(
+ {
+ error:
+ `Row ${i + 1} pays ${payee.address}, but payment ${i} of escrow ${escrowId} ` +
+ `is held for ${row.worker}.`,
+ },
+ { status: 409 }
+ );
+ }
+ }
+
+ const ctxFor = (payment: (typeof escrow.payments)[number]): ProofContext => ({
+ networkPassphrase: STELLAR_CONFIG.getNetworkPassphrase(),
+ contractId: STELLAR_CONFIG.contract.id,
+ worker: payment.worker,
+ token: payment.token,
+ amount: payment.amount,
+ startDate: BigInt(payment.start_date),
+ endDate: BigInt(payment.end_date),
+ });
+
+ const signatures = escrow.payments.map((payment, i) => {
const nonce = startNonce + i;
- // Hours are the attested unit; amount is fixed at escrow creation.
- const hours = Math.max(1, Math.round(Number(payee.amount)));
+ // Hours are derived from what was actually escrowed, not from the upload:
+ // the contract enforces `hours x rate == amount`, so any other value would
+ // be rejected on chain. Deriving it here makes that impossible to get wrong.
+ const hours = payment.amount / payment.rate_per_hour;
return {
paymentId: i,
- address: payee.address,
- token: payee.token,
- hours,
+ address: payment.worker,
+ token: payment.token,
+ hours: Number(hours),
nonce,
- signature: signHoursProof(escrowId, i, hours, nonce),
+ signature: signHoursProof(ctxFor(payment), escrowId, i, hours, nonce),
};
});
+ await audit('oracle.attest.issued', {
+ actor: user.walletAddress,
+ target: String(escrowId),
+ metadata: { payees: payees.length, startNonce },
+ });
+
return NextResponse.json(
{ escrowId, oraclePublicKey, startNonce, signatures },
{ status: 200 }
diff --git a/src/app/bulk-pay/page.tsx b/src/app/bulk-pay/page.tsx
index 1b7b919..216468a 100644
--- a/src/app/bulk-pay/page.tsx
+++ b/src/app/bulk-pay/page.tsx
@@ -38,7 +38,15 @@ interface ChainState {
allProofsVerified: boolean;
}
-const ESCROW_ID = 1;
+/**
+ * Which escrow this console operates on.
+ *
+ * Was hard-coded to 1. That escrow is now settled, so the page pointed at spent
+ * state and every action failed with PaymentAlreadyFinalized. Escrow selection
+ * belongs in the Bulk Pay workflow proper (staged upload -> preview -> batch ->
+ * approvals); until that lands, this is configurable rather than pinned.
+ */
+const ESCROW_ID = Number(process.env.NEXT_PUBLIC_BULK_PAY_ESCROW_ID ?? '1');
const EXPERT = 'https://stellar.expert/explorer/testnet/tx';
const G_ADDRESS = /^G[A-Z2-7]{55}$/;
@@ -109,12 +117,60 @@ export default function BulkPayPage() {
useEffect(() => { void refresh(); }, [refresh]);
+ // Restore an existing CoreFlow session on mount, so a signed-in operator
+ // does not have to re-sign the auth challenge on every page load.
+ useEffect(() => {
+ void (async () => {
+ try {
+ const res = await fetch('/api/auth/me');
+ if (res.ok) setWallet((await res.json()).user.walletAddress);
+ } catch { /* unauthenticated β the connect button handles it */ }
+ })();
+ }, []);
+
+ /**
+ * Connect Freighter AND establish a CoreFlow session.
+ *
+ * Connecting the wallet alone is not enough: /api/submit-batch issues the
+ * oracle attestations that unlock settlement, so it requires a verified
+ * session (challenge -> Freighter signature -> server-side Ed25519 verify)
+ * and checks the caller against the escrow's on-chain manager. Proving
+ * control of the key is what authorizes attestation, not merely naming it.
+ */
const connect = async () => {
setError(null);
+ setBusy('connect');
try {
- setWallet(await STELLAR_CONFIG.freighter.connect());
- } catch {
- setError('Could not connect Freighter. Is the extension unlocked and set to Testnet?');
+ const address = await STELLAR_CONFIG.freighter.connect();
+
+ const challengeRes = await fetch('/api/auth/challenge', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ walletAddress: address }),
+ });
+ if (!challengeRes.ok) throw new Error('Could not start sign-in.');
+ const { challenge } = await challengeRes.json();
+
+ const signature = await STELLAR_CONFIG.freighter.signMessage(challenge);
+
+ const verifyRes = await fetch('/api/auth/verify', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ walletAddress: address, signature }),
+ });
+ if (!verifyRes.ok) {
+ throw new Error((await verifyRes.json()).error || 'Signature verification failed.');
+ }
+
+ setWallet(address);
+ } catch (err) {
+ setError(
+ err instanceof Error && err.message !== 'Freighter wallet not found'
+ ? err.message
+ : 'Could not connect Freighter. Is the extension unlocked and set to Testnet?'
+ );
+ } finally {
+ setBusy(null);
}
};
diff --git a/src/app/dashboard/admin/escrows/page.tsx b/src/app/dashboard/admin/escrows/page.tsx
index da261ac..ae40321 100644
--- a/src/app/dashboard/admin/escrows/page.tsx
+++ b/src/app/dashboard/admin/escrows/page.tsx
@@ -196,6 +196,9 @@ export default function AdminEscrowsPage() {
onClose={() => actions.setShowCreateModal(false)}
onSubmit={actions.handleCreateEscrow}
isMockMode={isMockMode}
+ // Lets the modal refuse a finance approver equal to the manager before
+ // the transaction is built, rather than after the contract traps.
+ managerAddress={auth.walletAddress}
/>
diff --git a/src/app/dashboard/employee/payments/page.tsx b/src/app/dashboard/employee/payments/page.tsx
index 2d6f779..9c3d001 100644
--- a/src/app/dashboard/employee/payments/page.tsx
+++ b/src/app/dashboard/employee/payments/page.tsx
@@ -1,6 +1,7 @@
'use client';
import { useAuth } from '@/hooks/useAuth';
+import { txUrl } from '@/lib/explorer';
import { useDashboard } from '@/hooks/useDashboard';
import {
DollarSign,
@@ -244,7 +245,7 @@ export default function EmployeePaymentsPage() {
TX: {escrow.transaction_hash.slice(0, 12)}...
diff --git a/src/app/dashboard/payroll/[id]/page.tsx b/src/app/dashboard/payroll/[id]/page.tsx
new file mode 100644
index 0000000..5e39c03
--- /dev/null
+++ b/src/app/dashboard/payroll/[id]/page.tsx
@@ -0,0 +1,75 @@
+'use client';
+
+/**
+ * Batch detail page.
+ *
+ * A thin shell: fetch, then render. Authorization is the server's β the request
+ * carries the session, `withTenant` resolves membership, and a batch in another
+ * organization returns the same 404 as one that does not exist. No organization id
+ * is read from the URL or from storage and treated as permission.
+ */
+
+import { useCallback, useEffect, useState } from 'react';
+import { BatchDetail, type BatchDetailData } from '@/components/payroll/BatchDetail';
+
+export default function BatchDetailPage({ params }: { params: { id: string } }) {
+ const [data, setData] = useState(null);
+ const [error, setError] = useState<{ status: number; message: string } | null>(null);
+
+ const load = useCallback(async () => {
+ setError(null);
+ try {
+ const response = await fetch(`/api/payroll/batches/${encodeURIComponent(params.id)}`);
+ const body = await response.json().catch(() => null);
+ if (!response.ok) {
+ setError({
+ status: response.status,
+ message: body?.error ?? 'This payroll batch could not be loaded.',
+ });
+ return;
+ }
+ setData(body as BatchDetailData);
+ } catch {
+ setError({ status: 0, message: 'The payroll batch could not be loaded.' });
+ }
+ }, [params.id]);
+
+ useEffect(() => {
+ void load();
+ }, [load]);
+
+ if (error) {
+ return (
+
+
+ {/* A cross-tenant batch and a non-existent one are the same answer. */}
+ {error.status === 404 ? 'Payroll batch not found' : 'Could not load this payroll'}
+
+ {error.message}
+ void load()}
+ className="mt-6 text-sm text-emerald-300 underline hover:text-emerald-200"
+ >
+ Try again
+
+
+ );
+ }
+
+ if (!data) {
+ return (
+
+
+ Loading payroll batchβ¦
+
+
+ );
+ }
+
+ return (
+
+ void load()} />
+
+ );
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 5f44d89..85cd2d7 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,4 +1,6 @@
import Link from 'next/link';
+import { STELLAR_CONFIG } from '@/lib/config';
+import { contractUrl, explorerNetworkLabel, V1_MAINNET } from '@/lib/explorer';
import { ShieldCheck, Coins, FileCheck2, Crown, Users, ArrowRight, Lock } from 'lucide-react';
const FEATURES = [
@@ -109,16 +111,50 @@ export default function LandingPage() {
- {/* Contract Link */}
-
-
- View Smart Contract on Stellar Expert
-
+ {/*
+ Two deployments, stated as two deployments.
+
+ A single link labelled "View Smart Contract" implied that whatever the
+ product does today is what is running on Mainnet. It is not: v1 is the
+ historical Mainnet deployment, and v2 β domain-separated attestations,
+ an admin-managed oracle registry, and the work/amount invariant β is
+ deployed on Testnet only. Presenting one link would claim v2's
+ security properties for Mainnet, which is not true.
+ */}
+
+
+ Verify on-chain
+
+
+
+ v2’s security improvements are deployed on Testnet and have not been
+ migrated to Mainnet. The v1 Mainnet contract does not carry them.
+
{/* Features */}
diff --git a/src/components/EscrowCard.tsx b/src/components/EscrowCard.tsx
index 909390f..bef75fe 100644
--- a/src/components/EscrowCard.tsx
+++ b/src/components/EscrowCard.tsx
@@ -16,8 +16,25 @@ import {
Fingerprint,
} from 'lucide-react';
import { EscrowTimeline } from './EscrowTimeline';
+import { BatchPaymentsTable } from './payments/BatchPaymentsTable';
import { FeeSavings } from './FeeSavings';
import { PaymentReceipt } from './PaymentReceipt';
+import { txUrl } from '@/lib/explorer';
+
+/** One payment within an escrow, as returned by GET /api/escrows. */
+export interface EscrowPaymentData {
+ id: string;
+ index?: number | null;
+ recipient: string;
+ /** Pre-formatted at the asset's own precision. */
+ amount: string;
+ amountBaseUnits?: string;
+ hours?: string;
+ state: string;
+ stateLabel?: string;
+ txHash?: string | null;
+ settledAt?: string | null;
+}
export interface EscrowData {
id: number;
@@ -33,6 +50,16 @@ export interface EscrowData {
created_at: string;
transaction_hash?: string;
isMock?: boolean;
+ /**
+ * The escrow's payments, one per payee.
+ *
+ * Optional because the mock/demo path still produces single-payee escrows. When
+ * present with more than one row, the card renders the per-payment breakdown
+ * instead of a single aggregate line β an escrow-shaped summary of a multi-payee
+ * batch is the lossiness this model removed.
+ */
+ payments?: EscrowPaymentData[];
+ paymentCount?: number;
}
interface EscrowCardProps {
@@ -216,6 +243,32 @@ export const EscrowCard = ({
)}
+ {/*
+ Per-payment breakdown.
+
+ Shown whenever the escrow holds more than one payment. Rendering a
+ multi-payee batch as a single aggregate line is exactly what hid eleven
+ of twelve contractors in the previous model, so the individual payments
+ take precedence over the summary above.
+ */}
+ {escrow.payments && escrow.payments.length > 1 && (
+
+ ({
+ id: p.id,
+ index: p.index,
+ recipient: p.recipient,
+ amount: p.amount,
+ hours: p.hours,
+ state: p.state,
+ txHash: p.txHash,
+ }))}
+ total={escrow.amount}
+ assetCode={escrow.currency}
+ />
+
+ )}
+
{/* Workflow Timeline */}
+
+ Chain not configured
+
+ );
+ }
+
+ return (
+
+
+ {STELLAR_CONFIG.networkLabel()}
+ {mainnet && β transactions move real funds }
+
+ );
+}
diff --git a/src/components/TransactionFeed.tsx b/src/components/TransactionFeed.tsx
index b6c7cf5..0f2edc5 100644
--- a/src/components/TransactionFeed.tsx
+++ b/src/components/TransactionFeed.tsx
@@ -2,6 +2,7 @@
import { ArrowUpRight, Check, Clock, FileText, X } from 'lucide-react';
import { STELLAR_CONFIG } from '@/lib/config';
+import { txUrl } from '@/lib/explorer';
export interface Transaction {
id: string;
@@ -31,8 +32,8 @@ export const TransactionFeed = ({ transactions }: TransactionFeedProps) => {
const getExplorerUrl = (hash: string) => {
const network = STELLAR_CONFIG.contract.network;
return network === 'public'
- ? `https://stellar.expert/explorer/public/tx/${hash}`
- : `https://stellar.expert/explorer/testnet/tx/${hash}`;
+ ? txUrl(hash)
+ : txUrl(hash);
};
return (
diff --git a/src/components/dashboard/DashboardHeader.tsx b/src/components/dashboard/DashboardHeader.tsx
index 66a43b9..195f14a 100644
--- a/src/components/dashboard/DashboardHeader.tsx
+++ b/src/components/dashboard/DashboardHeader.tsx
@@ -1,7 +1,7 @@
import { RefreshCw, LogOut, LogIn, ShieldCheck, Crown, Users, Mail, ScrollText } from 'lucide-react';
import type { UserRole } from '@/hooks/useAuth';
-import { STELLAR_CONFIG } from '@/lib/config';
import Link from 'next/link';
+import { NetworkBadge } from '@/components/NetworkBadge';
interface DashboardHeaderProps {
isContractConfigured: boolean;
@@ -44,7 +44,6 @@ export function DashboardHeader({
onSignOut,
}: DashboardHeaderProps) {
const companyName = process.env.NEXT_PUBLIC_COMPANY_NAME || 'CoreFlow';
- const networkName = (STELLAR_CONFIG.contract.network || 'public').toUpperCase();
const truncatedAddress = walletAddress
? `${walletAddress.slice(0, 6)}...${walletAddress.slice(-4)}`
@@ -56,6 +55,7 @@ export function DashboardHeader({
+ {/* Which chain these numbers refer to is never implicit. */}
Soroban Escrow
- {/* Network Indicator */}
-
- Network: {networkName}
-
+ {/* Network indicator. Previously rendered emerald regardless of
+ network, so Mainnet and Testnet were visually identical and an
+ unconfigured contract showed as healthy. */}
+
On-Chain Accounts Payable & Remittance
diff --git a/src/components/funding/FundingPanel.tsx b/src/components/funding/FundingPanel.tsx
new file mode 100644
index 0000000..ef3fe96
--- /dev/null
+++ b/src/components/funding/FundingPanel.tsx
@@ -0,0 +1,821 @@
+'use client';
+
+/**
+ * Funding a payroll batch: review, disclose, sign once, verify.
+ *
+ * Three rules this component is built around.
+ *
+ * 1. EVERY FIGURE COMES FROM THE SERVER. The plan is issued and frozen server-side
+ * and rendered verbatim. Nothing here adds, converts or formats money β a total
+ * computed in a browser is a second opinion about what is being signed.
+ *
+ * 2. ONE TRANSACTION. `initialize_multi_sig_escrow` creates the escrow and moves
+ * custody atomically, so the UI must not imply two steps. There is no
+ * "create escrow" button anywhere.
+ *
+ * 3. AN UNCERTAIN TRANSACTION MUST NEVER INVITE A SECOND ONE. The contract is not
+ * idempotent: signing again funds a second escrow with the same money. So while
+ * an attempt is unresolved there is no funding button at all β only "Check
+ * status" β and on mount the existing intent is recovered rather than replaced.
+ */
+
+import { useCallback, useEffect, useRef, useState } from 'react';
+import { Button } from '@/components/Button';
+import { NetworkBadge } from '@/components/NetworkBadge';
+import {
+ abandonFunding,
+ confirmFunding,
+ getFundingState,
+ openFundingIntent,
+ planReference,
+ planToContractArguments,
+ recordSubmitted,
+ FundingRequestError,
+ type ConfirmResult,
+ type FundingAttemptView,
+ type FundingPlan,
+ type FundingStateView,
+} from '@/lib/funding/client';
+
+/**
+ * What the screen is doing. Derived from server state plus the in-flight wallet
+ * interaction β never a status the client invented about money.
+ */
+type Phase =
+ | 'LOADING'
+ | 'BLOCKED'
+ | 'READY'
+ | 'DISCLOSING'
+ | 'AWAITING_SIGNATURE'
+ | 'SUBMITTING'
+ | 'CONFIRMING'
+ | 'VERIFYING'
+ | 'FUNDED'
+ | 'USER_REJECTED'
+ | 'RPC_FAILED'
+ | 'CONTRACT_REJECTED'
+ | 'MISMATCH';
+
+/** Phases in which a funding action must not be offered. */
+const NO_FUNDING_BUTTON: readonly Phase[] = [
+ 'AWAITING_SIGNATURE',
+ 'SUBMITTING',
+ 'CONFIRMING',
+ 'VERIFYING',
+ 'FUNDED',
+ 'MISMATCH',
+];
+
+function truncate(address: string): string {
+ return address.length > 14 ? `${address.slice(0, 6)}β¦${address.slice(-6)}` : address;
+}
+
+const EXPLORER = 'https://stellar.expert/explorer/testnet';
+
+export interface FundingPanelProps {
+ batchId: string;
+ orgId?: string;
+ /** Called after funding is confirmed, so the host page can refresh. */
+ onFunded?: () => void;
+}
+
+export function FundingPanel({ batchId, orgId, onFunded }: FundingPanelProps) {
+ const [phase, setPhase] = useState
('LOADING');
+ const [state, setState] = useState(null);
+ const [plan, setPlan] = useState(null);
+ // The attempt itself, not just its id: the disclosure needs its planDigest, and
+ // reading it back off the pre-intent `state` meant the plan reference never
+ // appeared β the state loaded before the intent existed.
+ const [attempt, setAttempt] = useState(null);
+ const attemptId = attempt?.id ?? null;
+ const [message, setMessage] = useState(null);
+ const [differences, setDifferences] = useState([]);
+ const [txHash, setTxHash] = useState(null);
+ const [escrowId, setEscrowId] = useState(null);
+ const [showTechnical, setShowTechnical] = useState(false);
+ const [busy, setBusy] = useState(false);
+ const mounted = useRef(true);
+
+ useEffect(() => {
+ mounted.current = true;
+ return () => {
+ mounted.current = false;
+ };
+ }, []);
+
+ /**
+ * Load server state and adopt whatever attempt already exists.
+ *
+ * This is the reload-recovery path. A refresh mid-submission must land on the
+ * SAME attempt β never a fresh one.
+ */
+ const load = useCallback(async () => {
+ try {
+ const next = await getFundingState(batchId, orgId);
+ if (!mounted.current) return;
+ setState(next);
+ setPlan(next.plan);
+ setAttempt(next.attempt);
+ setTxHash(next.attempt?.hash ?? null);
+ setEscrowId(next.escrow?.onChainId ?? null);
+
+ const status = next.attempt?.status;
+ if (status === 'CONFIRMED') {
+ setPhase('FUNDED');
+ } else if (status === 'SUBMITTED') {
+ // A transaction exists and its outcome is unknown to us.
+ setPhase('VERIFYING');
+ setMessage(next.attempt?.errorMessage ?? null);
+ } else if (status === 'AWAITING_SIGNATURE' && next.plan) {
+ setPhase('DISCLOSING');
+ } else if (!next.assessment.eligible) {
+ setPhase('BLOCKED');
+ } else {
+ setPhase('READY');
+ }
+ } catch (e) {
+ if (!mounted.current) return;
+ setPhase('BLOCKED');
+ setMessage(e instanceof Error ? e.message : 'Funding state could not be loaded.');
+ }
+ }, [batchId, orgId]);
+
+ useEffect(() => {
+ void load();
+ }, [load]);
+
+
+
+ /** Open (or recover) the intent, freezing the plan, then disclose it. */
+ async function beginFunding() {
+ setBusy(true);
+ setMessage(null);
+ try {
+ const result = await openFundingIntent(batchId, orgId);
+ setAttempt(result.attempt);
+ setPlan(result.plan);
+ setTxHash(result.attempt.hash ?? null);
+ setPhase(result.attempt.status === 'SUBMITTED' ? 'VERIFYING' : 'DISCLOSING');
+ } catch (e) {
+ if (e instanceof FundingRequestError && e.status === 409) {
+ // Either the batch became unfundable or an attempt is already open; reload
+ // rather than guessing, so the screen reflects the server.
+ setMessage(e.message);
+ await load();
+ } else {
+ setMessage(e instanceof Error ? e.message : 'The funding intent could not be opened.');
+ }
+ } finally {
+ setBusy(false);
+ }
+ }
+
+ /** Step back from the disclosure, releasing the intent so the batch is not stuck. */
+ async function cancelDisclosure() {
+ if (!attemptId) {
+ setPhase('READY');
+ return;
+ }
+ setBusy(true);
+ try {
+ await abandonFunding(batchId, {
+ attemptId,
+ reason: 'Returned from the funding review without signing.',
+ userRejected: true,
+ orgId,
+ });
+ } catch {
+ // Even if releasing fails, reloading shows the true state.
+ } finally {
+ setBusy(false);
+ await load();
+ }
+ }
+
+ /**
+ * Sign and submit. One transaction.
+ *
+ * The hash is persisted by `onSubmitted`, the instant the network accepts it and
+ * BEFORE confirmation is polled β otherwise a failure while waiting would leave a
+ * transaction that may have moved money with no record of its hash, and the
+ * obvious recovery would be to sign another one.
+ */
+ async function signAndSubmit() {
+ if (!plan || !attemptId) return;
+ setBusy(true);
+ setMessage(null);
+ setPhase('AWAITING_SIGNATURE');
+
+ try {
+ const { CoreFlowClient } = await import('@/lib/contracts');
+ const client = new CoreFlowClient();
+ const args = planToContractArguments(plan);
+
+ const result = await client.submitInitializeEscrow(
+ args.manager,
+ args.financeApprover,
+ args.oraclePublicKeyHex,
+ args.payments,
+ async (hash) => {
+ if (mounted.current) {
+ setTxHash(hash);
+ setPhase('SUBMITTING');
+ }
+ await recordSubmitted(batchId, { attemptId, transactionHash: hash, orgId });
+ if (mounted.current) setPhase('CONFIRMING');
+ },
+ );
+
+ const returned = Number(result.returnValue);
+ if (!Number.isInteger(returned) || returned <= 0) {
+ // The return value was unreadable. The hash is recorded, and the server can
+ // resolve the escrow from it, so verification still proceeds β signing again
+ // is never the recovery.
+ setPhase('CONFIRMING');
+ await verify(attemptId);
+ return;
+ }
+
+ setEscrowId(returned);
+ await verify(attemptId, returned);
+ } catch (e) {
+ const text = e instanceof Error ? e.message : String(e);
+ // A declined signature is the one failure where nothing reached the network,
+ // so it is the only one that is plainly safe to retry.
+ const declined = /reject|denied|cancel|user declined/i.test(text);
+
+ if (declined && !txHash) {
+ setPhase('USER_REJECTED');
+ setMessage('Signing was cancelled. Nothing was submitted and no funds moved.');
+ if (attemptId) {
+ await abandonFunding(batchId, {
+ attemptId,
+ reason: 'Signature declined in the wallet.',
+ userRejected: true,
+ orgId,
+ }).catch(() => {});
+ }
+ await load();
+ } else if (txHash) {
+ // Submitted, then something went wrong while waiting. The outcome is unknown.
+ setPhase('VERIFYING');
+ setMessage(
+ 'The transaction was submitted, but we could not confirm it. ' +
+ 'Its outcome is unknown.',
+ );
+ } else if (/simulat|contract|HostError|trap/i.test(text)) {
+ setPhase('CONTRACT_REJECTED');
+ setMessage(text.slice(0, 300));
+ } else {
+ setPhase('RPC_FAILED');
+ setMessage(text.slice(0, 300));
+ }
+ } finally {
+ setBusy(false);
+ }
+ }
+
+ /** Ask the server to verify against the frozen plan, and reflect the verdict. */
+ const verify = useCallback(
+ async (attempt: string, onChainEscrowId?: number) => {
+ setBusy(true);
+ try {
+ const result: ConfirmResult = await confirmFunding(batchId, {
+ attemptId: attempt,
+ // May be undefined: the server resolves the escrow from the transaction
+ // hash, so a return value we could not parse does not block recovery.
+ onChainEscrowId,
+ orgId,
+ });
+ setDifferences(result.differences ?? []);
+
+ switch (result.outcome) {
+ case 'CONFIRMED':
+ setPhase('FUNDED');
+ setMessage(null);
+ onFunded?.();
+ break;
+ case 'FAILED':
+ setPhase('CONTRACT_REJECTED');
+ setMessage(result.reason ?? 'The transaction failed on-chain. No funds moved.');
+ break;
+ case 'UNVERIFIABLE':
+ // NOT a failure. Saying "failed" here would be a claim about money we
+ // have not established.
+ setPhase('VERIFYING');
+ setMessage(result.reason ?? 'The transaction could not be verified yet.');
+ break;
+ case 'MISMATCH':
+ setPhase('MISMATCH');
+ setMessage(
+ 'The transaction does not match this payrollβs funding plan, so the escrow ' +
+ 'was not attached to this batch.',
+ );
+ break;
+ }
+ await load();
+ } catch (e) {
+ setPhase('VERIFYING');
+ setMessage(e instanceof Error ? e.message : 'Verification could not be completed.');
+ } finally {
+ setBusy(false);
+ }
+ },
+ [batchId, orgId, onFunded, load],
+ );
+
+ /**
+ * Resolve a known-but-unverified transaction automatically, once.
+ *
+ * A submitted attempt whose outcome we do not know is the state a user is most
+ * likely to land in after a reload or a dropped connection, and the one where the
+ * wrong instinct β sign again β costs real money. Since the server can resolve the
+ * escrow from the hash alone, attempting it on arrival means the common case
+ * resolves itself with no action and no second signature.
+ *
+ * Guarded by a ref so a re-render cannot re-enter it, and deliberately not retried
+ * on a loop: repeated verification of a genuinely pending transaction is noise, and
+ * `Check status` remains available.
+ */
+ const autoRecovered = useRef(false);
+ useEffect(() => {
+ if (autoRecovered.current) return;
+ if (phase !== 'VERIFYING') return;
+ if (!attemptId || !txHash) return;
+ autoRecovered.current = true;
+ void verify(attemptId, escrowId ?? undefined);
+ }, [phase, attemptId, txHash, escrowId, verify]);
+
+ async function checkStatus() {
+ // Verification only needs the attempt: the escrow is resolved from the
+ // transaction hash server-side. Passing the id when we have it lets the server
+ // cross-check the two agree.
+ if (attemptId) {
+ await verify(attemptId, escrowId ?? undefined);
+ } else {
+ await load();
+ }
+ }
+
+ const reference = planReference(attempt?.planDigest);
+
+ return (
+
+
+
+ {/* Every state change is announced, so a screen reader follows the transaction. */}
+
+ {phaseAnnouncement(phase)}
+
+
+ {phase === 'LOADING' && Checking funding statusβ¦
}
+
+ {phase === 'BLOCKED' && state && (
+
+ )}
+
+ {(phase === 'READY' || phase === 'USER_REJECTED' || phase === 'RPC_FAILED' ||
+ phase === 'CONTRACT_REJECTED') && state && (
+
+ )}
+
+ {phase === 'DISCLOSING' && plan && (
+ setShowTechnical((v) => !v)}
+ />
+ )}
+
+ {(phase === 'AWAITING_SIGNATURE' ||
+ phase === 'SUBMITTING' ||
+ phase === 'CONFIRMING' ||
+ phase === 'VERIFYING') && (
+
+ )}
+
+ {phase === 'FUNDED' && state && (
+
+ )}
+
+ {phase === 'MISMATCH' && (
+
+ )}
+
+ {message && ['USER_REJECTED', 'RPC_FAILED', 'CONTRACT_REJECTED'].includes(phase) && (
+
+ )}
+
+
+ {!NO_FUNDING_BUTTON.includes(phase) && phase !== 'LOADING' && phase !== 'DISCLOSING' && (
+
+ {phase === 'READY' ? 'Review and fund' : 'Try again'}
+
+ )}
+
+ {phase === 'DISCLOSING' && (
+ <>
+
+ Back
+
+
+ Fund escrow
+
+ >
+ )}
+
+ {/*
+ No funding button while an outcome is unknown. The contract is not
+ idempotent, so offering one here is offering to move the money twice.
+ */}
+ {(phase === 'VERIFYING' || phase === 'CONFIRMING') && (
+
+ Check status
+
+ )}
+
+
+ );
+}
+
+function phaseAnnouncement(phase: Phase): string {
+ switch (phase) {
+ case 'AWAITING_SIGNATURE':
+ return 'Waiting for your wallet to sign the funding transaction.';
+ case 'SUBMITTING':
+ return 'Submitting the funding transaction to Stellar.';
+ case 'CONFIRMING':
+ return 'Confirming the funding transaction on Stellar.';
+ case 'VERIFYING':
+ return 'Still verifying whether the funding transaction completed. Do not fund again.';
+ case 'FUNDED':
+ return 'The payroll escrow is funded.';
+ case 'MISMATCH':
+ return 'The transaction did not match the funding plan. The escrow was not attached.';
+ case 'USER_REJECTED':
+ return 'Signing was cancelled. Nothing was submitted.';
+ default:
+ return '';
+ }
+}
+
+function Row({ label, children }: { label: string; children: React.ReactNode }) {
+ return (
+
+
{label}
+ {children}
+
+ );
+}
+
+function Summary({ state }: { state: FundingStateView }) {
+ return (
+
+ {state.assessment.paymentCount}
+
+ {state.assessment.total} {state.plan?.asset.code ?? ''}
+
+ {state.escrow ? `#${state.escrow.onChainId}` : 'New escrow'}
+ One
+
+ );
+}
+
+function Blockers({
+ blockers,
+ message,
+}: {
+ blockers: FundingStateView['assessment']['blockers'];
+ message: string | null;
+}) {
+ return (
+
+
+ This payroll cannot be funded yet
+
+ {message &&
{message}
}
+
+ {blockers.map((b, i) => (
+
+ {b.position !== undefined && (
+
+ Row {b.position}
+
+ )}
+ {b.message}
+
+ ))}
+
+
+ );
+}
+
+/**
+ * Everything the signer is entitled to know, before the wallet opens.
+ *
+ * Rendered from the frozen plan. A signature request that does not say what is
+ * being signed is the problem the attestation format solves at the protocol level;
+ * this is the same problem at the human level.
+ */
+function Disclosure({
+ plan,
+ reference,
+ showTechnical,
+ onToggleTechnical,
+}: {
+ plan: FundingPlan;
+ reference: string | null;
+ showTechnical: boolean;
+ onToggleTechnical: () => void;
+}) {
+ return (
+
+
+
+ You are funding payroll batch {plan.batch.reference} {' '}
+ from your wallet into a CoreFlow escrow.
+
+
+ The escrow is created and funded by one transaction. Funds are held by the
+ contract until verified work is approved by two separate people.
+
+
+
+
+
+
+ {plan.total} {plan.asset.code}
+
+
+ {plan.batch.paymentCount}
+ {plan.network.label}
+
+ {truncate(plan.custodyDestination)}
+
+
+ {truncate(plan.manager)}
+
+
+ {truncate(plan.financeApprover)}
+
+ {reference && {reference}
}
+
+
+
+
+ Payments ({plan.schedule.length})
+
+
+
+
+ Every payment this funding transaction covers
+
+
+
+ Recipient
+ Amount (base units)
+ Period
+
+
+
+ {plan.schedule.map((row) => (
+
+
+ {truncate(row.worker)}
+
+ {/* The exact value that will be signed, unformatted. */}
+ {row.amountBaseUnits}
+
+ {new Date(row.startDate * 1000).toISOString().slice(0, 10)} β{' '}
+ {new Date(row.endDate * 1000).toISOString().slice(0, 10)}
+
+
+ ))}
+
+
+
+
+
+
+
+ {showTechnical ? 'Hide technical details' : 'Technical details'}
+
+ {showTechnical && (
+
+
+ {plan.contractId}
+
+
+ {plan.asset.contractId}
+
+
+ {plan.oraclePublicKey.slice(0, 16)}β¦
+
+
+ {plan.totalBaseUnits}
+
+
+ )}
+
+
+ );
+}
+
+function Progress({
+ phase,
+ txHash,
+ message,
+}: {
+ phase: Phase;
+ txHash: string | null;
+ message: string | null;
+}) {
+ const steps: { key: Phase; label: string }[] = [
+ { key: 'AWAITING_SIGNATURE', label: 'Waiting for your wallet' },
+ { key: 'SUBMITTING', label: 'Submitting to Stellar' },
+ { key: 'CONFIRMING', label: 'Confirming on Stellar' },
+ ];
+ const index = steps.findIndex((s) => s.key === phase);
+ const uncertain = phase === 'VERIFYING';
+
+ return (
+
+
+ {steps.map((step, i) => {
+ const done = index > i || phase === 'VERIFYING';
+ const current = index === i;
+ return (
+
+
+ {done ? 'β' : i + 1}
+
+ {step.label}
+
+ );
+ })}
+
+
+ {uncertain && (
+
+
+ Weβre checking whether your funding transaction completed.
+
+ {/*
+ The most important sentence in this component. Funding is not
+ idempotent on-chain: a second signature creates a second escrow and
+ moves the money again.
+ */}
+
+ Do not fund this payroll again.
+
+ {message &&
{message}
}
+
+ )}
+
+ {txHash && (
+
+ Transaction{' '}
+
+ {truncate(txHash)}
+
+
+ )}
+
+ );
+}
+
+function Funded({ state, txHash }: { state: FundingStateView; txHash: string | null }) {
+ return (
+
+
+
Escrow funded
+
+ Verified against the chain: the escrow exists, matches this payrollβs plan, and the
+ funds reached the contract.
+
+
+
+ {state.escrow ? `#${state.escrow.onChainId}` : 'β'}
+
+ {state.assessment.total} {state.plan?.asset.code ?? ''}
+
+ {txHash && (
+
+
+ {truncate(txHash)}
+
+
+ )}
+
+
+ Next: work is verified by the oracle, then approved by a manager and a separate
+ finance approver before settlement.
+
+
+ );
+}
+
+function Mismatch({
+ message,
+ differences,
+ txHash,
+}: {
+ message: string | null;
+ differences: string[];
+ txHash: string | null;
+}) {
+ return (
+
+
+ Transaction details did not match the funding plan
+
+
{message}
+ {differences.length > 0 && (
+
+ {differences.map((d, i) => (
+ β’ {d}
+ ))}
+
+ )}
+
+ This has been recorded for investigation. Do not fund again until it is resolved.
+
+ {txHash && (
+
+
+ {truncate(txHash)}
+
+
+ )}
+
+ );
+}
+
+function FailureNotice({ phase, message }: { phase: Phase; message: string }) {
+ const titles: Partial> = {
+ USER_REJECTED: 'Signing was cancelled',
+ RPC_FAILED: 'We couldnβt reach the network',
+ CONTRACT_REJECTED: 'The Stellar contract rejected the transaction',
+ };
+ return (
+
+
{titles[phase]}
+
{message}
+ {phase === 'USER_REJECTED' && (
+
+ No funds moved. This payroll is editable again.
+
+ )}
+
+ );
+}
diff --git a/src/components/funding/__tests__/FundingPanel.test.tsx b/src/components/funding/__tests__/FundingPanel.test.tsx
new file mode 100644
index 0000000..b5339c6
--- /dev/null
+++ b/src/components/funding/__tests__/FundingPanel.test.tsx
@@ -0,0 +1,374 @@
+/**
+ * Funding panel behaviour.
+ *
+ * The properties under test are safety properties, not cosmetics: that an
+ * unresolved transaction never offers a second funding action, that a reload
+ * recovers the existing intent instead of opening another, and that UNVERIFIABLE is
+ * never rendered as failure.
+ */
+import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
+import { render, screen, waitFor, fireEvent } from '@testing-library/react';
+import { FundingPanel } from '../FundingPanel';
+
+vi.mock('@/components/NetworkBadge', () => ({
+ NetworkBadge: () => TESTNET ,
+}));
+
+const MANAGER = 'G' + 'M'.repeat(55);
+const FINANCE = 'G' + 'F'.repeat(55);
+const CONTRACT = 'C' + 'C'.repeat(55);
+const TOKEN = 'C' + 'T'.repeat(55);
+const HASH = 'a'.repeat(64);
+const DIGEST = 'beef1234' + '0'.repeat(56);
+
+function plan() {
+ return {
+ batch: { id: 'bat_1', reference: 'CF-00042', paymentCount: 2 },
+ total: '8,420.00',
+ totalBaseUnits: '84200000000',
+ asset: { code: 'USDC', contractId: TOKEN, decimals: 7 },
+ network: { id: 'testnet', label: 'Stellar Testnet', isMainnet: false },
+ contractId: CONTRACT,
+ custodyDestination: CONTRACT,
+ manager: MANAGER,
+ financeApprover: FINANCE,
+ oraclePublicKey: 'ab'.repeat(32),
+ schedule: [
+ {
+ paymentId: 'pay_1',
+ worker: 'G' + 'A'.repeat(55),
+ token: TOKEN,
+ amountBaseUnits: '42100000000',
+ rateBaseUnits: '250000000',
+ startDate: 1788000000,
+ endDate: 1789000000,
+ },
+ {
+ paymentId: 'pay_2',
+ worker: 'G' + 'B'.repeat(55),
+ token: TOKEN,
+ amountBaseUnits: '42100000000',
+ rateBaseUnits: '250000000',
+ startDate: 1788000000,
+ endDate: 1789000000,
+ },
+ ],
+ };
+}
+
+function state(over: Record = {}) {
+ return {
+ batch: { id: 'bat_1', reference: 'CF-00042' },
+ assessment: {
+ eligible: true,
+ blockers: [],
+ paymentCount: 2,
+ total: '8,420.00',
+ totalBaseUnits: '84200000000',
+ },
+ plan: plan(),
+ attempt: null,
+ escrow: null,
+ ...over,
+ };
+}
+
+function attempt(over: Record = {}) {
+ return {
+ id: 'btx_1',
+ status: 'AWAITING_SIGNATURE',
+ planDigest: DIGEST,
+ attempt: 1,
+ hash: null,
+ errorMessage: null,
+ createdAt: new Date().toISOString(),
+ submittedAt: null,
+ confirmedAt: null,
+ ...over,
+ };
+}
+
+/** Route responses, keyed by the suffix of the URL. */
+let routes: Record unknown>;
+let calls: string[];
+
+function mockFetch() {
+ return vi.fn(async (url: string, init?: RequestInit) => {
+ const path = String(url);
+ calls.push(`${init?.method ?? 'GET'} ${path.replace(/^.*\/funding/, '')}`);
+ const key = Object.keys(routes).find((k) => path.endsWith(k) || path.includes(k));
+ const body = key ? routes[key]() : null;
+ if (body && (body as any).__status) {
+ return new Response(JSON.stringify(body), { status: (body as any).__status });
+ }
+ return new Response(JSON.stringify(body ?? {}), { status: 200 });
+ });
+}
+
+beforeEach(() => {
+ calls = [];
+ routes = {};
+ vi.stubGlobal('fetch', mockFetch());
+});
+
+afterEach(() => {
+ vi.unstubAllGlobals();
+ vi.restoreAllMocks();
+});
+
+describe('a fundable batch', () => {
+ beforeEach(() => {
+ routes = { '/funding': () => state() };
+ });
+
+ it('shows the total, recipient count and that there is ONE transaction', async () => {
+ render( );
+ await waitFor(() => expect(screen.getByText('Review and fund')).toBeDefined());
+
+ expect(screen.getByText(/same Stellar transaction/i)).toBeDefined();
+ expect(screen.getByText('8,420.00 USDC')).toBeDefined();
+ expect(screen.getByText('One')).toBeDefined();
+ // Never two steps: there is no "create escrow" action anywhere.
+ expect(screen.queryByText(/create escrow/i)).toBeNull();
+ });
+
+ it('shows the Testnet badge', async () => {
+ render( );
+ await waitFor(() => expect(screen.getByTestId('network-badge')).toBeDefined());
+ });
+});
+
+describe('the pre-signing disclosure', () => {
+ beforeEach(() => {
+ routes = {
+ '/funding/intent': () => ({ created: true, attempt: attempt(), plan: plan() }),
+ '/funding': () => state(),
+ };
+ });
+
+ it('discloses what is being signed before the wallet opens', async () => {
+ render( );
+ await waitFor(() => screen.getByText('Review and fund'));
+ fireEvent.click(screen.getByText('Review and fund'));
+
+ await waitFor(() => expect(screen.getByText('Fund escrow')).toBeDefined());
+
+ expect(screen.getByText(/payroll batch CF-00042/i)).toBeDefined();
+ expect(screen.getByText('8,420.00 USDC')).toBeDefined();
+ expect(screen.getByText('Stellar Testnet')).toBeDefined();
+ // Destination and both parties to the dual-control gate.
+ expect(screen.getByText('Destination')).toBeDefined();
+ expect(screen.getByText('Finance approver')).toBeDefined();
+ // A quotable plan reference derived from the digest.
+ expect(screen.getByText('CF-PLAN-BEEF1234')).toBeDefined();
+ });
+
+ it('lists every payment with its exact base-unit amount', async () => {
+ render( );
+ await waitFor(() => screen.getByText('Review and fund'));
+ fireEvent.click(screen.getByText('Review and fund'));
+ await waitFor(() => screen.getByText('Fund escrow'));
+
+ expect(screen.getByText('Payments (2)')).toBeDefined();
+ // The exact values that will be signed, unformatted.
+ expect(screen.getAllByText('42100000000')).toHaveLength(2);
+ });
+
+ it('releases the intent when the reviewer steps back, so the batch is not stuck', async () => {
+ routes['/funding/abandon'] = () => ({ attempt: attempt({ status: 'CANCELLED' }) });
+ render( );
+ await waitFor(() => screen.getByText('Review and fund'));
+ fireEvent.click(screen.getByText('Review and fund'));
+ await waitFor(() => screen.getByText('Back'));
+ fireEvent.click(screen.getByText('Back'));
+
+ await waitFor(() => expect(calls.some((c) => c.includes('/abandon'))).toBe(true));
+ });
+});
+
+describe('an unresolved transaction', () => {
+ beforeEach(() => {
+ routes = {
+ '/funding': () =>
+ state({
+ attempt: attempt({ status: 'SUBMITTED', hash: HASH, submittedAt: new Date().toISOString() }),
+ }),
+ };
+ });
+
+ it('tells the user not to fund again, and offers no funding action', async () => {
+ render( );
+
+ await waitFor(() =>
+ expect(screen.getByText(/checking whether your funding transaction completed/i)).toBeDefined(),
+ );
+ expect(screen.getByText('Do not fund this payroll again.')).toBeDefined();
+
+ // The contract is not idempotent: a second signature funds a second escrow.
+ expect(screen.queryByText('Fund escrow')).toBeNull();
+ expect(screen.queryByText('Review and fund')).toBeNull();
+ expect(screen.queryByText('Try again')).toBeNull();
+ // Only a safe, read-only action.
+ expect(screen.getByText('Check status')).toBeDefined();
+ });
+
+ it('recovers the existing attempt on mount rather than opening another', async () => {
+ render( );
+ await waitFor(() => screen.getByText('Check status'));
+
+ // A reload must not create a second intent.
+ expect(calls.filter((c) => c.includes('/intent'))).toHaveLength(0);
+ expect(calls[0]).toBe('GET ');
+ });
+
+ it('announces the uncertain state to assistive technology', async () => {
+ render( );
+ await waitFor(() =>
+ expect(
+ screen.getByText(/Still verifying whether the funding transaction completed/i),
+ ).toBeDefined(),
+ );
+ });
+});
+
+describe('a confirmed batch', () => {
+ beforeEach(() => {
+ routes = {
+ '/funding': () =>
+ state({
+ attempt: attempt({ status: 'CONFIRMED', hash: HASH, confirmedAt: new Date().toISOString() }),
+ escrow: { id: 'esc_1', onChainId: 9 },
+ }),
+ };
+ });
+
+ it('reports funded, with the escrow and transaction, and offers no re-funding', async () => {
+ render( );
+ await waitFor(() => expect(screen.getByText('Escrow funded')).toBeDefined());
+
+ expect(screen.getByText('#9')).toBeDefined();
+ expect(screen.getByText(/Verified against the chain/i)).toBeDefined();
+ expect(screen.queryByText('Fund escrow')).toBeNull();
+ expect(screen.queryByText('Review and fund')).toBeNull();
+ });
+});
+
+describe('a batch that cannot be funded', () => {
+ it('lists every blocker at once, with row numbers', async () => {
+ routes = {
+ '/funding': () =>
+ state({
+ assessment: {
+ eligible: false,
+ paymentCount: 2,
+ total: '8,420.00',
+ totalBaseUnits: '84200000000',
+ blockers: [
+ { code: 'PERIOD_REQUIRED', message: 'Row 2 has no pay period.', position: 2 },
+ {
+ code: 'NO_DISTINCT_FINANCE_APPROVER',
+ message: 'This organization has no second wallet to act as finance approver.',
+ },
+ ],
+ },
+ plan: null,
+ }),
+ };
+ render( );
+
+ await waitFor(() =>
+ expect(screen.getByText('This payroll cannot be funded yet')).toBeDefined(),
+ );
+ expect(screen.getByText('Row 2')).toBeDefined();
+ expect(screen.getByText(/no second wallet/i)).toBeDefined();
+ // No signing path out of a blocked state.
+ expect(screen.queryByText('Fund escrow')).toBeNull();
+ });
+});
+
+describe('a mismatched transaction', () => {
+ it('says the escrow was not attached and does not offer to fund again', async () => {
+ routes = {
+ '/funding/intent': () => ({ created: true, attempt: attempt(), plan: plan() }),
+ '/funding/confirm': () => ({
+ outcome: 'MISMATCH',
+ attempt: attempt({ status: 'SUBMITTED', hash: HASH }),
+ differences: ['payment 0 pays Gβ¦, the plan says Gβ¦'],
+ }),
+ '/funding': () =>
+ state({ attempt: attempt({ status: 'SUBMITTED', hash: HASH }) }),
+ };
+
+ // Reached via the server's verdict, which the panel renders without softening.
+ render( );
+ await waitFor(() => screen.getByText('Check status'));
+ fireEvent.click(screen.getByText('Check status'));
+
+ // With no escrow id known, Check status reloads rather than confirming β the
+ // panel must not invent an escrow id to verify against.
+ await waitFor(() => expect(calls.filter((c) => c.startsWith('GET')).length).toBeGreaterThan(1));
+ expect(screen.queryByText('Fund escrow')).toBeNull();
+ });
+});
+
+describe('recovery through the page (mandatory regression)', () => {
+ it('resolves the escrow from the hash on mount and becomes funded, creating nothing new', async () => {
+ // The state a user lands in after a reload or a dropped connection: a submitted
+ // transaction, a known hash, and no escrow id.
+ let confirmed = false;
+ routes = {
+ '/funding/confirm': () => {
+ confirmed = true;
+ return {
+ outcome: 'CONFIRMED',
+ attempt: attempt({ status: 'CONFIRMED', hash: HASH, confirmedAt: new Date().toISOString() }),
+ escrow: { id: 'esc_1', onChainId: 9 },
+ };
+ },
+ '/funding': () =>
+ confirmed
+ ? state({
+ attempt: attempt({ status: 'CONFIRMED', hash: HASH }),
+ escrow: { id: 'esc_1', onChainId: 9 },
+ })
+ : state({ attempt: attempt({ status: 'SUBMITTED', hash: HASH }) }),
+ };
+
+ render( );
+
+ // Recovery happens without the user doing anything.
+ await waitFor(() => expect(screen.getByText('Escrow funded')).toBeDefined());
+ expect(screen.getByText('#9')).toBeDefined();
+
+ // The confirm call carried NO escrow id: the server resolved it from the hash.
+ const confirmCall = calls.find((c) => c.includes('/confirm'));
+ expect(confirmCall).toBeDefined();
+
+ // Nothing new was created, and no signature was requested.
+ expect(calls.filter((c) => c.includes('/intent'))).toHaveLength(0);
+ expect(calls.filter((c) => c.includes('/submitted'))).toHaveLength(0);
+ expect(calls.filter((c) => c.includes('/abandon'))).toHaveLength(0);
+ expect(screen.queryByText('Fund escrow')).toBeNull();
+ expect(screen.queryByText('Review and fund')).toBeNull();
+ });
+
+ it('attempts recovery once, not in a loop, when it stays unresolved', async () => {
+ routes = {
+ '/funding/confirm': () => ({
+ outcome: 'UNVERIFIABLE',
+ attempt: attempt({ status: 'SUBMITTED', hash: HASH }),
+ reason: 'No escrow/created event has been observed yet.',
+ }),
+ '/funding': () => state({ attempt: attempt({ status: 'SUBMITTED', hash: HASH }) }),
+ };
+
+ render( );
+ await waitFor(() => expect(screen.getByText('Check status')).toBeDefined());
+ await new Promise((r) => setTimeout(r, 60));
+
+ // One automatic attempt. Re-verifying a genuinely pending transaction on a loop
+ // is noise, and "Check status" remains available.
+ expect(calls.filter((c) => c.includes('/confirm'))).toHaveLength(1);
+ expect(screen.getByText('Do not fund this payroll again.')).toBeDefined();
+ });
+});
diff --git a/src/components/modals/CreateEscrowModal.tsx b/src/components/modals/CreateEscrowModal.tsx
index 43b68d7..27f8497 100644
--- a/src/components/modals/CreateEscrowModal.tsx
+++ b/src/components/modals/CreateEscrowModal.tsx
@@ -1,73 +1,209 @@
-import { useState } from 'react';
+import { useMemo, useState } from 'react';
+import { parseAmount, formatAmount, hoursForAmount, MoneyParseError, SAC_DECIMALS } from '@/lib/money';
interface CreateEscrowModalProps {
isOpen: boolean;
onClose: () => void;
- onSubmit: (workerPubKey: string, amountCents: number, rateCents: number) => Promise;
+ /**
+ * Amounts are base units (bigint), never dollars-as-number. See lib/money.
+ * `financeApprover` is required on-chain: the contract rejects an escrow whose
+ * manager and finance approver are the same key.
+ */
+ onSubmit: (
+ workerPubKey: string,
+ financeApprover: string,
+ amountUnits: bigint,
+ rateUnits: bigint
+ ) => Promise;
isMockMode: boolean;
+ /** The connected wallet β it becomes the escrow manager. */
+ managerAddress?: string;
}
-export function CreateEscrowModal({ isOpen, onClose, onSubmit, isMockMode }: CreateEscrowModalProps) {
+const STELLAR_ADDRESS = /^[GC][A-Z2-7]{55}$/;
+
+export function CreateEscrowModal({
+ isOpen,
+ onClose,
+ onSubmit,
+ isMockMode,
+ managerAddress,
+}: CreateEscrowModalProps) {
const [newWorker, setNewWorker] = useState('');
+ const [financeApprover, setFinanceApprover] = useState('');
const [newAmount, setNewAmount] = useState('100');
const [newRate, setNewRate] = useState('2.5');
+ const [formError, setFormError] = useState(null);
+
+ /**
+ * Preview the exact on-chain figures before the user commits funds.
+ *
+ * The contract enforces `hours Γ rate_per_hour == amount` and refuses
+ * anything else, so an amount that is not a whole multiple of the rate would
+ * fund custody into an escrow that can never settle. Surfacing it here turns
+ * a stuck escrow into a form message.
+ */
+ type Preview =
+ | { error: string }
+ | { error?: undefined; amountUnits: bigint; rateUnits: bigint; hours: bigint };
+
+ const preview: Preview = useMemo((): Preview => {
+ try {
+ const amountUnits = parseAmount(newAmount, SAC_DECIMALS);
+ const rateUnits = parseAmount(newRate, SAC_DECIMALS);
+ if (amountUnits <= 0n) return { error: 'Amount must be greater than zero.' };
+ if (rateUnits <= 0n) return { error: 'Hourly rate must be greater than zero.' };
+
+ const hours = hoursForAmount(amountUnits, rateUnits);
+ if (hours === null) {
+ return {
+ error:
+ `${newAmount} is not a whole number of hours at ${newRate}/hr. ` +
+ `Adjust the amount to a multiple of the rate.`,
+ };
+ }
+ return { amountUnits, rateUnits, hours };
+ } catch (e) {
+ return { error: e instanceof MoneyParseError ? e.message : 'Invalid amount.' };
+ }
+ }, [newAmount, newRate]);
if (!isOpen) return null;
+ const workerValid = isMockMode || STELLAR_ADDRESS.test(newWorker.trim());
+ const financeValid = isMockMode || STELLAR_ADDRESS.test(financeApprover.trim());
+ const financeIsManager =
+ !!managerAddress && financeApprover.trim() === managerAddress;
+ const financeIsWorker =
+ !!financeApprover.trim() && financeApprover.trim() === newWorker.trim();
+
+ const canSubmit =
+ workerValid &&
+ financeValid &&
+ !financeIsManager &&
+ !financeIsWorker &&
+ preview.error === undefined;
+
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
- const amountCents = Math.floor(parseFloat(newAmount) * 100);
- const rateCents = Math.floor(parseFloat(newRate) * 100);
- await onSubmit(newWorker.trim(), amountCents, rateCents);
-
- // Reset form after submit
+ setFormError(null);
+
+ if (preview.error !== undefined) {
+ setFormError(preview.error);
+ return;
+ }
+ if (financeIsManager) {
+ setFormError('Finance approver must be a different person from the manager.');
+ return;
+ }
+
+ await onSubmit(
+ newWorker.trim(),
+ financeApprover.trim(),
+ preview.amountUnits,
+ preview.rateUnits
+ );
+
setNewWorker('');
+ setFinanceApprover('');
setNewAmount('100');
setNewRate('2.5');
};
+ const inputCls = (invalid: boolean) =>
+ `w-full bg-slate-950 border focus:border-violet-500 rounded-lg px-3 py-2 text-xs font-mono text-slate-200 outline-none ${
+ invalid ? 'border-rose-500/50' : 'border-slate-800'
+ }`;
+
return (
-
+
-
Initialize New Escrow
+
+ Initialize New Escrow
+