diff --git a/contracts/reward-engine/src/verification.rs b/contracts/reward-engine/src/verification.rs index f7fbcdc..bde7ee9 100644 --- a/contracts/reward-engine/src/verification.rs +++ b/contracts/reward-engine/src/verification.rs @@ -239,6 +239,12 @@ impl RewardEngine { None => panic!("engine: verification not found"), }; + if verification.status != VerificationStatus::Pending + && verification.status != VerificationStatus::Rejected + { + panic!("engine: verification is not disputable"); + } + verification.status = VerificationStatus::Disputed; storage::write_verification(&e, task_id, &user, &verification); storage::remove_verification_key(&e, task_id, &user); @@ -532,6 +538,50 @@ mod test { client.resolve_dispute(&admin, &user, &task_id, &true, &1000); } + #[test] + #[should_panic(expected = "engine: verification is not disputable")] + fn test_dispute_approved_fails() { + let (e, admin, oracle, user, task_id, client) = setup(); + e.mock_all_auths_allowing_non_root_auth(); + + let proof_cid = String::from_str(&e, "QmApproved"); + client.submit_proof(&oracle, &user, &task_id, &proof_cid); + client.approve_proof(&oracle, &user, &task_id, &500); + + client.dispute_proof(&admin, &user, &task_id); + } + + #[test] + #[should_panic(expected = "engine: verification is not disputable")] + fn test_dispute_already_disputed_fails() { + let (e, admin, oracle, user, task_id, client) = setup(); + e.mock_all_auths_allowing_non_root_auth(); + + let proof_cid = String::from_str(&e, "QmAlreadyDisputed"); + client.submit_proof(&oracle, &user, &task_id, &proof_cid); + client.dispute_proof(&admin, &user, &task_id); + + client.dispute_proof(&admin, &user, &task_id); + } + + #[test] + fn test_dispute_rejected_succeeds() { + let (e, admin, oracle, user, task_id, client) = setup(); + e.mock_all_auths_allowing_non_root_auth(); + + let proof_cid = String::from_str(&e, "QmRejectedDispute"); + client.submit_proof(&oracle, &user, &task_id, &proof_cid); + client.reject_proof(&oracle, &user, &task_id); + + let verification = client.get_verification(&task_id, &user); + assert_eq!(verification.status, VerificationStatus::Rejected); + + client.dispute_proof(&admin, &user, &task_id); + + let verification = client.get_verification(&task_id, &user); + assert_eq!(verification.status, VerificationStatus::Disputed); + } + #[test] fn test_full_integration() { let e = Env::default(); diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_dispute_flow.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_dispute_flow.1.json index 2d6ad08..bfb4d93 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_dispute_flow.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_dispute_flow.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "2876c9fe950179d6a5142c63af713ceacc05830d2f616f7cc60b55ce1853816b" + "bytes": "c1fa470ca46f65cb7f4ab2e37f159d2f00f29a64b3d5592242bd7ca32347f462" }, { "i128": "1000" @@ -276,6 +276,176 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "CreatorTasks" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": "0" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Task" + }, + { + "u64": "0" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completions" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "expires_at" + }, + "val": { + "u64": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "location_hash" + }, + "val": { + "bytes": "c1fa470ca46f65cb7f4ab2e37f159d2f00f29a64b3d5592242bd7ca32347f462" + } + }, + { + "key": { + "symbol": "max_completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Active" + } + ] + } + }, + { + "key": { + "symbol": "task_type" + }, + "val": { + "string": "tree-planting" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -303,122 +473,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - { - "key": { - "vec": [ - { - "symbol": "Task" - }, - { - "u64": "0" - } - ] - }, - "val": { - "map": [ - { - "key": { - "symbol": "completions" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "creator" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "symbol": "expires_at" - }, - "val": { - "u64": "10000" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "location_hash" - }, - "val": { - "bytes": "2876c9fe950179d6a5142c63af713ceacc05830d2f616f7cc60b55ce1853816b" - } - }, - { - "key": { - "symbol": "max_completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "reward_amount" - }, - "val": { - "i128": "1000" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "task_type" - }, - "val": { - "string": "tree-planting" - } - } - ] - } - }, { "key": { "vec": [ @@ -599,6 +653,18 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } + }, + { + "key": { + "vec": [ + { + "symbol": "VerificationList" + } + ] + }, + "val": { + "vec": [] + } } ] } diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_double_approve_fails.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_double_approve_fails.1.json index eb31489..d1fe683 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_double_approve_fails.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_double_approve_fails.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "9150b8d8328f0a30f9dd9892f56a2ed6a14e496f2222dcce36f2153648ed4611" + "bytes": "69fda08900a5385555a72548ffe210eb567bd16aab69074bb3b2cdc72b00d042" }, { "i128": "1000" @@ -376,6 +376,176 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "CreatorTasks" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": "0" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Task" + }, + { + "u64": "0" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "expires_at" + }, + "val": { + "u64": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "location_hash" + }, + "val": { + "bytes": "69fda08900a5385555a72548ffe210eb567bd16aab69074bb3b2cdc72b00d042" + } + }, + { + "key": { + "symbol": "max_completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Completed" + } + ] + } + }, + { + "key": { + "symbol": "task_type" + }, + "val": { + "string": "tree-planting" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -403,122 +573,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - { - "key": { - "vec": [ - { - "symbol": "Task" - }, - { - "u64": "0" - } - ] - }, - "val": { - "map": [ - { - "key": { - "symbol": "completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "creator" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "symbol": "expires_at" - }, - "val": { - "u64": "10000" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "location_hash" - }, - "val": { - "bytes": "9150b8d8328f0a30f9dd9892f56a2ed6a14e496f2222dcce36f2153648ed4611" - } - }, - { - "key": { - "symbol": "max_completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "reward_amount" - }, - "val": { - "i128": "1000" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Completed" - } - ] - } - }, - { - "key": { - "symbol": "task_type" - }, - "val": { - "string": "tree-planting" - } - } - ] - } - }, { "key": { "vec": [ @@ -701,6 +755,18 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } + }, + { + "key": { + "vec": [ + { + "symbol": "VerificationList" + } + ] + }, + "val": { + "vec": [] + } } ] } diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_full_integration.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_full_integration.1.json index cb514a9..e26ab0d 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_full_integration.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_full_integration.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "50a64806baf6adfdf1458f1b262f7047071e6dc25a43035ad53cd4c6b89ff1de" + "bytes": "f807551160682338c907c30b86732665a2107472283d57577a7647797bf0f66a" }, { "i128": "1000" @@ -377,6 +377,176 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "CreatorTasks" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": "0" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Task" + }, + { + "u64": "0" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "expires_at" + }, + "val": { + "u64": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "location_hash" + }, + "val": { + "bytes": "f807551160682338c907c30b86732665a2107472283d57577a7647797bf0f66a" + } + }, + { + "key": { + "symbol": "max_completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Completed" + } + ] + } + }, + { + "key": { + "symbol": "task_type" + }, + "val": { + "string": "tree-planting" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -404,122 +574,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - { - "key": { - "vec": [ - { - "symbol": "Task" - }, - { - "u64": "0" - } - ] - }, - "val": { - "map": [ - { - "key": { - "symbol": "completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "creator" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "symbol": "expires_at" - }, - "val": { - "u64": "10000" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "location_hash" - }, - "val": { - "bytes": "50a64806baf6adfdf1458f1b262f7047071e6dc25a43035ad53cd4c6b89ff1de" - } - }, - { - "key": { - "symbol": "max_completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "reward_amount" - }, - "val": { - "i128": "1000" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Completed" - } - ] - } - }, - { - "key": { - "symbol": "task_type" - }, - "val": { - "string": "tree-planting" - } - } - ] - } - }, { "key": { "vec": [ @@ -702,6 +756,18 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } + }, + { + "key": { + "vec": [ + { + "symbol": "VerificationList" + } + ] + }, + "val": { + "vec": [] + } } ] } diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_resolved_not_in_pending_list.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_resolved_not_in_pending_list.1.json index 4c9cf5b..d318511 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_resolved_not_in_pending_list.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_resolved_not_in_pending_list.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "31b34cbe1b4e5d62a7f75ae8f24b5ac2dd418b1a2626d42be93389d10601b554" + "bytes": "79f42cd2e728868423eebc9ea96aa6e31e67903a5be5adae4f1266609a1fc225" }, { "i128": "1000" @@ -598,6 +598,33 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -663,7 +690,7 @@ "symbol": "location_hash" }, "val": { - "bytes": "31b34cbe1b4e5d62a7f75ae8f24b5ac2dd418b1a2626d42be93389d10601b554" + "bytes": "79f42cd2e728868423eebc9ea96aa6e31e67903a5be5adae4f1266609a1fc225" } }, { @@ -737,22 +764,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, { "key": { "vec": [ diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_approve.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_approve.1.json index 5fec32f..ed93c39 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_approve.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_approve.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "b1fbf9f606867761813d1f2eddf1c61f7edd0527bc3a10b8d524c9d6397ea82c" + "bytes": "33b5d4c915b73a1ccd475cd39f0d1e59bb397a3503b5558271a17909e73705d7" }, { "i128": "1000" @@ -376,6 +376,176 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "CreatorTasks" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": "0" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Task" + }, + { + "u64": "0" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "expires_at" + }, + "val": { + "u64": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "location_hash" + }, + "val": { + "bytes": "33b5d4c915b73a1ccd475cd39f0d1e59bb397a3503b5558271a17909e73705d7" + } + }, + { + "key": { + "symbol": "max_completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Completed" + } + ] + } + }, + { + "key": { + "symbol": "task_type" + }, + "val": { + "string": "tree-planting" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -403,122 +573,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - { - "key": { - "vec": [ - { - "symbol": "Task" - }, - { - "u64": "0" - } - ] - }, - "val": { - "map": [ - { - "key": { - "symbol": "completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "creator" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "symbol": "expires_at" - }, - "val": { - "u64": "10000" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "location_hash" - }, - "val": { - "bytes": "b1fbf9f606867761813d1f2eddf1c61f7edd0527bc3a10b8d524c9d6397ea82c" - } - }, - { - "key": { - "symbol": "max_completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "reward_amount" - }, - "val": { - "i128": "1000" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Completed" - } - ] - } - }, - { - "key": { - "symbol": "task_type" - }, - "val": { - "string": "tree-planting" - } - } - ] - } - }, { "key": { "vec": [ @@ -701,6 +755,18 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } + }, + { + "key": { + "vec": [ + { + "symbol": "VerificationList" + } + ] + }, + "val": { + "vec": [] + } } ] } diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_reject.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_reject.1.json index 4b14b10..b23cba2 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_reject.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_submit_and_reject.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "ec7e6d6fa36846e184f4764fecac5c637ba88f08f1f194b2206a80e9f7e502bb" + "bytes": "7113737c80c35e5b809d8b988d90cdea5825730f3240f3412334b0531c876eab" }, { "i128": "1000" @@ -276,6 +276,176 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "CreatorTasks" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": "0" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Task" + }, + { + "u64": "0" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completions" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "expires_at" + }, + "val": { + "u64": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "location_hash" + }, + "val": { + "bytes": "7113737c80c35e5b809d8b988d90cdea5825730f3240f3412334b0531c876eab" + } + }, + { + "key": { + "symbol": "max_completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Active" + } + ] + } + }, + { + "key": { + "symbol": "task_type" + }, + "val": { + "string": "tree-planting" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -303,122 +473,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - { - "key": { - "vec": [ - { - "symbol": "Task" - }, - { - "u64": "0" - } - ] - }, - "val": { - "map": [ - { - "key": { - "symbol": "completions" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "creator" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "symbol": "expires_at" - }, - "val": { - "u64": "10000" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "location_hash" - }, - "val": { - "bytes": "ec7e6d6fa36846e184f4764fecac5c637ba88f08f1f194b2206a80e9f7e502bb" - } - }, - { - "key": { - "symbol": "max_completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "reward_amount" - }, - "val": { - "i128": "1000" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "task_type" - }, - "val": { - "string": "tree-planting" - } - } - ] - } - }, { "key": { "vec": [ @@ -601,6 +655,18 @@ "val": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } + }, + { + "key": { + "vec": [ + { + "symbol": "VerificationList" + } + ] + }, + "val": { + "vec": [] + } } ] } diff --git a/contracts/reward-engine/test_snapshots/verification/test/test_unauthorized_oracle_cannot_submit.1.json b/contracts/reward-engine/test_snapshots/verification/test/test_unauthorized_oracle_cannot_submit.1.json index ef0beac..2107b84 100644 --- a/contracts/reward-engine/test_snapshots/verification/test/test_unauthorized_oracle_cannot_submit.1.json +++ b/contracts/reward-engine/test_snapshots/verification/test/test_unauthorized_oracle_cannot_submit.1.json @@ -49,7 +49,7 @@ "string": "tree-planting" }, { - "bytes": "449ec9d7f3e48861e0ee24c5c70f339a1429ec6a9e89c37e3264a0e6c8596a83" + "bytes": "7090fb7553629089645be803afd76ef74dffb73db9fbe3afa4fa5dafe8fae562" }, { "i128": "1000" @@ -183,6 +183,176 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "CreatorTasks" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": "0" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Sponsor" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "Task" + }, + { + "u64": "0" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completions" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "expires_at" + }, + "val": { + "u64": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "location_hash" + }, + "val": { + "bytes": "7090fb7553629089645be803afd76ef74dffb73db9fbe3afa4fa5dafe8fae562" + } + }, + { + "key": { + "symbol": "max_completions" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Active" + } + ] + } + }, + { + "key": { + "symbol": "task_type" + }, + "val": { + "string": "tree-planting" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -210,122 +380,6 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" } }, - { - "key": { - "vec": [ - { - "symbol": "Sponsors" - } - ] - }, - "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - { - "key": { - "vec": [ - { - "symbol": "Task" - }, - { - "u64": "0" - } - ] - }, - "val": { - "map": [ - { - "key": { - "symbol": "completions" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "creator" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "symbol": "expires_at" - }, - "val": { - "u64": "10000" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "location_hash" - }, - "val": { - "bytes": "449ec9d7f3e48861e0ee24c5c70f339a1429ec6a9e89c37e3264a0e6c8596a83" - } - }, - { - "key": { - "symbol": "max_completions" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "reward_amount" - }, - "val": { - "i128": "1000" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "task_type" - }, - "val": { - "string": "tree-planting" - } - } - ] - } - }, { "key": { "vec": [