diff --git a/contracts/financing_pool/test_snapshots/tests/test_initialize_zero_penalty_bps_allowed.1.json b/contracts/financing_pool/test_snapshots/tests/test_initialize_zero_penalty_bps_allowed.1.json new file mode 100644 index 0000000..ca12eb5 --- /dev/null +++ b/contracts/financing_pool/test_snapshots/tests/test_initialize_zero_penalty_bps_allowed.1.json @@ -0,0 +1,185 @@ +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 0 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/financing_pool/test_snapshots/tests/test_record_position_contributed_exceeds_total_fails.1.json b/contracts/financing_pool/test_snapshots/tests/test_record_position_contributed_exceeds_total_fails.1.json new file mode 100644 index 0000000..bfd6c10 --- /dev/null +++ b/contracts/financing_pool/test_snapshots/tests/test_record_position_contributed_exceeds_total_fails.1.json @@ -0,0 +1,341 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_position" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 10000000001 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_position" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_position" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 10000000001 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/financing_pool/test_snapshots/tests/test_record_position_share_bps_correct.1.json b/contracts/financing_pool/test_snapshots/tests/test_record_position_share_bps_correct.1.json new file mode 100644 index 0000000..3264f15 --- /dev/null +++ b/contracts/financing_pool/test_snapshots/tests/test_record_position_share_bps_correct.1.json @@ -0,0 +1,526 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_position", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 5000000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Positions" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Positions" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + "val": { + "map": [ + { + "key": { + "symbol": "contributed" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + }, + { + "key": { + "symbol": "investor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "share_bps" + }, + "val": { + "u32": 5000 + } + }, + { + "key": { + "symbol": "yield_claimed" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_position" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 5000000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_position" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_positions" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_positions" + } + ], + "data": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "contributed" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + }, + { + "key": { + "symbol": "investor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "share_bps" + }, + "val": { + "u32": 5000 + } + }, + { + "key": { + "symbol": "yield_claimed" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/financing_pool/test_snapshots/tests/test_record_position_zero_contributed_fails.1.json b/contracts/financing_pool/test_snapshots/tests/test_record_position_zero_contributed_fails.1.json new file mode 100644 index 0000000..e927e10 --- /dev/null +++ b/contracts/financing_pool/test_snapshots/tests/test_record_position_zero_contributed_fails.1.json @@ -0,0 +1,341 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_position" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_position" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_position" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/financing_pool/test_snapshots/tests/test_repay_negative_amount_fails.1.json b/contracts/financing_pool/test_snapshots/tests/test_repay_negative_amount_fails.1.json new file mode 100644 index 0000000..5388fda --- /dev/null +++ b/contracts/financing_pool/test_snapshots/tests/test_repay_negative_amount_fails.1.json @@ -0,0 +1,329 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "repay" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": -1, + "lo": 18446744073709551615 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "repay" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "repay" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": -1, + "lo": 18446744073709551615 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/financing_pool/test_snapshots/tests/test_repay_zero_amount_fails.1.json b/contracts/financing_pool/test_snapshots/tests/test_repay_zero_amount_fails.1.json new file mode 100644 index 0000000..899c110 --- /dev/null +++ b/contracts/financing_pool/test_snapshots/tests/test_repay_zero_amount_fails.1.json @@ -0,0 +1,329 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "repay" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "repay" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "repay" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/src/lib.rs b/contracts/invoice_nft/src/lib.rs index b2e73b6..db9638a 100644 --- a/contracts/invoice_nft/src/lib.rs +++ b/contracts/invoice_nft/src/lib.rs @@ -1,3178 +1,3178 @@ -#![no_std] -// Added standardized events - -//! # Invoice NFT Contract -//! -//! Mints and manages invoice NFTs as the canonical source of truth for invoice state. -//! -//! Each invoice is an immutable NFT with a unique ID, representing a real-world invoice -//! with fields such as amount, due date, debtor information (hashed), and repayment status. -//! -//! **Lifecycle:** `Created` → `Listed` → `Funded` → `Repaid` | `Defaulted` -//! -//! See [Invoice NFT Model](../../../docs/invoice-nft.md) for detailed architecture. - -use kora_shared::{ - errors::CommonError, - events, - reentrancy::ReentrancyGuard, - types::{Invoice, InvoiceStatus, RiskTier}, - validation::{ - require_batch_size_within_limit, require_future_timestamp, require_max_length_bytes, - require_max_length_string, require_non_empty_bytes, require_non_empty_string, - require_non_zero_amount, require_valid_risk_score, MAX_DEBTOR_HASH_LEN, MAX_IPFS_CID_LEN, - UPGRADE_TIMELOCK_DELAY, - require_future_timestamp, require_max_length_bytes, require_max_length_string, - require_non_empty_bytes, require_non_empty_string, require_non_zero_amount, - require_valid_ipfs_cid, require_valid_risk_score, safe_sub, MAX_DEBTOR_HASH_LEN, - MAX_IPFS_CID_LEN, UPGRADE_TIMELOCK_DELAY, - }, -}; -use soroban_sdk::{contract, contracterror, contractimpl, contracttype, Address, Bytes, BytesN, Env, String, Symbol, Vec}; - -/// Local error enum for the invoice_nft contract. -/// -/// `kora_shared::errors::KoraError` was split apart because Soroban's -/// `#[contracterror]` macro caps an error enum at 50 variants — each contract -/// now owns its own local error type, with `From` bridging the -/// small set of shared validation/reentrancy errors. -#[contracterror] -#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] -#[repr(u32)] -pub enum InvoiceNftError { - AlreadyInitialized = 1, - ArithmeticOverflow = 2, - CreditLimitExceeded = 3, - CurrencyNotAllowed = 4, - EmptyBytes = 5, - EmptyString = 6, - FieldTooLong = 7, - InvalidAddress = 8, - InvalidAmount = 9, - InvalidDueDate = 10, - InvalidInvoiceStatus = 11, - InvalidRiskScore = 12, - InvoiceNotFound = 13, - NoUpgradeProposed = 14, - NotAdmin = 15, - NotInitialized = 16, - NotInvoiceOwner = 17, - ProtocolPaused = 18, - Reentrancy = 19, - Unauthorized = 20, - UpgradeTimelockNotElapsed = 21, -} - -impl From for InvoiceNftError { - fn from(e: CommonError) -> Self { - match e { - CommonError::InvalidAmount => InvoiceNftError::InvalidAmount, - CommonError::InvalidDueDate => InvoiceNftError::InvalidDueDate, - CommonError::InvalidRiskScore => InvoiceNftError::InvalidRiskScore, - CommonError::InvalidAddress => InvoiceNftError::InvalidAddress, - CommonError::EmptyString => InvoiceNftError::EmptyString, - CommonError::EmptyBytes => InvoiceNftError::EmptyBytes, - CommonError::FieldTooLong => InvoiceNftError::FieldTooLong, - CommonError::ArithmeticOverflow => InvoiceNftError::ArithmeticOverflow, - CommonError::Reentrancy => InvoiceNftError::Reentrancy, - // InvalidCid / ArithmeticUnderflow / InvalidFeeRate aren't raised by any call - // this crate makes into kora_shared::validation. - _ => InvoiceNftError::InvalidAmount, - } - } -} - -// ── TTL constants (~30 days at ~5s/ledger) ─────────────────────────────────── -const PERSISTENT_TTL_THRESHOLD: u32 = 518_400; -const PERSISTENT_TTL_BUMP: u32 = 518_400; - -// ── Storage Keys ──────────────────────────────────────────────────────────── -// -// Storage versioning: The contract uses a MigrationVersion key to track schema changes. -// Current version: 2 (Invoice includes `metadata_hash` and `notes`) -// -// Variants: -// - Invoice(u64): Stores individual Invoice structs by ID (persistent) -// - NextId: Stores the next invoice ID to mint (instance) -// - Admin: Stores admin address (instance) -// - AccessControl: Stores access control contract address (instance) -// - MigrationVersion: Tracks current schema version for upgrade safety (instance) - -/// Storage key variants for the invoice NFT contract. -/// -/// - `Invoice(u64)` — Maps invoice ID to the full `Invoice` struct (persistent) -/// - `NextId` — Stores the next invoice ID to be allocated (instance) -/// - `Admin` — Stores the contract admin address (instance) -/// - `AccessControl` — Stores the access control contract address (instance) -/// - `InvoiceCount` — Stores total invoice count for metrics (instance) -/// - `MigrationVersion` — Tracks current schema version for upgrade safety (instance) -/// - `CurrencyAllowlist(Symbol)` — Marks a currency symbol as allowed (persistent) -#[contracttype] -pub enum DataKey { - /// Versioned invoice storage: Invoice(id) stores Invoice struct - Invoice(u64), - /// Instance key: tracks next invoice ID to assign - NextId, - /// Instance key: admin address for privileged operations - Admin, - /// Instance key: access control contract address for pause checks - AccessControl, - /// Instance key: current schema migration version (starts at 1) - MigrationVersion, - /// Pending upgrade proposal: (wasm_hash, proposed_at_timestamp). - UpgradeProposal, - /// Instance key: authorized marketplace contract address - Marketplace, - /// Instance key: authorized financing pool contract address - FinancingPool, - /// Instance key: authorized risk registry contract address - RiskRegistry, - /// Persistent: aggregate exposure (i128) for an investor address - OutstandingExposure(Address), - /// Persistent: marks a currency symbol as allowed for invoices - CurrencyAllowlist(Symbol), - /// Persistent bool: true when this invoice is individually frozen by an admin. - /// Checked by marketplace.fund_invoice and financing_pool.repay in addition - /// to the protocol-wide pause, enabling targeted freeze of disputed invoices. - InvoiceFrozen(u64), -} - -/// Input type for a single invoice within a batch mint operation. -#[contracttype] -#[derive(Clone)] -pub struct BatchInvoiceInput { - pub debtor_hash: Bytes, - pub amount: i128, - pub currency: Symbol, - pub due_date: u64, - pub ipfs_cid: String, - pub risk_score: u32, - pub notes: Option, -} - -// ── Migration helpers ───────────────────────────────────────────────────────── -// -// When Invoice gains new fields, keep the PREVIOUS struct definition here so -// migrate() can deserialize stale records from persistent storage. -// -// Pattern: -// 1. Copy the old Invoice definition below as InvoiceV{N}. -// 2. Add the new field(s) to Invoice in kora-shared/src/types.rs. -// 3. Increment MigrationVersion to N+1 in migrate(). -// 4. In migrate(), read as InvoiceV{N}, convert to Invoice, write back. -// 5. After all live nodes have run migrate(), the old InvoiceV{N} struct -// can be removed in the following upgrade cycle. - -/// Schema v1 of Invoice — identical to the original struct that existed before -/// the `notes` field was added. Used by migrate() to deserialize stale records -/// from persistent storage so they can be rewritten in the current schema (v2). -#[contracttype] -#[derive(Clone)] -pub struct InvoiceV1 { - pub id: u64, - pub sme: Address, - pub debtor_hash: Bytes, - pub amount: i128, - pub currency: Symbol, - pub due_date: u64, - pub ipfs_cid: String, - pub risk_score: u32, - pub risk_tier: kora_shared::types::RiskTier, - pub status: kora_shared::types::InvoiceStatus, - pub created_at: u64, - pub funded_at: Option, - pub repaid_at: Option, -} - -// ── Contract ───────────────────────────────────────────────────────────────── - -#[contract] -pub struct InvoiceNftContract; - -#[contractimpl] -impl InvoiceNftContract { - /// One-time initializer. Sets admin and access-control contract address. - /// - /// **Parameters:** - /// - `admin` — The address that will administer this contract. - /// - `access_control` — The deployed `access_control` contract address used for pause checks. - /// - /// **Errors:** - /// - `InvoiceNftError::AlreadyInitialized` — Contract has already been initialized. - /// - `InvoiceNftError::InvalidAddress` — `admin` or `access_control` is the contract's own address. - /// - /// **Security:** No auth required on first call. Subsequent calls revert immediately. - pub fn initialize(env: Env, admin: Address, access_control: Address) -> Result<(), InvoiceNftError> { - if env.storage().instance().has(&DataKey::Admin) { - return Err(InvoiceNftError::AlreadyInitialized); - } - kora_shared::validation::require_not_self(&env, &admin)?; - kora_shared::validation::require_not_self(&env, &access_control)?; - kora_shared::validation::require_distinct(&admin, &access_control)?; - env.storage().instance().set(&DataKey::Admin, &admin); - env.storage() - .instance() - .set(&DataKey::AccessControl, &access_control); - env.storage().instance().set(&DataKey::NextId, &1u64); - // A freshly initialized contract already stores every field of the - // current Invoice schema (v2 — includes `metadata_hash` and `notes`). - // Start at the current version so migrate()'s v1 -> v2 backfill pass - // (which decodes records as the legacy InvoiceV1 shape) is never run - // against records that were never written in the old format. - // A fresh deployment mints Invoice records with the current struct shape - // (schema v2, which already includes `notes`) from the very first mint — - // there is no legacy v1 data to backfill, so the baseline starts at the - // current version rather than v1. - env.storage() - .instance() - .set(&DataKey::MigrationVersion, &2u32); - Ok(()) - } - - /// Set the risk_registry contract address. Admin only. Called after deployment - /// to wire up credit-limit enforcement. - /// - /// **Parameters:** - /// - `admin` — Must be the current admin address. - /// - `risk_registry` — The deployed `risk_registry` contract address. - /// - /// **Errors:** - /// - `InvoiceNftError::NotAdmin` — Caller is not the admin. - /// - `InvoiceNftError::InvalidAddress` — `risk_registry` is the contract's own address. - /// - /// **Security:** Requires `admin.require_auth()`. Idempotent — safe to call again if - /// the risk registry is redeployed. - pub fn set_risk_registry(env: Env, admin: Address, risk_registry: Address) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - kora_shared::validation::require_not_self(&env, &risk_registry)?; - env.storage().instance().set(&DataKey::RiskRegistry, &risk_registry); - Ok(()) - } - - /// Idempotent migration function. Performs any necessary schema upgrades. - /// - /// Must be called by admin immediately after a WASM upgrade that changes a - /// `#[contracttype]` struct. The function is safe to call multiple times: - /// each version gate is a no-op once the ledger has already been upgraded - /// past that version. - /// - /// See docs/MIGRATIONS.md for the full runbook and a description of each - /// version's changes. - pub fn migrate(env: Env, admin: Address) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - - let current_version: u32 = env - .storage() - .instance() - .get(&DataKey::MigrationVersion) - .unwrap_or(0); - - // Version 0 -> 1: Initial setup (marks the baseline schema version). - if current_version < 1 { - env.storage() - .instance() - .set(&DataKey::MigrationVersion, &1u32); - } - - // Version 1 -> 2: Invoice gained `notes: Option`. - // - // Old records in persistent storage are still encoded as InvoiceV1 (no - // `notes` field). Reading them as `Invoice` (v2) would panic because - // the XDR field count has changed. We therefore: - // 1. Read each record as InvoiceV1 (the old encoding). - // 2. Re-encode it as Invoice (v2) with notes = None. - // 3. Overwrite the slot so future reads use the new codec. - if current_version < 2 { - let next_id: u64 = env - .storage() - .instance() - .get(&DataKey::NextId) - .unwrap_or(1); - - // Iterate every allocated invoice ID and backfill. - let mut id: u64 = 1; - while id < next_id { - let key = DataKey::Invoice(id); - // Records minted AFTER the WASM upgrade already carry notes and - // decode as Invoice directly — skip them. - if let Some(old) = env - .storage() - .persistent() - .get::(&key) - { - let upgraded = Invoice { - id: old.id, - sme: old.sme, - debtor_hash: old.debtor_hash, - amount: old.amount, - currency: old.currency, - due_date: old.due_date, - ipfs_cid: old.ipfs_cid, - metadata_hash: Bytes::new(&env), - risk_score: old.risk_score, - risk_tier: old.risk_tier, - status: old.status, - created_at: old.created_at, - funded_at: old.funded_at, - repaid_at: old.repaid_at, - notes: None, - }; - env.storage().persistent().set(&key, &upgraded); - } - id += 1; - } - - env.storage() - .instance() - .set(&DataKey::MigrationVersion, &2u32); - } - - Ok(()) - } - - /// Set the authorized marketplace and financing pool contract addresses. - /// Must be called by admin after deployment to enable status transitions. - pub fn set_authorized_callers( - env: Env, - admin: Address, - marketplace: Address, - financing_pool: Address, - ) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - env.storage().instance().set(&DataKey::Marketplace, &marketplace); - env.storage().instance().set(&DataKey::FinancingPool, &financing_pool); - Ok(()) - } - - /// Mint a new invoice NFT. Caller must be a verified SME. - /// - /// **Parameters:** - /// - `sme` — The SME address minting the invoice (must sign). - /// - `debtor_hash` — SHA-256 hash of debtor PII (max `MAX_DEBTOR_HASH_LEN` bytes). PII stays off-chain. - /// - `amount` — Face value in stroops (7 decimals). Must be > 0. - /// - `currency` — Token symbol (e.g. `USDC`, `EURC`). - /// - `due_date` — Unix timestamp; must be strictly in the future. - /// - `ipfs_cid` — CIDv0 or CIDv1 of the full invoice document on IPFS (max 128 bytes). - /// - `risk_score` — Credit score 0–100 assigned by the verifier. Maps to a `RiskTier`. - /// - `notes` — Optional free-text memo (schema v2; `None` is fine). - /// - /// **Returns:** The allocated invoice ID (monotonically increasing from 1). - /// - /// **Errors:** - /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. - /// - `InvoiceNftError::InvalidAmount` — `amount` is zero, negative, or exceeds `credit_limit`. - /// - `InvoiceNftError::InvalidDueDate` — `due_date` is not in the future. - /// - `InvoiceNftError::InvalidRiskScore` — `risk_score` > 100. - /// - `InvoiceNftError::EmptyBytes` — `debtor_hash` is empty. - /// - `InvoiceNftError::EmptyString` — `ipfs_cid` is empty. - /// - `InvoiceNftError::FieldTooLong` — `debtor_hash` or `ipfs_cid` exceed their max lengths. - /// - `InvoiceNftError::CreditLimitExceeded` — Adding this invoice would exceed the SME's credit limit. - /// - `InvoiceNftError::Reentrancy` — Reentrancy guard triggered. - /// - `KoraError::ProtocolPaused` — Protocol is paused. - /// - `KoraError::SMENotVerified` — `sme` is not `verified` in the risk_registry (only when one is wired up). - /// - `KoraError::ComplianceNotAttested` — `sme` lacks a compliance attestation (only when a risk_registry is wired up). - /// - `KoraError::InvalidAmount` — `amount` is zero, negative, or exceeds `credit_limit`. - /// - `KoraError::InvalidDueDate` — `due_date` is not in the future. - /// - `KoraError::InvalidRiskScore` — `risk_score` > 100. - /// - `KoraError::EmptyBytes` — `debtor_hash` is empty. - /// - `KoraError::EmptyString` — `ipfs_cid` is empty. - /// - `KoraError::FieldTooLong` — `debtor_hash` or `ipfs_cid` exceed their max lengths. - /// - `KoraError::InvalidCid` — `ipfs_cid` is not a structurally valid CIDv0/CIDv1. - /// - `KoraError::CreditLimitExceeded` — Adding this invoice would exceed the SME's credit limit. - /// - `KoraError::Reentrancy` — Reentrancy guard triggered. - /// - /// **Security:** Requires `sme.require_auth()`. The protocol must not be paused. - /// `OutstandingExposure` for the SME is incremented by `amount` on every successful - /// mint (and decremented on withdraw/repay/default), regardless of whether a - /// `risk_registry` is wired up. If a `risk_registry` *is* wired up and the SME has a - /// non-zero `credit_limit`, the mint is rejected before any state is written whenever - /// it would push aggregate exposure over that limit. - pub fn mint_invoice( - env: Env, - sme: Address, - debtor_hash: Bytes, - amount: i128, - currency: Symbol, - due_date: u64, - ipfs_cid: String, - risk_score: u32, - notes: Option, - ) -> Result { - sme.require_auth(); - Self::require_not_paused(&env)?; - Self::require_verified_sme(&env, &sme)?; - Self::require_compliance_attested(&env, &sme)?; - let _guard = ReentrancyGuard::new(&env)?; - - require_non_zero_amount(amount)?; - require_future_timestamp(&env, due_date)?; - require_valid_risk_score(risk_score)?; - require_non_empty_bytes(&debtor_hash)?; - require_max_length_bytes(&debtor_hash, MAX_DEBTOR_HASH_LEN)?; - require_non_empty_string(&ipfs_cid)?; - require_max_length_string(&ipfs_cid, MAX_IPFS_CID_LEN)?; - require_valid_ipfs_cid(&ipfs_cid)?; - - // Risk registry integration is optional — a contract deployed before - // set_risk_registry() is called must still be able to mint. - let rr_addr = env - .storage() - .instance() - .get::(&DataKey::RiskRegistry); - - // Credit-limit enforcement: if a risk_registry is wired up, check the - // SME's pre-approved credit limit against their current outstanding exposure. - if let Some(rr_addr) = &rr_addr { - let rr = kora_risk_registry::RiskRegistryContractClient::new(&env, rr_addr); - if let Ok(profile) = rr.try_get_sme_profile(&sme) { - if let Ok(profile) = profile { - if profile.credit_limit > 0 { - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - let new_exposure = outstanding - .checked_add(amount) - .ok_or(InvoiceNftError::ArithmeticOverflow)?; - if new_exposure > profile.credit_limit { - return Err(InvoiceNftError::CreditLimitExceeded); - } - } - } - } - } - // Outstanding exposure is tracked for every SME regardless of whether a - // risk_registry is wired up (withdraw/repaid/defaulted always decrement it); - // the credit_limit *check* below only applies once a registry is wired. - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - let new_exposure = outstanding - .checked_add(amount) - .ok_or(KoraError::ArithmeticOverflow)?; - Self::check_credit_limit(&env, &sme, new_exposure)?; - - let id: u64 = env.storage().instance().get(&DataKey::NextId).unwrap_or(1); - - let invoice = Invoice { - id, - sme: sme.clone(), - debtor_hash, - amount, - currency, - due_date, - ipfs_cid, - metadata_hash: Bytes::new(&env), - risk_score, - risk_tier: RiskTier::from_score(risk_score), - status: InvoiceStatus::Created, - created_at: env.ledger().timestamp(), - funded_at: None, - repaid_at: None, - notes, - }; - - env.storage() - .persistent() - .set(&DataKey::Invoice(id), &invoice); - Self::bump_invoice_ttl(&env, id); - env.storage().instance().set( - &DataKey::NextId, - &(id.checked_add(1).ok_or(InvoiceNftError::ArithmeticOverflow)?), - ); - - // Track outstanding exposure so credit-limit checks and get_outstanding_exposure - // stay accurate; released again on withdraw/repaid/defaulted. - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - env.storage().persistent().set( - &DataKey::OutstandingExposure(sme.clone()), - &outstanding - .checked_add(amount) - .ok_or(InvoiceNftError::ArithmeticOverflow)?, - ); - env.storage() - .persistent() - .set(&DataKey::OutstandingExposure(sme.clone()), &new_exposure); - - // Track outstanding exposure so the credit-limit check above (and any - // other invoice minted for this SME) sees an up-to-date total. - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - env.storage().persistent().set( - &DataKey::OutstandingExposure(sme.clone()), - &outstanding - .checked_add(amount) - .ok_or(KoraError::ArithmeticOverflow)?, - ); - - // Report the new invoice to risk_registry so SmeProfile.total_invoices stays - // accurate. Best-effort: an unwired registry or an unregistered SME must not - // block a mint that already succeeded. - if let Some(rr_addr) = &rr_addr { - let rr = kora_risk_registry::RiskRegistryContractClient::new(&env, rr_addr); - let _ = rr.try_increment_invoice_count(&env.current_contract_address(), &sme); - } - - events::invoice_created(&env, id, &sme, invoice.amount); - Ok(id) - } - - /// Mint multiple invoice NFTs atomically for a single SME. - /// - /// All inputs are validated before any invoice is stored — if any entry - /// fails validation, or the batch's cumulative amount would push the SME's - /// aggregate `OutstandingExposure` over their `risk_registry` `credit_limit`, - /// the entire batch is aborted with no partial state written (atomic-abort - /// semantics). A single `require_auth` covers the whole batch. - /// - /// **Errors:** - /// - `KoraError::CreditLimitExceeded` — the batch's cumulative amount, added to - /// the SME's pre-batch outstanding exposure, would exceed `credit_limit`, even - /// if no single entry exceeds it alone. - /// - /// Returns a `Vec` of the newly allocated invoice IDs in order. - /// - /// **Errors (in addition to per-entry field validation):** - /// - `KoraError::ProtocolPaused` — Protocol is paused. - /// - `KoraError::SMENotVerified` — `sme` is not `verified` in the risk_registry (only when one is wired up). - /// - `KoraError::ComplianceNotAttested` — `sme` lacks a compliance attestation (only when a risk_registry is wired up). - pub fn mint_invoices_batch( - env: Env, - sme: Address, - invoices: Vec, - ) -> Result, InvoiceNftError> { - sme.require_auth(); - Self::require_not_paused(&env)?; - Self::require_verified_sme(&env, &sme)?; - Self::require_compliance_attested(&env, &sme)?; - let _guard = ReentrancyGuard::new(&env)?; - - // ── Check batch size before any validation/minting ──────────────────── - require_batch_size_within_limit(invoices.len() as u32)?; - - // ── Phase 1: validate ALL inputs before touching storage ────────────── - // Track a running cumulative exposure so items that each individually fit - // under credit_limit can't jointly exceed it against the same stale baseline. - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - let mut running_exposure = outstanding; - for i in 0..invoices.len() { - let entry = invoices.get(i).unwrap(); - require_non_zero_amount(entry.amount)?; - require_future_timestamp(&env, entry.due_date)?; - require_valid_risk_score(entry.risk_score)?; - require_non_empty_bytes(&entry.debtor_hash)?; - require_max_length_bytes(&entry.debtor_hash, MAX_DEBTOR_HASH_LEN)?; - require_non_empty_string(&entry.ipfs_cid)?; - require_max_length_string(&entry.ipfs_cid, MAX_IPFS_CID_LEN)?; - require_valid_ipfs_cid(&entry.ipfs_cid)?; - - running_exposure = running_exposure - .checked_add(entry.amount) - .ok_or(KoraError::ArithmeticOverflow)?; - } - Self::check_credit_limit(&env, &sme, running_exposure)?; - - // ── Phase 2: mint each invoice ──────────────────────────────────────── - let mut ids: Vec = Vec::new(&env); - let mut next_id: u64 = env.storage().instance().get(&DataKey::NextId).unwrap_or(1); - - // Risk registry integration is optional — a contract deployed before - // set_risk_registry() is called must still be able to mint. - let rr_addr = env - .storage() - .instance() - .get::(&DataKey::RiskRegistry); - let rr_client = rr_addr - .as_ref() - .map(|addr| kora_risk_registry::RiskRegistryContractClient::new(&env, addr)); - - for i in 0..invoices.len() { - let entry = invoices.get(i).unwrap(); - let id = next_id; - - let invoice = Invoice { - id, - sme: sme.clone(), - debtor_hash: entry.debtor_hash, - amount: entry.amount, - currency: entry.currency, - due_date: entry.due_date, - ipfs_cid: entry.ipfs_cid, - metadata_hash: Bytes::new(&env), - risk_score: entry.risk_score, - risk_tier: RiskTier::from_score(entry.risk_score), - status: InvoiceStatus::Created, - created_at: env.ledger().timestamp(), - funded_at: None, - repaid_at: None, - notes: entry.notes, - }; - - env.storage().persistent().set(&DataKey::Invoice(id), &invoice); - Self::bump_invoice_ttl(&env, id); - - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - env.storage().persistent().set( - &DataKey::OutstandingExposure(sme.clone()), - &outstanding - .checked_add(invoice.amount) - .ok_or(InvoiceNftError::ArithmeticOverflow)?, - ); - - .ok_or(KoraError::ArithmeticOverflow)?, - ); - - // Report each minted invoice to risk_registry individually so - // SmeProfile.total_invoices reflects the exact count, not one per batch. - // Best-effort: failure must not revert an otherwise-successful mint. - if let Some(rr) = &rr_client { - let _ = rr.try_increment_invoice_count(&env.current_contract_address(), &sme); - } - - events::invoice_created(&env, id, &sme, invoice.amount); - ids.push_back(id); - - next_id = next_id.checked_add(1).ok_or(InvoiceNftError::ArithmeticOverflow)?; - } - - env.storage().instance().set(&DataKey::NextId, &next_id); - env.storage() - .persistent() - .set(&DataKey::OutstandingExposure(sme.clone()), &running_exposure); - Ok(ids) - } - - /// Amend a Created invoice. Only the original SME may call this, and only - /// while `status == Created` (i.e., before any market activity). - /// - /// Any subset of fields may be corrected: pass the existing value to leave - /// a field unchanged. - /// - /// **Parameters:** - /// - `sme` — The original invoice owner. - /// - `invoice_id` — The ID of the invoice to amend. - /// - `debtor_hash` — Updated debtor hash (must be non-empty). - /// - `amount` — Updated face value (must be > 0). - /// - `due_date` — Updated due date (must be in the future). - /// - `ipfs_cid` — Updated IPFS CID of the document. - /// - `risk_score` — Updated risk score (0–100); also recalculates `risk_tier`. - /// - /// **Errors:** - /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. - /// - `InvoiceNftError::InvoiceNotFound` — Invoice does not exist. - /// - `InvoiceNftError::InvalidInvoiceStatus` — Invoice is not in `Created` status. - /// - `InvoiceNftError::NotInvoiceOwner` — Caller is not the invoice's SME. - /// - `InvoiceNftError::InvalidAmount` / `InvoiceNftError::InvalidDueDate` / `InvoiceNftError::InvalidRiskScore` — Validation failures. - /// - `KoraError::ProtocolPaused` — Protocol is paused. - /// - `KoraError::InvoiceNotFound` — Invoice does not exist. - /// - `KoraError::InvalidInvoiceStatus` — Invoice is not in `Created` status. - /// - `KoraError::NotInvoiceOwner` — Caller is not the invoice's SME. - /// - `KoraError::InvalidAmount` / `KoraError::InvalidDueDate` / `KoraError::InvalidRiskScore` — Validation failures. - /// - `KoraError::InvalidCid` — `ipfs_cid` is not a structurally valid CIDv0/CIDv1. - /// - `KoraError::CreditLimitExceeded` — Increasing `amount` would push the SME's - /// aggregate `OutstandingExposure` over their `credit_limit`. - /// - /// **Security:** Requires `sme.require_auth()`. Rejected once the invoice is listed - /// or further along in the lifecycle. `OutstandingExposure` is adjusted by the delta - /// between the old and new `amount` (old removed, new added) and re-checked against - /// `credit_limit` the same way `mint_invoice` is. - pub fn amend_invoice( - env: Env, - sme: Address, - invoice_id: u64, - debtor_hash: Bytes, - amount: i128, - due_date: u64, - ipfs_cid: String, - risk_score: u32, - ) -> Result<(), InvoiceNftError> { - sme.require_auth(); - Self::require_not_paused(&env)?; - - require_non_zero_amount(amount)?; - require_future_timestamp(&env, due_date)?; - require_valid_risk_score(risk_score)?; - require_non_empty_bytes(&debtor_hash)?; - require_non_empty_string(&ipfs_cid)?; - require_valid_ipfs_cid(&ipfs_cid)?; - - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Created { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - if invoice.sme != sme { - return Err(InvoiceNftError::NotInvoiceOwner); - } - - let outstanding: i128 = env - .storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme.clone())) - .unwrap_or(0i128); - let outstanding_without_old = safe_sub(outstanding, invoice.amount)?; - let new_exposure = outstanding_without_old - .checked_add(amount) - .ok_or(KoraError::ArithmeticOverflow)?; - Self::check_credit_limit(&env, &sme, new_exposure)?; - - invoice.debtor_hash = debtor_hash; - invoice.amount = amount; - invoice.due_date = due_date; - invoice.ipfs_cid = ipfs_cid; - invoice.risk_score = risk_score; - invoice.risk_tier = RiskTier::from_score(risk_score); - - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - Self::bump_invoice_ttl(&env, invoice_id); - env.storage() - .persistent() - .set(&DataKey::OutstandingExposure(sme.clone()), &new_exposure); - events::invoice_amended(&env, invoice_id, &sme); - Ok(()) - } - - /// Withdraw (void) a Created invoice. Only the original SME may call this, - /// and only while `status == Created`. - /// - /// The invoice record is removed from storage, permanently burning the NFT. - /// - /// **Parameters:** - /// - `sme` — The original invoice owner. - /// - `invoice_id` — The ID of the invoice to void. - /// - /// **Errors:** - /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. - /// - `InvoiceNftError::InvoiceNotFound` — Invoice does not exist. - /// - `InvoiceNftError::InvalidInvoiceStatus` — Invoice is not in `Created` status. - /// - `InvoiceNftError::NotInvoiceOwner` — Caller is not the invoice's SME. - /// - /// **Security:** Requires `sme.require_auth()`. Irreversible — the invoice is deleted - /// from on-chain storage and cannot be recovered. Outstanding exposure is decremented. - pub fn withdraw_invoice( - env: Env, - sme: Address, - invoice_id: u64, - ) -> Result<(), InvoiceNftError> { - sme.require_auth(); - Self::require_not_paused(&env)?; - - let invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Created { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - if invoice.sme != sme { - return Err(InvoiceNftError::NotInvoiceOwner); - } - - env.storage().persistent().remove(&DataKey::Invoice(invoice_id)); - // Release outstanding exposure - let prev: i128 = env.storage().persistent() - .get(&DataKey::OutstandingExposure(invoice.sme.clone())) - .unwrap_or(0i128); - env.storage().persistent().set( - &DataKey::OutstandingExposure(invoice.sme.clone()), - &prev.saturating_sub(invoice.amount), - ); - events::invoice_withdrawn(&env, invoice_id, &sme); - Ok(()) - } - - /// Transition invoice to Listed status. Called by Marketplace contract. - /// - /// **Parameters:** - /// - `caller` — The marketplace contract address. - /// - `invoice_id` — The ID of the invoice to list. - /// - /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. - /// - /// **Security:** Requires auth from the caller. Validates that the invoice is in `Created` status. - pub fn set_listed(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - caller.require_auth(); - Self::require_authorized_caller(&env, &caller, &[DataKey::Marketplace])?; - Self::require_not_paused(&env)?; - let _guard = ReentrancyGuard::new(&env)?; - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Created { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - invoice.status = InvoiceStatus::Listed; - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - Self::bump_invoice_ttl(&env, invoice_id); - events::invoice_listed(&env, invoice_id, &invoice.sme, invoice.amount); - Ok(()) - } - - /// Revert a Listed invoice back to Created status. Called by the Marketplace - /// contract when a listing is cancelled before any funding has been released. - /// - /// This allows the SME to re-list the same invoice after cancellation. - /// - /// **Parameters:** - /// - `caller` — The marketplace contract address (must be the authorised marketplace). - /// - `invoice_id` — The ID of the invoice to revert. - /// - /// **Errors:** - /// - `InvoiceNftError::Unauthorized` — Caller is not the authorised marketplace. - /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. - /// - `InvoiceNftError::InvalidInvoiceStatus` — Invoice is not in `Listed` status - /// (already `Funded`, `Repaid`, or `Defaulted`). - /// - `InvoiceNftError::InvoiceNotFound` — Invoice does not exist. - /// - /// **Security:** Requires auth from the caller. Only the authorised marketplace - /// address may call this function — unauthorised callers cannot revert status. - pub fn set_created(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - caller.require_auth(); - Self::require_authorized_caller(&env, &caller, &[DataKey::Marketplace])?; - Self::require_not_paused(&env)?; - let _guard = ReentrancyGuard::new(&env)?; - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Listed { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - invoice.status = InvoiceStatus::Created; - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - Self::bump_invoice_ttl(&env, invoice_id); - events::invoice_created(&env, invoice_id, &invoice.sme, invoice.amount); - Ok(()) - } - - /// Transition invoice to Funded. Called by Financing Pool contract. - /// - /// **Parameters:** - /// - `caller` — The investor or financing pool contract address. - /// - `invoice_id` — The ID of the invoice to fund. - /// - /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. - /// - /// **Security:** Requires auth from the caller. Validates that the invoice is in `Listed` status. - pub fn set_funded(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - caller.require_auth(); - Self::require_authorized_caller(&env, &caller, &[DataKey::FinancingPool])?; - Self::require_not_paused(&env)?; - let _guard = ReentrancyGuard::new(&env)?; - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Listed { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - invoice.status = InvoiceStatus::Funded; - invoice.funded_at = Some(env.ledger().timestamp()); - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - Self::bump_invoice_ttl(&env, invoice_id); - events::invoice_funded(&env, invoice_id, &caller, invoice.amount); - Ok(()) - } - - /// Mark invoice as Repaid. Called by Financing Pool on full repayment. - /// - /// **Parameters:** - /// - `caller` — The financing pool contract address. - /// - `invoice_id` — The ID of the invoice to repay. - /// - /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. - /// - /// **Security:** Requires auth from the caller. Validates that the invoice is in `Funded` status. - pub fn set_repaid(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - caller.require_auth(); - Self::require_authorized_caller(&env, &caller, &[DataKey::FinancingPool])?; - Self::require_not_paused(&env)?; - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Funded { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - invoice.status = InvoiceStatus::Repaid; - invoice.repaid_at = Some(env.ledger().timestamp()); - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - // Release outstanding exposure - let prev: i128 = env.storage().persistent() - .get(&DataKey::OutstandingExposure(invoice.sme.clone())) - .unwrap_or(0i128); - env.storage().persistent().set( - &DataKey::OutstandingExposure(invoice.sme.clone()), - &prev.saturating_sub(invoice.amount), - ); - events::invoice_repaid(&env, invoice_id, &invoice.sme, invoice.amount); - Ok(()) - } - - /// Mark invoice as Defaulted. Called by admin after due date passes. - /// - /// **Parameters:** - /// - `caller` — The admin address. - /// - `invoice_id` — The ID of the invoice to mark as defaulted. - /// - /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. - /// - /// **Security:** Requires admin auth. Validates that the invoice is `Funded` and the due date has passed. - pub fn set_defaulted(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - caller.require_auth(); - Self::require_admin(&env, &caller)?; - let _guard = ReentrancyGuard::new(&env)?; - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.status != InvoiceStatus::Funded { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - let current_time = env.ledger().timestamp(); - if current_time <= invoice.due_date { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - invoice.status = InvoiceStatus::Defaulted; - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - Self::bump_invoice_ttl(&env, invoice_id); - // Release outstanding exposure - let prev: i128 = env.storage().persistent() - .get(&DataKey::OutstandingExposure(invoice.sme.clone())) - .unwrap_or(0i128); - env.storage().persistent().set( - &DataKey::OutstandingExposure(invoice.sme.clone()), - &prev.saturating_sub(invoice.amount), - ); - events::invoice_defaulted(&env, invoice_id, &invoice.sme); - Ok(()) - } - - // ── Views ──────────────────────────────────────────────────────────────── - - /// Retrieve a full invoice by ID. - /// - /// **Parameters:** - /// - `invoice_id` — The ID of the invoice to retrieve. - /// - /// **Returns:** The complete `Invoice` struct, or `InvoiceNftError::InvoiceNotFound` if not found. - /// - /// **Security:** This is a read-only view with no authorization check. - pub fn get_invoice(env: Env, invoice_id: u64) -> Result { - Self::load_invoice(&env, invoice_id) - } - - /// Commit a SHA-256 content-integrity hash of the off-chain metadata document. - /// - /// This binds the invoice on-chain to the exact bytes of the document referenced by - /// `ipfs_cid`, so a fetched document can be verified even if the underlying CID content - /// were ever mutated. Write-once: the hash can only be committed while empty and while the - /// invoice is still in `Created` status, after which it is immutable. - /// - /// **Parameters:** - /// - `sme` — The invoice owner (must match `invoice.sme`). - /// - `invoice_id` — The ID of the invoice to commit the hash for. - /// - `metadata_hash` — SHA-256 (32 bytes) of the canonical off-chain document. - /// - /// **Security:** Requires auth from the invoice's SME. Rejects empty hashes, already-committed - /// invoices, and invoices that have left `Created` status. - pub fn commit_metadata_hash( - env: Env, - sme: Address, - invoice_id: u64, - metadata_hash: Bytes, - ) -> Result<(), InvoiceNftError> { - sme.require_auth(); - Self::require_not_paused(&env)?; - let _guard = ReentrancyGuard::new(&env)?; - - require_non_empty_bytes(&metadata_hash)?; - - let mut invoice = Self::load_invoice(&env, invoice_id)?; - if invoice.sme != sme { - return Err(InvoiceNftError::Unauthorized); - } - if invoice.status != InvoiceStatus::Created { - return Err(InvoiceNftError::InvalidInvoiceStatus); - } - if invoice.metadata_hash.len() != 0 { - return Err(InvoiceNftError::AlreadyInitialized); - } - - invoice.metadata_hash = metadata_hash; - env.storage() - .persistent() - .set(&DataKey::Invoice(invoice_id), &invoice); - Ok(()) - } - - /// Get the next invoice ID that will be allocated. - /// - /// **Returns:** The ID of the next invoice to be minted (starting at 1). - /// - /// **Security:** This is a read-only view with no authorization check. - pub fn next_id(env: Env) -> u64 { - env.storage() - .instance() - .get(&DataKey::NextId) - .unwrap_or(1) - } - - /// Returns the number of invoices minted (next_id - 1). - /// - /// **Security:** Read-only view. No authorization required. - pub fn invoice_count(env: Env) -> u64 { - env.storage() - .instance() - .get::<_, u64>(&DataKey::NextId) - .unwrap_or(1) - .saturating_sub(1) - } - - /// Returns the aggregate outstanding face value for an SME across all - /// non-Repaid, non-Defaulted invoices. Used for credit-limit enforcement. - /// - /// **Parameters:** - /// - `sme` — The SME address to query. - /// - /// **Returns:** Total outstanding exposure in stroops (0 if none recorded). - /// - /// **Security:** Read-only view. No authorization required. - pub fn get_outstanding_exposure(env: Env, sme: Address) -> i128 { - env.storage() - .persistent() - .get(&DataKey::OutstandingExposure(sme)) - .unwrap_or(0i128) - } - - // ── Per-invoice emergency freeze ────────────────────────────────────────── - // - // Complements the protocol-wide pause in AccessControl by letting an admin - // freeze a single disputed invoice without halting all protocol activity. - // The freeze state is stored in persistent storage so it survives ledger - // closings. Marketplace.fund_invoice and financing_pool.repay call - // is_invoice_frozen before executing any state-changing logic. - - /// Freeze a specific invoice, blocking fund_invoice and repay for it. - pub fn freeze_invoice(env: Env, admin: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - // Verify the invoice exists before freezing. - Self::load_invoice(&env, invoice_id)?; - let key = DataKey::InvoiceFrozen(invoice_id); - env.storage().persistent().set(&key, &true); - Self::bump_persistent(&env, &key); - events::invoice_frozen(&env, invoice_id, &admin); - Ok(()) - } - - /// Unfreeze a previously frozen invoice, restoring normal fund/repay access. - pub fn unfreeze_invoice(env: Env, admin: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - // Verify the invoice exists before unfreezing. - Self::load_invoice(&env, invoice_id)?; - let key = DataKey::InvoiceFrozen(invoice_id); - env.storage().persistent().remove(&key); - events::invoice_unfrozen(&env, invoice_id, &admin); - Ok(()) - } - - /// Returns true if this invoice has been individually frozen by an admin. - pub fn is_invoice_frozen(env: Env, invoice_id: u64) -> bool { - env.storage() - .persistent() - .get(&DataKey::InvoiceFrozen(invoice_id)) - .unwrap_or(false) - } - - // ── Upgrade ──────────────────────────────────────────────────────────────── - - /// Propose a WASM upgrade. Admin only. Begins a 24-hour timelock. - /// - /// **Parameters:** - /// - `admin` — Must be the current admin address. - /// - `new_wasm_hash` — SHA-256 hash of the new WASM binary (32 bytes). - /// - /// **Errors:** - /// - `InvoiceNftError::NotAdmin` — Caller is not the admin. - /// - /// **Security:** Requires `admin.require_auth()`. The upgrade cannot be applied until - /// `UPGRADE_TIMELOCK_DELAY` (24 h) has elapsed via `execute_upgrade`. - pub fn propose_upgrade( - env: Env, - admin: Address, - new_wasm_hash: BytesN<32>, - ) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - env.storage() - .instance() - .set(&DataKey::UpgradeProposal, &(new_wasm_hash.clone(), env.ledger().timestamp())); - events::upgrade_proposed(&env, &admin, &new_wasm_hash); - Ok(()) - } - - /// Execute a previously proposed WASM upgrade after the 24-hour timelock has elapsed. - /// - /// **Parameters:** - /// - `admin` — Must be the current admin address. - /// - /// **Errors:** - /// - `InvoiceNftError::NotAdmin` — Caller is not the admin. - /// - `InvoiceNftError::NoUpgradeProposed` — No upgrade proposal is pending. - /// - `InvoiceNftError::UpgradeTimelockNotElapsed` — 24-hour timelock has not yet passed. - /// - /// **Security:** Requires `admin.require_auth()`. Clears the proposal before executing - /// to prevent re-entry. Note: `migrate()` must be called by admin immediately after - /// any upgrade that changes a `#[contracttype]` struct schema. - pub fn execute_upgrade(env: Env, admin: Address) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - let (wasm_hash, proposed_at): (BytesN<32>, u64) = env - .storage() - .instance() - .get(&DataKey::UpgradeProposal) - .ok_or(InvoiceNftError::NoUpgradeProposed)?; - if env.ledger().timestamp() < proposed_at + UPGRADE_TIMELOCK_DELAY { - return Err(InvoiceNftError::UpgradeTimelockNotElapsed); - } - env.storage().instance().remove(&DataKey::UpgradeProposal); - events::upgrade_executed(&env, &admin, &wasm_hash); - env.deployer().update_current_contract_wasm(wasm_hash); - Ok(()) - } - - // ── Currency Allowlist ──────────────────────────────────────────────────── - - /// Add a currency symbol to the allowlist. Admin only. - pub fn add_allowed_currency(env: Env, admin: Address, currency: Symbol) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - env.storage() - .persistent() - .set(&DataKey::CurrencyAllowlist(currency.clone()), &true); - env.storage().persistent().extend_ttl( - &DataKey::CurrencyAllowlist(currency), - PERSISTENT_TTL_THRESHOLD, - PERSISTENT_TTL_BUMP, - ); - Ok(()) - } - - /// Remove a currency symbol from the allowlist. Admin only. - pub fn remove_allowed_currency(env: Env, admin: Address, currency: Symbol) -> Result<(), InvoiceNftError> { - admin.require_auth(); - Self::require_admin(&env, &admin)?; - env.storage() - .persistent() - .remove(&DataKey::CurrencyAllowlist(currency)); - Ok(()) - } - - /// Check whether a currency symbol is on the allowlist. - pub fn is_currency_allowed(env: Env, currency: Symbol) -> bool { - env.storage() - .persistent() - .get::<_, bool>(&DataKey::CurrencyAllowlist(currency)) - .unwrap_or(false) - } - - // ── Helpers ────────────────────────────────────────────────────────────── - - fn require_authorized_caller(env: &Env, caller: &Address, allowed: &[DataKey]) -> Result<(), InvoiceNftError> { - for key in allowed { - if let Some(addr) = env.storage().instance().get::(key) { - if &addr == caller { - return Ok(()); - } - } - } - Err(InvoiceNftError::Unauthorized) - } - - fn load_invoice(env: &Env, id: u64) -> Result { - env.storage() - .persistent() - .get(&DataKey::Invoice(id)) - .ok_or(InvoiceNftError::InvoiceNotFound) - } - - fn require_admin(env: &Env, caller: &Address) -> Result<(), InvoiceNftError> { - let admin: Address = env - .storage() - .instance() - .get(&DataKey::Admin) - .ok_or(InvoiceNftError::NotInitialized)?; - if &admin != caller { - return Err(InvoiceNftError::NotAdmin); - } - Ok(()) - } - - fn require_allowed_currency(env: &Env, currency: &Symbol) -> Result<(), InvoiceNftError> { - let allowed: bool = env - .storage() - .persistent() - .get(&DataKey::CurrencyAllowlist(currency.clone())) - .unwrap_or(false); - if !allowed { - return Err(InvoiceNftError::CurrencyNotAllowed); - } - Ok(()) - } - - fn require_not_paused(env: &Env) -> Result<(), InvoiceNftError> { - let ac: Address = env - .storage() - .instance() - .get(&DataKey::AccessControl) - .ok_or(InvoiceNftError::NotInitialized)?; - let client = kora_access_control::AccessControlContractClient::new(env, &ac); - if client.is_paused() { - return Err(InvoiceNftError::ProtocolPaused); - } - Ok(()) - } - - /// Extend the TTL of an arbitrary persistent storage entry to prevent expiry. - fn bump_persistent(env: &Env, key: &DataKey) { - env.storage() - .persistent() - .extend_ttl(key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_BUMP); - /// If a `risk_registry` is wired up, require `sme` to be a verified SME - /// (`SmeProfile.verified == true`). A no-op when no registry is configured, - /// for backward compatibility with deployments that haven't wired one up yet — - /// production deployments MUST call `set_risk_registry` for this to be enforced. - fn require_verified_sme(env: &Env, sme: &Address) -> Result<(), KoraError> { - /// Reject `new_exposure` if it would exceed the SME's risk_registry-assigned - /// credit limit. A no-op (always `Ok`) when no risk_registry is wired up, the - /// SME has no profile, or `credit_limit == 0` (unlimited). - fn check_credit_limit(env: &Env, sme: &Address, new_exposure: i128) -> Result<(), KoraError> { - if let Some(rr_addr) = env - .storage() - .instance() - .get::(&DataKey::RiskRegistry) - { - let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_addr); - if !rr.is_verified_sme(sme) { - return Err(KoraError::SMENotVerified); - } - } - Ok(()) - } - - /// If a `risk_registry` is wired up, require `sme` to have a compliance - /// attestation (`SmeProfile.compliance_attested == true`). A no-op when no - /// registry is configured, for backward compatibility with deployments that - /// haven't wired one up yet — production deployments MUST call - /// `set_risk_registry` for this to be enforced. - /// - /// This duplicates `marketplace::require_compliance_attested` intentionally: - /// enforcing the gate at mint time (in addition to marketplace's listing-time - /// check) prevents non-compliant SMEs from accumulating on-chain invoice - /// metadata and events before ever being blocked. See docs/invoice-nft.md. - fn require_compliance_attested(env: &Env, sme: &Address) -> Result<(), KoraError> { - if let Some(rr_addr) = env - .storage() - .instance() - .get::(&DataKey::RiskRegistry) - { - let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_addr); - if !rr.is_compliance_attested(sme) { - return Err(KoraError::ComplianceNotAttested); - if let Ok(Ok(profile)) = rr.try_get_sme_profile(sme) { - if profile.credit_limit > 0 && new_exposure > profile.credit_limit { - return Err(KoraError::CreditLimitExceeded); - } - } - } - Ok(()) - } - - /// Extend the TTL of a persistent invoice entry to prevent expiry. - fn bump_invoice_ttl(env: &Env, id: u64) { - env.storage().persistent().extend_ttl( - &DataKey::Invoice(id), - PERSISTENT_TTL_THRESHOLD, - PERSISTENT_TTL_BUMP, - ); - } - - /// Extend the TTL of an arbitrary persistent entry to prevent expiry. - fn bump_persistent(env: &Env, key: &DataKey) { - env.storage() - .persistent() - .extend_ttl(key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_BUMP); - } -} - -// ── Tests ───────────────────────────────────────────────────────────────────── - -#[cfg(test)] -mod tests { - use super::*; - use soroban_sdk::{ - testutils::{Address as _, Ledger, LedgerInfo}, - Bytes, Env, String, Symbol, - }; - - // ── Helpers ─────────────────────────────────────────────────────────────── - - fn setup() -> (Env, Address, InvoiceNftContractClient<'static>) { - let env = Env::default(); - env.mock_all_auths(); - env.ledger().set(LedgerInfo { - timestamp: 1_700_000_000, - protocol_version: 21, - sequence_number: 1, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - // Register access control contract (uninitialized — defaults to not paused) - let ac_id = env.register_contract(None, kora_access_control::AccessControlContract); - let contract_id = env.register_contract(None, InvoiceNftContract); - let client = InvoiceNftContractClient::new(&env, &contract_id); - let admin = Address::generate(&env); - client.initialize(&admin, &ac_id); - (env, admin, client) - } - - fn mint_default(env: &Env, client: &InvoiceNftContractClient, risk_score: u32) -> u64 { - let sme = Address::generate(env); - let debtor_hash = Bytes::from_slice(env, &[1u8; 32]); - let ipfs_cid = String::from_str( - env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(env, "USDC"), - &due_date, - &ipfs_cid, - &risk_score, - &None, - ) - } - - fn ipfs_cid(env: &Env) -> String { - String::from_str(env, "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") - } - - /// Valid CIDv0 fixture ("Qm" prefix, 46 base58btc chars). - fn ipfs_cid_v0(env: &Env) -> String { - String::from_str(env, "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG") - } - - /// Structurally invalid CID fixture — should always be rejected. - fn garbage_cid(env: &Env) -> String { - String::from_str(env, "not-a-cid") - } - - /// Deploys and wires a `risk_registry` behind `client`, registers `verifier` with - /// enough stake, registers `sme` through it, and sets `sme`'s `credit_limit`. - /// Returns the risk_registry client for further use in the test. - fn setup_with_credit_limit( - env: &Env, - admin: &Address, - client: &InvoiceNftContractClient, - sme: &Address, - credit_limit: i128, - ) -> kora_risk_registry::RiskRegistryContractClient<'static> { - use soroban_sdk::token::StellarAssetClient; - - let nft_id = client.address.clone(); - let rr_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); - let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_id); - - let token_admin = Address::generate(env); - let token_id = env.register_stellar_asset_contract_v2(token_admin.clone()).address(); - let token_client = StellarAssetClient::new(env, &token_id); - - let minimum_stake = 1_000_000i128; - rr.initialize(admin, &nft_id, &token_id, &minimum_stake, &500u32); - - let verifier = Address::generate(env); - token_client.mint(&verifier, &minimum_stake); - rr.add_verifier(admin, &verifier, &minimum_stake); - rr.register_sme(&verifier, sme, &30u32, &true); - rr.set_credit_limit(&verifier, sme, &credit_limit); - - client.set_risk_registry(admin, &rr_id); - rr - } - - // ── initialize ──────────────────────────────────────────────────────────── - - #[test] - fn test_initialize_success() { - let env = Env::default(); - env.mock_all_auths(); - let contract_id = env.register_contract(None, InvoiceNftContract); - let client = InvoiceNftContractClient::new(&env, &contract_id); - let admin = Address::generate(&env); - let access_control = Address::generate(&env); - client.initialize(&admin, &access_control); - assert_eq!(client.next_id(), 1); - assert_eq!(client.invoice_count(), 0); - } - - #[test] - fn test_initialize_already_initialized_fails() { - let (env, admin, client) = setup(); - let access_control = Address::generate(&env); - let result = client.try_initialize(&admin, &access_control); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::AlreadyInitialized); - } - - #[test] - fn test_initialize_self_as_admin_rejected() { - let env = Env::default(); - env.mock_all_auths(); - let contract_id = env.register_contract(None, InvoiceNftContract); - let client = InvoiceNftContractClient::new(&env, &contract_id); - let ac = Address::generate(&env); - let result = client.try_initialize(&contract_id, &ac); - assert!(result.is_err()); - } - - #[test] - fn test_initialize_admin_equals_access_control_rejected() { - let env = Env::default(); - env.mock_all_auths(); - let contract_id = env.register_contract(None, InvoiceNftContract); - let client = InvoiceNftContractClient::new(&env, &contract_id); - let admin = Address::generate(&env); - let result = client.try_initialize(&admin, &admin); - assert!(result.is_err()); - } - - // ── mint_invoice ────────────────────────────────────────────────────────── - - #[test] - fn test_mint_invoice_success() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &25u32, &None, - ); - assert_eq!(id, 1); - let invoice = client.get_invoice(&1); - assert_eq!(invoice.status, InvoiceStatus::Created); - assert_eq!(invoice.risk_tier, RiskTier::AA); - assert_eq!(invoice.sme, sme); - assert_eq!(invoice.amount, 1_000_000_000i128); - assert_eq!(invoice.created_at, env.ledger().timestamp()); - assert_eq!(invoice.funded_at, None); - assert_eq!(invoice.repaid_at, None); - } - - #[test] - fn test_mint_invoice_zero_amount_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &0i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidAmount); - } - - #[test] - fn test_mint_invoice_negative_amount_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &-1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidAmount); - } - - #[test] - fn test_mint_invoice_past_due_date_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() - 1; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidDueDate); - } - - #[test] - fn test_mint_invoice_due_date_equal_to_now_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp(); // equal to now — not strictly future - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidDueDate); - } - - #[test] - fn test_mint_invoice_invalid_risk_score_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &101u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidRiskScore); - } - - #[test] - fn test_mint_invoice_empty_debtor_hash_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::EmptyBytes); - } - - #[test] - fn test_mint_invoice_garbage_cid_rejected() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = garbage_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidCid); - } - - #[test] - fn test_mint_invoice_valid_cidv0_accepted() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid_v0(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert!(result.is_ok()); - } - - #[test] - fn test_mint_invoice_valid_cidv1_accepted() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 2; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert!(result.is_ok()); - } - - #[test] - fn test_mint_multiple_invoices_increments_id() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id1 = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let id2 = client.mint_invoice( - &sme, - &debtor_hash, - &2_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &20u32, &None, - ); - assert_eq!(id1, 1); - assert_eq!(id2, 2); - assert_eq!(client.next_id(), 3); - } - - #[test] - fn test_mint_invoice_large_amount_succeeds() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let large_amount = i128::MAX; - let id = client.mint_invoice( - &sme, &debtor_hash, &large_amount, - &Symbol::new(&env, "USDC"), &due_date, &cid, &50u32, &None, - ); - assert_eq!(client.get_invoice(&id).amount, large_amount); - } - - // ── mint_invoice / mint_invoices_batch — risk_registry gating ──────────────── - - /// Deploy a minimal Soroban token contract and mint `amount` to `recipient`. - fn deploy_token(env: &Env, admin: &Address, recipient: &Address, amount: i128) -> Address { - let token_id = env.register_stellar_asset_contract_v2(admin.clone()).address(); - let token_client = soroban_sdk::token::StellarAssetClient::new(env, &token_id); - token_client.mint(recipient, &amount); - token_id - } - - /// Registers a risk_registry, wires it up to `client`, and returns a client - /// plus a funded, added verifier ready to call `register_sme`. - fn setup_with_registry( - env: &Env, - admin: &Address, - client: &InvoiceNftContractClient, - ) -> (kora_risk_registry::RiskRegistryContractClient<'static>, Address) { - let registry_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); - let registry_client = kora_risk_registry::RiskRegistryContractClient::new(env, ®istry_id); - let verifier = Address::generate(env); - let staking_token = deploy_token(env, admin, &verifier, 1_000_000i128); - registry_client - .initialize(admin, &Address::generate(env), &staking_token, &1_000_000i128, &5_000u32); - registry_client.add_verifier(admin, &verifier, &1_000_000i128); - client.set_risk_registry(admin, ®istry_id); - (registry_client, verifier) - } - - #[test] - fn test_mint_invoice_unattested_sme_rejected() { - let (env, admin, client) = setup(); - let (registry, verifier) = setup_with_registry(&env, &admin, &client); - - let sme = Address::generate(&env); - registry.register_sme(&verifier, &sme, &50u32, &false); // compliance_attested = false - - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::ComplianceNotAttested); - } - - #[test] - fn test_mint_invoice_compliant_sme_succeeds() { - let (env, admin, client) = setup(); - let (registry, verifier) = setup_with_registry(&env, &admin, &client); - - let sme = Address::generate(&env); - registry.register_sme(&verifier, &sme, &50u32, &true); // compliance_attested = true - - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, - ); - assert_eq!(id, 1); - assert_eq!(client.get_invoice(&id).sme, sme); - } - - #[test] - fn test_mint_invoices_batch_unattested_sme_rejected() { - let (env, admin, client) = setup(); - let (registry, verifier) = setup_with_registry(&env, &admin, &client); - - let sme = Address::generate(&env); - registry.register_sme(&verifier, &sme, &50u32, &false); // compliance_attested = false - - let due_date = env.ledger().timestamp() + 86_400 * 30; - let mut batch = Vec::new(&env); - batch.push_back(BatchInvoiceInput { - debtor_hash: Bytes::from_slice(&env, &[1u8; 32]), - amount: 1_000_000_000i128, - currency: Symbol::new(&env, "USDC"), - due_date, - ipfs_cid: ipfs_cid(&env), - risk_score: 25u32, - notes: None, - }); - let result = client.try_mint_invoices_batch(&sme, &batch); - assert_eq!(result.unwrap_err().unwrap(), KoraError::ComplianceNotAttested); - } - - #[test] - fn test_mint_invoice_unverified_sme_rejected() { - let (env, admin, client) = setup(); - let (_registry, _verifier) = setup_with_registry(&env, &admin, &client); - - // sme was never registered with the risk_registry — not verified. - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::SMENotVerified); - } - - #[test] - fn test_mint_invoice_no_registry_configured_bypasses_gating() { - // Backward compatibility: when set_risk_registry was never called, - // an arbitrary (unregistered, unverified) address may still mint. - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, - ); - assert_eq!(id, 1); - } - - #[test] - fn test_mint_invoices_batch_unverified_sme_rejected() { - let (env, admin, client) = setup(); - let (_registry, _verifier) = setup_with_registry(&env, &admin, &client); - - let sme = Address::generate(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let mut batch = Vec::new(&env); - batch.push_back(BatchInvoiceInput { - debtor_hash: Bytes::from_slice(&env, &[1u8; 32]), - amount: 1_000_000_000i128, - currency: Symbol::new(&env, "USDC"), - due_date, - ipfs_cid: ipfs_cid(&env), - risk_score: 25u32, - notes: None, - }); - let result = client.try_mint_invoices_batch(&sme, &batch); - assert_eq!(result.unwrap_err().unwrap(), KoraError::SMENotVerified); - } - - #[test] - fn test_mint_invoices_batch_verified_attested_sme_succeeds() { - let (env, admin, client) = setup(); - let (registry, verifier) = setup_with_registry(&env, &admin, &client); - - let sme = Address::generate(&env); - registry.register_sme(&verifier, &sme, &50u32, &true); - - let due_date = env.ledger().timestamp() + 86_400 * 30; - let mut batch = Vec::new(&env); - batch.push_back(BatchInvoiceInput { - debtor_hash: Bytes::from_slice(&env, &[1u8; 32]), - amount: 1_000_000_000i128, - currency: Symbol::new(&env, "USDC"), - due_date, - ipfs_cid: ipfs_cid(&env), - risk_score: 25u32, - notes: None, - }); - let ids = client.mint_invoices_batch(&sme, &batch); - assert_eq!(ids.len(), 1); - } - - #[test] - fn test_risk_tier_mapping() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let test_cases = [ - (0u32, RiskTier::AAA), - (20u32, RiskTier::AAA), - (21u32, RiskTier::AA), - (40u32, RiskTier::AA), - (41u32, RiskTier::A), - (60u32, RiskTier::A), - (61u32, RiskTier::B), - (80u32, RiskTier::B), - (81u32, RiskTier::C), - (100u32, RiskTier::C), - ]; - for (score, expected_tier) in &test_cases { - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, score, &None, - ); - assert_eq!(client.get_invoice(&id).risk_tier, *expected_tier); - } - } - - #[test] - fn test_risk_score_boundary_aaa_aa() { - let (env, _admin, client) = setup(); - let id20 = mint_default(&env, &client, 20u32); - let id21 = mint_default(&env, &client, 21u32); - assert_eq!(client.get_invoice(&id20).risk_tier, RiskTier::AAA); - assert_eq!(client.get_invoice(&id21).risk_tier, RiskTier::AA); - } - - #[test] - fn test_risk_score_boundary_aa_a() { - let (env, _admin, client) = setup(); - let id40 = mint_default(&env, &client, 40u32); - let id41 = mint_default(&env, &client, 41u32); - assert_eq!(client.get_invoice(&id40).risk_tier, RiskTier::AA); - assert_eq!(client.get_invoice(&id41).risk_tier, RiskTier::A); - } - - #[test] - fn test_risk_score_boundary_a_b() { - let (env, _admin, client) = setup(); - let id60 = mint_default(&env, &client, 60u32); - let id61 = mint_default(&env, &client, 61u32); - assert_eq!(client.get_invoice(&id60).risk_tier, RiskTier::A); - assert_eq!(client.get_invoice(&id61).risk_tier, RiskTier::B); - } - - #[test] - fn test_risk_score_boundary_b_c() { - let (env, _admin, client) = setup(); - let id80 = mint_default(&env, &client, 80u32); - let id81 = mint_default(&env, &client, 81u32); - assert_eq!(client.get_invoice(&id80).risk_tier, RiskTier::B); - assert_eq!(client.get_invoice(&id81).risk_tier, RiskTier::C); - } - - // ── mint_invoices_batch ─────────────────────────────────────────────────── - - fn batch_input(env: &Env, amount: i128, cid: String) -> BatchInvoiceInput { - BatchInvoiceInput { - debtor_hash: Bytes::from_slice(env, &[1u8; 32]), - amount, - currency: Symbol::new(env, "USDC"), - due_date: env.ledger().timestamp() + 86_400 * 30, - ipfs_cid: cid, - risk_score: 10u32, - notes: None, - } - } - - #[test] - fn test_mint_invoices_batch_success() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let cid = ipfs_cid(&env); - let inputs = Vec::from_array( - &env, - [ - batch_input(&env, 1_000_000_000i128, cid.clone()), - batch_input(&env, 2_000_000_000i128, cid), - ], - ); - let ids = client.mint_invoices_batch(&sme, &inputs); - assert_eq!(ids.len(), 2); - assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); - } - - #[test] - fn test_mint_invoices_batch_garbage_cid_rejects_whole_batch() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let inputs = Vec::from_array( - &env, - [ - batch_input(&env, 1_000_000_000i128, ipfs_cid(&env)), - batch_input(&env, 1_000_000_000i128, garbage_cid(&env)), - ], - ); - let result = client.try_mint_invoices_batch(&sme, &inputs); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidCid); - // Atomic-abort: nothing from the batch should be persisted. - assert_eq!(client.get_outstanding_exposure(&sme), 0i128); - } - - #[test] - fn test_mint_invoices_batch_valid_cidv0_and_cidv1_accepted() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let inputs = Vec::from_array( - &env, - [ - batch_input(&env, 1_000_000_000i128, ipfs_cid_v0(&env)), - batch_input(&env, 1_000_000_000i128, ipfs_cid(&env)), - ], - ); - let result = client.try_mint_invoices_batch(&sme, &inputs); - assert!(result.is_ok()); - } - - /// Each item individually fits under credit_limit, but their sum doesn't — proves - /// the batch checks a running cumulative total against the SME's pre-batch exposure - /// rather than checking each item independently against a stale baseline. Regression - /// for #404. - #[test] - fn test_mint_invoices_batch_rejects_cumulative_over_credit_limit() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let cid = ipfs_cid(&env); - - // credit_limit covers only 2.5 invoices of 1_000_000_000 each. - setup_with_credit_limit(&env, &admin, &client, &sme, 2_500_000_000i128); - - // Three items of 1_000_000_000 each — none individually exceeds the limit, - // but their sum (3_000_000_000) does. - let inputs = Vec::from_array( - &env, - [ - batch_input(&env, 1_000_000_000i128, cid.clone()), - batch_input(&env, 1_000_000_000i128, cid.clone()), - batch_input(&env, 1_000_000_000i128, cid), - ], - ); - let result = client.try_mint_invoices_batch(&sme, &inputs); - assert_eq!(result.unwrap_err().unwrap(), KoraError::CreditLimitExceeded); - // Nothing from the rejected batch should be persisted: exposure is untouched, - // and NextId wasn't advanced (a fresh mint still gets id 1). - assert_eq!(client.get_outstanding_exposure(&sme), 0i128); - let id = client.mint_invoice( - &sme, &Bytes::from_slice(&env, &[1u8; 32]), &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &(env.ledger().timestamp() + 86_400 * 30), - &ipfs_cid(&env), &10u32, &None, - ); - assert_eq!(id, 1u64); - } - - /// Cumulative exposure across a batch must equal pre-batch exposure plus the sum - /// of all batch amounts once the batch succeeds. - #[test] - fn test_mint_invoices_batch_accepts_cumulative_within_credit_limit() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let cid = ipfs_cid(&env); - - setup_with_credit_limit(&env, &admin, &client, &sme, 3_000_000_000i128); - - let inputs = Vec::from_array( - &env, - [ - batch_input(&env, 1_000_000_000i128, cid.clone()), - batch_input(&env, 1_000_000_000i128, cid.clone()), - batch_input(&env, 1_000_000_000i128, cid), - ], - ); - let ids = client.mint_invoices_batch(&sme, &inputs); - assert_eq!(ids.len(), 3); - assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); - } - - // ── status transitions ──────────────────────────────────────────────────── - - #[test] - fn test_status_transitions_full_lifecycle() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Created); - - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - - client.set_listed(&marketplace, &id); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Listed); - - client.set_funded(&pool, &id); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Funded); - assert!(client.get_invoice(&id).funded_at.is_some()); - - client.set_repaid(&pool, &id); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Repaid); - assert!(client.get_invoice(&id).repaid_at.is_some()); - } - - #[test] - fn test_set_listed_invalid_status_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); // succeeds: Created → Listed - let result = client.try_set_listed(&marketplace, &id); // fails: already Listed - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - // ── set_created ─────────────────────────────────────────────────────────── - - /// Marketplace can revert a Listed invoice back to Created. - #[test] - fn test_set_created_reverts_listed_to_created() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - - client.set_listed(&marketplace, &id); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Listed); - - client.set_created(&marketplace, &id); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Created); - } - - /// set_created on a Created invoice must fail (wrong source status). - #[test] - fn test_set_created_on_created_invoice_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - - let result = client.try_set_created(&marketplace, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - /// set_created on a Funded invoice must fail. - #[test] - fn test_set_created_on_funded_invoice_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - - let result = client.try_set_created(&marketplace, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - /// Unauthorized address cannot call set_created. - #[test] - fn test_set_created_unauthorized_rejected() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - - let stranger = Address::generate(&env); - let result = client.try_set_created(&stranger, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::Unauthorized); - } - - /// After set_created the invoice can be re-listed via set_listed. - #[test] - fn test_set_created_then_relist_succeeds() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - - // List → revert → re-list - client.set_listed(&marketplace, &id); - client.set_created(&marketplace, &id); - assert!(client.try_set_listed(&marketplace, &id).is_ok()); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Listed); - } - - #[test] - fn test_set_funded_invalid_status_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - let result = client.try_set_funded(&pool, &id); // Created → Funded skips Listed - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_set_repaid_invalid_status_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - let result = client.try_set_repaid(&pool, &id); // Created → Repaid skips Listed/Funded - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_set_funded_idempotent_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - let result = client.try_set_funded(&pool, &id); - assert!(result.is_err()); - } - - #[test] - fn test_set_repaid_idempotent_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - client.set_repaid(&pool, &id); - let result = client.try_set_repaid(&pool, &id); - assert!(result.is_err()); - } - - #[test] - fn test_set_repaid_blocked_when_paused() { - let env = Env::default(); - env.mock_all_auths(); - env.ledger().set(LedgerInfo { - timestamp: 1_700_000_000, - protocol_version: 21, - sequence_number: 1, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - - let admin = Address::generate(&env); - let ac_id = env.register_contract(None, kora_access_control::AccessControlContract); - let ac_client = kora_access_control::AccessControlContractClient::new(&env, &ac_id); - ac_client.initialize(&admin); - - let contract_id = env.register_contract(None, InvoiceNftContract); - let client = InvoiceNftContractClient::new(&env, &contract_id); - client.initialize(&admin, &ac_id); - - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - - ac_client.pause(&admin); - - let result = client.try_set_repaid(&pool, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::ProtocolPaused); - } - - // ── set_defaulted ───────────────────────────────────────────────────────── - - #[test] - fn test_set_defaulted_before_due_date_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - let result = client.try_set_defaulted(&admin, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_set_defaulted_at_due_date_fails() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - env.ledger().set(LedgerInfo { timestamp: due_date, ..env.ledger().get() }); - let result = client.try_set_defaulted(&admin, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_set_defaulted_after_due_date_succeeds() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - env.ledger().set(LedgerInfo { timestamp: due_date + 1, ..env.ledger().get() }); - client.set_defaulted(&admin, &id); - assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Defaulted); - } - - #[test] - fn test_set_defaulted_requires_admin() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - client.set_funded(&pool, &id); - env.ledger().set(LedgerInfo { timestamp: due_date + 1, ..env.ledger().get() }); - let non_admin = Address::generate(&env); - let result = client.try_set_defaulted(&non_admin, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::NotAdmin); - } - - #[test] - fn test_large_invoice_amounts() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let large_amount = 9_223_372_036_854_775_807i128; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &large_amount, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &50u32, &None, - ); - assert_eq!(client.get_invoice(&id).amount, large_amount); - } - - #[test] - fn test_multiple_invoices_different_currencies() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id1 = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let id2 = client.mint_invoice( - &sme, - &debtor_hash, - &2_000_000_000i128, - &Symbol::new(&env, "EURC"), - &due_date, - &cid, - &20u32, &None, - ); - assert_eq!(client.get_invoice(&id1).currency, Symbol::new(&env, "USDC")); - assert_eq!(client.get_invoice(&id2).currency, Symbol::new(&env, "EURC")); - } - - #[test] - fn test_invoice_immutability_after_creation() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &ipfs_cid, - &10u32, &None, - ); - - let invoice1 = client.get_invoice(&id); - let invoice2 = client.get_invoice(&id); - assert_eq!(invoice1.id, invoice2.id); - assert_eq!(invoice1.amount, invoice2.amount); - assert_eq!(invoice1.sme, invoice2.sme); - } - - #[test] - fn test_get_invoice_returns_correct_data() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let amount = 1_000_000_000i128; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let invoice = client.get_invoice(&id); - assert_eq!(invoice.id, id); - assert_eq!(invoice.sme, sme); - assert_eq!(invoice.amount, amount); - assert_eq!(invoice.currency, Symbol::new(&env, "USDC")); - assert_eq!(invoice.due_date, due_date); - assert_eq!(invoice.risk_score, 10u32); - assert_eq!(invoice.risk_tier, RiskTier::AAA); - assert_eq!(invoice.status, InvoiceStatus::Created); - } - - #[test] - fn test_get_nonexistent_invoice_fails() { - let (_env, _admin, client) = setup(); - let result = client.try_get_invoice(&9999u64); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvoiceNotFound); - } - - // ── timestamps ──────────────────────────────────────────────────────────── - - #[test] - fn test_invoice_timestamps_recorded() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &10u32, &None, - ); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - - let funded_ts = env.ledger().timestamp(); - client.set_funded(&pool, &id); - assert_eq!(client.get_invoice(&id).funded_at, Some(funded_ts)); - - let repaid_ts = env.ledger().timestamp(); - client.set_repaid(&pool, &id); - assert_eq!(client.get_invoice(&id).repaid_at, Some(repaid_ts)); - } - - // ── next_id / invoice_count ─────────────────────────────────────────────── - - #[test] - fn test_next_id_increments() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - let id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &ipfs_cid, - &10u32, &None, - ); - assert_eq!(client.next_id(), 2); - } - - #[test] - fn test_invoice_count_increments() { - let (env, _admin, client) = setup(); - assert_eq!(client.invoice_count(), 0); - mint_default(&env, &client, 10u32); - assert_eq!(client.invoice_count(), 1); - mint_default(&env, &client, 20u32); - assert_eq!(client.invoice_count(), 2); - } - - #[test] - fn test_invalid_status_transition_created_to_funded_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - let result = client.try_set_funded(&pool, &id); // Created → Funded skips Listed - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_invalid_status_transition_listed_to_repaid_fails() { - let (env, admin, client) = setup(); - let id = mint_default(&env, &client, 10u32); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - let result = client.try_set_repaid(&pool, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_risk_tier_aaa_aa_boundary() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id1 = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &20u32, &None, - ); - assert_eq!(client.get_invoice(&id1).risk_tier, RiskTier::AAA); - let id2 = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &21u32, &None, - ); - assert_eq!(client.get_invoice(&id2).risk_tier, RiskTier::AA); - } - - // ── Migration Tests ──────────────────────────────────────────────────────── - - #[test] - fn test_migrate_success() { - let (env, admin, client) = setup(); - let result = client.try_migrate(&admin); - assert!(result.is_ok()); - } - - #[test] - fn test_migrate_non_admin_fails() { - let (env, _admin, client) = setup(); - let non_admin = Address::generate(&env); - let result = client.try_migrate(&non_admin); - assert!(result.is_err()); - } - - #[test] - fn test_migrate_idempotent() { - let (env, admin, client) = setup(); - assert!(client.try_migrate(&admin).is_ok()); - assert!(client.try_migrate(&admin).is_ok()); - } - - #[test] - fn test_migrate_preserves_existing_invoices() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - // Mint an invoice before migration - let invoice_id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &ipfs_cid, - &50u32, &None, - ); - - let invoice_before = client.get_invoice(&invoice_id); - - // Perform migration - client.migrate(&admin); - let invoice_after = client.get_invoice(&invoice_id); - assert_eq!(invoice_before.id, invoice_after.id); - assert_eq!(invoice_before.sme, invoice_after.sme); - assert_eq!(invoice_before.amount, invoice_after.amount); - assert_eq!(invoice_before.status, invoice_after.status); - } - - /// Proves that pre-migration records (written in InvoiceV1 format, without - /// the `notes` field) are correctly backfilled by migrate() and remain - /// fully readable via get_invoice() after the migration runs. - /// - /// The test simulates the v1 → v2 upgrade by: - /// 1. Manually writing an InvoiceV1 record directly into persistent storage - /// (bypassing mint_invoice so the record has no `notes` field). - /// 2. Setting the stored MigrationVersion to 1 (pre-migration). - /// 3. Calling migrate(), which should detect version < 2 and backfill. - /// 4. Asserting that get_invoice() now returns a valid Invoice with notes = None. - #[test] - fn test_migrate_v1_to_v2_backfills_notes_field() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let currency = Symbol::new(&env, "USDC"); - - // Write a pre-migration record directly in InvoiceV1 format. - let old_record = InvoiceV1 { - id: 1u64, - sme: sme.clone(), - debtor_hash: debtor_hash.clone(), - amount: 1_000_000_000i128, - currency: currency.clone(), - due_date, - ipfs_cid: ipfs_cid.clone(), - risk_score: 30u32, - risk_tier: kora_shared::types::RiskTier::AA, - status: kora_shared::types::InvoiceStatus::Created, - created_at: env.ledger().timestamp(), - funded_at: None, - repaid_at: None, - }; - env.as_contract(&client.address, || { - let contract_id = client.address.clone(); - env.as_contract(&contract_id, || { - env.storage().persistent().set(&DataKey::Invoice(1u64), &old_record); - // Advance NextId so migrate() knows to scan ID 1. - env.storage().instance().set(&DataKey::NextId, &2u64); - // Force stored version back to 1 so migrate() re-runs the v1→v2 step. - env.storage().instance().set(&DataKey::MigrationVersion, &1u32); - }); - - // Run migration — should rewrite the record with notes = None. - client.migrate(&admin); - - // Post-migration: record must be readable as Invoice (v2) with notes = None. - let invoice = client.get_invoice(&1u64); - assert_eq!(invoice.id, 1u64); - assert_eq!(invoice.sme, sme); - assert_eq!(invoice.amount, 1_000_000_000i128); - assert_eq!(invoice.risk_score, 30u32); - assert_eq!(invoice.notes, None); - } - - #[test] - fn test_migrate_enables_future_operations() { - let (env, admin, client) = setup(); - client.migrate(&admin); - - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - // Verify we can still mint and transition invoices after migration - let invoice_id = client.mint_invoice( - &sme, - &debtor_hash, - &1_000_000_000i128, - &Symbol::new(&env, "USDC"), - &due_date, - &cid, - &50u32, &None, - ); - - let invoice = client.get_invoice(&invoice_id); - assert_eq!(invoice.status, InvoiceStatus::Created); - - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &invoice_id); - assert_eq!(client.get_invoice(&invoice_id).status, InvoiceStatus::Listed); - } - - // ── credit limit (outstanding exposure) ─────────────────────────────────── - - #[test] - fn test_outstanding_exposure_tracked() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - assert_eq!(client.get_outstanding_exposure(&sme), 0i128); - - client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - assert_eq!(client.get_outstanding_exposure(&sme), 1_000_000_000i128); - } - - /// Proves OutstandingExposure accumulates across multiple mints for the same SME, - /// not just a single mint's own amount (regression for #403). - #[test] - fn test_outstanding_exposure_released_on_repaid() { - let (env, admin, client) = setup(); - fn test_outstanding_exposure_accumulates_across_mints() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - for _ in 0..3 { - client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - } - assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); - } - - /// A risk_registry-enforced credit_limit rejects a mint that would push - /// aggregate exposure over the limit, even though each individual mint's own - /// amount is well under it. Regression for #403. - #[test] - fn test_credit_limit_rejects_mint_exceeding_aggregate_exposure() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - // credit_limit covers exactly 3 invoices of 1_000_000_000 each. - setup_with_credit_limit(&env, &admin, &client, &sme, 3_000_000_000i128); - - for _ in 0..3 { - client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - } - assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); - - // A 4th invoice would push aggregate exposure to 4_000_000_000, over the limit. - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!( - result.unwrap_err().unwrap(), - KoraError::CreditLimitExceeded - ); - // Rejected mint must not have written any exposure. - assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); - } - - #[test] - fn test_outstanding_exposure_released_on_repaid() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - let mp = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &mp, &pool); - client.set_listed(&mp, &id); - client.set_funded(&pool, &id); - client.set_repaid(&pool, &id); - assert_eq!(client.get_outstanding_exposure(&sme), 0i128); - } - - #[test] - fn test_outstanding_exposure_released_on_withdraw() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - client.withdraw_invoice(&sme, &id); - assert_eq!(client.get_outstanding_exposure(&sme), 0i128); - } - - // ── amend_invoice ───────────────────────────────────────────────────────── - - #[test] - fn test_amend_invoice_success() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - - let new_debtor = Bytes::from_slice(&env, &[2u8; 32]); - let new_cid = String::from_str(&env, "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdx"); - let new_due = env.ledger().timestamp() + 86_400 * 60; - client.amend_invoice(&sme, &id, &new_debtor, &2_000_000_000i128, &new_due, &new_cid, &50u32); - - let inv = client.get_invoice(&id); - assert_eq!(inv.amount, 2_000_000_000i128); - assert_eq!(inv.due_date, new_due); - assert_eq!(inv.risk_score, 50u32); - assert_eq!(inv.risk_tier, RiskTier::A); - assert_eq!(inv.status, InvoiceStatus::Created); - } - - #[test] - fn test_amend_invoice_wrong_owner_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let other = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - let result = client.try_amend_invoice( - &other, &id, &debtor_hash, &1_000_000_000i128, &due_date, &ipfs_cid, &10u32, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::NotInvoiceOwner); - } - - #[test] - fn test_amend_invoice_after_listing_fails() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - let result = client.try_amend_invoice( - &sme, &id, &debtor_hash, &1_000_000_000i128, &due_date, &ipfs_cid, &10u32, - ); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - #[test] - fn test_amend_invoice_garbage_cid_rejected() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - let result = client.try_amend_invoice( - &sme, &id, &debtor_hash, &1_000_000_000i128, &due_date, &garbage_cid(&env), &10u32, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidCid); - // Invoice must be unchanged after the rejected amend. - assert_eq!(client.get_invoice(&id).ipfs_cid, cid); - } - - #[test] - fn test_amend_invoice_valid_cidv0_accepted() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid(&env), &10u32, &None, - ); - let cid_v0 = ipfs_cid_v0(&env); - client.amend_invoice(&sme, &id, &debtor_hash, &1_000_000_000i128, &due_date, &cid_v0, &10u32); - assert_eq!(client.get_invoice(&id).ipfs_cid, cid_v0); - } - - /// amend_invoice adjusts OutstandingExposure by the amount delta and re-checks - /// credit_limit; increasing amount beyond remaining headroom is rejected. - /// Regression for #403. - #[test] - fn test_amend_invoice_exceeding_credit_limit_rejected() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - - setup_with_credit_limit(&env, &admin, &client, &sme, 1_500_000_000i128); - - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(client.get_outstanding_exposure(&sme), 1_000_000_000i128); - - // Increasing to 2_000_000_000 would push exposure to 2_000_000_000, over the - // 1_500_000_000 limit. - let result = client.try_amend_invoice( - &sme, &id, &debtor_hash, &2_000_000_000i128, &due_date, &cid, &10u32, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::CreditLimitExceeded); - assert_eq!(client.get_outstanding_exposure(&sme), 1_000_000_000i128); - assert_eq!(client.get_invoice(&id).amount, 1_000_000_000i128); - - // A decrease within headroom succeeds and exposure reflects the new amount. - client.amend_invoice(&sme, &id, &debtor_hash, &500_000_000i128, &due_date, &cid, &10u32); - assert_eq!(client.get_outstanding_exposure(&sme), 500_000_000i128); - } - - // ── withdraw_invoice ────────────────────────────────────────────────────── - - #[test] - fn test_withdraw_invoice_success() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - client.withdraw_invoice(&sme, &id); - let result = client.try_get_invoice(&id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvoiceNotFound); - } - - #[test] - fn test_withdraw_invoice_wrong_owner_fails() { - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let other = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - let result = client.try_withdraw_invoice(&other, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::NotInvoiceOwner); - } - - #[test] - fn test_withdraw_invoice_after_listing_fails() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let ipfs_cid = String::from_str( - &env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let id = client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ); - let marketplace = Address::generate(&env); - let pool = Address::generate(&env); - client.set_authorized_callers(&admin, &marketplace, &pool); - client.set_listed(&marketplace, &id); - let result = client.try_withdraw_invoice(&sme, &id); - assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); - } - - // ── Per-invoice emergency freeze ────────────────────────────────────────── - - fn mint_one(env: &Env, client: &InvoiceNftContractClient<'static>) -> u64 { - let sme = Address::generate(env); - let debtor_hash = Bytes::from_slice(env, &[0xABu8; 32]); - let ipfs_cid = String::from_str( - env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = env.ledger().timestamp() + 86_400 * 30; - client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, - ) - } - - #[test] - fn test_is_invoice_frozen_false_by_default() { - let (_, _, client) = setup(); - // is_invoice_frozen returns false for a non-existent or unfrozen invoice. - assert!(!client.is_invoice_frozen(&999u64)); - } - - #[test] - fn test_freeze_invoice_sets_frozen_flag() { - let (env, admin, client) = setup(); - let id = mint_one(&env, &client); - assert!(!client.is_invoice_frozen(&id)); - client.freeze_invoice(&admin, &id); - assert!(client.is_invoice_frozen(&id)); - } - - #[test] - fn test_unfreeze_invoice_clears_frozen_flag() { - let (env, admin, client) = setup(); - let id = mint_one(&env, &client); - client.freeze_invoice(&admin, &id); - assert!(client.is_invoice_frozen(&id)); - client.unfreeze_invoice(&admin, &id); - assert!(!client.is_invoice_frozen(&id)); - } - - #[test] - fn test_freeze_invoice_non_admin_rejected() { - let (env, _, client) = setup(); - let id = mint_one(&env, &client); - let stranger = Address::generate(&env); - let err = client - .try_freeze_invoice(&stranger, &id) - .unwrap_err() - .unwrap(); - assert_eq!(err, InvoiceNftError::NotAdmin); - } - - #[test] - fn test_freeze_nonexistent_invoice_rejected() { - let (_, admin, client) = setup(); - let err = client - .try_freeze_invoice(&admin, &9999u64) - .unwrap_err() - .unwrap(); - assert_eq!(err, InvoiceNftError::InvoiceNotFound); - } - - // ── risk_registry.increment_invoice_count wiring ────────────────────────── - - /// Deploys and initializes a risk_registry contract, registers `sme` as a - /// verified SME under a freshly-added verifier, and wires the registry into - /// `client` via `set_risk_registry`. Returns the registry client so tests - /// can query `get_sme_profile`. - fn wire_risk_registry( - env: &Env, - admin: &Address, - client: &InvoiceNftContractClient, - sme: &Address, - ) -> kora_risk_registry::RiskRegistryContractClient<'static> { - // add_verifier's stake transfer requires verifier.require_auth() from - // inside a nested call (risk_registry -> token), which isn't tied to - // the root invocation — plain mock_all_auths() rejects that. - env.mock_all_auths_allowing_non_root_auth(); - let rr_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); - let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_id); - let rr_admin = Address::generate(env); - let token_admin = Address::generate(env); - let staking_token = env.register_stellar_asset_contract_v2(token_admin).address(); - rr.initialize(&rr_admin, &client.address, &staking_token, &1_000_000i128, &5_000u32); - - let verifier = Address::generate(env); - soroban_sdk::token::StellarAssetClient::new(env, &staking_token) - .mint(&verifier, &1_000_000i128); - rr.add_verifier(&rr_admin, &verifier, &1_000_000i128); - rr.register_sme(&verifier, sme, &50u32, &true); - - client.set_risk_registry(admin, &rr_id); - rr - } - - #[test] - fn test_mint_invoice_increments_risk_registry_total_invoices() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let rr = wire_risk_registry(&env, &admin, &client, &sme); - assert_eq!(rr.get_sme_profile(&sme).total_invoices, 0); - - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(rr.get_sme_profile(&sme).total_invoices, 1); - - client.mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert_eq!(rr.get_sme_profile(&sme).total_invoices, 2); - } - - #[test] - fn test_mint_invoices_batch_increments_risk_registry_total_invoices_per_invoice() { - let (env, admin, client) = setup(); - let sme = Address::generate(&env); - let rr = wire_risk_registry(&env, &admin, &client, &sme); - - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let mut batch: Vec = Vec::new(&env); - for _ in 0..5 { - batch.push_back(BatchInvoiceInput { - debtor_hash: debtor_hash.clone(), - amount: 1_000_000_000i128, - currency: Symbol::new(&env, "USDC"), - due_date, - ipfs_cid: cid.clone(), - risk_score: 10u32, - notes: None, - }); - } - let ids = client.mint_invoices_batch(&sme, &batch); - assert_eq!(ids.len(), 5); - // One increment per invoice in the batch, not one per batch call. - assert_eq!(rr.get_sme_profile(&sme).total_invoices, 5); - } - - #[test] - fn test_mint_invoice_succeeds_without_risk_registry_configured() { - // No set_risk_registry() call — minting must still succeed as a no-op - // with respect to the registry integration (backward compatible). - let (env, _admin, client) = setup(); - let sme = Address::generate(&env); - let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); - let cid = ipfs_cid(&env); - let due_date = env.ledger().timestamp() + 86_400 * 30; - let result = client.try_mint_invoice( - &sme, &debtor_hash, &1_000_000_000i128, - &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, - ); - assert!(result.is_ok()); - } -} +#![no_std] +// Added standardized events + +//! # Invoice NFT Contract +//! +//! Mints and manages invoice NFTs as the canonical source of truth for invoice state. +//! +//! Each invoice is an immutable NFT with a unique ID, representing a real-world invoice +//! with fields such as amount, due date, debtor information (hashed), and repayment status. +//! +//! **Lifecycle:** `Created` → `Listed` → `Funded` → `Repaid` | `Defaulted` +//! +//! See [Invoice NFT Model](../../../docs/invoice-nft.md) for detailed architecture. + +use kora_shared::{ + errors::CommonError, + events, + reentrancy::ReentrancyGuard, + types::{Invoice, InvoiceStatus, RiskTier}, + validation::{ + require_batch_size_within_limit, require_future_timestamp, require_max_length_bytes, + require_max_length_string, require_non_empty_bytes, require_non_empty_string, + require_non_zero_amount, require_valid_risk_score, MAX_DEBTOR_HASH_LEN, MAX_IPFS_CID_LEN, + UPGRADE_TIMELOCK_DELAY, + require_future_timestamp, require_max_length_bytes, require_max_length_string, + require_non_empty_bytes, require_non_empty_string, require_non_zero_amount, + require_valid_ipfs_cid, require_valid_risk_score, safe_sub, MAX_DEBTOR_HASH_LEN, + MAX_IPFS_CID_LEN, UPGRADE_TIMELOCK_DELAY, + }, +}; +use soroban_sdk::{contract, contracterror, contractimpl, contracttype, Address, Bytes, BytesN, Env, String, Symbol, Vec}; + +/// Local error enum for the invoice_nft contract. +/// +/// `kora_shared::errors::KoraError` was split apart because Soroban's +/// `#[contracterror]` macro caps an error enum at 50 variants — each contract +/// now owns its own local error type, with `From` bridging the +/// small set of shared validation/reentrancy errors. +#[contracterror] +#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] +#[repr(u32)] +pub enum InvoiceNftError { + AlreadyInitialized = 1, + ArithmeticOverflow = 2, + CreditLimitExceeded = 3, + CurrencyNotAllowed = 4, + EmptyBytes = 5, + EmptyString = 6, + FieldTooLong = 7, + InvalidAddress = 8, + InvalidAmount = 9, + InvalidDueDate = 10, + InvalidInvoiceStatus = 11, + InvalidRiskScore = 12, + InvoiceNotFound = 13, + NoUpgradeProposed = 14, + NotAdmin = 15, + NotInitialized = 16, + NotInvoiceOwner = 17, + ProtocolPaused = 18, + Reentrancy = 19, + Unauthorized = 20, + UpgradeTimelockNotElapsed = 21, +} + +impl From for InvoiceNftError { + fn from(e: CommonError) -> Self { + match e { + CommonError::InvalidAmount => InvoiceNftError::InvalidAmount, + CommonError::InvalidDueDate => InvoiceNftError::InvalidDueDate, + CommonError::InvalidRiskScore => InvoiceNftError::InvalidRiskScore, + CommonError::InvalidAddress => InvoiceNftError::InvalidAddress, + CommonError::EmptyString => InvoiceNftError::EmptyString, + CommonError::EmptyBytes => InvoiceNftError::EmptyBytes, + CommonError::FieldTooLong => InvoiceNftError::FieldTooLong, + CommonError::ArithmeticOverflow => InvoiceNftError::ArithmeticOverflow, + CommonError::Reentrancy => InvoiceNftError::Reentrancy, + // InvalidCid / ArithmeticUnderflow / InvalidFeeRate aren't raised by any call + // this crate makes into kora_shared::validation. + _ => InvoiceNftError::InvalidAmount, + } + } +} + +// ── TTL constants (~30 days at ~5s/ledger) ─────────────────────────────────── +const PERSISTENT_TTL_THRESHOLD: u32 = 518_400; +const PERSISTENT_TTL_BUMP: u32 = 518_400; + +// ── Storage Keys ──────────────────────────────────────────────────────────── +// +// Storage versioning: The contract uses a MigrationVersion key to track schema changes. +// Current version: 2 (Invoice includes `metadata_hash` and `notes`) +// +// Variants: +// - Invoice(u64): Stores individual Invoice structs by ID (persistent) +// - NextId: Stores the next invoice ID to mint (instance) +// - Admin: Stores admin address (instance) +// - AccessControl: Stores access control contract address (instance) +// - MigrationVersion: Tracks current schema version for upgrade safety (instance) + +/// Storage key variants for the invoice NFT contract. +/// +/// - `Invoice(u64)` — Maps invoice ID to the full `Invoice` struct (persistent) +/// - `NextId` — Stores the next invoice ID to be allocated (instance) +/// - `Admin` — Stores the contract admin address (instance) +/// - `AccessControl` — Stores the access control contract address (instance) +/// - `InvoiceCount` — Stores total invoice count for metrics (instance) +/// - `MigrationVersion` — Tracks current schema version for upgrade safety (instance) +/// - `CurrencyAllowlist(Symbol)` — Marks a currency symbol as allowed (persistent) +#[contracttype] +pub enum DataKey { + /// Versioned invoice storage: Invoice(id) stores Invoice struct + Invoice(u64), + /// Instance key: tracks next invoice ID to assign + NextId, + /// Instance key: admin address for privileged operations + Admin, + /// Instance key: access control contract address for pause checks + AccessControl, + /// Instance key: current schema migration version (starts at 1) + MigrationVersion, + /// Pending upgrade proposal: (wasm_hash, proposed_at_timestamp). + UpgradeProposal, + /// Instance key: authorized marketplace contract address + Marketplace, + /// Instance key: authorized financing pool contract address + FinancingPool, + /// Instance key: authorized risk registry contract address + RiskRegistry, + /// Persistent: aggregate exposure (i128) for an investor address + OutstandingExposure(Address), + /// Persistent: marks a currency symbol as allowed for invoices + CurrencyAllowlist(Symbol), + /// Persistent bool: true when this invoice is individually frozen by an admin. + /// Checked by marketplace.fund_invoice and financing_pool.repay in addition + /// to the protocol-wide pause, enabling targeted freeze of disputed invoices. + InvoiceFrozen(u64), +} + +/// Input type for a single invoice within a batch mint operation. +#[contracttype] +#[derive(Clone)] +pub struct BatchInvoiceInput { + pub debtor_hash: Bytes, + pub amount: i128, + pub currency: Symbol, + pub due_date: u64, + pub ipfs_cid: String, + pub risk_score: u32, + pub notes: Option, +} + +// ── Migration helpers ───────────────────────────────────────────────────────── +// +// When Invoice gains new fields, keep the PREVIOUS struct definition here so +// migrate() can deserialize stale records from persistent storage. +// +// Pattern: +// 1. Copy the old Invoice definition below as InvoiceV{N}. +// 2. Add the new field(s) to Invoice in kora-shared/src/types.rs. +// 3. Increment MigrationVersion to N+1 in migrate(). +// 4. In migrate(), read as InvoiceV{N}, convert to Invoice, write back. +// 5. After all live nodes have run migrate(), the old InvoiceV{N} struct +// can be removed in the following upgrade cycle. + +/// Schema v1 of Invoice — identical to the original struct that existed before +/// the `notes` field was added. Used by migrate() to deserialize stale records +/// from persistent storage so they can be rewritten in the current schema (v2). +#[contracttype] +#[derive(Clone)] +pub struct InvoiceV1 { + pub id: u64, + pub sme: Address, + pub debtor_hash: Bytes, + pub amount: i128, + pub currency: Symbol, + pub due_date: u64, + pub ipfs_cid: String, + pub risk_score: u32, + pub risk_tier: kora_shared::types::RiskTier, + pub status: kora_shared::types::InvoiceStatus, + pub created_at: u64, + pub funded_at: Option, + pub repaid_at: Option, +} + +// ── Contract ───────────────────────────────────────────────────────────────── + +#[contract] +pub struct InvoiceNftContract; + +#[contractimpl] +impl InvoiceNftContract { + /// One-time initializer. Sets admin and access-control contract address. + /// + /// **Parameters:** + /// - `admin` — The address that will administer this contract. + /// - `access_control` — The deployed `access_control` contract address used for pause checks. + /// + /// **Errors:** + /// - `InvoiceNftError::AlreadyInitialized` — Contract has already been initialized. + /// - `InvoiceNftError::InvalidAddress` — `admin` or `access_control` is the contract's own address. + /// + /// **Security:** No auth required on first call. Subsequent calls revert immediately. + pub fn initialize(env: Env, admin: Address, access_control: Address) -> Result<(), InvoiceNftError> { + if env.storage().instance().has(&DataKey::Admin) { + return Err(InvoiceNftError::AlreadyInitialized); + } + kora_shared::validation::require_not_self(&env, &admin)?; + kora_shared::validation::require_not_self(&env, &access_control)?; + kora_shared::validation::require_distinct(&admin, &access_control)?; + env.storage().instance().set(&DataKey::Admin, &admin); + env.storage() + .instance() + .set(&DataKey::AccessControl, &access_control); + env.storage().instance().set(&DataKey::NextId, &1u64); + // A freshly initialized contract already stores every field of the + // current Invoice schema (v2 — includes `metadata_hash` and `notes`). + // Start at the current version so migrate()'s v1 -> v2 backfill pass + // (which decodes records as the legacy InvoiceV1 shape) is never run + // against records that were never written in the old format. + // A fresh deployment mints Invoice records with the current struct shape + // (schema v2, which already includes `notes`) from the very first mint — + // there is no legacy v1 data to backfill, so the baseline starts at the + // current version rather than v1. + env.storage() + .instance() + .set(&DataKey::MigrationVersion, &2u32); + Ok(()) + } + + /// Set the risk_registry contract address. Admin only. Called after deployment + /// to wire up credit-limit enforcement. + /// + /// **Parameters:** + /// - `admin` — Must be the current admin address. + /// - `risk_registry` — The deployed `risk_registry` contract address. + /// + /// **Errors:** + /// - `InvoiceNftError::NotAdmin` — Caller is not the admin. + /// - `InvoiceNftError::InvalidAddress` — `risk_registry` is the contract's own address. + /// + /// **Security:** Requires `admin.require_auth()`. Idempotent — safe to call again if + /// the risk registry is redeployed. + pub fn set_risk_registry(env: Env, admin: Address, risk_registry: Address) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + kora_shared::validation::require_not_self(&env, &risk_registry)?; + env.storage().instance().set(&DataKey::RiskRegistry, &risk_registry); + Ok(()) + } + + /// Idempotent migration function. Performs any necessary schema upgrades. + /// + /// Must be called by admin immediately after a WASM upgrade that changes a + /// `#[contracttype]` struct. The function is safe to call multiple times: + /// each version gate is a no-op once the ledger has already been upgraded + /// past that version. + /// + /// See docs/MIGRATIONS.md for the full runbook and a description of each + /// version's changes. + pub fn migrate(env: Env, admin: Address) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + + let current_version: u32 = env + .storage() + .instance() + .get(&DataKey::MigrationVersion) + .unwrap_or(0); + + // Version 0 -> 1: Initial setup (marks the baseline schema version). + if current_version < 1 { + env.storage() + .instance() + .set(&DataKey::MigrationVersion, &1u32); + } + + // Version 1 -> 2: Invoice gained `notes: Option`. + // + // Old records in persistent storage are still encoded as InvoiceV1 (no + // `notes` field). Reading them as `Invoice` (v2) would panic because + // the XDR field count has changed. We therefore: + // 1. Read each record as InvoiceV1 (the old encoding). + // 2. Re-encode it as Invoice (v2) with notes = None. + // 3. Overwrite the slot so future reads use the new codec. + if current_version < 2 { + let next_id: u64 = env + .storage() + .instance() + .get(&DataKey::NextId) + .unwrap_or(1); + + // Iterate every allocated invoice ID and backfill. + let mut id: u64 = 1; + while id < next_id { + let key = DataKey::Invoice(id); + // Records minted AFTER the WASM upgrade already carry notes and + // decode as Invoice directly — skip them. + if let Some(old) = env + .storage() + .persistent() + .get::(&key) + { + let upgraded = Invoice { + id: old.id, + sme: old.sme, + debtor_hash: old.debtor_hash, + amount: old.amount, + currency: old.currency, + due_date: old.due_date, + ipfs_cid: old.ipfs_cid, + metadata_hash: Bytes::new(&env), + risk_score: old.risk_score, + risk_tier: old.risk_tier, + status: old.status, + created_at: old.created_at, + funded_at: old.funded_at, + repaid_at: old.repaid_at, + notes: None, + }; + env.storage().persistent().set(&key, &upgraded); + } + id += 1; + } + + env.storage() + .instance() + .set(&DataKey::MigrationVersion, &2u32); + } + + Ok(()) + } + + /// Set the authorized marketplace and financing pool contract addresses. + /// Must be called by admin after deployment to enable status transitions. + pub fn set_authorized_callers( + env: Env, + admin: Address, + marketplace: Address, + financing_pool: Address, + ) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + env.storage().instance().set(&DataKey::Marketplace, &marketplace); + env.storage().instance().set(&DataKey::FinancingPool, &financing_pool); + Ok(()) + } + + /// Mint a new invoice NFT. Caller must be a verified SME. + /// + /// **Parameters:** + /// - `sme` — The SME address minting the invoice (must sign). + /// - `debtor_hash` — SHA-256 hash of debtor PII (max `MAX_DEBTOR_HASH_LEN` bytes). PII stays off-chain. + /// - `amount` — Face value in stroops (7 decimals). Must be > 0. + /// - `currency` — Token symbol (e.g. `USDC`, `EURC`). + /// - `due_date` — Unix timestamp; must be strictly in the future. + /// - `ipfs_cid` — CIDv0 or CIDv1 of the full invoice document on IPFS (max 128 bytes). + /// - `risk_score` — Credit score 0–100 assigned by the verifier. Maps to a `RiskTier`. + /// - `notes` — Optional free-text memo (schema v2; `None` is fine). + /// + /// **Returns:** The allocated invoice ID (monotonically increasing from 1). + /// + /// **Errors:** + /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. + /// - `InvoiceNftError::InvalidAmount` — `amount` is zero, negative, or exceeds `credit_limit`. + /// - `InvoiceNftError::InvalidDueDate` — `due_date` is not in the future. + /// - `InvoiceNftError::InvalidRiskScore` — `risk_score` > 100. + /// - `InvoiceNftError::EmptyBytes` — `debtor_hash` is empty. + /// - `InvoiceNftError::EmptyString` — `ipfs_cid` is empty. + /// - `InvoiceNftError::FieldTooLong` — `debtor_hash` or `ipfs_cid` exceed their max lengths. + /// - `InvoiceNftError::CreditLimitExceeded` — Adding this invoice would exceed the SME's credit limit. + /// - `InvoiceNftError::Reentrancy` — Reentrancy guard triggered. + /// - `KoraError::ProtocolPaused` — Protocol is paused. + /// - `KoraError::SMENotVerified` — `sme` is not `verified` in the risk_registry (only when one is wired up). + /// - `KoraError::ComplianceNotAttested` — `sme` lacks a compliance attestation (only when a risk_registry is wired up). + /// - `KoraError::InvalidAmount` — `amount` is zero, negative, or exceeds `credit_limit`. + /// - `KoraError::InvalidDueDate` — `due_date` is not in the future. + /// - `KoraError::InvalidRiskScore` — `risk_score` > 100. + /// - `KoraError::EmptyBytes` — `debtor_hash` is empty. + /// - `KoraError::EmptyString` — `ipfs_cid` is empty. + /// - `KoraError::FieldTooLong` — `debtor_hash` or `ipfs_cid` exceed their max lengths. + /// - `KoraError::InvalidCid` — `ipfs_cid` is not a structurally valid CIDv0/CIDv1. + /// - `KoraError::CreditLimitExceeded` — Adding this invoice would exceed the SME's credit limit. + /// - `KoraError::Reentrancy` — Reentrancy guard triggered. + /// + /// **Security:** Requires `sme.require_auth()`. The protocol must not be paused. + /// `OutstandingExposure` for the SME is incremented by `amount` on every successful + /// mint (and decremented on withdraw/repay/default), regardless of whether a + /// `risk_registry` is wired up. If a `risk_registry` *is* wired up and the SME has a + /// non-zero `credit_limit`, the mint is rejected before any state is written whenever + /// it would push aggregate exposure over that limit. + pub fn mint_invoice( + env: Env, + sme: Address, + debtor_hash: Bytes, + amount: i128, + currency: Symbol, + due_date: u64, + ipfs_cid: String, + risk_score: u32, + notes: Option, + ) -> Result { + sme.require_auth(); + Self::require_not_paused(&env)?; + Self::require_verified_sme(&env, &sme)?; + Self::require_compliance_attested(&env, &sme)?; + let _guard = ReentrancyGuard::new(&env)?; + + require_non_zero_amount(amount)?; + require_future_timestamp(&env, due_date)?; + require_valid_risk_score(risk_score)?; + require_non_empty_bytes(&debtor_hash)?; + require_max_length_bytes(&debtor_hash, MAX_DEBTOR_HASH_LEN)?; + require_non_empty_string(&ipfs_cid)?; + require_max_length_string(&ipfs_cid, MAX_IPFS_CID_LEN)?; + require_valid_ipfs_cid(&ipfs_cid)?; + + // Risk registry integration is optional — a contract deployed before + // set_risk_registry() is called must still be able to mint. + let rr_addr = env + .storage() + .instance() + .get::(&DataKey::RiskRegistry); + + // Credit-limit enforcement: if a risk_registry is wired up, check the + // SME's pre-approved credit limit against their current outstanding exposure. + if let Some(rr_addr) = &rr_addr { + let rr = kora_risk_registry::RiskRegistryContractClient::new(&env, rr_addr); + if let Ok(profile) = rr.try_get_sme_profile(&sme) { + if let Ok(profile) = profile { + if profile.credit_limit > 0 { + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + let new_exposure = outstanding + .checked_add(amount) + .ok_or(InvoiceNftError::ArithmeticOverflow)?; + if new_exposure > profile.credit_limit { + return Err(InvoiceNftError::CreditLimitExceeded); + } + } + } + } + } + // Outstanding exposure is tracked for every SME regardless of whether a + // risk_registry is wired up (withdraw/repaid/defaulted always decrement it); + // the credit_limit *check* below only applies once a registry is wired. + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + let new_exposure = outstanding + .checked_add(amount) + .ok_or(KoraError::ArithmeticOverflow)?; + Self::check_credit_limit(&env, &sme, new_exposure)?; + + let id: u64 = env.storage().instance().get(&DataKey::NextId).unwrap_or(1); + + let invoice = Invoice { + id, + sme: sme.clone(), + debtor_hash, + amount, + currency, + due_date, + ipfs_cid, + metadata_hash: Bytes::new(&env), + risk_score, + risk_tier: RiskTier::from_score(risk_score), + status: InvoiceStatus::Created, + created_at: env.ledger().timestamp(), + funded_at: None, + repaid_at: None, + notes, + }; + + env.storage() + .persistent() + .set(&DataKey::Invoice(id), &invoice); + Self::bump_invoice_ttl(&env, id); + env.storage().instance().set( + &DataKey::NextId, + &(id.checked_add(1).ok_or(InvoiceNftError::ArithmeticOverflow)?), + ); + + // Track outstanding exposure so credit-limit checks and get_outstanding_exposure + // stay accurate; released again on withdraw/repaid/defaulted. + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + env.storage().persistent().set( + &DataKey::OutstandingExposure(sme.clone()), + &outstanding + .checked_add(amount) + .ok_or(InvoiceNftError::ArithmeticOverflow)?, + ); + env.storage() + .persistent() + .set(&DataKey::OutstandingExposure(sme.clone()), &new_exposure); + + // Track outstanding exposure so the credit-limit check above (and any + // other invoice minted for this SME) sees an up-to-date total. + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + env.storage().persistent().set( + &DataKey::OutstandingExposure(sme.clone()), + &outstanding + .checked_add(amount) + .ok_or(KoraError::ArithmeticOverflow)?, + ); + + // Report the new invoice to risk_registry so SmeProfile.total_invoices stays + // accurate. Best-effort: an unwired registry or an unregistered SME must not + // block a mint that already succeeded. + if let Some(rr_addr) = &rr_addr { + let rr = kora_risk_registry::RiskRegistryContractClient::new(&env, rr_addr); + let _ = rr.try_increment_invoice_count(&env.current_contract_address(), &sme); + } + + events::invoice_created(&env, id, &sme, invoice.amount); + Ok(id) + } + + /// Mint multiple invoice NFTs atomically for a single SME. + /// + /// All inputs are validated before any invoice is stored — if any entry + /// fails validation, or the batch's cumulative amount would push the SME's + /// aggregate `OutstandingExposure` over their `risk_registry` `credit_limit`, + /// the entire batch is aborted with no partial state written (atomic-abort + /// semantics). A single `require_auth` covers the whole batch. + /// + /// **Errors:** + /// - `KoraError::CreditLimitExceeded` — the batch's cumulative amount, added to + /// the SME's pre-batch outstanding exposure, would exceed `credit_limit`, even + /// if no single entry exceeds it alone. + /// + /// Returns a `Vec` of the newly allocated invoice IDs in order. + /// + /// **Errors (in addition to per-entry field validation):** + /// - `KoraError::ProtocolPaused` — Protocol is paused. + /// - `KoraError::SMENotVerified` — `sme` is not `verified` in the risk_registry (only when one is wired up). + /// - `KoraError::ComplianceNotAttested` — `sme` lacks a compliance attestation (only when a risk_registry is wired up). + pub fn mint_invoices_batch( + env: Env, + sme: Address, + invoices: Vec, + ) -> Result, InvoiceNftError> { + sme.require_auth(); + Self::require_not_paused(&env)?; + Self::require_verified_sme(&env, &sme)?; + Self::require_compliance_attested(&env, &sme)?; + let _guard = ReentrancyGuard::new(&env)?; + + // ── Check batch size before any validation/minting ──────────────────── + require_batch_size_within_limit(invoices.len() as u32)?; + + // ── Phase 1: validate ALL inputs before touching storage ────────────── + // Track a running cumulative exposure so items that each individually fit + // under credit_limit can't jointly exceed it against the same stale baseline. + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + let mut running_exposure = outstanding; + for i in 0..invoices.len() { + let entry = invoices.get(i).unwrap(); + require_non_zero_amount(entry.amount)?; + require_future_timestamp(&env, entry.due_date)?; + require_valid_risk_score(entry.risk_score)?; + require_non_empty_bytes(&entry.debtor_hash)?; + require_max_length_bytes(&entry.debtor_hash, MAX_DEBTOR_HASH_LEN)?; + require_non_empty_string(&entry.ipfs_cid)?; + require_max_length_string(&entry.ipfs_cid, MAX_IPFS_CID_LEN)?; + require_valid_ipfs_cid(&entry.ipfs_cid)?; + + running_exposure = running_exposure + .checked_add(entry.amount) + .ok_or(KoraError::ArithmeticOverflow)?; + } + Self::check_credit_limit(&env, &sme, running_exposure)?; + + // ── Phase 2: mint each invoice ──────────────────────────────────────── + let mut ids: Vec = Vec::new(&env); + let mut next_id: u64 = env.storage().instance().get(&DataKey::NextId).unwrap_or(1); + + // Risk registry integration is optional — a contract deployed before + // set_risk_registry() is called must still be able to mint. + let rr_addr = env + .storage() + .instance() + .get::(&DataKey::RiskRegistry); + let rr_client = rr_addr + .as_ref() + .map(|addr| kora_risk_registry::RiskRegistryContractClient::new(&env, addr)); + + for i in 0..invoices.len() { + let entry = invoices.get(i).unwrap(); + let id = next_id; + + let invoice = Invoice { + id, + sme: sme.clone(), + debtor_hash: entry.debtor_hash, + amount: entry.amount, + currency: entry.currency, + due_date: entry.due_date, + ipfs_cid: entry.ipfs_cid, + metadata_hash: Bytes::new(&env), + risk_score: entry.risk_score, + risk_tier: RiskTier::from_score(entry.risk_score), + status: InvoiceStatus::Created, + created_at: env.ledger().timestamp(), + funded_at: None, + repaid_at: None, + notes: entry.notes, + }; + + env.storage().persistent().set(&DataKey::Invoice(id), &invoice); + Self::bump_invoice_ttl(&env, id); + + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + env.storage().persistent().set( + &DataKey::OutstandingExposure(sme.clone()), + &outstanding + .checked_add(invoice.amount) + .ok_or(InvoiceNftError::ArithmeticOverflow)?, + ); + + .ok_or(KoraError::ArithmeticOverflow)?, + ); + + // Report each minted invoice to risk_registry individually so + // SmeProfile.total_invoices reflects the exact count, not one per batch. + // Best-effort: failure must not revert an otherwise-successful mint. + if let Some(rr) = &rr_client { + let _ = rr.try_increment_invoice_count(&env.current_contract_address(), &sme); + } + + events::invoice_created(&env, id, &sme, invoice.amount); + ids.push_back(id); + + next_id = next_id.checked_add(1).ok_or(InvoiceNftError::ArithmeticOverflow)?; + } + + env.storage().instance().set(&DataKey::NextId, &next_id); + env.storage() + .persistent() + .set(&DataKey::OutstandingExposure(sme.clone()), &running_exposure); + Ok(ids) + } + + /// Amend a Created invoice. Only the original SME may call this, and only + /// while `status == Created` (i.e., before any market activity). + /// + /// Any subset of fields may be corrected: pass the existing value to leave + /// a field unchanged. + /// + /// **Parameters:** + /// - `sme` — The original invoice owner. + /// - `invoice_id` — The ID of the invoice to amend. + /// - `debtor_hash` — Updated debtor hash (must be non-empty). + /// - `amount` — Updated face value (must be > 0). + /// - `due_date` — Updated due date (must be in the future). + /// - `ipfs_cid` — Updated IPFS CID of the document. + /// - `risk_score` — Updated risk score (0–100); also recalculates `risk_tier`. + /// + /// **Errors:** + /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. + /// - `InvoiceNftError::InvoiceNotFound` — Invoice does not exist. + /// - `InvoiceNftError::InvalidInvoiceStatus` — Invoice is not in `Created` status. + /// - `InvoiceNftError::NotInvoiceOwner` — Caller is not the invoice's SME. + /// - `InvoiceNftError::InvalidAmount` / `InvoiceNftError::InvalidDueDate` / `InvoiceNftError::InvalidRiskScore` — Validation failures. + /// - `KoraError::ProtocolPaused` — Protocol is paused. + /// - `KoraError::InvoiceNotFound` — Invoice does not exist. + /// - `KoraError::InvalidInvoiceStatus` — Invoice is not in `Created` status. + /// - `KoraError::NotInvoiceOwner` — Caller is not the invoice's SME. + /// - `KoraError::InvalidAmount` / `KoraError::InvalidDueDate` / `KoraError::InvalidRiskScore` — Validation failures. + /// - `KoraError::InvalidCid` — `ipfs_cid` is not a structurally valid CIDv0/CIDv1. + /// - `KoraError::CreditLimitExceeded` — Increasing `amount` would push the SME's + /// aggregate `OutstandingExposure` over their `credit_limit`. + /// + /// **Security:** Requires `sme.require_auth()`. Rejected once the invoice is listed + /// or further along in the lifecycle. `OutstandingExposure` is adjusted by the delta + /// between the old and new `amount` (old removed, new added) and re-checked against + /// `credit_limit` the same way `mint_invoice` is. + pub fn amend_invoice( + env: Env, + sme: Address, + invoice_id: u64, + debtor_hash: Bytes, + amount: i128, + due_date: u64, + ipfs_cid: String, + risk_score: u32, + ) -> Result<(), InvoiceNftError> { + sme.require_auth(); + Self::require_not_paused(&env)?; + + require_non_zero_amount(amount)?; + require_future_timestamp(&env, due_date)?; + require_valid_risk_score(risk_score)?; + require_non_empty_bytes(&debtor_hash)?; + require_non_empty_string(&ipfs_cid)?; + require_valid_ipfs_cid(&ipfs_cid)?; + + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Created { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + if invoice.sme != sme { + return Err(InvoiceNftError::NotInvoiceOwner); + } + + let outstanding: i128 = env + .storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme.clone())) + .unwrap_or(0i128); + let outstanding_without_old = safe_sub(outstanding, invoice.amount)?; + let new_exposure = outstanding_without_old + .checked_add(amount) + .ok_or(KoraError::ArithmeticOverflow)?; + Self::check_credit_limit(&env, &sme, new_exposure)?; + + invoice.debtor_hash = debtor_hash; + invoice.amount = amount; + invoice.due_date = due_date; + invoice.ipfs_cid = ipfs_cid; + invoice.risk_score = risk_score; + invoice.risk_tier = RiskTier::from_score(risk_score); + + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + Self::bump_invoice_ttl(&env, invoice_id); + env.storage() + .persistent() + .set(&DataKey::OutstandingExposure(sme.clone()), &new_exposure); + events::invoice_amended(&env, invoice_id, &sme); + Ok(()) + } + + /// Withdraw (void) a Created invoice. Only the original SME may call this, + /// and only while `status == Created`. + /// + /// The invoice record is removed from storage, permanently burning the NFT. + /// + /// **Parameters:** + /// - `sme` — The original invoice owner. + /// - `invoice_id` — The ID of the invoice to void. + /// + /// **Errors:** + /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. + /// - `InvoiceNftError::InvoiceNotFound` — Invoice does not exist. + /// - `InvoiceNftError::InvalidInvoiceStatus` — Invoice is not in `Created` status. + /// - `InvoiceNftError::NotInvoiceOwner` — Caller is not the invoice's SME. + /// + /// **Security:** Requires `sme.require_auth()`. Irreversible — the invoice is deleted + /// from on-chain storage and cannot be recovered. Outstanding exposure is decremented. + pub fn withdraw_invoice( + env: Env, + sme: Address, + invoice_id: u64, + ) -> Result<(), InvoiceNftError> { + sme.require_auth(); + Self::require_not_paused(&env)?; + + let invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Created { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + if invoice.sme != sme { + return Err(InvoiceNftError::NotInvoiceOwner); + } + + env.storage().persistent().remove(&DataKey::Invoice(invoice_id)); + // Release outstanding exposure + let prev: i128 = env.storage().persistent() + .get(&DataKey::OutstandingExposure(invoice.sme.clone())) + .unwrap_or(0i128); + env.storage().persistent().set( + &DataKey::OutstandingExposure(invoice.sme.clone()), + &prev.saturating_sub(invoice.amount), + ); + events::invoice_withdrawn(&env, invoice_id, &sme); + Ok(()) + } + + /// Transition invoice to Listed status. Called by Marketplace contract. + /// + /// **Parameters:** + /// - `caller` — The marketplace contract address. + /// - `invoice_id` — The ID of the invoice to list. + /// + /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. + /// + /// **Security:** Requires auth from the caller. Validates that the invoice is in `Created` status. + pub fn set_listed(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + caller.require_auth(); + Self::require_authorized_caller(&env, &caller, &[DataKey::Marketplace])?; + Self::require_not_paused(&env)?; + let _guard = ReentrancyGuard::new(&env)?; + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Created { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + invoice.status = InvoiceStatus::Listed; + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + Self::bump_invoice_ttl(&env, invoice_id); + events::invoice_listed(&env, invoice_id, &invoice.sme, invoice.amount); + Ok(()) + } + + /// Revert a Listed invoice back to Created status. Called by the Marketplace + /// contract when a listing is cancelled before any funding has been released. + /// + /// This allows the SME to re-list the same invoice after cancellation. + /// + /// **Parameters:** + /// - `caller` — The marketplace contract address (must be the authorised marketplace). + /// - `invoice_id` — The ID of the invoice to revert. + /// + /// **Errors:** + /// - `InvoiceNftError::Unauthorized` — Caller is not the authorised marketplace. + /// - `InvoiceNftError::ProtocolPaused` — Protocol is paused. + /// - `InvoiceNftError::InvalidInvoiceStatus` — Invoice is not in `Listed` status + /// (already `Funded`, `Repaid`, or `Defaulted`). + /// - `InvoiceNftError::InvoiceNotFound` — Invoice does not exist. + /// + /// **Security:** Requires auth from the caller. Only the authorised marketplace + /// address may call this function — unauthorised callers cannot revert status. + pub fn set_created(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + caller.require_auth(); + Self::require_authorized_caller(&env, &caller, &[DataKey::Marketplace])?; + Self::require_not_paused(&env)?; + let _guard = ReentrancyGuard::new(&env)?; + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Listed { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + invoice.status = InvoiceStatus::Created; + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + Self::bump_invoice_ttl(&env, invoice_id); + events::invoice_created(&env, invoice_id, &invoice.sme, invoice.amount); + Ok(()) + } + + /// Transition invoice to Funded. Called by Financing Pool contract. + /// + /// **Parameters:** + /// - `caller` — The investor or financing pool contract address. + /// - `invoice_id` — The ID of the invoice to fund. + /// + /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. + /// + /// **Security:** Requires auth from the caller. Validates that the invoice is in `Listed` status. + pub fn set_funded(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + caller.require_auth(); + Self::require_authorized_caller(&env, &caller, &[DataKey::FinancingPool])?; + Self::require_not_paused(&env)?; + let _guard = ReentrancyGuard::new(&env)?; + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Listed { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + invoice.status = InvoiceStatus::Funded; + invoice.funded_at = Some(env.ledger().timestamp()); + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + Self::bump_invoice_ttl(&env, invoice_id); + events::invoice_funded(&env, invoice_id, &caller, invoice.amount); + Ok(()) + } + + /// Mark invoice as Repaid. Called by Financing Pool on full repayment. + /// + /// **Parameters:** + /// - `caller` — The financing pool contract address. + /// - `invoice_id` — The ID of the invoice to repay. + /// + /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. + /// + /// **Security:** Requires auth from the caller. Validates that the invoice is in `Funded` status. + pub fn set_repaid(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + caller.require_auth(); + Self::require_authorized_caller(&env, &caller, &[DataKey::FinancingPool])?; + Self::require_not_paused(&env)?; + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Funded { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + invoice.status = InvoiceStatus::Repaid; + invoice.repaid_at = Some(env.ledger().timestamp()); + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + // Release outstanding exposure + let prev: i128 = env.storage().persistent() + .get(&DataKey::OutstandingExposure(invoice.sme.clone())) + .unwrap_or(0i128); + env.storage().persistent().set( + &DataKey::OutstandingExposure(invoice.sme.clone()), + &prev.saturating_sub(invoice.amount), + ); + events::invoice_repaid(&env, invoice_id, &invoice.sme, invoice.amount); + Ok(()) + } + + /// Mark invoice as Defaulted. Called by admin after due date passes. + /// + /// **Parameters:** + /// - `caller` — The admin address. + /// - `invoice_id` — The ID of the invoice to mark as defaulted. + /// + /// **Returns:** `Ok(())` on success, or an appropriate `InvoiceNftError`. + /// + /// **Security:** Requires admin auth. Validates that the invoice is `Funded` and the due date has passed. + pub fn set_defaulted(env: Env, caller: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + caller.require_auth(); + Self::require_admin(&env, &caller)?; + let _guard = ReentrancyGuard::new(&env)?; + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.status != InvoiceStatus::Funded { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + let current_time = env.ledger().timestamp(); + if current_time <= invoice.due_date { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + invoice.status = InvoiceStatus::Defaulted; + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + Self::bump_invoice_ttl(&env, invoice_id); + // Release outstanding exposure + let prev: i128 = env.storage().persistent() + .get(&DataKey::OutstandingExposure(invoice.sme.clone())) + .unwrap_or(0i128); + env.storage().persistent().set( + &DataKey::OutstandingExposure(invoice.sme.clone()), + &prev.saturating_sub(invoice.amount), + ); + events::invoice_defaulted(&env, invoice_id, &invoice.sme); + Ok(()) + } + + // ── Views ──────────────────────────────────────────────────────────────── + + /// Retrieve a full invoice by ID. + /// + /// **Parameters:** + /// - `invoice_id` — The ID of the invoice to retrieve. + /// + /// **Returns:** The complete `Invoice` struct, or `InvoiceNftError::InvoiceNotFound` if not found. + /// + /// **Security:** This is a read-only view with no authorization check. + pub fn get_invoice(env: Env, invoice_id: u64) -> Result { + Self::load_invoice(&env, invoice_id) + } + + /// Commit a SHA-256 content-integrity hash of the off-chain metadata document. + /// + /// This binds the invoice on-chain to the exact bytes of the document referenced by + /// `ipfs_cid`, so a fetched document can be verified even if the underlying CID content + /// were ever mutated. Write-once: the hash can only be committed while empty and while the + /// invoice is still in `Created` status, after which it is immutable. + /// + /// **Parameters:** + /// - `sme` — The invoice owner (must match `invoice.sme`). + /// - `invoice_id` — The ID of the invoice to commit the hash for. + /// - `metadata_hash` — SHA-256 (32 bytes) of the canonical off-chain document. + /// + /// **Security:** Requires auth from the invoice's SME. Rejects empty hashes, already-committed + /// invoices, and invoices that have left `Created` status. + pub fn commit_metadata_hash( + env: Env, + sme: Address, + invoice_id: u64, + metadata_hash: Bytes, + ) -> Result<(), InvoiceNftError> { + sme.require_auth(); + Self::require_not_paused(&env)?; + let _guard = ReentrancyGuard::new(&env)?; + + require_non_empty_bytes(&metadata_hash)?; + + let mut invoice = Self::load_invoice(&env, invoice_id)?; + if invoice.sme != sme { + return Err(InvoiceNftError::Unauthorized); + } + if invoice.status != InvoiceStatus::Created { + return Err(InvoiceNftError::InvalidInvoiceStatus); + } + if invoice.metadata_hash.len() != 0 { + return Err(InvoiceNftError::AlreadyInitialized); + } + + invoice.metadata_hash = metadata_hash; + env.storage() + .persistent() + .set(&DataKey::Invoice(invoice_id), &invoice); + Ok(()) + } + + /// Get the next invoice ID that will be allocated. + /// + /// **Returns:** The ID of the next invoice to be minted (starting at 1). + /// + /// **Security:** This is a read-only view with no authorization check. + pub fn next_id(env: Env) -> u64 { + env.storage() + .instance() + .get(&DataKey::NextId) + .unwrap_or(1) + } + + /// Returns the number of invoices minted (next_id - 1). + /// + /// **Security:** Read-only view. No authorization required. + pub fn invoice_count(env: Env) -> u64 { + env.storage() + .instance() + .get::<_, u64>(&DataKey::NextId) + .unwrap_or(1) + .saturating_sub(1) + } + + /// Returns the aggregate outstanding face value for an SME across all + /// non-Repaid, non-Defaulted invoices. Used for credit-limit enforcement. + /// + /// **Parameters:** + /// - `sme` — The SME address to query. + /// + /// **Returns:** Total outstanding exposure in stroops (0 if none recorded). + /// + /// **Security:** Read-only view. No authorization required. + pub fn get_outstanding_exposure(env: Env, sme: Address) -> i128 { + env.storage() + .persistent() + .get(&DataKey::OutstandingExposure(sme)) + .unwrap_or(0i128) + } + + // ── Per-invoice emergency freeze ────────────────────────────────────────── + // + // Complements the protocol-wide pause in AccessControl by letting an admin + // freeze a single disputed invoice without halting all protocol activity. + // The freeze state is stored in persistent storage so it survives ledger + // closings. Marketplace.fund_invoice and financing_pool.repay call + // is_invoice_frozen before executing any state-changing logic. + + /// Freeze a specific invoice, blocking fund_invoice and repay for it. + pub fn freeze_invoice(env: Env, admin: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + // Verify the invoice exists before freezing. + Self::load_invoice(&env, invoice_id)?; + let key = DataKey::InvoiceFrozen(invoice_id); + env.storage().persistent().set(&key, &true); + Self::bump_persistent(&env, &key); + events::invoice_frozen(&env, invoice_id, &admin); + Ok(()) + } + + /// Unfreeze a previously frozen invoice, restoring normal fund/repay access. + pub fn unfreeze_invoice(env: Env, admin: Address, invoice_id: u64) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + // Verify the invoice exists before unfreezing. + Self::load_invoice(&env, invoice_id)?; + let key = DataKey::InvoiceFrozen(invoice_id); + env.storage().persistent().remove(&key); + events::invoice_unfrozen(&env, invoice_id, &admin); + Ok(()) + } + + /// Returns true if this invoice has been individually frozen by an admin. + pub fn is_invoice_frozen(env: Env, invoice_id: u64) -> bool { + env.storage() + .persistent() + .get(&DataKey::InvoiceFrozen(invoice_id)) + .unwrap_or(false) + } + + // ── Upgrade ──────────────────────────────────────────────────────────────── + + /// Propose a WASM upgrade. Admin only. Begins a 24-hour timelock. + /// + /// **Parameters:** + /// - `admin` — Must be the current admin address. + /// - `new_wasm_hash` — SHA-256 hash of the new WASM binary (32 bytes). + /// + /// **Errors:** + /// - `InvoiceNftError::NotAdmin` — Caller is not the admin. + /// + /// **Security:** Requires `admin.require_auth()`. The upgrade cannot be applied until + /// `UPGRADE_TIMELOCK_DELAY` (24 h) has elapsed via `execute_upgrade`. + pub fn propose_upgrade( + env: Env, + admin: Address, + new_wasm_hash: BytesN<32>, + ) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + env.storage() + .instance() + .set(&DataKey::UpgradeProposal, &(new_wasm_hash.clone(), env.ledger().timestamp())); + events::upgrade_proposed(&env, &admin, &new_wasm_hash); + Ok(()) + } + + /// Execute a previously proposed WASM upgrade after the 24-hour timelock has elapsed. + /// + /// **Parameters:** + /// - `admin` — Must be the current admin address. + /// + /// **Errors:** + /// - `InvoiceNftError::NotAdmin` — Caller is not the admin. + /// - `InvoiceNftError::NoUpgradeProposed` — No upgrade proposal is pending. + /// - `InvoiceNftError::UpgradeTimelockNotElapsed` — 24-hour timelock has not yet passed. + /// + /// **Security:** Requires `admin.require_auth()`. Clears the proposal before executing + /// to prevent re-entry. Note: `migrate()` must be called by admin immediately after + /// any upgrade that changes a `#[contracttype]` struct schema. + pub fn execute_upgrade(env: Env, admin: Address) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + let (wasm_hash, proposed_at): (BytesN<32>, u64) = env + .storage() + .instance() + .get(&DataKey::UpgradeProposal) + .ok_or(InvoiceNftError::NoUpgradeProposed)?; + if env.ledger().timestamp() < proposed_at + UPGRADE_TIMELOCK_DELAY { + return Err(InvoiceNftError::UpgradeTimelockNotElapsed); + } + env.storage().instance().remove(&DataKey::UpgradeProposal); + events::upgrade_executed(&env, &admin, &wasm_hash); + env.deployer().update_current_contract_wasm(wasm_hash); + Ok(()) + } + + // ── Currency Allowlist ──────────────────────────────────────────────────── + + /// Add a currency symbol to the allowlist. Admin only. + pub fn add_allowed_currency(env: Env, admin: Address, currency: Symbol) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + env.storage() + .persistent() + .set(&DataKey::CurrencyAllowlist(currency.clone()), &true); + env.storage().persistent().extend_ttl( + &DataKey::CurrencyAllowlist(currency), + PERSISTENT_TTL_THRESHOLD, + PERSISTENT_TTL_BUMP, + ); + Ok(()) + } + + /// Remove a currency symbol from the allowlist. Admin only. + pub fn remove_allowed_currency(env: Env, admin: Address, currency: Symbol) -> Result<(), InvoiceNftError> { + admin.require_auth(); + Self::require_admin(&env, &admin)?; + env.storage() + .persistent() + .remove(&DataKey::CurrencyAllowlist(currency)); + Ok(()) + } + + /// Check whether a currency symbol is on the allowlist. + pub fn is_currency_allowed(env: Env, currency: Symbol) -> bool { + env.storage() + .persistent() + .get::<_, bool>(&DataKey::CurrencyAllowlist(currency)) + .unwrap_or(false) + } + + // ── Helpers ────────────────────────────────────────────────────────────── + + fn require_authorized_caller(env: &Env, caller: &Address, allowed: &[DataKey]) -> Result<(), InvoiceNftError> { + for key in allowed { + if let Some(addr) = env.storage().instance().get::(key) { + if &addr == caller { + return Ok(()); + } + } + } + Err(InvoiceNftError::Unauthorized) + } + + fn load_invoice(env: &Env, id: u64) -> Result { + env.storage() + .persistent() + .get(&DataKey::Invoice(id)) + .ok_or(InvoiceNftError::InvoiceNotFound) + } + + fn require_admin(env: &Env, caller: &Address) -> Result<(), InvoiceNftError> { + let admin: Address = env + .storage() + .instance() + .get(&DataKey::Admin) + .ok_or(InvoiceNftError::NotInitialized)?; + if &admin != caller { + return Err(InvoiceNftError::NotAdmin); + } + Ok(()) + } + + fn require_allowed_currency(env: &Env, currency: &Symbol) -> Result<(), InvoiceNftError> { + let allowed: bool = env + .storage() + .persistent() + .get(&DataKey::CurrencyAllowlist(currency.clone())) + .unwrap_or(false); + if !allowed { + return Err(InvoiceNftError::CurrencyNotAllowed); + } + Ok(()) + } + + fn require_not_paused(env: &Env) -> Result<(), InvoiceNftError> { + let ac: Address = env + .storage() + .instance() + .get(&DataKey::AccessControl) + .ok_or(InvoiceNftError::NotInitialized)?; + let client = kora_access_control::AccessControlContractClient::new(env, &ac); + if client.is_paused() { + return Err(InvoiceNftError::ProtocolPaused); + } + Ok(()) + } + + /// Extend the TTL of an arbitrary persistent storage entry to prevent expiry. + fn bump_persistent(env: &Env, key: &DataKey) { + env.storage() + .persistent() + .extend_ttl(key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_BUMP); + /// If a `risk_registry` is wired up, require `sme` to be a verified SME + /// (`SmeProfile.verified == true`). A no-op when no registry is configured, + /// for backward compatibility with deployments that haven't wired one up yet — + /// production deployments MUST call `set_risk_registry` for this to be enforced. + fn require_verified_sme(env: &Env, sme: &Address) -> Result<(), KoraError> { + /// Reject `new_exposure` if it would exceed the SME's risk_registry-assigned + /// credit limit. A no-op (always `Ok`) when no risk_registry is wired up, the + /// SME has no profile, or `credit_limit == 0` (unlimited). + fn check_credit_limit(env: &Env, sme: &Address, new_exposure: i128) -> Result<(), KoraError> { + if let Some(rr_addr) = env + .storage() + .instance() + .get::(&DataKey::RiskRegistry) + { + let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_addr); + if !rr.is_verified_sme(sme) { + return Err(KoraError::SMENotVerified); + } + } + Ok(()) + } + + /// If a `risk_registry` is wired up, require `sme` to have a compliance + /// attestation (`SmeProfile.compliance_attested == true`). A no-op when no + /// registry is configured, for backward compatibility with deployments that + /// haven't wired one up yet — production deployments MUST call + /// `set_risk_registry` for this to be enforced. + /// + /// This duplicates `marketplace::require_compliance_attested` intentionally: + /// enforcing the gate at mint time (in addition to marketplace's listing-time + /// check) prevents non-compliant SMEs from accumulating on-chain invoice + /// metadata and events before ever being blocked. See docs/invoice-nft.md. + fn require_compliance_attested(env: &Env, sme: &Address) -> Result<(), KoraError> { + if let Some(rr_addr) = env + .storage() + .instance() + .get::(&DataKey::RiskRegistry) + { + let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_addr); + if !rr.is_compliance_attested(sme) { + return Err(KoraError::ComplianceNotAttested); + if let Ok(Ok(profile)) = rr.try_get_sme_profile(sme) { + if profile.credit_limit > 0 && new_exposure > profile.credit_limit { + return Err(KoraError::CreditLimitExceeded); + } + } + } + Ok(()) + } + + /// Extend the TTL of a persistent invoice entry to prevent expiry. + fn bump_invoice_ttl(env: &Env, id: u64) { + env.storage().persistent().extend_ttl( + &DataKey::Invoice(id), + PERSISTENT_TTL_THRESHOLD, + PERSISTENT_TTL_BUMP, + ); + } + + /// Extend the TTL of an arbitrary persistent entry to prevent expiry. + fn bump_persistent(env: &Env, key: &DataKey) { + env.storage() + .persistent() + .extend_ttl(key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_BUMP); + } +} + +// ── Tests ───────────────────────────────────────────────────────────────────── + +#[cfg(test)] +mod tests { + use super::*; + use soroban_sdk::{ + testutils::{Address as _, Ledger, LedgerInfo}, + Bytes, Env, String, Symbol, + }; + + // ── Helpers ─────────────────────────────────────────────────────────────── + + fn setup() -> (Env, Address, InvoiceNftContractClient<'static>) { + let env = Env::default(); + env.mock_all_auths(); + env.ledger().set(LedgerInfo { + timestamp: 1_700_000_000, + protocol_version: 21, + sequence_number: 1, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + // Register access control contract (uninitialized — defaults to not paused) + let ac_id = env.register_contract(None, kora_access_control::AccessControlContract); + let contract_id = env.register_contract(None, InvoiceNftContract); + let client = InvoiceNftContractClient::new(&env, &contract_id); + let admin = Address::generate(&env); + client.initialize(&admin, &ac_id); + (env, admin, client) + } + + fn mint_default(env: &Env, client: &InvoiceNftContractClient, risk_score: u32) -> u64 { + let sme = Address::generate(env); + let debtor_hash = Bytes::from_slice(env, &[1u8; 32]); + let ipfs_cid = String::from_str( + env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(env, "USDC"), + &due_date, + &ipfs_cid, + &risk_score, + &None, + ) + } + + fn ipfs_cid(env: &Env) -> String { + String::from_str(env, "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi") + } + + /// Valid CIDv0 fixture ("Qm" prefix, 46 base58btc chars). + fn ipfs_cid_v0(env: &Env) -> String { + String::from_str(env, "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG") + } + + /// Structurally invalid CID fixture — should always be rejected. + fn garbage_cid(env: &Env) -> String { + String::from_str(env, "not-a-cid") + } + + /// Deploys and wires a `risk_registry` behind `client`, registers `verifier` with + /// enough stake, registers `sme` through it, and sets `sme`'s `credit_limit`. + /// Returns the risk_registry client for further use in the test. + fn setup_with_credit_limit( + env: &Env, + admin: &Address, + client: &InvoiceNftContractClient, + sme: &Address, + credit_limit: i128, + ) -> kora_risk_registry::RiskRegistryContractClient<'static> { + use soroban_sdk::token::StellarAssetClient; + + let nft_id = client.address.clone(); + let rr_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); + let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_id); + + let token_admin = Address::generate(env); + let token_id = env.register_stellar_asset_contract_v2(token_admin.clone()).address(); + let token_client = StellarAssetClient::new(env, &token_id); + + let minimum_stake = 1_000_000i128; + rr.initialize(admin, &nft_id, &token_id, &minimum_stake, &500u32); + + let verifier = Address::generate(env); + token_client.mint(&verifier, &minimum_stake); + rr.add_verifier(admin, &verifier, &minimum_stake); + rr.register_sme(&verifier, sme, &30u32, &true); + rr.set_credit_limit(&verifier, sme, &credit_limit); + + client.set_risk_registry(admin, &rr_id); + rr + } + + // ── initialize ──────────────────────────────────────────────────────────── + + #[test] + fn test_initialize_success() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register_contract(None, InvoiceNftContract); + let client = InvoiceNftContractClient::new(&env, &contract_id); + let admin = Address::generate(&env); + let access_control = Address::generate(&env); + client.initialize(&admin, &access_control); + assert_eq!(client.next_id(), 1); + assert_eq!(client.invoice_count(), 0); + } + + #[test] + fn test_initialize_already_initialized_fails() { + let (env, admin, client) = setup(); + let access_control = Address::generate(&env); + let result = client.try_initialize(&admin, &access_control); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::AlreadyInitialized); + } + + #[test] + fn test_initialize_self_as_admin_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register_contract(None, InvoiceNftContract); + let client = InvoiceNftContractClient::new(&env, &contract_id); + let ac = Address::generate(&env); + let result = client.try_initialize(&contract_id, &ac); + assert!(result.is_err()); + } + + #[test] + fn test_initialize_admin_equals_access_control_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register_contract(None, InvoiceNftContract); + let client = InvoiceNftContractClient::new(&env, &contract_id); + let admin = Address::generate(&env); + let result = client.try_initialize(&admin, &admin); + assert!(result.is_err()); + } + + // ── mint_invoice ────────────────────────────────────────────────────────── + + #[test] + fn test_mint_invoice_success() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &25u32, &None, + ); + assert_eq!(id, 1); + let invoice = client.get_invoice(&1); + assert_eq!(invoice.status, InvoiceStatus::Created); + assert_eq!(invoice.risk_tier, RiskTier::AA); + assert_eq!(invoice.sme, sme); + assert_eq!(invoice.amount, 1_000_000_000i128); + assert_eq!(invoice.created_at, env.ledger().timestamp()); + assert_eq!(invoice.funded_at, None); + assert_eq!(invoice.repaid_at, None); + } + + #[test] + fn test_mint_invoice_zero_amount_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &0i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidAmount); + } + + #[test] + fn test_mint_invoice_negative_amount_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &-1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidAmount); + } + + #[test] + fn test_mint_invoice_past_due_date_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() - 1; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidDueDate); + } + + #[test] + fn test_mint_invoice_due_date_equal_to_now_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp(); // equal to now — not strictly future + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidDueDate); + } + + #[test] + fn test_mint_invoice_invalid_risk_score_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &101u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidRiskScore); + } + + #[test] + fn test_mint_invoice_empty_debtor_hash_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::EmptyBytes); + } + + #[test] + fn test_mint_invoice_garbage_cid_rejected() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = garbage_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidCid); + } + + #[test] + fn test_mint_invoice_valid_cidv0_accepted() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid_v0(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert!(result.is_ok()); + } + + #[test] + fn test_mint_invoice_valid_cidv1_accepted() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 2; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert!(result.is_ok()); + } + + #[test] + fn test_mint_multiple_invoices_increments_id() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id1 = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let id2 = client.mint_invoice( + &sme, + &debtor_hash, + &2_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &20u32, &None, + ); + assert_eq!(id1, 1); + assert_eq!(id2, 2); + assert_eq!(client.next_id(), 3); + } + + #[test] + fn test_mint_invoice_large_amount_succeeds() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let large_amount = i128::MAX; + let id = client.mint_invoice( + &sme, &debtor_hash, &large_amount, + &Symbol::new(&env, "USDC"), &due_date, &cid, &50u32, &None, + ); + assert_eq!(client.get_invoice(&id).amount, large_amount); + } + + // ── mint_invoice / mint_invoices_batch — risk_registry gating ──────────────── + + /// Deploy a minimal Soroban token contract and mint `amount` to `recipient`. + fn deploy_token(env: &Env, admin: &Address, recipient: &Address, amount: i128) -> Address { + let token_id = env.register_stellar_asset_contract_v2(admin.clone()).address(); + let token_client = soroban_sdk::token::StellarAssetClient::new(env, &token_id); + token_client.mint(recipient, &amount); + token_id + } + + /// Registers a risk_registry, wires it up to `client`, and returns a client + /// plus a funded, added verifier ready to call `register_sme`. + fn setup_with_registry( + env: &Env, + admin: &Address, + client: &InvoiceNftContractClient, + ) -> (kora_risk_registry::RiskRegistryContractClient<'static>, Address) { + let registry_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); + let registry_client = kora_risk_registry::RiskRegistryContractClient::new(env, ®istry_id); + let verifier = Address::generate(env); + let staking_token = deploy_token(env, admin, &verifier, 1_000_000i128); + registry_client + .initialize(admin, &Address::generate(env), &staking_token, &1_000_000i128, &5_000u32); + registry_client.add_verifier(admin, &verifier, &1_000_000i128); + client.set_risk_registry(admin, ®istry_id); + (registry_client, verifier) + } + + #[test] + fn test_mint_invoice_unattested_sme_rejected() { + let (env, admin, client) = setup(); + let (registry, verifier) = setup_with_registry(&env, &admin, &client); + + let sme = Address::generate(&env); + registry.register_sme(&verifier, &sme, &50u32, &false); // compliance_attested = false + + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::ComplianceNotAttested); + } + + #[test] + fn test_mint_invoice_compliant_sme_succeeds() { + let (env, admin, client) = setup(); + let (registry, verifier) = setup_with_registry(&env, &admin, &client); + + let sme = Address::generate(&env); + registry.register_sme(&verifier, &sme, &50u32, &true); // compliance_attested = true + + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, + ); + assert_eq!(id, 1); + assert_eq!(client.get_invoice(&id).sme, sme); + } + + #[test] + fn test_mint_invoices_batch_unattested_sme_rejected() { + let (env, admin, client) = setup(); + let (registry, verifier) = setup_with_registry(&env, &admin, &client); + + let sme = Address::generate(&env); + registry.register_sme(&verifier, &sme, &50u32, &false); // compliance_attested = false + + let due_date = env.ledger().timestamp() + 86_400 * 30; + let mut batch = Vec::new(&env); + batch.push_back(BatchInvoiceInput { + debtor_hash: Bytes::from_slice(&env, &[1u8; 32]), + amount: 1_000_000_000i128, + currency: Symbol::new(&env, "USDC"), + due_date, + ipfs_cid: ipfs_cid(&env), + risk_score: 25u32, + notes: None, + }); + let result = client.try_mint_invoices_batch(&sme, &batch); + assert_eq!(result.unwrap_err().unwrap(), KoraError::ComplianceNotAttested); + } + + #[test] + fn test_mint_invoice_unverified_sme_rejected() { + let (env, admin, client) = setup(); + let (_registry, _verifier) = setup_with_registry(&env, &admin, &client); + + // sme was never registered with the risk_registry — not verified. + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::SMENotVerified); + } + + #[test] + fn test_mint_invoice_no_registry_configured_bypasses_gating() { + // Backward compatibility: when set_risk_registry was never called, + // an arbitrary (unregistered, unverified) address may still mint. + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &25u32, &None, + ); + assert_eq!(id, 1); + } + + #[test] + fn test_mint_invoices_batch_unverified_sme_rejected() { + let (env, admin, client) = setup(); + let (_registry, _verifier) = setup_with_registry(&env, &admin, &client); + + let sme = Address::generate(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let mut batch = Vec::new(&env); + batch.push_back(BatchInvoiceInput { + debtor_hash: Bytes::from_slice(&env, &[1u8; 32]), + amount: 1_000_000_000i128, + currency: Symbol::new(&env, "USDC"), + due_date, + ipfs_cid: ipfs_cid(&env), + risk_score: 25u32, + notes: None, + }); + let result = client.try_mint_invoices_batch(&sme, &batch); + assert_eq!(result.unwrap_err().unwrap(), KoraError::SMENotVerified); + } + + #[test] + fn test_mint_invoices_batch_verified_attested_sme_succeeds() { + let (env, admin, client) = setup(); + let (registry, verifier) = setup_with_registry(&env, &admin, &client); + + let sme = Address::generate(&env); + registry.register_sme(&verifier, &sme, &50u32, &true); + + let due_date = env.ledger().timestamp() + 86_400 * 30; + let mut batch = Vec::new(&env); + batch.push_back(BatchInvoiceInput { + debtor_hash: Bytes::from_slice(&env, &[1u8; 32]), + amount: 1_000_000_000i128, + currency: Symbol::new(&env, "USDC"), + due_date, + ipfs_cid: ipfs_cid(&env), + risk_score: 25u32, + notes: None, + }); + let ids = client.mint_invoices_batch(&sme, &batch); + assert_eq!(ids.len(), 1); + } + + #[test] + fn test_risk_tier_mapping() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let test_cases = [ + (0u32, RiskTier::AAA), + (20u32, RiskTier::AAA), + (21u32, RiskTier::AA), + (40u32, RiskTier::AA), + (41u32, RiskTier::A), + (60u32, RiskTier::A), + (61u32, RiskTier::B), + (80u32, RiskTier::B), + (81u32, RiskTier::C), + (100u32, RiskTier::C), + ]; + for (score, expected_tier) in &test_cases { + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, score, &None, + ); + assert_eq!(client.get_invoice(&id).risk_tier, *expected_tier); + } + } + + #[test] + fn test_risk_score_boundary_aaa_aa() { + let (env, _admin, client) = setup(); + let id20 = mint_default(&env, &client, 20u32); + let id21 = mint_default(&env, &client, 21u32); + assert_eq!(client.get_invoice(&id20).risk_tier, RiskTier::AAA); + assert_eq!(client.get_invoice(&id21).risk_tier, RiskTier::AA); + } + + #[test] + fn test_risk_score_boundary_aa_a() { + let (env, _admin, client) = setup(); + let id40 = mint_default(&env, &client, 40u32); + let id41 = mint_default(&env, &client, 41u32); + assert_eq!(client.get_invoice(&id40).risk_tier, RiskTier::AA); + assert_eq!(client.get_invoice(&id41).risk_tier, RiskTier::A); + } + + #[test] + fn test_risk_score_boundary_a_b() { + let (env, _admin, client) = setup(); + let id60 = mint_default(&env, &client, 60u32); + let id61 = mint_default(&env, &client, 61u32); + assert_eq!(client.get_invoice(&id60).risk_tier, RiskTier::A); + assert_eq!(client.get_invoice(&id61).risk_tier, RiskTier::B); + } + + #[test] + fn test_risk_score_boundary_b_c() { + let (env, _admin, client) = setup(); + let id80 = mint_default(&env, &client, 80u32); + let id81 = mint_default(&env, &client, 81u32); + assert_eq!(client.get_invoice(&id80).risk_tier, RiskTier::B); + assert_eq!(client.get_invoice(&id81).risk_tier, RiskTier::C); + } + + // ── mint_invoices_batch ─────────────────────────────────────────────────── + + fn batch_input(env: &Env, amount: i128, cid: String) -> BatchInvoiceInput { + BatchInvoiceInput { + debtor_hash: Bytes::from_slice(env, &[1u8; 32]), + amount, + currency: Symbol::new(env, "USDC"), + due_date: env.ledger().timestamp() + 86_400 * 30, + ipfs_cid: cid, + risk_score: 10u32, + notes: None, + } + } + + #[test] + fn test_mint_invoices_batch_success() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let cid = ipfs_cid(&env); + let inputs = Vec::from_array( + &env, + [ + batch_input(&env, 1_000_000_000i128, cid.clone()), + batch_input(&env, 2_000_000_000i128, cid), + ], + ); + let ids = client.mint_invoices_batch(&sme, &inputs); + assert_eq!(ids.len(), 2); + assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); + } + + #[test] + fn test_mint_invoices_batch_garbage_cid_rejects_whole_batch() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let inputs = Vec::from_array( + &env, + [ + batch_input(&env, 1_000_000_000i128, ipfs_cid(&env)), + batch_input(&env, 1_000_000_000i128, garbage_cid(&env)), + ], + ); + let result = client.try_mint_invoices_batch(&sme, &inputs); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidCid); + // Atomic-abort: nothing from the batch should be persisted. + assert_eq!(client.get_outstanding_exposure(&sme), 0i128); + } + + #[test] + fn test_mint_invoices_batch_valid_cidv0_and_cidv1_accepted() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let inputs = Vec::from_array( + &env, + [ + batch_input(&env, 1_000_000_000i128, ipfs_cid_v0(&env)), + batch_input(&env, 1_000_000_000i128, ipfs_cid(&env)), + ], + ); + let result = client.try_mint_invoices_batch(&sme, &inputs); + assert!(result.is_ok()); + } + + /// Each item individually fits under credit_limit, but their sum doesn't — proves + /// the batch checks a running cumulative total against the SME's pre-batch exposure + /// rather than checking each item independently against a stale baseline. Regression + /// for #404. + #[test] + fn test_mint_invoices_batch_rejects_cumulative_over_credit_limit() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let cid = ipfs_cid(&env); + + // credit_limit covers only 2.5 invoices of 1_000_000_000 each. + setup_with_credit_limit(&env, &admin, &client, &sme, 2_500_000_000i128); + + // Three items of 1_000_000_000 each — none individually exceeds the limit, + // but their sum (3_000_000_000) does. + let inputs = Vec::from_array( + &env, + [ + batch_input(&env, 1_000_000_000i128, cid.clone()), + batch_input(&env, 1_000_000_000i128, cid.clone()), + batch_input(&env, 1_000_000_000i128, cid), + ], + ); + let result = client.try_mint_invoices_batch(&sme, &inputs); + assert_eq!(result.unwrap_err().unwrap(), KoraError::CreditLimitExceeded); + // Nothing from the rejected batch should be persisted: exposure is untouched, + // and NextId wasn't advanced (a fresh mint still gets id 1). + assert_eq!(client.get_outstanding_exposure(&sme), 0i128); + let id = client.mint_invoice( + &sme, &Bytes::from_slice(&env, &[1u8; 32]), &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &(env.ledger().timestamp() + 86_400 * 30), + &ipfs_cid(&env), &10u32, &None, + ); + assert_eq!(id, 1u64); + } + + /// Cumulative exposure across a batch must equal pre-batch exposure plus the sum + /// of all batch amounts once the batch succeeds. + #[test] + fn test_mint_invoices_batch_accepts_cumulative_within_credit_limit() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let cid = ipfs_cid(&env); + + setup_with_credit_limit(&env, &admin, &client, &sme, 3_000_000_000i128); + + let inputs = Vec::from_array( + &env, + [ + batch_input(&env, 1_000_000_000i128, cid.clone()), + batch_input(&env, 1_000_000_000i128, cid.clone()), + batch_input(&env, 1_000_000_000i128, cid), + ], + ); + let ids = client.mint_invoices_batch(&sme, &inputs); + assert_eq!(ids.len(), 3); + assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); + } + + // ── status transitions ──────────────────────────────────────────────────── + + #[test] + fn test_status_transitions_full_lifecycle() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Created); + + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + + client.set_listed(&marketplace, &id); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Listed); + + client.set_funded(&pool, &id); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Funded); + assert!(client.get_invoice(&id).funded_at.is_some()); + + client.set_repaid(&pool, &id); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Repaid); + assert!(client.get_invoice(&id).repaid_at.is_some()); + } + + #[test] + fn test_set_listed_invalid_status_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); // succeeds: Created → Listed + let result = client.try_set_listed(&marketplace, &id); // fails: already Listed + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + // ── set_created ─────────────────────────────────────────────────────────── + + /// Marketplace can revert a Listed invoice back to Created. + #[test] + fn test_set_created_reverts_listed_to_created() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + + client.set_listed(&marketplace, &id); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Listed); + + client.set_created(&marketplace, &id); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Created); + } + + /// set_created on a Created invoice must fail (wrong source status). + #[test] + fn test_set_created_on_created_invoice_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + + let result = client.try_set_created(&marketplace, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + /// set_created on a Funded invoice must fail. + #[test] + fn test_set_created_on_funded_invoice_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + + let result = client.try_set_created(&marketplace, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + /// Unauthorized address cannot call set_created. + #[test] + fn test_set_created_unauthorized_rejected() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + + let stranger = Address::generate(&env); + let result = client.try_set_created(&stranger, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::Unauthorized); + } + + /// After set_created the invoice can be re-listed via set_listed. + #[test] + fn test_set_created_then_relist_succeeds() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + + // List → revert → re-list + client.set_listed(&marketplace, &id); + client.set_created(&marketplace, &id); + assert!(client.try_set_listed(&marketplace, &id).is_ok()); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Listed); + } + + #[test] + fn test_set_funded_invalid_status_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + let result = client.try_set_funded(&pool, &id); // Created → Funded skips Listed + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_set_repaid_invalid_status_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + let result = client.try_set_repaid(&pool, &id); // Created → Repaid skips Listed/Funded + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_set_funded_idempotent_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + let result = client.try_set_funded(&pool, &id); + assert!(result.is_err()); + } + + #[test] + fn test_set_repaid_idempotent_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + client.set_repaid(&pool, &id); + let result = client.try_set_repaid(&pool, &id); + assert!(result.is_err()); + } + + #[test] + fn test_set_repaid_blocked_when_paused() { + let env = Env::default(); + env.mock_all_auths(); + env.ledger().set(LedgerInfo { + timestamp: 1_700_000_000, + protocol_version: 21, + sequence_number: 1, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + + let admin = Address::generate(&env); + let ac_id = env.register_contract(None, kora_access_control::AccessControlContract); + let ac_client = kora_access_control::AccessControlContractClient::new(&env, &ac_id); + ac_client.initialize(&admin); + + let contract_id = env.register_contract(None, InvoiceNftContract); + let client = InvoiceNftContractClient::new(&env, &contract_id); + client.initialize(&admin, &ac_id); + + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + + ac_client.pause(&admin); + + let result = client.try_set_repaid(&pool, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::ProtocolPaused); + } + + // ── set_defaulted ───────────────────────────────────────────────────────── + + #[test] + fn test_set_defaulted_before_due_date_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + let result = client.try_set_defaulted(&admin, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_set_defaulted_at_due_date_fails() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + env.ledger().set(LedgerInfo { timestamp: due_date, ..env.ledger().get() }); + let result = client.try_set_defaulted(&admin, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_set_defaulted_after_due_date_succeeds() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + env.ledger().set(LedgerInfo { timestamp: due_date + 1, ..env.ledger().get() }); + client.set_defaulted(&admin, &id); + assert_eq!(client.get_invoice(&id).status, InvoiceStatus::Defaulted); + } + + #[test] + fn test_set_defaulted_requires_admin() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + client.set_funded(&pool, &id); + env.ledger().set(LedgerInfo { timestamp: due_date + 1, ..env.ledger().get() }); + let non_admin = Address::generate(&env); + let result = client.try_set_defaulted(&non_admin, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::NotAdmin); + } + + #[test] + fn test_large_invoice_amounts() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let large_amount = 9_223_372_036_854_775_807i128; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &large_amount, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &50u32, &None, + ); + assert_eq!(client.get_invoice(&id).amount, large_amount); + } + + #[test] + fn test_multiple_invoices_different_currencies() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id1 = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let id2 = client.mint_invoice( + &sme, + &debtor_hash, + &2_000_000_000i128, + &Symbol::new(&env, "EURC"), + &due_date, + &cid, + &20u32, &None, + ); + assert_eq!(client.get_invoice(&id1).currency, Symbol::new(&env, "USDC")); + assert_eq!(client.get_invoice(&id2).currency, Symbol::new(&env, "EURC")); + } + + #[test] + fn test_invoice_immutability_after_creation() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &ipfs_cid, + &10u32, &None, + ); + + let invoice1 = client.get_invoice(&id); + let invoice2 = client.get_invoice(&id); + assert_eq!(invoice1.id, invoice2.id); + assert_eq!(invoice1.amount, invoice2.amount); + assert_eq!(invoice1.sme, invoice2.sme); + } + + #[test] + fn test_get_invoice_returns_correct_data() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let amount = 1_000_000_000i128; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let invoice = client.get_invoice(&id); + assert_eq!(invoice.id, id); + assert_eq!(invoice.sme, sme); + assert_eq!(invoice.amount, amount); + assert_eq!(invoice.currency, Symbol::new(&env, "USDC")); + assert_eq!(invoice.due_date, due_date); + assert_eq!(invoice.risk_score, 10u32); + assert_eq!(invoice.risk_tier, RiskTier::AAA); + assert_eq!(invoice.status, InvoiceStatus::Created); + } + + #[test] + fn test_get_nonexistent_invoice_fails() { + let (_env, _admin, client) = setup(); + let result = client.try_get_invoice(&9999u64); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvoiceNotFound); + } + + // ── timestamps ──────────────────────────────────────────────────────────── + + #[test] + fn test_invoice_timestamps_recorded() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &10u32, &None, + ); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + + let funded_ts = env.ledger().timestamp(); + client.set_funded(&pool, &id); + assert_eq!(client.get_invoice(&id).funded_at, Some(funded_ts)); + + let repaid_ts = env.ledger().timestamp(); + client.set_repaid(&pool, &id); + assert_eq!(client.get_invoice(&id).repaid_at, Some(repaid_ts)); + } + + // ── next_id / invoice_count ─────────────────────────────────────────────── + + #[test] + fn test_next_id_increments() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + let id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &ipfs_cid, + &10u32, &None, + ); + assert_eq!(client.next_id(), 2); + } + + #[test] + fn test_invoice_count_increments() { + let (env, _admin, client) = setup(); + assert_eq!(client.invoice_count(), 0); + mint_default(&env, &client, 10u32); + assert_eq!(client.invoice_count(), 1); + mint_default(&env, &client, 20u32); + assert_eq!(client.invoice_count(), 2); + } + + #[test] + fn test_invalid_status_transition_created_to_funded_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + let result = client.try_set_funded(&pool, &id); // Created → Funded skips Listed + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_invalid_status_transition_listed_to_repaid_fails() { + let (env, admin, client) = setup(); + let id = mint_default(&env, &client, 10u32); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + let result = client.try_set_repaid(&pool, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_risk_tier_aaa_aa_boundary() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id1 = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &20u32, &None, + ); + assert_eq!(client.get_invoice(&id1).risk_tier, RiskTier::AAA); + let id2 = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &21u32, &None, + ); + assert_eq!(client.get_invoice(&id2).risk_tier, RiskTier::AA); + } + + // ── Migration Tests ──────────────────────────────────────────────────────── + + #[test] + fn test_migrate_success() { + let (env, admin, client) = setup(); + let result = client.try_migrate(&admin); + assert!(result.is_ok()); + } + + #[test] + fn test_migrate_non_admin_fails() { + let (env, _admin, client) = setup(); + let non_admin = Address::generate(&env); + let result = client.try_migrate(&non_admin); + assert!(result.is_err()); + } + + #[test] + fn test_migrate_idempotent() { + let (env, admin, client) = setup(); + assert!(client.try_migrate(&admin).is_ok()); + assert!(client.try_migrate(&admin).is_ok()); + } + + #[test] + fn test_migrate_preserves_existing_invoices() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + // Mint an invoice before migration + let invoice_id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &ipfs_cid, + &50u32, &None, + ); + + let invoice_before = client.get_invoice(&invoice_id); + + // Perform migration + client.migrate(&admin); + let invoice_after = client.get_invoice(&invoice_id); + assert_eq!(invoice_before.id, invoice_after.id); + assert_eq!(invoice_before.sme, invoice_after.sme); + assert_eq!(invoice_before.amount, invoice_after.amount); + assert_eq!(invoice_before.status, invoice_after.status); + } + + /// Proves that pre-migration records (written in InvoiceV1 format, without + /// the `notes` field) are correctly backfilled by migrate() and remain + /// fully readable via get_invoice() after the migration runs. + /// + /// The test simulates the v1 → v2 upgrade by: + /// 1. Manually writing an InvoiceV1 record directly into persistent storage + /// (bypassing mint_invoice so the record has no `notes` field). + /// 2. Setting the stored MigrationVersion to 1 (pre-migration). + /// 3. Calling migrate(), which should detect version < 2 and backfill. + /// 4. Asserting that get_invoice() now returns a valid Invoice with notes = None. + #[test] + fn test_migrate_v1_to_v2_backfills_notes_field() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let currency = Symbol::new(&env, "USDC"); + + // Write a pre-migration record directly in InvoiceV1 format. + let old_record = InvoiceV1 { + id: 1u64, + sme: sme.clone(), + debtor_hash: debtor_hash.clone(), + amount: 1_000_000_000i128, + currency: currency.clone(), + due_date, + ipfs_cid: ipfs_cid.clone(), + risk_score: 30u32, + risk_tier: kora_shared::types::RiskTier::AA, + status: kora_shared::types::InvoiceStatus::Created, + created_at: env.ledger().timestamp(), + funded_at: None, + repaid_at: None, + }; + env.as_contract(&client.address, || { + let contract_id = client.address.clone(); + env.as_contract(&contract_id, || { + env.storage().persistent().set(&DataKey::Invoice(1u64), &old_record); + // Advance NextId so migrate() knows to scan ID 1. + env.storage().instance().set(&DataKey::NextId, &2u64); + // Force stored version back to 1 so migrate() re-runs the v1→v2 step. + env.storage().instance().set(&DataKey::MigrationVersion, &1u32); + }); + + // Run migration — should rewrite the record with notes = None. + client.migrate(&admin); + + // Post-migration: record must be readable as Invoice (v2) with notes = None. + let invoice = client.get_invoice(&1u64); + assert_eq!(invoice.id, 1u64); + assert_eq!(invoice.sme, sme); + assert_eq!(invoice.amount, 1_000_000_000i128); + assert_eq!(invoice.risk_score, 30u32); + assert_eq!(invoice.notes, None); + } + + #[test] + fn test_migrate_enables_future_operations() { + let (env, admin, client) = setup(); + client.migrate(&admin); + + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + // Verify we can still mint and transition invoices after migration + let invoice_id = client.mint_invoice( + &sme, + &debtor_hash, + &1_000_000_000i128, + &Symbol::new(&env, "USDC"), + &due_date, + &cid, + &50u32, &None, + ); + + let invoice = client.get_invoice(&invoice_id); + assert_eq!(invoice.status, InvoiceStatus::Created); + + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &invoice_id); + assert_eq!(client.get_invoice(&invoice_id).status, InvoiceStatus::Listed); + } + + // ── credit limit (outstanding exposure) ─────────────────────────────────── + + #[test] + fn test_outstanding_exposure_tracked() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + assert_eq!(client.get_outstanding_exposure(&sme), 0i128); + + client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + assert_eq!(client.get_outstanding_exposure(&sme), 1_000_000_000i128); + } + + /// Proves OutstandingExposure accumulates across multiple mints for the same SME, + /// not just a single mint's own amount (regression for #403). + #[test] + fn test_outstanding_exposure_released_on_repaid() { + let (env, admin, client) = setup(); + fn test_outstanding_exposure_accumulates_across_mints() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + for _ in 0..3 { + client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + } + assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); + } + + /// A risk_registry-enforced credit_limit rejects a mint that would push + /// aggregate exposure over the limit, even though each individual mint's own + /// amount is well under it. Regression for #403. + #[test] + fn test_credit_limit_rejects_mint_exceeding_aggregate_exposure() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + // credit_limit covers exactly 3 invoices of 1_000_000_000 each. + setup_with_credit_limit(&env, &admin, &client, &sme, 3_000_000_000i128); + + for _ in 0..3 { + client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + } + assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); + + // A 4th invoice would push aggregate exposure to 4_000_000_000, over the limit. + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!( + result.unwrap_err().unwrap(), + KoraError::CreditLimitExceeded + ); + // Rejected mint must not have written any exposure. + assert_eq!(client.get_outstanding_exposure(&sme), 3_000_000_000i128); + } + + #[test] + fn test_outstanding_exposure_released_on_repaid() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + let mp = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &mp, &pool); + client.set_listed(&mp, &id); + client.set_funded(&pool, &id); + client.set_repaid(&pool, &id); + assert_eq!(client.get_outstanding_exposure(&sme), 0i128); + } + + #[test] + fn test_outstanding_exposure_released_on_withdraw() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + client.withdraw_invoice(&sme, &id); + assert_eq!(client.get_outstanding_exposure(&sme), 0i128); + } + + // ── amend_invoice ───────────────────────────────────────────────────────── + + #[test] + fn test_amend_invoice_success() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + + let new_debtor = Bytes::from_slice(&env, &[2u8; 32]); + let new_cid = String::from_str(&env, "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdx"); + let new_due = env.ledger().timestamp() + 86_400 * 60; + client.amend_invoice(&sme, &id, &new_debtor, &2_000_000_000i128, &new_due, &new_cid, &50u32); + + let inv = client.get_invoice(&id); + assert_eq!(inv.amount, 2_000_000_000i128); + assert_eq!(inv.due_date, new_due); + assert_eq!(inv.risk_score, 50u32); + assert_eq!(inv.risk_tier, RiskTier::A); + assert_eq!(inv.status, InvoiceStatus::Created); + } + + #[test] + fn test_amend_invoice_wrong_owner_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let other = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + let result = client.try_amend_invoice( + &other, &id, &debtor_hash, &1_000_000_000i128, &due_date, &ipfs_cid, &10u32, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::NotInvoiceOwner); + } + + #[test] + fn test_amend_invoice_after_listing_fails() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + let result = client.try_amend_invoice( + &sme, &id, &debtor_hash, &1_000_000_000i128, &due_date, &ipfs_cid, &10u32, + ); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + #[test] + fn test_amend_invoice_garbage_cid_rejected() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + let result = client.try_amend_invoice( + &sme, &id, &debtor_hash, &1_000_000_000i128, &due_date, &garbage_cid(&env), &10u32, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidCid); + // Invoice must be unchanged after the rejected amend. + assert_eq!(client.get_invoice(&id).ipfs_cid, cid); + } + + #[test] + fn test_amend_invoice_valid_cidv0_accepted() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid(&env), &10u32, &None, + ); + let cid_v0 = ipfs_cid_v0(&env); + client.amend_invoice(&sme, &id, &debtor_hash, &1_000_000_000i128, &due_date, &cid_v0, &10u32); + assert_eq!(client.get_invoice(&id).ipfs_cid, cid_v0); + } + + /// amend_invoice adjusts OutstandingExposure by the amount delta and re-checks + /// credit_limit; increasing amount beyond remaining headroom is rejected. + /// Regression for #403. + #[test] + fn test_amend_invoice_exceeding_credit_limit_rejected() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + + setup_with_credit_limit(&env, &admin, &client, &sme, 1_500_000_000i128); + + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(client.get_outstanding_exposure(&sme), 1_000_000_000i128); + + // Increasing to 2_000_000_000 would push exposure to 2_000_000_000, over the + // 1_500_000_000 limit. + let result = client.try_amend_invoice( + &sme, &id, &debtor_hash, &2_000_000_000i128, &due_date, &cid, &10u32, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::CreditLimitExceeded); + assert_eq!(client.get_outstanding_exposure(&sme), 1_000_000_000i128); + assert_eq!(client.get_invoice(&id).amount, 1_000_000_000i128); + + // A decrease within headroom succeeds and exposure reflects the new amount. + client.amend_invoice(&sme, &id, &debtor_hash, &500_000_000i128, &due_date, &cid, &10u32); + assert_eq!(client.get_outstanding_exposure(&sme), 500_000_000i128); + } + + // ── withdraw_invoice ────────────────────────────────────────────────────── + + #[test] + fn test_withdraw_invoice_success() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + client.withdraw_invoice(&sme, &id); + let result = client.try_get_invoice(&id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvoiceNotFound); + } + + #[test] + fn test_withdraw_invoice_wrong_owner_fails() { + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let other = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + let result = client.try_withdraw_invoice(&other, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::NotInvoiceOwner); + } + + #[test] + fn test_withdraw_invoice_after_listing_fails() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let ipfs_cid = String::from_str( + &env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let id = client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ); + let marketplace = Address::generate(&env); + let pool = Address::generate(&env); + client.set_authorized_callers(&admin, &marketplace, &pool); + client.set_listed(&marketplace, &id); + let result = client.try_withdraw_invoice(&sme, &id); + assert_eq!(result.unwrap_err().unwrap(), InvoiceNftError::InvalidInvoiceStatus); + } + + // ── Per-invoice emergency freeze ────────────────────────────────────────── + + fn mint_one(env: &Env, client: &InvoiceNftContractClient<'static>) -> u64 { + let sme = Address::generate(env); + let debtor_hash = Bytes::from_slice(env, &[0xABu8; 32]); + let ipfs_cid = String::from_str( + env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = env.ledger().timestamp() + 86_400 * 30; + client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(env, "USDC"), &due_date, &ipfs_cid, &10u32, &None, + ) + } + + #[test] + fn test_is_invoice_frozen_false_by_default() { + let (_, _, client) = setup(); + // is_invoice_frozen returns false for a non-existent or unfrozen invoice. + assert!(!client.is_invoice_frozen(&999u64)); + } + + #[test] + fn test_freeze_invoice_sets_frozen_flag() { + let (env, admin, client) = setup(); + let id = mint_one(&env, &client); + assert!(!client.is_invoice_frozen(&id)); + client.freeze_invoice(&admin, &id); + assert!(client.is_invoice_frozen(&id)); + } + + #[test] + fn test_unfreeze_invoice_clears_frozen_flag() { + let (env, admin, client) = setup(); + let id = mint_one(&env, &client); + client.freeze_invoice(&admin, &id); + assert!(client.is_invoice_frozen(&id)); + client.unfreeze_invoice(&admin, &id); + assert!(!client.is_invoice_frozen(&id)); + } + + #[test] + fn test_freeze_invoice_non_admin_rejected() { + let (env, _, client) = setup(); + let id = mint_one(&env, &client); + let stranger = Address::generate(&env); + let err = client + .try_freeze_invoice(&stranger, &id) + .unwrap_err() + .unwrap(); + assert_eq!(err, InvoiceNftError::NotAdmin); + } + + #[test] + fn test_freeze_nonexistent_invoice_rejected() { + let (_, admin, client) = setup(); + let err = client + .try_freeze_invoice(&admin, &9999u64) + .unwrap_err() + .unwrap(); + assert_eq!(err, InvoiceNftError::InvoiceNotFound); + } + + // ── risk_registry.increment_invoice_count wiring ────────────────────────── + + /// Deploys and initializes a risk_registry contract, registers `sme` as a + /// verified SME under a freshly-added verifier, and wires the registry into + /// `client` via `set_risk_registry`. Returns the registry client so tests + /// can query `get_sme_profile`. + fn wire_risk_registry( + env: &Env, + admin: &Address, + client: &InvoiceNftContractClient, + sme: &Address, + ) -> kora_risk_registry::RiskRegistryContractClient<'static> { + // add_verifier's stake transfer requires verifier.require_auth() from + // inside a nested call (risk_registry -> token), which isn't tied to + // the root invocation — plain mock_all_auths() rejects that. + env.mock_all_auths_allowing_non_root_auth(); + let rr_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); + let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &rr_id); + let rr_admin = Address::generate(env); + let token_admin = Address::generate(env); + let staking_token = env.register_stellar_asset_contract_v2(token_admin).address(); + rr.initialize(&rr_admin, &client.address, &staking_token, &1_000_000i128, &5_000u32); + + let verifier = Address::generate(env); + soroban_sdk::token::StellarAssetClient::new(env, &staking_token) + .mint(&verifier, &1_000_000i128); + rr.add_verifier(&rr_admin, &verifier, &1_000_000i128); + rr.register_sme(&verifier, sme, &50u32, &true); + + client.set_risk_registry(admin, &rr_id); + rr + } + + #[test] + fn test_mint_invoice_increments_risk_registry_total_invoices() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let rr = wire_risk_registry(&env, &admin, &client, &sme); + assert_eq!(rr.get_sme_profile(&sme).total_invoices, 0); + + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(rr.get_sme_profile(&sme).total_invoices, 1); + + client.mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert_eq!(rr.get_sme_profile(&sme).total_invoices, 2); + } + + #[test] + fn test_mint_invoices_batch_increments_risk_registry_total_invoices_per_invoice() { + let (env, admin, client) = setup(); + let sme = Address::generate(&env); + let rr = wire_risk_registry(&env, &admin, &client, &sme); + + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let mut batch: Vec = Vec::new(&env); + for _ in 0..5 { + batch.push_back(BatchInvoiceInput { + debtor_hash: debtor_hash.clone(), + amount: 1_000_000_000i128, + currency: Symbol::new(&env, "USDC"), + due_date, + ipfs_cid: cid.clone(), + risk_score: 10u32, + notes: None, + }); + } + let ids = client.mint_invoices_batch(&sme, &batch); + assert_eq!(ids.len(), 5); + // One increment per invoice in the batch, not one per batch call. + assert_eq!(rr.get_sme_profile(&sme).total_invoices, 5); + } + + #[test] + fn test_mint_invoice_succeeds_without_risk_registry_configured() { + // No set_risk_registry() call — minting must still succeed as a no-op + // with respect to the registry integration (backward compatible). + let (env, _admin, client) = setup(); + let sme = Address::generate(&env); + let debtor_hash = Bytes::from_slice(&env, &[1u8; 32]); + let cid = ipfs_cid(&env); + let due_date = env.ledger().timestamp() + 86_400 * 30; + let result = client.try_mint_invoice( + &sme, &debtor_hash, &1_000_000_000i128, + &Symbol::new(&env, "USDC"), &due_date, &cid, &10u32, &None, + ); + assert!(result.is_ok()); + } +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_freeze_requires_admin.1.json b/contracts/invoice_nft/test_snapshots/tests/test_freeze_requires_admin.1.json new file mode 100644 index 0000000..a95ee59 --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_freeze_requires_admin.1.json @@ -0,0 +1,630 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "error": { + "contract": 2 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 2 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 2 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "freeze_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_funded.1.json b/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_funded.1.json new file mode 100644 index 0000000..a6c1056 --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_funded.1.json @@ -0,0 +1,1088 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "freeze_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "error": { + "contract": 17 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_funded" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_listed.1.json b/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_listed.1.json new file mode 100644 index 0000000..85d6f3a --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_listed.1.json @@ -0,0 +1,996 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "freeze_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "bool": true + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "error": { + "contract": 17 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_listed" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_repaid.1.json b/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_repaid.1.json new file mode 100644 index 0000000..0fbe659 --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_frozen_invoice_blocks_set_repaid.1.json @@ -0,0 +1,1201 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_funded", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "freeze_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Funded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "error": { + "contract": 17 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_repaid" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Funded" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_get_nonexistent_invoice_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_get_nonexistent_invoice_fails.1.json index f7609c9..371bb6c 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_get_nonexistent_invoice_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_get_nonexistent_invoice_fails.1.json @@ -100,6 +100,8 @@ "key": { "vec": [ { +<<<<<<< HEAD +======= "symbol": "MigrationVersion" } ] @@ -112,6 +114,7 @@ "key": { "vec": [ { +>>>>>>> origin/Kora-Contract46 "symbol": "NextId" } ] diff --git a/contracts/invoice_nft/test_snapshots/tests/test_initialize_already_initialized_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_initialize_already_initialized_fails.1.json index 013b1f1..c89029d 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_initialize_already_initialized_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_initialize_already_initialized_fails.1.json @@ -100,6 +100,8 @@ "key": { "vec": [ { +<<<<<<< HEAD +======= "symbol": "MigrationVersion" } ] @@ -112,6 +114,7 @@ "key": { "vec": [ { +>>>>>>> origin/Kora-Contract46 "symbol": "NextId" } ] diff --git a/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_created_to_funded_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_created_to_funded_fails.1.json index b692f80..de69476 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_created_to_funded_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_created_to_funded_fails.1.json @@ -1,974 +1,974 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_authorized_callers", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "FinancingPool" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Marketplace" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "error": { - "contract": 11 - } - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "vec": [ - { - "string": "contract try_call failed" - }, - { - "symbol": "set_funded" - }, - { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_authorized_callers", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Marketplace" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "error": { + "contract": 11 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_funded" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_listed_to_repaid_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_listed_to_repaid_fails.1.json index 9151613..fcb490c 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_listed_to_repaid_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_invalid_status_transition_listed_to_repaid_fails.1.json @@ -1,1166 +1,1166 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_authorized_callers", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Listed" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "FinancingPool" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Marketplace" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LIST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_repaid" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_repaid" - } - ], - "data": { - "error": { - "contract": 11 - } - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "vec": [ - { - "string": "contract try_call failed" - }, - { - "symbol": "set_repaid" - }, - { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_authorized_callers", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Marketplace" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LIST" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "error": { + "contract": 11 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_repaid" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_invoice_immutability_after_creation.1.json b/contracts/invoice_nft/test_snapshots/tests/test_invoice_immutability_after_creation.1.json index a2ad0e3..032bf49 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_invoice_immutability_after_creation.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_invoice_immutability_after_creation.1.json @@ -1,1014 +1,1014 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_invoice_timestamps_recorded.1.json b/contracts/invoice_nft/test_snapshots/tests/test_invoice_timestamps_recorded.1.json index 4563a84..0670eee 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_invoice_timestamps_recorded.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_invoice_timestamps_recorded.1.json @@ -1,1739 +1,1739 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_authorized_callers", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_funded", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_repaid", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Repaid" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 0 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "FinancingPool" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Marketplace" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LIST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_FUND" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Funded" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_repaid" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_RPD" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_repaid" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Repaid" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_authorized_callers", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_funded", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_repaid", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Repaid" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Marketplace" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LIST" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FUND" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Funded" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_RPD" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_repaid" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Repaid" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_large_invoice_amounts.1.json b/contracts/invoice_nft/test_snapshots/tests/test_large_invoice_amounts.1.json index 932f2de..6d185fd 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_large_invoice_amounts.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_large_invoice_amounts.1.json @@ -1,838 +1,838 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 9223372036854775807 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 50 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 9223372036854775807 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 50 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "A" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 9223372036854775807 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 9223372036854775807 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 50 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 9223372036854775807 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 9223372036854775807 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 50 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "A" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 50 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "A" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 50 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9223372036854775807 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "A" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json b/contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json index 0a55baa..2f4b8d3 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json @@ -5,6 +5,9 @@ }, "auth": [ [], +<<<<<<< HEAD:contracts/invoice_nft/test_snapshots/tests/test_initialize_success.1.json + [] +======= [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -24,6 +27,7 @@ } ] ] +>>>>>>> origin/Kora-Contract46:contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json ], "ledger": { "protocol_version": 21, @@ -274,12 +278,19 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000002" }, { +<<<<<<< HEAD:contracts/invoice_nft/test_snapshots/tests/test_initialize_success.1.json + "symbol": "next_id" + } + ], + "data": "void" +======= "symbol": "migrate" } ], "data": { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } +>>>>>>> origin/Kora-Contract46:contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json } } }, @@ -297,10 +308,19 @@ "symbol": "fn_return" }, { +<<<<<<< HEAD:contracts/invoice_nft/test_snapshots/tests/test_initialize_success.1.json + "symbol": "next_id" + } + ], + "data": { + "u64": 1 + } +======= "symbol": "migrate" } ], "data": "void" +>>>>>>> origin/Kora-Contract46:contracts/invoice_nft/test_snapshots/tests/test_migrate_success.1.json } } }, diff --git a/contracts/invoice_nft/test_snapshots/tests/test_mint_multiple_invoices_increments_id.1.json b/contracts/invoice_nft/test_snapshots/tests/test_mint_multiple_invoices_increments_id.1.json index 056e8f3..9e92bf1 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_mint_multiple_invoices_increments_id.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_mint_multiple_invoices_increments_id.1.json @@ -1,1113 +1,1113 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 2000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 2000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 3000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 3 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 2000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 2 - }, - { - "i128": { - "hi": 0, - "lo": 2000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "next_id" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "next_id" - } - ], - "data": { - "u64": 3 - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 20 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 3000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 3 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 20 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 2 + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 2 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "next_id" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "next_id" + } + ], + "data": { + "u64": 3 + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_multiple_invoices_different_currencies.1.json b/contracts/invoice_nft/test_snapshots/tests/test_multiple_invoices_different_currencies.1.json index 79c1ce4..b4357a5 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_multiple_invoices_different_currencies.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_multiple_invoices_different_currencies.1.json @@ -1,1417 +1,1417 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 2000000000 - } - }, - { - "symbol": "EURC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 2000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "EURC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 3000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 3 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 2000000000 - } - }, - { - "symbol": "EURC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 2 - }, - { - "i128": { - "hi": 0, - "lo": 2000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 2000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "EURC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + }, + { + "symbol": "EURC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 20 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "EURC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 3000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 3 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + }, + { + "symbol": "EURC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 20 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 2 + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 2 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 2 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "EURC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_risk_score_boundary_values.1.json b/contracts/invoice_nft/test_snapshots/tests/test_risk_score_boundary_values.1.json index 62ab041..e69de29 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_risk_score_boundary_values.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_risk_score_boundary_values.1.json @@ -1,1183 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 21 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 21 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 3 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "u64": 1 - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 21 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "u64": 2 - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 21 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_risk_tier_mapping.1.json b/contracts/invoice_nft/test_snapshots/tests/test_risk_tier_mapping.1.json index 9361d56..b2e4f1f 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_risk_tier_mapping.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_risk_tier_mapping.1.json @@ -1,6049 +1,6049 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 0 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 21 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 40 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 41 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 60 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 61 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 80 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 81 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 100 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 2 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 3 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 3 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 3 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 21 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 4 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 4 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 4 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 40 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 5 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 5 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 5 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 41 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "A" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 6 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 6 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 6 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 60 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "A" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 7 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 7 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 7 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 61 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "B" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 8 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 8 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 8 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 80 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "B" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 9 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 9 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 9 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 81 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "C" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 10 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 10 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 10 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 100 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "C" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 10000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 11 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 1194852393571756375 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 1194852393571756375 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 4270020994084947596 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 4270020994084947596 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5806905060045992000 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 5806905060045992000 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 6277191135259896685 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 6277191135259896685 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 8370022561469687789 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 8370022561469687789 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 0 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 20 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 2 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 2 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 20 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 21 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 3 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 3 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 3 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 3 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 21 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 40 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 4 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 4 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 4 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 4 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 40 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 41 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 5 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 5 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 5 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 5 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 41 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "A" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 60 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 6 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 6 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 6 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 6 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 60 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "A" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 61 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 7 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 7 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 7 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 7 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 61 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "B" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 80 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 8 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 8 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 8 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 8 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 80 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "B" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 81 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 9 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 9 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 9 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 9 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 81 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "C" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 100 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 10 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 10 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 10 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 10 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 100 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "C" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Created" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 0 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 20 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 21 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 40 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 41 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 60 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 61 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 80 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 81 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 100 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 3 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 21 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 4 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 40 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 5 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 41 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "A" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 6 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 60 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "A" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 7 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 7 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 7 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 61 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "B" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 8 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 8 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 8 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 80 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "B" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 9 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 9 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 9 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 81 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "C" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 10 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 10 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 10 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "C" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 11 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1194852393571756375 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 1194852393571756375 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 0 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 20 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 2 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 2 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 2 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 21 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 3 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 3 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 3 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 3 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 21 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 40 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 4 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 4 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 4 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 4 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 40 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 41 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 5 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 5 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 5 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 5 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 41 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "A" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 60 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 6 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 6 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 6 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 6 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 60 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "A" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 61 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 7 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 7 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 7 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 7 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 61 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "B" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 80 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 8 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 8 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 8 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 8 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 80 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "B" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 81 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 9 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 9 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 9 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 9 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 81 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "C" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 100 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 10 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 10 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 10 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 10 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "C" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_after_due_date_succeeds.1.json b/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_after_due_date_succeeds.1.json index bc62987..da50e8f 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_after_due_date_succeeds.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_after_due_date_succeeds.1.json @@ -1,1504 +1,1504 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1700086400 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_authorized_callers", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_funded", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_defaulted", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700086401, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1700086400 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Defaulted" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 0 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "FinancingPool" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Marketplace" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1700086400 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LIST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_FUND" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_defaulted" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_DFT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "u64": 1700086401 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_defaulted" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "get_invoice" - } - ], - "data": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1700086400 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Defaulted" - } - ] - } - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1700086400 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_authorized_callers", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_funded", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_defaulted", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700086401, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1700086400 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Defaulted" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Marketplace" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1700086400 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LIST" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FUND" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_defaulted" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_DFT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "u64": 1700086401 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_defaulted" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1700086400 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Defaulted" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_non_admin_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_non_admin_fails.1.json index 57694c8..e69de29 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_non_admin_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_set_defaulted_non_admin_fails.1.json @@ -1,937 +0,0 @@ -{ - "generators": { - "address": 7, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1700086400 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "set_funded", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1700086400 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Funded" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1700086400 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "u64": 1 - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_FND" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "set_defaulted" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_defaulted" - } - ], - "data": { - "error": { - "contract": 2 - } - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 2 - } - } - ], - "data": { - "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 2 - } - } - ], - "data": { - "vec": [ - { - "string": "contract try_call failed" - }, - { - "symbol": "set_defaulted" - }, - { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" - }, - { - "u64": 1 - } - ] - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_set_funded_idempotent_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_set_funded_idempotent_fails.1.json index b957ff7..261eef4 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_set_funded_idempotent_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_set_funded_idempotent_fails.1.json @@ -1,1360 +1,1360 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_authorized_callers", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_funded", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Funded" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "FinancingPool" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Marketplace" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LIST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_FUND" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "error": { - "contract": 11 - } - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "vec": [ - { - "string": "contract try_call failed" - }, - { - "symbol": "set_funded" - }, - { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_authorized_callers", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_funded", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Funded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Marketplace" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LIST" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FUND" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "error": { + "contract": 11 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_funded" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_set_listed_idempotent_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_set_listed_idempotent_fails.1.json index 4428e72..e69de29 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_set_listed_idempotent_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_set_listed_idempotent_fails.1.json @@ -1,790 +0,0 @@ -{ - "generators": { - "address": 5, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": "void" - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Listed" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "u64": 1 - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "error": { - "contract": 12 - } - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 12 - } - } - ], - "data": { - "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 12 - } - } - ], - "data": { - "vec": [ - { - "string": "contract try_call failed" - }, - { - "symbol": "set_listed" - }, - { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_set_repaid_idempotent_fails.1.json b/contracts/invoice_nft/test_snapshots/tests/test_set_repaid_idempotent_fails.1.json index 33f2313..7669c82 100644 --- a/contracts/invoice_nft/test_snapshots/tests/test_set_repaid_idempotent_fails.1.json +++ b/contracts/invoice_nft/test_snapshots/tests/test_set_repaid_idempotent_fails.1.json @@ -1,1554 +1,1554 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "mint_invoice", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_authorized_callers", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_listed", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_funded", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "function_name": "set_repaid", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 21, - "sequence_number": 1, - "timestamp": 1700000000, - "network_id": "0000000000000000000000000000000000000000000000000000000000000000", - "base_reserve": 10, - "min_persistent_entry_ttl": 1000, - "min_temp_entry_ttl": 1000, - "max_entry_ttl": 100000, - "ledger_entries": [ - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": null - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "Invoice" - }, - { - "u64": 1 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000000 - } - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "currency" - }, - "val": { - "symbol": "USDC" - } - }, - { - "key": { - "symbol": "debtor_hash" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 1702592000 - } - }, - { - "key": { - "symbol": "funded_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "ipfs_cid" - }, - "val": { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - } - }, - { - "key": { - "symbol": "metadata_hash" - }, - "val": { - "bytes": "" - } - }, - { - "key": { - "symbol": "notes" - }, - "val": "void" - }, - { - "key": { - "symbol": "repaid_at" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "risk_score" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "risk_tier" - }, - "val": { - "vec": [ - { - "symbol": "AAA" - } - ] - } - }, - { - "key": { - "symbol": "sme" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Repaid" - } - ] - } - } - ] - } - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "vec": [ - { - "symbol": "OutstandingExposure" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": { - "hi": 0, - "lo": 0 - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": "ledger_key_contract_instance", - "durability": "persistent", - "val": { - "contract_instance": { - "executable": { - "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - }, - "storage": [ - { - "key": { - "vec": [ - { - "symbol": "AccessControl" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "vec": [ - { - "symbol": "FinancingPool" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "vec": [ - { - "symbol": "Marketplace" - } - ] - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "vec": [ - { - "symbol": "MigrationVersion" - } - ] - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "vec": [ - { - "symbol": "NextId" - } - ] - }, - "val": { - "u64": 2 - } - } - ] - } - } - } - }, - "ext": "v0" - }, - 1000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 5541220902715666415 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 100000 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 1000 - ] - ] - ] - }, - "events": [ - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "initialize" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "initialize" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "symbol": "USDC" - }, - { - "u64": 1702592000 - }, - { - "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" - }, - { - "u32": 10 - }, - "void" - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_CRT" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "mint_invoice" - } - ], - "data": { - "u64": 1 - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_authorized_callers" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_listed" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_LIST" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_listed" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_funded" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_FUND" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_funded" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_repaid" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "INV_RPD" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - }, - { - "u64": 1 - }, - { - "i128": { - "hi": 0, - "lo": 1000000000 - } - }, - { - "u64": 1700000000 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_repaid" - } - ], - "data": "void" - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000002" - }, - { - "symbol": "set_repaid" - } - ], - "data": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - } - } - }, - "failed_call": false - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_call" - }, - { - "bytes": "0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "symbol": "is_paused" - } - ], - "data": "void" - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "is_paused" - } - ], - "data": { - "bool": false - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "fn_return" - }, - { - "symbol": "set_repaid" - } - ], - "data": { - "error": { - "contract": 11 - } - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" - } - } - } - }, - "failed_call": true - }, - { - "event": { - "ext": "v0", - "contract_id": null, - "type_": "diagnostic", - "body": { - "v0": { - "topics": [ - { - "symbol": "error" - }, - { - "error": { - "contract": 11 - } - } - ], - "data": { - "vec": [ - { - "string": "contract try_call failed" - }, - { - "symbol": "set_repaid" - }, - { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "u64": 1 - } - ] - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_authorized_callers", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_funded", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "function_name": "set_repaid", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "metadata_hash" + }, + "val": { + "bytes": "" + } + }, + { + "key": { + "symbol": "notes" + }, + "val": "void" + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Repaid" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "vec": [ + { + "symbol": "OutstandingExposure" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Marketplace" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MigrationVersion" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + }, + "void" + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_authorized_callers" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LIST" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FUND" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_RPD" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_repaid" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_paused" + } + ], + "data": "void" + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_paused" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "error": { + "contract": 11 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000002", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_repaid" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} diff --git a/contracts/invoice_nft/test_snapshots/tests/test_unfreeze_requires_admin.1.json b/contracts/invoice_nft/test_snapshots/tests/test_unfreeze_requires_admin.1.json new file mode 100644 index 0000000..8e3394c --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_unfreeze_requires_admin.1.json @@ -0,0 +1,834 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "freeze_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FrozenInvoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Created" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "unfreeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "unfreeze_invoice" + } + ], + "data": { + "error": { + "contract": 2 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 2 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 2 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "unfreeze_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "bool": true + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_unfreeze_restores_transitions.1.json b/contracts/invoice_nft/test_snapshots/tests/test_unfreeze_restores_transitions.1.json new file mode 100644 index 0000000..607aae7 --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_unfreeze_restores_transitions.1.json @@ -0,0 +1,1252 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "freeze_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "unfreeze_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "freeze_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "bool": true + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "error": { + "contract": 17 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 17 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_listed" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "unfreeze_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "unfreeze_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/invoice_nft/test_snapshots/tests/test_unfrozen_invoice_transitions_succeed.1.json b/contracts/invoice_nft/test_snapshots/tests/test_unfrozen_invoice_transitions_succeed.1.json new file mode 100644 index 0000000..128716b --- /dev/null +++ b/contracts/invoice_nft/test_snapshots/tests/test_unfrozen_invoice_transitions_succeed.1.json @@ -0,0 +1,1443 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_listed", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_funded", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_repaid", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Repaid" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "is_invoice_frozen" + } + ], + "data": { + "bool": false + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Funded" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_repaid" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_RPD" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_repaid" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Repaid" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/src/lib.rs b/contracts/marketplace/src/lib.rs index 8e7fd5e..dd8ffa7 100644 --- a/contracts/marketplace/src/lib.rs +++ b/contracts/marketplace/src/lib.rs @@ -1,3168 +1,3168 @@ -#![no_std] -#![no_std] -// Two-phase cancellation for partially-funded listings (issue #263) -// Dutch-auction price decay (#439) -// Reverse-auction bidding (#440) -// Funding deadline vs due-date guard (#441) - -use kora_shared::{ - errors::CommonError, - events, - reentrancy::ReentrancyGuard, - types::{Bid, DecaySchedule, Listing, RiskTier}, - validation::{bps_of_normalized, require_non_zero_amount, require_valid_fee_bps, require_within_max_amount, safe_add, safe_sub, UPGRADE_TIMELOCK_DELAY}, -}; -use soroban_sdk::{contract, contractimpl, contracttype, token, Address, BytesN, Env, Vec}; - types::{Listing, RiskTier}, - validation::{bps_of_normalized, require_non_zero_amount, require_valid_fee_bps, require_within_max_amount, safe_add, safe_sub, UPGRADE_TIMELOCK_DELAY}, - validation::{bps_of, bps_of_normalized, require_non_zero_amount, require_valid_fee_bps, require_within_max_amount, safe_add, safe_sub, UPGRADE_TIMELOCK_DELAY}, -}; -use soroban_sdk::{contract, contracterror, contractimpl, contracttype, token, Address, BytesN, Env}; - -// ~30 days in ledgers at ~5 s/ledger -const PERSISTENT_TTL_THRESHOLD: u32 = 518_400; -const PERSISTENT_TTL_BUMP: u32 = 518_400; - -/// Default minimum gap (in seconds) that must exist between a listing's -/// `funding_deadline` and the underlying invoice's `due_date` (#441). -/// Default: 3 days = 3 * 86_400 s. -pub const DEFAULT_MIN_FUNDING_BUFFER: u64 = 3 * 86_400; -#[contracterror] -#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] -#[repr(u32)] -pub enum MarketplaceError { - AlreadyInitialized = 1, - ArithmeticOverflow = 2, - CancellationPending = 3, - ComplianceNotAttested = 4, - ExceedsFundingTarget = 5, - FundingDeadlinePassed = 6, - FundingNotExpired = 7, - InvalidAddress = 8, - InvalidAmount = 9, - InvalidDueDate = 10, - InvalidFeeRate = 11, - InvoiceAlreadyExists = 12, - InvoiceFrozen = 13, - ListingAlreadyCancelled = 14, - ListingFullyFunded = 15, - ListingNotFound = 16, - NoCancellationPending = 17, - NoContribution = 18, - NoUpgradeProposed = 19, - NotAdmin = 20, - NotInitialized = 21, - ProtocolPaused = 22, - RefundAlreadyClaimed = 23, - TokenNotWhitelisted = 24, - Unauthorized = 25, - UpgradeTimelockNotElapsed = 26, -} - -impl From for MarketplaceError { - fn from(e: CommonError) -> Self { - match e { - CommonError::InvalidAmount => MarketplaceError::InvalidAmount, - CommonError::InvalidAddress => MarketplaceError::InvalidAddress, - CommonError::InvalidDueDate => MarketplaceError::InvalidDueDate, - CommonError::InvalidFeeRate => MarketplaceError::InvalidFeeRate, - CommonError::ArithmeticOverflow => MarketplaceError::ArithmeticOverflow, - _ => MarketplaceError::InvalidAmount, - } - } -} -/// Default minimum discount (face_value - asking_price) required to list an -/// invoice, in basis points of face_value. Admin-configurable via -/// `set_min_discount_bps`. See docs/marketplace.md. -const DEFAULT_MIN_DISCOUNT_BPS: u32 = 10; - -// ── Storage Keys ────────────────────────────────────────────────────────────── - -#[contracttype] -pub enum DataKey { - Config, - Admin, - InvoiceNft, - FinancingPool, - Treasury, - AccessControl, - FeeBps, - Listing(u64), - WhitelistedToken(Address), - UpgradeProposal, - /// Per-risk-tier fee override: TierFeeBps(ordinal) where AAA=0, AA=1, A=2, B=3, C=4 (#210) - TierFeeBps(u32), - /// Per-investor net contribution for refunds - Contribution(u64, Address), - /// Refund claimed flag - RefundClaimed(u64, Address), - /// Referrer credited on a listing, if any (#issue referral-fee-split) - Referrer(u64), - /// Pending two-phase cancellation request, storing who requested it (#263) - CancellationRequest(u64), - /// Set once admin confirms a two-phase cancellation, unlocking claim_refund (#263) - CancellationConfirmed(u64), - /// Legacy individual risk_registry key (never written; present only so - /// load_config's legacy migration path can look it up and fail cleanly). - RiskRegistry, - /// Referrer address recorded at listing time, if any. - Referrer(u64), - /// Pending two-phase cancellation request (who requested it). - CancellationRequest(u64), - /// Marks a listing's cancellation as admin-confirmed, unblocking refunds. - CancellationConfirmed(u64), - /// Minimum discount (bps of face_value) required to list an invoice. - MinDiscountBps, -} - -// ── Config struct ───────────────────────────────────────────────────────────── - -#[contracttype] -#[derive(Clone, Debug, Eq, PartialEq)] -pub struct MarketplaceConfig { - pub admin: Address, - pub invoice_nft: Address, - pub financing_pool: Address, - pub treasury: Address, - pub access_control: Address, - pub risk_registry: Address, - pub fee_bps: u32, - /// Fraction of the collected fee that goes to the referrer (0 = no split). - pub referrer_split_bps: u32, -} - -// ── Contract ────────────────────────────────────────────────────────────────── - -#[contract] -pub struct MarketplaceContract; - -#[contractimpl] -impl MarketplaceContract { - /// Initialize the marketplace. One-time call. - pub fn initialize( - env: Env, - admin: Address, - invoice_nft: Address, - financing_pool: Address, - treasury: Address, - access_control: Address, - risk_registry: Address, - fee_bps: u32, - ) -> Result<(), MarketplaceError> { - if env.storage().instance().has(&DataKey::Config) { - return Err(MarketplaceError::AlreadyInitialized); - } - require_valid_fee_bps(fee_bps)?; - // Write the consolidated Config entry first so that every subsequent - // load_config call resolves in a single storage lookup. - // Referrer splits are disabled at init and opted into later via - // set_referrer_split_bps — kept out of the constructor to avoid - // widening every deployment call site for a rarely-used feature. - let referrer_split_bps: u32 = 0; - env.storage().instance().set(&DataKey::Admin, &admin); - env.storage().instance().set(&DataKey::InvoiceNft, &invoice_nft); - env.storage().instance().set(&DataKey::FinancingPool, &financing_pool); - env.storage().instance().set(&DataKey::Treasury, &treasury); - env.storage().instance().set(&DataKey::FeeBps, &fee_bps); - env.storage().instance().set(&DataKey::AccessControl, &access_control); - let config = MarketplaceConfig { - admin: admin.clone(), - invoice_nft: invoice_nft.clone(), - financing_pool: financing_pool.clone(), - treasury: treasury.clone(), - access_control: access_control.clone(), - risk_registry: risk_registry.clone(), - fee_bps, - referrer_split_bps: 0, - }; - env.storage().instance().set(&DataKey::Config, &config); - // Also write the individual keys so that require_not_paused (which reads - // DataKey::AccessControl directly for efficiency) can find the address. - env.storage().instance().set(&DataKey::AccessControl, &access_control); - Ok(()) - } - - /// Set the minimum funding-to-due-date buffer in seconds. Admin only. (#441) - /// Defaults to DEFAULT_MIN_FUNDING_BUFFER (3 days) if never explicitly set. - pub fn set_min_funding_buffer( - env: Env, - admin: Address, - buffer_seconds: u64, - ) -> Result<(), KoraError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(KoraError::NotAdmin); - } - env.storage() - .instance() - .set(&DataKey::MinFundingBuffer, &buffer_seconds); - Ok(()) - } - - /// Returns the current minimum funding buffer in seconds. (#441) - pub fn get_min_funding_buffer(env: Env) -> u64 { - env.storage() - .instance() - .get(&DataKey::MinFundingBuffer) - .unwrap_or(DEFAULT_MIN_FUNDING_BUFFER) - } - - /// Update the referrer split fraction. Admin only. - pub fn set_referrer_split_bps(env: Env, admin: Address, referrer_split_bps: u32) -> Result<(), MarketplaceError> { - admin.require_auth(); - let mut config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - require_valid_fee_bps(referrer_split_bps)?; - config.referrer_split_bps = referrer_split_bps; - env.storage().instance().set(&DataKey::Config, &config); - Ok(()) - } - - /// Update the marketplace fee. Admin only. - pub fn set_fee_bps(env: Env, admin: Address, fee_bps: u32) -> Result<(), MarketplaceError> { - admin.require_auth(); - let mut config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - require_valid_fee_bps(fee_bps)?; - let old_bps = config.fee_bps; - config.fee_bps = fee_bps; - env.storage().instance().set(&DataKey::Config, &config); - events::fee_rate_updated(&env, &admin, old_bps, fee_bps); - Ok(()) - } - - /// Alias for set_fee_bps — backwards compatibility. - pub fn update_fee_bps(env: Env, admin: Address, fee_bps: u32) -> Result<(), MarketplaceError> { - Self::set_fee_bps(env, admin, fee_bps) - } - - /// Returns the current fee in basis points. - pub fn get_fee_bps(env: Env) -> Result { - Ok(Self::load_config(&env)?.fee_bps) - } - - /// Update the minimum required discount (face_value - asking_price), in - /// basis points of face_value, that a listing must offer. Admin only. - /// - /// **Errors:** - /// - `KoraError::NotAdmin` — Caller is not the admin. - /// - `KoraError::InvalidFeeRate` — `min_discount_bps` > 10 000. - pub fn set_min_discount_bps(env: Env, admin: Address, min_discount_bps: u32) -> Result<(), KoraError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(KoraError::NotAdmin); - } - require_valid_fee_bps(min_discount_bps)?; - env.storage().instance().set(&DataKey::MinDiscountBps, &min_discount_bps); - Ok(()) - } - - /// Returns the current minimum discount requirement in basis points. - pub fn get_min_discount_bps(env: Env) -> u32 { - env.storage() - .instance() - .get(&DataKey::MinDiscountBps) - .unwrap_or(DEFAULT_MIN_DISCOUNT_BPS) - } - - /// Set a per-risk-tier fee override. Admin only. (#210) - pub fn set_tier_fee_bps( - env: Env, - admin: Address, - tier: RiskTier, - fee_bps: u32, - ) -> Result<(), MarketplaceError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - require_valid_fee_bps(fee_bps)?; - env.storage().instance().set(&DataKey::TierFeeBps(Self::tier_ordinal(&tier)), &fee_bps); - Ok(()) - } - - /// Get the fee for a specific risk tier (falls back to flat fee if no override). (#210) - pub fn get_tier_fee_bps(env: Env, tier: RiskTier) -> Result { - let ordinal = Self::tier_ordinal(&tier); - Ok(env.storage().instance() - .get(&DataKey::TierFeeBps(ordinal)) - .unwrap_or_else(|| Self::load_config(&env).map(|c| c.fee_bps).unwrap_or(50))) - } - - /// Returns the full config struct. - pub fn get_config(env: Env) -> Result { - Self::load_config(&env) - } - - /// Returns the admin address. - pub fn get_admin(env: Env) -> Result { - Ok(Self::load_config(&env)?.admin) - } - - /// Whitelist a stablecoin token. Admin only. - pub fn whitelist_token(env: Env, admin: Address, token: Address) -> Result<(), MarketplaceError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - env.storage() - .persistent() - .set(&DataKey::WhitelistedToken(token.clone()), &true); - Self::bump_persistent(&env, &DataKey::WhitelistedToken(token.clone())); - events::token_whitelisted(&env, &admin, &token); - Ok(()) - } - - /// Remove a token from the whitelist. Admin only. - pub fn remove_token_whitelist( - env: Env, - admin: Address, - token: Address, - ) -> Result<(), MarketplaceError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - if !env - .storage() - .persistent() - .get::<_, bool>(&DataKey::WhitelistedToken(token.clone())) - .unwrap_or(false) - { - return Err(MarketplaceError::TokenNotWhitelisted); - } - env.storage() - .persistent() - .remove(&DataKey::WhitelistedToken(token.clone())); - events::token_whitelist_removed(&env, &admin, &token); - Ok(()) - } - - /// Returns whether a token is whitelisted. - pub fn is_token_whitelisted(env: Env, token: Address) -> bool { - env.storage() - .persistent() - .get(&DataKey::WhitelistedToken(token)) - .unwrap_or(false) - } - - /// SME lists an invoice NFT for financing. - /// An optional `referrer` address may be provided to credit a referring verifier - /// with a portion of the protocol fee collected on each investor contribution. - /// An optional `bidding_deadline` puts the listing into reverse-auction mode (#440). - pub fn list_invoice( - env: Env, - seller: Address, - invoice_id: u64, - asking_price: i128, - face_value: i128, - token: Address, - funding_deadline: u64, - referrer: Option
, - ) -> Result<(), KoraError> { - Self::list_invoice_inner( - env, - seller, - invoice_id, - asking_price, - face_value, - token, - funding_deadline, - referrer, - None, // no bidding deadline - None, // no decay schedule - ) - } - - /// List an invoice with an optional Dutch-auction decay schedule (#439). - /// - /// `min_asking_price` is the floor price (must be > 0 and < asking_price). - /// `decay_start_ts` is when price starts decaying (must be >= now). - /// `decay_end_ts` is when price reaches the floor (must be <= funding_deadline). - pub fn list_invoice_with_decay( - env: Env, - seller: Address, - invoice_id: u64, - asking_price: i128, - face_value: i128, - token: Address, - funding_deadline: u64, - referrer: Option
, - min_asking_price: i128, - decay_start_ts: u64, - decay_end_ts: u64, - ) -> Result<(), KoraError> { - // Validate decay schedule parameters - require_non_zero_amount(min_asking_price)?; - if min_asking_price >= asking_price { - return Err(KoraError::InvalidAmount); - } - if decay_start_ts >= decay_end_ts { - return Err(KoraError::InvalidDueDate); - } - if decay_end_ts > funding_deadline { - return Err(KoraError::InvalidDueDate); - } - - let schedule = DecaySchedule { - start_price: asking_price, - floor_price: min_asking_price, - decay_start_ts, - decay_end_ts, - }; - - Self::list_invoice_inner( - env, - seller, - invoice_id, - asking_price, - face_value, - token, - funding_deadline, - referrer, - None, - Some(schedule), - ) - } - - /// List an invoice in reverse-auction (bidding) mode (#440). - /// - /// `bidding_deadline` must be before `funding_deadline`. - /// Direct `fund_invoice` calls are disabled while the bidding window is open. - pub fn list_invoice_with_bidding( - env: Env, - seller: Address, - invoice_id: u64, - asking_price: i128, - face_value: i128, - token: Address, - funding_deadline: u64, - referrer: Option
, - bidding_deadline: u64, - ) -> Result<(), KoraError> { - if bidding_deadline >= funding_deadline { - return Err(KoraError::InvalidDueDate); - } - kora_shared::validation::require_future_timestamp(&env, bidding_deadline)?; - - Self::list_invoice_inner( - env, - seller, - invoice_id, - asking_price, - face_value, - token, - funding_deadline, - referrer, - Some(bidding_deadline), - None, - ) - } - - /// Internal implementation shared by all list_invoice variants. - fn list_invoice_inner( - env: Env, - seller: Address, - invoice_id: u64, - asking_price: i128, - face_value: i128, - token: Address, - funding_deadline: u64, - referrer: Option
, - bidding_deadline: Option, - decay_schedule: Option, - ) -> Result<(), KoraError> { - ) -> Result<(), MarketplaceError> { - seller.require_auth(); - Self::require_not_paused(&env)?; - - require_non_zero_amount(asking_price)?; - require_non_zero_amount(face_value)?; - require_within_max_amount(asking_price)?; - require_within_max_amount(face_value)?; - - // asking_price must be strictly less than face_value (discount must exist) - if asking_price >= face_value { - return Err(MarketplaceError::InvalidAmount); - } - - // Enforce a minimum discount so listings offer investors meaningful yield. - let min_discount_bps = Self::get_min_discount_bps(env.clone()); - let min_discount = bps_of(face_value, min_discount_bps)?; - let discount = face_value - .checked_sub(asking_price) - .ok_or(KoraError::ArithmeticOverflow)?; - if discount < min_discount { - return Err(KoraError::InvalidAmount); - } - - Self::require_whitelisted_token(&env, &token)?; - Self::require_compliance_attested(&env, &seller)?; - - // Reject if an active listing already exists for this invoice. - // A cancelled listing (is_active == false) does not block re-listing. - if let Some(existing) = env - .storage() - .persistent() - .get::<_, Listing>(&DataKey::Listing(invoice_id)) - { - if existing.is_active { - return Err(MarketplaceError::InvoiceAlreadyExists); - } - } - - let _guard = ReentrancyGuard::new(&env)?; - - let config = Self::load_config(&env)?; - - // ── #441: Fetch invoice BEFORE deadline validation so we can cross-check ── - let nft_client = - kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); - let invoice = nft_client.get_invoice(&invoice_id); - - if invoice.amount != face_value { - return Err(KoraError::InvalidAmount); - } - - // ── #441: Validate funding_deadline is in the future ────────────────── - kora_shared::validation::require_future_timestamp(&env, funding_deadline)?; - - // ── #441: funding_deadline must be at least `min_buffer` seconds before - // the invoice's due_date ────────────────────────────────────── - let min_buffer: u64 = env - .storage() - .instance() - .get(&DataKey::MinFundingBuffer) - .unwrap_or(DEFAULT_MIN_FUNDING_BUFFER); - - let deadline_with_buffer = funding_deadline - .checked_add(min_buffer) - .ok_or(KoraError::ArithmeticOverflow)?; - - if deadline_with_buffer > invoice.due_date { - return Err(KoraError::FundingDeadlineTooCloseToDueDate); - } - - // Referrer may not be the seller (self-referral) - if let Some(ref r) = referrer { - if r == &seller { - return Err(MarketplaceError::InvalidAddress); - } - env.storage() - .persistent() - .set(&DataKey::Referrer(invoice_id), r); - Self::bump_persistent(&env, &DataKey::Referrer(invoice_id)); - } - - nft_client.set_listed(&env.current_contract_address(), &invoice_id); - - // ── #439: Store decay schedule if provided ──────────────────────────── - if let Some(ref schedule) = decay_schedule { - env.storage() - .persistent() - .set(&DataKey::DecaySchedule(invoice_id), schedule); - Self::bump_persistent(&env, &DataKey::DecaySchedule(invoice_id)); - events::decay_schedule_set( - &env, - invoice_id, - &seller, - schedule.floor_price, - schedule.decay_end_ts, - ); - let invoice = nft_client.get_invoice(&invoice_id); - if invoice.amount != face_value { - return Err(MarketplaceError::InvalidAmount); - } - - let listing = Listing { - invoice_id, - seller: seller.clone(), - asking_price, - face_value, - token, - funded_amount: 0, - funding_deadline, - is_active: true, - bidding_deadline, - }; - env.storage() - .persistent() - .set(&DataKey::Listing(invoice_id), &listing); - Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); - events::invoice_listed(&env, invoice_id, &seller, asking_price); - Ok(()) - } - - /// Investor funds a share of an invoice. - /// Rejected when the listing is in bidding mode and the bidding window is still open (#440). - /// Uses the time-adjusted price from the decay schedule when active (#439). - pub fn fund_invoice( - env: Env, - investor: Address, - invoice_id: u64, - amount: i128, - ) -> Result<(), MarketplaceError> { - investor.require_auth(); - Self::require_not_paused(&env)?; - - require_non_zero_amount(amount)?; - require_within_max_amount(amount)?; - - let mut listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(MarketplaceError::ListingNotFound)?; - - if !listing.is_active { - return Err(MarketplaceError::ListingAlreadyCancelled); - } - if env.ledger().timestamp() > listing.funding_deadline { - return Err(MarketplaceError::FundingDeadlinePassed); - } - - // ── #440: Reject direct funding while bidding window is open ────────── - if let Some(bid_dl) = listing.bidding_deadline { - if env.ledger().timestamp() <= bid_dl { - return Err(KoraError::BiddingWindowActive); - } - } - - // ── #439: Use the time-adjusted price (Dutch auction) ───────────────── - let effective_price = Self::current_asking_price_impl(&env, &listing); - let remaining = safe_sub(effective_price, listing.funded_amount)?; - if amount > remaining { - return Err(MarketplaceError::ExceedsFundingTarget); - } - - let config = Self::load_config(&env)?; - - // Check per-invoice freeze before any token operations. - // Enforced in addition to the protocol-wide pause so a single disputed - // invoice can be frozen without halting all protocol activity. - let nft_client = kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); - if nft_client.is_invoice_frozen(&invoice_id) { - return Err(MarketplaceError::InvoiceFrozen); - } - - let token_client = token::Client::new(&env, &listing.token); - let token_decimals = token_client.decimals(); - - // Fetch the invoice's risk tier and apply tier-specific fee (#210) - let invoice = nft_client.get_invoice(&invoice_id); - let effective_fee_bps: u32 = env.storage().instance() - .get(&DataKey::TierFeeBps(Self::tier_ordinal(&invoice.risk_tier))) - .unwrap_or(config.fee_bps); - - let fee = bps_of_normalized(amount, effective_fee_bps, token_decimals)?; - let net = amount - .checked_sub(fee) - .ok_or(MarketplaceError::ArithmeticOverflow)?; - - // Split fee between referrer and treasury - if fee > 0 { - token_client.transfer(&investor, &config.treasury, &fee); - // Record the collected fee in treasury's on-chain accounting (#208) - let treasury_client = kora_treasury::TreasuryContractClient::new(&env, &config.treasury); - treasury_client.collect_fee(&listing.token, &fee); - } - // Transfer net contribution to financing pool - if net > 0 { - token_client.transfer(&investor, &config.financing_pool, &net); - } - - listing.funded_amount = safe_add(listing.funded_amount, amount)?; - - // Track per-investor net contribution for potential refund - let contrib_key = DataKey::Contribution(invoice_id, investor.clone()); - let prev_contrib: i128 = env - .storage() - .persistent() - .get(&contrib_key) - .unwrap_or(0); - env.storage() - .persistent() - .set(&contrib_key, &safe_add(prev_contrib, net)?); - - // Fully funded when funded_amount reaches the current effective price - let fully_funded = listing.funded_amount >= effective_price; - if fully_funded { - listing.is_active = false; - } - - env.storage() - .persistent() - .set(&DataKey::Listing(invoice_id), &listing); - Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); - - events::invoice_funded(&env, invoice_id, &investor, amount); - if fee > 0 { - events::fee_collected(&env, &investor, invoice_id, fee, &listing.token); - } - - if fully_funded { - let pool_client = kora_financing_pool::FinancingPoolContractClient::new( - &env, - &config.financing_pool, - ); - pool_client.release_funds( - &env.current_contract_address(), - &invoice_id, - &listing.token, - ); - } - - Ok(()) - } - - /// Cancel a listing. Caller must be seller or admin. - /// Works for listings with no investor funding (funded_amount == 0). - /// For partially-funded listings prefer `request_cancellation` + `admin_confirm_cancellation`. - pub fn cancel_listing(env: Env, caller: Address, invoice_id: u64) -> Result<(), MarketplaceError> { - caller.require_auth(); - - let mut listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(MarketplaceError::ListingNotFound)?; - - if !listing.is_active { - return Err(MarketplaceError::ListingAlreadyCancelled); - } - - let config = Self::load_config(&env)?; - if caller != listing.seller && caller != config.admin { - return Err(MarketplaceError::Unauthorized); - } - - listing.is_active = false; - env.storage() - .persistent() - .set(&DataKey::Listing(invoice_id), &listing); - Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); - - // Revert the NFT status from Listed → Created so the SME can re-list. - let nft_client = - kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); - nft_client.set_created(&env.current_contract_address(), &invoice_id); - - events::listing_cancelled(&env, invoice_id, &listing.seller); - Ok(()) - } - - // ── Two-phase cancellation (issue #263) ─────────────────────────────────── - - /// Phase 1 — request cancellation of a partially-funded listing. - /// - /// Caller must be the listing seller or the admin. - /// * If `funded_amount == 0` the listing is cancelled immediately (no two-phase needed). - /// * If `funded_amount > 0 && funded_amount < asking_price` a - /// `CancellationRequest` is stored for admin to confirm. - /// Returns `Err(CancellationPending)` if a request already exists. - pub fn request_cancellation( - env: Env, - caller: Address, - invoice_id: u64, - ) -> Result<(), MarketplaceError> { - caller.require_auth(); - - let mut listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(MarketplaceError::ListingNotFound)?; - - if !listing.is_active { - return Err(MarketplaceError::ListingAlreadyCancelled); - } - - let config = Self::load_config(&env)?; - if caller != listing.seller && caller != config.admin { - return Err(MarketplaceError::Unauthorized); - } - - // If no partial funding, cancel immediately — no two-phase needed - if listing.funded_amount == 0 { - listing.is_active = false; - env.storage() - .persistent() - .set(&DataKey::Listing(invoice_id), &listing); - Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); - - // Revert NFT status from Listed → Created so the SME can re-list. - let nft_client = - kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); - nft_client.set_created(&env.current_contract_address(), &invoice_id); - - events::listing_cancelled(&env, invoice_id, &listing.seller); - return Ok(()); - } - - // Guard against duplicate requests - if env - .storage() - .persistent() - .has(&DataKey::CancellationRequest(invoice_id)) - { - return Err(MarketplaceError::CancellationPending); - } - - // Store the cancellation request (who requested it) - env.storage() - .persistent() - .set(&DataKey::CancellationRequest(invoice_id), &caller); - Self::bump_persistent(&env, &DataKey::CancellationRequest(invoice_id)); - - events::cancellation_requested(&env, invoice_id, &caller); - Ok(()) - } - - /// Phase 2 — admin confirms a pending cancellation. - /// - /// * Requires a prior `CancellationRequest` to exist. - /// * Sets `listing.is_active = false`. - /// * Sets `CancellationConfirmed(invoice_id) = true` so investors can call - /// `claim_refund` without waiting for the funding deadline. - pub fn admin_confirm_cancellation( - env: Env, - admin: Address, - invoice_id: u64, - ) -> Result<(), MarketplaceError> { - admin.require_auth(); - - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - - // A pending cancellation request must exist - if !env - .storage() - .persistent() - .has(&DataKey::CancellationRequest(invoice_id)) - { - return Err(MarketplaceError::NoCancellationPending); - } - - let mut listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(MarketplaceError::ListingNotFound)?; - - if !listing.is_active { - return Err(MarketplaceError::ListingAlreadyCancelled); - } - - // Mark listing as inactive - listing.is_active = false; - env.storage() - .persistent() - .set(&DataKey::Listing(invoice_id), &listing); - Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); - - // Consume the pending request - env.storage() - .persistent() - .remove(&DataKey::CancellationRequest(invoice_id)); - - // Enable investor refunds via the existing claim_refund path - env.storage() - .persistent() - .set(&DataKey::CancellationConfirmed(invoice_id), &true); - Self::bump_persistent(&env, &DataKey::CancellationConfirmed(invoice_id)); - - // Revert NFT status from Listed → Created so the SME can re-list. - let nft_client = - kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); - nft_client.set_created(&env.current_contract_address(), &invoice_id); - - events::listing_cancelled(&env, invoice_id, &listing.seller); - Ok(()) - } - - // ───────────────────────────────────────────────────────────────────────── - - /// Claim a refund for a listing that expired without reaching full funding, - /// or whose cancellation was confirmed by the admin via the two-phase flow. - /// - /// The investor gets back the net amount (after fee) sent to the financing pool. - /// Fees already collected by the treasury are NOT refunded. - pub fn claim_refund( - env: Env, - investor: Address, - invoice_id: u64, - ) -> Result<(), MarketplaceError> { - investor.require_auth(); - - let listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(MarketplaceError::ListingNotFound)?; - - // Refund only if the listing never reached full funding - if listing.funded_amount >= listing.asking_price { - return Err(MarketplaceError::ListingFullyFunded); - } - - // Refund is allowed when the cancellation was confirmed OR the deadline passed - let cancellation_confirmed = env - .storage() - .persistent() - .get::<_, bool>(&DataKey::CancellationConfirmed(invoice_id)) - .unwrap_or(false); - - if !cancellation_confirmed && env.ledger().timestamp() <= listing.funding_deadline { - return Err(MarketplaceError::FundingNotExpired); - } - - // Guard: investor hasn't already claimed - let refund_key = DataKey::RefundClaimed(invoice_id, investor.clone()); - if env - .storage() - .persistent() - .get::<_, bool>(&refund_key) - .unwrap_or(false) - { - return Err(MarketplaceError::RefundAlreadyClaimed); - } - - // Look up the investor's net contribution - let contrib_key = DataKey::Contribution(invoice_id, investor.clone()); - let net_contributed: i128 = env - .storage() - .persistent() - .get(&contrib_key) - .unwrap_or(0); - - if net_contributed <= 0 { - return Err(MarketplaceError::NoContribution); - } - - // CEI: mark before external call - env.storage().persistent().set(&refund_key, &true); - - // Transfer net contribution back from financing pool to investor - let config = Self::load_config(&env)?; - let token_client = token::Client::new(&env, &listing.token); - token_client.transfer(&config.financing_pool, &investor, &net_contributed); - - events::refund_claimed(&env, invoice_id, &investor, net_contributed); - Ok(()) - } - - /// Get a listing by invoice_id. - pub fn get_listing(env: Env, invoice_id: u64) -> Result { - env.storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(KoraError::ListingNotFound) - } - - // ── Dutch Auction / Price Decay (#439) ──────────────────────────────────── - - /// View: returns the current effective asking price for a listing. - /// - /// If no decay schedule is set, returns `listing.asking_price` unchanged. - /// If a schedule is active, performs linear interpolation between - /// `start_price` and `floor_price` based on the current ledger timestamp. - pub fn get_current_price(env: Env, invoice_id: u64) -> Result { - let listing: Listing = env - .ok_or(MarketplaceError::ListingNotFound) - pub fn get_listing(env: Env, invoice_id: u64) -> Result { - let listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(KoraError::ListingNotFound)?; - Ok(Self::current_asking_price_impl(&env, &listing)) - } - - /// View: returns the decay schedule for a listing, if one is set. - pub fn get_decay_schedule( - env: Env, - invoice_id: u64, - ) -> Option { - env.storage() - .persistent() - .get(&DataKey::DecaySchedule(invoice_id)) - } - - // ── Reverse Auction / Bid submission (#440) ─────────────────────────────── - - /// Investor submits a bid on a reverse-auction listing. - /// - /// - The listing must have a `bidding_deadline` set. - /// - Current ledger time must be <= `bidding_deadline`. - /// - `bid_price` must be <= current_asking_price and > 0. - /// - `amount` must be > 0 and <= face_value. - /// - Each investor may have at most one active bid per listing. - pub fn submit_bid( - env: Env, - investor: Address, - invoice_id: u64, - bid_price: i128, - amount: i128, - ) -> Result<(), KoraError> { - investor.require_auth(); - Self::require_not_paused(&env)?; - - require_non_zero_amount(bid_price)?; - require_non_zero_amount(amount)?; - require_within_max_amount(bid_price)?; - require_within_max_amount(amount)?; - - let listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(KoraError::ListingNotFound)?; - - if !listing.is_active { - return Err(KoraError::ListingAlreadyCancelled); - } - - // Must be in bidding mode - let bidding_deadline = listing - .bidding_deadline - .ok_or(KoraError::BiddingWindowClosed)?; - - // Must be inside the bidding window - if env.ledger().timestamp() > bidding_deadline { - return Err(KoraError::BiddingWindowClosed); - } - - // bid_price must not exceed the current effective asking price - let current_price = Self::current_asking_price_impl(&env, &listing); - if bid_price > current_price { - return Err(KoraError::InvalidAmount); - } - - // amount must not exceed the face_value - if amount > listing.face_value { - return Err(KoraError::ExceedsFundingTarget); - } - - // One bid per investor per listing - let bid_key = DataKey::Bid(invoice_id, investor.clone()); - if env.storage().persistent().has(&bid_key) { - return Err(KoraError::BidAlreadyExists); - } - - let bid = Bid { - investor: investor.clone(), - invoice_id, - bid_price, - amount, - submitted_at: env.ledger().timestamp(), - }; - - env.storage().persistent().set(&bid_key, &bid); - Self::bump_persistent(&env, &bid_key); - - events::bid_submitted(&env, invoice_id, &investor, bid_price, amount); - Ok(()) - } - - /// Seller accepts one or more winning bids after the bidding window closes (#440). - /// - /// `bid_investors` is the ordered list of investors whose bids the seller accepts. - /// Accepted bids are settled through the same fee/transfer/pool-release pipeline - /// as `fund_invoice`. Acceptance stops once the listing is fully funded. - /// - /// Rules: - /// - Caller must be the listing seller or admin. - /// - `bidding_deadline` must have passed. - /// - Each accepted bid must exist. - /// - Total accepted `amount` must not exceed remaining capacity. - pub fn accept_bids( - env: Env, - caller: Address, - invoice_id: u64, - bid_investors: Vec
, - ) -> Result<(), KoraError> { - caller.require_auth(); - Self::require_not_paused(&env)?; - - let mut listing: Listing = env - .storage() - .persistent() - .get(&DataKey::Listing(invoice_id)) - .ok_or(KoraError::ListingNotFound)?; - - if !listing.is_active { - return Err(KoraError::ListingAlreadyCancelled); - } - - let config = Self::load_config(&env)?; - - // Only seller or admin may accept bids - if caller != listing.seller && caller != config.admin { - return Err(KoraError::Unauthorized); - } - - // Must be in bidding mode and bidding window must have closed - let bidding_deadline = listing - .bidding_deadline - .ok_or(KoraError::BiddingWindowClosed)?; - - if env.ledger().timestamp() <= bidding_deadline { - return Err(KoraError::BiddingWindowActive); - } - - let nft_client = - kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); - if nft_client.is_invoice_frozen(&invoice_id) { - return Err(KoraError::InvoiceFrozen); - } - - let token_client = token::Client::new(&env, &listing.token); - let token_decimals = token_client.decimals(); - - let invoice = nft_client.get_invoice(&invoice_id); - let effective_fee_bps: u32 = env - .storage() - .instance() - .get(&DataKey::TierFeeBps(Self::tier_ordinal(&invoice.risk_tier))) - .unwrap_or(config.fee_bps); - - let effective_price = Self::current_asking_price_impl(&env, &listing); - - for investor in bid_investors.iter() { - // Stop once fully funded - if listing.funded_amount >= effective_price { - break; - } - - let bid_key = DataKey::Bid(invoice_id, investor.clone()); - let bid: Bid = env - .storage() - .persistent() - .get(&bid_key) - .ok_or(KoraError::BidNotFound)?; - - let remaining = safe_sub(effective_price, listing.funded_amount)?; - // Accept the smaller of bid.amount and remaining capacity - let accept_amount = if bid.amount > remaining { - remaining - } else { - bid.amount - }; - - let fee = bps_of_normalized(accept_amount, effective_fee_bps, token_decimals)?; - let net = accept_amount - .checked_sub(fee) - .ok_or(KoraError::ArithmeticOverflow)?; - - if fee > 0 { - token_client.transfer(&investor, &config.treasury, &fee); - let treasury_client = - kora_treasury::TreasuryContractClient::new(&env, &config.treasury); - treasury_client.collect_fee(&listing.token, &fee); - } - if net > 0 { - token_client.transfer(&investor, &config.financing_pool, &net); - } - - listing.funded_amount = safe_add(listing.funded_amount, accept_amount)?; - - // Track per-investor net contribution for potential refund - let contrib_key = DataKey::Contribution(invoice_id, investor.clone()); - let prev_contrib: i128 = env - .storage() - .persistent() - .get(&contrib_key) - .unwrap_or(0); - env.storage() - .persistent() - .set(&contrib_key, &safe_add(prev_contrib, net)?); - - // Consume the bid - env.storage().persistent().remove(&bid_key); - - events::invoice_funded(&env, invoice_id, &investor, accept_amount); - events::bid_accepted( - &env, - invoice_id, - &listing.seller, - &investor, - bid.bid_price, - accept_amount, - ); - if fee > 0 { - events::fee_collected(&env, &investor, invoice_id, fee, &listing.token); - } - } - - let fully_funded = listing.funded_amount >= effective_price; - if fully_funded { - listing.is_active = false; - } - - env.storage() - .persistent() - .set(&DataKey::Listing(invoice_id), &listing); - Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); - - if fully_funded { - let pool_client = kora_financing_pool::FinancingPoolContractClient::new( - &env, - &config.financing_pool, - ); - pool_client.release_funds( - &env.current_contract_address(), - &invoice_id, - &listing.token, - ); - } - - Ok(()) - } - - /// Returns the bid submitted by `investor` for `invoice_id`, if any. - pub fn get_bid(env: Env, invoice_id: u64, investor: Address) -> Option { - env.storage() - .persistent() - .get(&DataKey::Bid(invoice_id, investor)) - Self::bump_listing(&env, invoice_id); - Ok(listing) - } - - // ── Helpers ─────────────────────────────────────────────────────────────── - - fn require_compliance_attested(env: &Env, sme: &Address) -> Result<(), MarketplaceError> { - let config = Self::load_config(env)?; - let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &config.risk_registry); - if !rr.is_compliance_attested(sme) { - return Err(MarketplaceError::ComplianceNotAttested); - } - Ok(()) - } - - fn require_whitelisted_token(env: &Env, token: &Address) -> Result<(), MarketplaceError> { - let ok: bool = env - .storage() - .persistent() - .get(&DataKey::WhitelistedToken(token.clone())) - .unwrap_or(false); - if !ok { - return Err(MarketplaceError::TokenNotWhitelisted); - } - Ok(()) - } - - /// Compute the current effective asking price for a listing (#439). - /// - /// - If no `DecaySchedule` is stored for the listing, returns `listing.asking_price`. - /// - If now < `decay_start_ts`: returns `start_price`. - /// - If now > `decay_end_ts`: returns `floor_price`. - /// - Otherwise: linear interpolation between `start_price` and `floor_price`. - /// - /// Formula (integer, rounds toward floor): - /// ```text - /// elapsed = now - decay_start_ts - /// duration = decay_end_ts - decay_start_ts - /// drop = (start_price - floor_price) * elapsed / duration - /// price = start_price - drop - /// ``` - fn current_asking_price_impl(env: &Env, listing: &Listing) -> i128 { - let schedule: Option = env - .storage() - .persistent() - .get(&DataKey::DecaySchedule(listing.invoice_id)); - - let schedule = match schedule { - None => return listing.asking_price, - Some(s) => s, - }; - - let now = env.ledger().timestamp(); - - if now <= schedule.decay_start_ts { - return schedule.start_price; - } - if now >= schedule.decay_end_ts { - return schedule.floor_price; - } - - // Linear interpolation (integer arithmetic, truncates toward floor) - let elapsed = (now - schedule.decay_start_ts) as i128; - let duration = (schedule.decay_end_ts - schedule.decay_start_ts) as i128; - let price_drop = (schedule.start_price - schedule.floor_price) - .checked_mul(elapsed) - .unwrap_or(schedule.start_price - schedule.floor_price) - / duration; - - schedule.start_price - price_drop - } - - // ── Upgrade ──────────────────────────────────────────────────────────────── - - pub fn propose_upgrade( - env: Env, - admin: Address, - new_wasm_hash: BytesN<32>, - ) -> Result<(), MarketplaceError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - env.storage().instance().set( - &DataKey::UpgradeProposal, - &(new_wasm_hash.clone(), env.ledger().timestamp()), - ); - events::upgrade_proposed(&env, &admin, &new_wasm_hash); - Ok(()) - } - - pub fn execute_upgrade(env: Env, admin: Address) -> Result<(), MarketplaceError> { - admin.require_auth(); - let config = Self::load_config(&env)?; - if config.admin != admin { - return Err(MarketplaceError::NotAdmin); - } - let (wasm_hash, proposed_at): (BytesN<32>, u64) = env - .storage() - .instance() - .get(&DataKey::UpgradeProposal) - .ok_or(MarketplaceError::NoUpgradeProposed)?; - if env.ledger().timestamp() < proposed_at + UPGRADE_TIMELOCK_DELAY { - return Err(MarketplaceError::UpgradeTimelockNotElapsed); - } - env.storage().instance().remove(&DataKey::UpgradeProposal); - events::upgrade_executed(&env, &admin, &wasm_hash); - env.deployer().update_current_contract_wasm(wasm_hash); - Ok(()) - } - - // ── Private helpers ─────────────────────────────────────────────────────── - - fn load_config(env: &Env) -> Result { - env.storage() - .instance() - .get(&DataKey::Config) - .ok_or(MarketplaceError::NotInitialized) - .get(&DataKey::FeeBps) - .ok_or(KoraError::NotInitialized)?; - // risk_registry was never part of the legacy per-key storage format — - // contracts still on that format must be re-initialized to consolidate - // into `Config` before risk_registry-dependent calls can succeed. - let risk_registry: Address = env - .storage() - .instance() - .get(&DataKey::RiskRegistry) - .ok_or(KoraError::NotInitialized)?; - - let config = MarketplaceConfig { - admin, - invoice_nft, - financing_pool, - treasury, - access_control, - risk_registry, - fee_bps, - referrer_split_bps: 0, - }; - env.storage().instance().set(&DataKey::Config, &config); - Ok(config) - } - - /// NOTE: `DataKey::AccessControl` is read directly (not from inside Config) so this - /// stays cheap on the common path. `initialize` always writes a real AccessControl - /// contract address here, so this performs a live cross-contract pause check. - fn require_not_paused(env: &Env) -> Result<(), MarketplaceError> { - if let Some(ac_contract) = - env.storage() - .instance() - .get::(&DataKey::AccessControl) - { - let ac = - kora_access_control::AccessControlContractClient::new(env, &ac_contract); - if ac.is_paused() { - return Err(MarketplaceError::ProtocolPaused); - } - } - Ok(()) - } - - /// Extend the TTL of any persistent storage entry. - fn bump_persistent(env: &Env, key: &DataKey) { - env.storage() - .persistent() - .extend_ttl(key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_BUMP); - } - - /// Extend the TTL of a listing's persistent storage entry. - fn bump_listing(env: &Env, invoice_id: u64) { - env.storage().persistent().extend_ttl( - &DataKey::Listing(invoice_id), - PERSISTENT_TTL_THRESHOLD, - PERSISTENT_TTL_BUMP, - ); - } - - /// Map RiskTier to a stable u32 ordinal for storage keying. (#210) - #[inline] - fn tier_ordinal(tier: &RiskTier) -> u32 { - match tier { - RiskTier::AAA => 0, - RiskTier::AA => 1, - RiskTier::A => 2, - RiskTier::B => 3, - RiskTier::C => 4, - } - } -} - -// ── Tests ───────────────────────────────────────────────────────────────────── - -#[cfg(test)] -mod tests { - use super::*; - use kora_access_control::AccessControlContract; - use kora_financing_pool::{FinancingPoolContract, FinancingPoolContractClient}; - use kora_invoice_nft::{InvoiceNftContract, InvoiceNftContractClient}; - use soroban_sdk::{ - testutils::{Address as _, Ledger, LedgerInfo}, - Address, Env, - }; - - // ── Test harness ────────────────────────────────────────────────────────── - - struct TestEnv { - env: Env, - admin: Address, - token: Address, - seller: Address, - treasury: Address, - pool: Address, - registry: Address, - staking_token: Address, - mp: MarketplaceContractClient<'static>, - nft: InvoiceNftContractClient<'static>, - } - - fn mint_stake(env: &Env, token: &Address, to: &Address, amount: i128) { - soroban_sdk::token::StellarAssetClient::new(env, token).mint(to, &amount); - } - - fn deploy() -> TestEnv { - let env = Env::default(); - // add_verifier's stake transfer requires verifier.require_auth() from - // inside a nested call (risk_registry -> token), which isn't tied to - // the root invocation — plain mock_all_auths() rejects that. - env.mock_all_auths_allowing_non_root_auth(); - - env.ledger().set(LedgerInfo { - timestamp: 1_700_000_000, - protocol_version: 21, - sequence_number: 1, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - - let admin = Address::generate(&env); - let treasury_id = env.register_contract(None, kora_treasury::TreasuryContract); - let treasury_client = kora_treasury::TreasuryContractClient::new(&env, &treasury_id); - treasury_client.initialize(&admin, &50u32); - let treasury = treasury_id; - - let ac_id = env.register_contract(None, AccessControlContract); - let ac_client = kora_access_control::AccessControlContractClient::new(&env, &ac_id); - ac_client.initialize(&admin); - - let ac_id = env.register_contract(None, AccessControlContract); - - let nft_id = env.register_contract(None, InvoiceNftContract); - let nft = InvoiceNftContractClient::new(&env, &nft_id); - nft.initialize(&admin, &ac_id); - - let pool_id = env.register_contract(None, FinancingPoolContract); - let pool_client = FinancingPoolContractClient::new(&env, &pool_id); - let rr = Address::generate(&env); // risk registry (unused in unit tests) - let oracle = Address::generate(&env); // price oracle (unused in unit tests) - pool_client.initialize(&admin, &nft_id, &rr, &treasury, &ac_id, &200u32, &oracle, &5_000u32); - - let registry_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); - let registry = registry_id.clone(); - let registry_client = kora_risk_registry::RiskRegistryContractClient::new(&env, ®istry_id); - let staking_token = env.register_stellar_asset_contract_v2(admin.clone()).address(); - let token_admin = Address::generate(&env); - let staking_token = env.register_stellar_asset_contract_v2(token_admin).address(); - registry_client.initialize(&admin, &nft_id, &staking_token, &1_000_000i128, &5_000u32); - - let mp_id = env.register_contract(None, MarketplaceContract); - let mp = MarketplaceContractClient::new(&env, &mp_id); - mp.initialize(&admin, &nft_id, &pool_id, &treasury, &ac_id, ®istry, &50u32); - - // Register marketplace and pool as authorized callers on the NFT contract (#209) - nft.set_authorized_callers(&admin, &mp_id, &pool_id); - - let token_issuer = Address::generate(&env); - let token = env.register_stellar_asset_contract_v2(token_issuer).address(); - mp.whitelist_token(&admin, &token); - treasury_client.whitelist_token(&admin, &token); - - let seller = Address::generate(&env); - - // Default seller must be compliance-attested for list_invoice to succeed. - let verifier = Address::generate(&env); - mint_stake(&env, &staking_token, &verifier, 1_000_000i128); - // list_invoice requires the seller to be a compliance-attested SME. - let verifier = Address::generate(&env); - soroban_sdk::token::StellarAssetClient::new(&env, &staking_token) - .mint(&verifier, &1_000_000i128); - registry_client.add_verifier(&admin, &verifier, &1_000_000i128); - registry_client.register_sme(&verifier, &seller, &50u32, &true); - - TestEnv { env, admin, token, seller, treasury, pool: pool_id, registry, staking_token, mp, nft } - } - - /// Mint an invoice in the NFT contract and return its id. - fn mint_invoice(t: &TestEnv) -> u64 { - use soroban_sdk::{Bytes, String, Symbol}; - let debtor_hash = Bytes::from_slice(&t.env, &[0xABu8; 32]); - let ipfs_cid = String::from_str( - &t.env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - t.nft.mint_invoice( - &t.seller, - &debtor_hash, - &10_000_000_000i128, - &Symbol::new(&t.env, "USDC"), - &due_date, - &ipfs_cid, - &30u32, &None, - &30u32, - &None, - ) - } - - /// Mint an invoice and list it; returns invoice_id. - fn list_one(t: &TestEnv) -> u64 { - let id = mint_invoice(t); - let deadline = t.env.ledger().timestamp() + 86_400 * 30; - t.mp.list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - id - } - - // ── initialize ──────────────────────────────────────────────────────────── - - #[test] - fn test_initialize_already_initialized_returns_error() { - let t = deploy(); - let result = t.mp.try_initialize( - &t.admin, - &Address::generate(&t.env), - &Address::generate(&t.env), - &Address::generate(&t.env), - &Address::generate(&t.env), - &Address::generate(&t.env), - &50u32, - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::AlreadyInitialized); - } - - #[test] - fn test_initialize_invalid_fee_bps_rejected() { - let env = Env::default(); - env.mock_all_auths(); - let mp_id = env.register_contract(None, MarketplaceContract); - let mp = MarketplaceContractClient::new(&env, &mp_id); - let result = mp.try_initialize( - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &10_001u32, - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidFeeRate); - } - - #[test] - fn test_initialize_zero_fee_bps_accepted() { - let env = Env::default(); - env.mock_all_auths(); - let mp_id = env.register_contract(None, MarketplaceContract); - let mp = MarketplaceContractClient::new(&env, &mp_id); - assert!(mp - .try_initialize( - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &0u32, - ) - .is_ok()); - } - - #[test] - fn test_initialize_max_fee_bps_accepted() { - let env = Env::default(); - env.mock_all_auths(); - let mp_id = env.register_contract(None, MarketplaceContract); - let mp = MarketplaceContractClient::new(&env, &mp_id); - assert!(mp - .try_initialize( - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &Address::generate(&env), - &10_000u32, - ) - .is_ok()); - } - - // ── get_admin ───────────────────────────────────────────────────────────── - - #[test] - fn test_get_admin_returns_correct_address() { - let t = deploy(); - assert_eq!(t.mp.get_admin(), t.admin); - } - - #[test] - fn test_get_admin_before_init_returns_error() { - let env = Env::default(); - env.mock_all_auths(); - let mp_id = env.register_contract(None, MarketplaceContract); - let mp = MarketplaceContractClient::new(&env, &mp_id); - assert_eq!( - mp.try_get_admin().unwrap_err().unwrap(), - MarketplaceError::NotInitialized - ); - } - - // ── get_fee_bps ─────────────────────────────────────────────────────────── - - #[test] - fn test_get_fee_bps_returns_initialized_value() { - let t = deploy(); - assert_eq!(t.mp.get_fee_bps(), 50); - } - - // ── update_fee_bps ──────────────────────────────────────────────────────── - - #[test] - fn test_update_fee_bps_success() { - let t = deploy(); - t.mp.update_fee_bps(&t.admin, &100u32); - assert_eq!(t.mp.get_fee_bps(), 100); - } - - #[test] - fn test_update_fee_bps_to_zero_success() { - let t = deploy(); - t.mp.update_fee_bps(&t.admin, &0u32); - assert_eq!(t.mp.get_fee_bps(), 0); - } - - #[test] - fn test_update_fee_bps_to_max_success() { - let t = deploy(); - t.mp.update_fee_bps(&t.admin, &10_000u32); - assert_eq!(t.mp.get_fee_bps(), 10_000); - } - - #[test] - fn test_get_config_returns_initialized_values() { - let t = deploy(); - let config = t.mp.get_config(); - assert_eq!(config.admin, t.admin); - assert_eq!(config.financing_pool, t.pool); - assert_eq!(config.treasury, t.treasury); - assert_eq!(config.fee_bps, 50u32); - } - - // ── whitelist_token ─────────────────────────────────────────────────────── - - #[test] - fn test_whitelist_token_success() { - let t = deploy(); - let new_token = Address::generate(&t.env); - assert!(!t.mp.is_token_whitelisted(&new_token)); - t.mp.whitelist_token(&t.admin, &new_token); - assert!(t.mp.is_token_whitelisted(&new_token)); - } - - #[test] - fn test_whitelist_token_non_admin_rejected() { - let t = deploy(); - let stranger = Address::generate(&t.env); - let new_token = Address::generate(&t.env); - let result = t.mp.try_whitelist_token(&stranger, &new_token); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::NotAdmin); - } - - // ── remove_token_whitelist ──────────────────────────────────────────────── - - #[test] - fn test_remove_token_whitelist_success() { - let t = deploy(); - let new_token = Address::generate(&t.env); - t.mp.whitelist_token(&t.admin, &new_token); - assert!(t.mp.is_token_whitelisted(&new_token)); - t.mp.remove_token_whitelist(&t.admin, &new_token); - assert!(!t.mp.is_token_whitelisted(&new_token)); - } - - #[test] - fn test_remove_token_whitelist_non_admin_rejected() { - let t = deploy(); - let stranger = Address::generate(&t.env); - let new_token = Address::generate(&t.env); - t.mp.whitelist_token(&t.admin, &new_token); - let result = t.mp.try_remove_token_whitelist(&stranger, &new_token); - assert_eq!(result.unwrap_err().unwrap(), KoraError::NotAdmin); - assert!(t.mp.is_token_whitelisted(&new_token)); - } - - #[test] - fn test_remove_token_whitelist_not_whitelisted_rejected() { - let t = deploy(); - let new_token = Address::generate(&t.env); - let result = t.mp.try_remove_token_whitelist(&t.admin, &new_token); - assert_eq!(result.unwrap_err().unwrap(), KoraError::TokenNotWhitelisted); - } - - #[test] - fn test_remove_token_whitelist_blocks_new_listing() { - let t = deploy(); - // t.token is whitelisted by deploy(); remove it, then listing must fail. - t.mp.remove_token_whitelist(&t.admin, &t.token); - assert!(!t.mp.is_token_whitelisted(&t.token)); - - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &9_000i128, - &10_000i128, - &t.token, - &deadline, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::TokenNotWhitelisted); - } - - #[test] - fn test_remove_token_whitelist_existing_listing_unaffected() { - let t = deploy(); - let id = list_one(&t); - // Remove the whitelist for the token used by the already-created listing. - t.mp.remove_token_whitelist(&t.admin, &t.token); - assert!(!t.mp.is_token_whitelisted(&t.token)); - - // The existing listing must remain funded-able despite the removal. - let listing = t.mp.get_listing(&id); - assert!(listing.is_active); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &id, &1_000_000i128); - assert!(result.is_ok()); - } - - // ── list_invoice ────────────────────────────────────────────────────────── - - #[test] - fn test_list_invoice_success() { - let t = deploy(); - let id = list_one(&t); - let listing = t.mp.get_listing(&id); - assert_eq!(listing.invoice_id, 1); - assert_eq!(listing.seller, t.seller); - assert_eq!(listing.asking_price, 9_500_000_000i128); - assert_eq!(listing.face_value, 10_000_000_000i128); - assert!(listing.is_active); - assert_eq!(listing.funded_amount, 0); - } - - #[test] - fn test_list_invoice_nft_status_transitions_to_listed() { - let t = deploy(); - let id = list_one(&t); - let invoice = t.nft.get_invoice(&id); - assert_eq!(invoice.status, kora_shared::types::InvoiceStatus::Listed); - } - - #[test] - fn test_list_invoice_non_whitelisted_token_rejected() { - let t = deploy(); - let _id = mint_invoice(&t); - let bad_token = Address::generate(&t.env); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &9_000i128, - &10_000i128, - &bad_token, - &deadline, - &None::
, - &None, - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::TokenNotWhitelisted); - } - - #[test] - fn test_list_invoice_zero_asking_price_rejected() { - let t = deploy(); - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = - t.mp.try_list_invoice(&t.seller, &1u64, &0i128, &10_000i128, &t.token, &deadline, &None::
); - t.mp.try_list_invoice(&t.seller, &1u64, &0i128, &10_000i128, &t.token, &deadline, &None); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - #[test] - fn test_list_invoice_zero_face_value_rejected() { - let t = deploy(); - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = - t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &0i128, &t.token, &deadline, &None::
); - t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &0i128, &t.token, &deadline, &None); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - #[test] - fn test_list_invoice_asking_price_equal_face_value_rejected() { - let t = deploy(); - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &10_000i128, - &10_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - } - - // ── minimum discount enforcement ────────────────────────────────────────── - - #[test] - fn test_list_invoice_discount_below_minimum_rejected() { - let t = deploy(); - // mint_invoice() always mints a face value of 10_000_000_000. - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - // face_value = 10_000_000_000, default min_discount_bps = 10 → - // min_discount = 10_000_000. A discount of 9_999_999 (asking_price = - // 9_990_000_001) is one below the minimum. - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &9_990_000_001i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - #[test] - fn test_list_invoice_discount_exact_minimum_accepted() { - let t = deploy(); - // mint_invoice() always mints a face value of 10_000_000_000. - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - // face_value = 10_000_000_000, default min_discount_bps = 10 → - // min_discount = 10_000_000. A discount of exactly 10_000_000 - // (asking_price = 9_990_000_000) must be accepted. - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &9_990_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None, - ); - assert!(result.is_ok()); - } - - #[test] - fn test_list_invoice_valid_discount_accepted() { - let t = deploy(); - let id = list_one(&t); - let listing = t.mp.get_listing(&id); - assert!(listing.is_active); - assert_eq!(listing.asking_price, 9_500_000_000i128); - } - - #[test] - fn test_set_min_discount_bps_enforced_on_next_listing() { - let t = deploy(); - // Raise the minimum discount to 10% (1_000 bps); a 5% discount must - // now be rejected even though it passed under the default 10 bps. - t.mp.set_min_discount_bps(&t.admin, &1_000u32); - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - #[test] - fn test_set_min_discount_bps_non_admin_rejected() { - let t = deploy(); - let stranger = Address::generate(&t.env); - let result = t.mp.try_set_min_discount_bps(&stranger, &1_000u32); - assert!(result.is_err()); - } - - #[test] - fn test_set_min_discount_bps_over_10000_rejected() { - let t = deploy(); - let result = t.mp.try_set_min_discount_bps(&t.admin, &10_001u32); - assert!(result.is_err()); - } - - #[test] - fn test_get_min_discount_bps_defaults_to_ten() { - let t = deploy(); - assert_eq!(t.mp.get_min_discount_bps(), 10u32); - } - - #[test] - fn test_list_invoice_asking_price_greater_than_face_value_rejected() { - let t = deploy(); - let _id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &11_000i128, - &10_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - } - - #[test] - fn test_list_invoice_past_deadline_rejected() { - let t = deploy(); - let _id = mint_invoice(&t); - let past = t.env.ledger().timestamp() - 1; - let result = - t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &10_000i128, &t.token, &past, &None::
); - t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &10_000i128, &t.token, &past, &None); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidDueDate); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidDueDate); - } - - #[test] - fn test_list_invoice_duplicate_id_rejected() { - let t = deploy(); - let _id = list_one(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &t.seller, - &1u64, - &9_000i128, - &10_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - assert_eq!( - result.unwrap_err().unwrap(), - MarketplaceError::InvoiceAlreadyExists - ); - } - - #[test] - fn test_list_multiple_invoices_independent() { - let t = deploy(); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = - t.mp.try_list_invoice(&t.seller, &1u64, &-1i128, &10_000i128, &t.token, &deadline, &None::
); - t.mp.try_list_invoice(&t.seller, &1u64, &-1i128, &10_000i128, &t.token, &deadline, &None); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - #[test] - fn test_list_invoice_unattested_sme_rejected() { - let t = deploy(); - let verifier = Address::generate(&t.env); - let registry_client = kora_risk_registry::RiskRegistryContractClient::new(&t.env, &t.registry); - mint_stake(&t.env, &t.staking_token, &verifier, 1_000_000i128); - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.staking_token) - .mint(&verifier, &1_000_000i128); - registry_client.add_verifier(&t.admin, &verifier, &1_000_000i128); - - let unattested_seller = Address::generate(&t.env); - registry_client.register_sme(&verifier, &unattested_seller, &50u32, &false); - - let id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400; - let result = t.mp.try_list_invoice( - &unattested_seller, - &1u64, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ComplianceNotAttested); - } - - #[test] - fn test_list_invoice_attested_sme_succeeds() { - let t = deploy(); - let verifier = Address::generate(&t.env); - let registry_client = kora_risk_registry::RiskRegistryContractClient::new(&t.env, &t.registry); - mint_stake(&t.env, &t.staking_token, &verifier, 1_000_000i128); - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.staking_token) - .mint(&verifier, &1_000_000i128); - registry_client.add_verifier(&t.admin, &verifier, &1_000_000i128); - - let attested_seller = Address::generate(&t.env); - registry_client.register_sme(&verifier, &attested_seller, &50u32, &true); - - let deadline = t.env.ledger().timestamp() + 86_400; - let nft_id = { - use soroban_sdk::{Bytes, String, Symbol}; - let debtor_hash = Bytes::from_slice(&t.env, &[0xABu8; 32]); - let ipfs_cid = String::from_str( - &t.env, - "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", - ); - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - t.nft.mint_invoice( - &attested_seller, - &debtor_hash, - &10_000_000_000i128, - &Symbol::new(&t.env, "USDC"), - &due_date, - &ipfs_cid, - &30u32, &None, - &30u32, - &None, - ) - }; - - assert!(t.mp.try_list_invoice( - &attested_seller, - &nft_id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - &None, - ).is_ok()); - } - - // ── get_listing ─────────────────────────────────────────────────────────── - - #[test] - fn test_get_listing_not_found_returns_error() { - let t = deploy(); - let result = t.mp.try_get_listing(&999u64); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingNotFound); - } - - #[test] - fn test_get_listing_returns_correct_data() { - let t = deploy(); - let deadline = t.env.ledger().timestamp() + 86_400 * 30; - let _id = mint_invoice(&t); - t.mp.list_invoice( - &t.seller, - &1u64, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - let listing = t.mp.get_listing(&1u64); - assert_eq!(listing.asking_price, 9_500_000_000i128); - assert_eq!(listing.face_value, 10_000_000_000i128); - assert_eq!(listing.funding_deadline, deadline); - assert_eq!(listing.token, t.token); - assert!(listing.is_active); - assert_eq!(listing.funded_amount, 0); - } - - // ── fund_invoice (error-path tests that don't require token contracts) ──── - - #[test] - fn test_fund_invoice_listing_not_found() { - let t = deploy(); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &999u64, &1_000i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingNotFound); - } - - #[test] - fn test_fund_invoice_zero_amount_rejected() { - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &id, &0i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - } - - #[test] - fn test_fund_invoice_negative_amount_rejected() { - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &id, &-1i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); - } - - #[test] - fn test_fund_invoice_exceeds_target_rejected() { - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &1u64, &9_500_000_001i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ExceedsFundingTarget); - } - - #[test] - fn test_fund_invoice_after_deadline_rejected() { - let t = deploy(); - let deadline = t.env.ledger().timestamp() + 100; - let _id = mint_invoice(&t); - t.mp.list_invoice( - &t.seller, - &1u64, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - &None, - ); - t.env.ledger().set(LedgerInfo { - timestamp: deadline + 1, - protocol_version: 21, - sequence_number: 2, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &1u64, &1_000_000i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::FundingDeadlinePassed); - } - - #[test] - fn test_fund_invoice_on_cancelled_listing_rejected() { - let t = deploy(); - let id = list_one(&t); - t.mp.cancel_listing(&t.seller, &id); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &1u64, &1_000_000i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingAlreadyCancelled); - } - - #[test] - fn test_funded_amount_overflow_protection() { - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - // asking_price = 9_500_000_000; any amount > that is rejected before overflow - let result = t.mp.try_fund_invoice(&investor, &id, &i128::MAX); - assert!(result.is_err()); - } - - #[test] - fn test_fund_cancelled_listing() { - let t = deploy(); - let id = list_one(&t); - t.mp.cancel_listing(&t.seller, &id); - let listing = t.mp.get_listing(&id); - assert!(!listing.is_active); - - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &id, &1_000_000i128); - assert_eq!( - result.unwrap_err().unwrap(), - MarketplaceError::ListingAlreadyCancelled - ); - } - - #[test] - fn test_fund_invoice_amount_exactly_equals_remaining_target() { - // Test exact boundary: amount == remaining - // Listing: asking_price = 9_500_000_000 - // First fund: 5_000_000_000 (remaining = 4_500_000_000) - // Second fund: 4_500_000_000 (remaining = 0, fully funded) - let t = deploy(); - let id = list_one(&t); - let inv1 = Address::generate(&t.env); - let inv2 = Address::generate(&t.env); - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) - .mint(&inv1, &5_000_000_000i128); - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) - .mint(&inv2, &4_500_000_000i128); - - // First funding: 5B - t.mp.fund_invoice(&inv1, &id, &5_000_000_000i128); - let listing = t.mp.get_listing(&id); - assert_eq!(listing.funded_amount, 5_000_000_000i128); - assert!(listing.is_active); - - // Second funding: exactly the remaining 4.5B - t.mp.fund_invoice(&inv2, &id, &4_500_000_000i128); - let listing = t.mp.get_listing(&id); - assert_eq!(listing.funded_amount, 9_500_000_000i128); - assert!(!listing.is_active, "Listing should be fully funded and inactive"); - } - - // ── cancel_listing ──────────────────────────────────────────────────────── - - #[test] - fn test_cancel_listing_by_seller_success() { - let t = deploy(); - list_one(&t); - assert!(t.mp.try_cancel_listing(&t.seller, &1u64).is_ok()); - let listing = t.mp.get_listing(&1u64); - assert!(!listing.is_active); - } - - #[test] - fn test_cancel_listing_by_admin_success() { - let t = deploy(); - list_one(&t); - assert!(t.mp.try_cancel_listing(&t.admin, &1u64).is_ok()); - let listing = t.mp.get_listing(&1u64); - assert!(!listing.is_active); - } - - #[test] - fn test_cancel_listing_by_stranger_rejected() { - let t = deploy(); - let id = list_one(&t); - let stranger = Address::generate(&t.env); - let result = t.mp.try_cancel_listing(&stranger, &id); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::Unauthorized); - } - - #[test] - fn test_cancel_listing_not_found_returns_error() { - let t = deploy(); - let result = t.mp.try_cancel_listing(&t.seller, &999u64); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingNotFound); - } - - #[test] - fn test_cancel_listing_already_cancelled_returns_error() { - let t = deploy(); - list_one(&t); - t.mp.cancel_listing(&t.seller, &1u64); - let result = t.mp.try_cancel_listing(&t.seller, &1u64); - assert_eq!( - result.unwrap_err().unwrap(), - MarketplaceError::ListingAlreadyCancelled - ); - } - - /// After cancel_listing the NFT status must be reverted to Created. - #[test] - fn test_cancel_listing_reverts_nft_status_to_created() { - let t = deploy(); - let id = list_one(&t); - // After listing the NFT must be Listed. - assert_eq!(t.nft.get_invoice(&id).status, kora_shared::types::InvoiceStatus::Listed); - - t.mp.cancel_listing(&t.seller, &id); - - // After cancellation the NFT must be back to Created. - assert_eq!(t.nft.get_invoice(&id).status, kora_shared::types::InvoiceStatus::Created); - } - - /// Full list → cancel → relist flow must succeed end-to-end. - #[test] - fn test_list_cancel_relist_succeeds() { - let t = deploy(); - let id = list_one(&t); - - // Cancel the initial listing. - t.mp.cancel_listing(&t.seller, &id); - - // NFT is back to Created; the cancelled listing key (is_active=false) must - // not block a fresh listing for the same invoice. - let new_deadline = t.env.ledger().timestamp() + 86_400 * 30; - let result = t.mp.try_list_invoice( - &t.seller, - &id, - &9_000_000_000i128, - &10_000_000_000i128, - &t.token, - &new_deadline, - &None, - ); - assert!(result.is_ok(), "Re-listing after cancel must succeed, got: {:?}", result.err()); - let new_listing = t.mp.get_listing(&id); - assert!(new_listing.is_active); - assert_eq!(new_listing.asking_price, 9_000_000_000i128); - // NFT must be Listed again after re-listing. - assert_eq!(t.nft.get_invoice(&id).status, kora_shared::types::InvoiceStatus::Listed); - } - - #[test] - fn test_cancel_listing_state_unchanged_after_failed_cancel() { - let t = deploy(); - let _id = list_one(&t); - let stranger = Address::generate(&t.env); - let _ = t.mp.try_cancel_listing(&stranger, &1u64); - // Listing must still be active - let listing = t.mp.get_listing(&1u64); - assert!(listing.is_active); - } - - #[test] - fn test_fund_after_cancel_rejected() { - let t = deploy(); - let id = list_one(&t); - t.mp.cancel_listing(&t.admin, &id); - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &1u64, &1_000_000i128); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingAlreadyCancelled); - } - - // ── request_cancellation ────────────────────────────────────────────────── - - /// Seller requests cancellation of a listing with no funding — cancels immediately. - #[test] - fn test_request_cancellation_by_seller_success() { - let t = deploy(); - let id = list_one(&t); - // funded_amount == 0 → immediate cancel, no two-phase needed - assert!(t.mp.try_request_cancellation(&t.seller, &id).is_ok()); - let listing = t.mp.get_listing(&id); - assert!(!listing.is_active); - } - - #[test] - fn test_cancel_listing_after_partial_funding_exposes_fund_loss_risk() { - // BUG EXPOSURE: When a listing is cancelled after receiving partial funding, - // the investor's net contribution remains locked in financing_pool with no - // refund path. claim_refund requires deadline expiry; cancel_listing has no - // refund logic. This is the gap that B9 (reclaim mechanism) must address. - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - let partial_amount = 2_000_000_000i128; - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) - .mint(&investor, &partial_amount); - - // Investor funds the listing partially - t.mp.fund_invoice(&investor, &id, &partial_amount); - let listing = t.mp.get_listing(&id); - assert_eq!(listing.funded_amount, partial_amount); - assert!(listing.is_active); - - // Seller cancels the partially-funded listing - assert!(t.mp.try_cancel_listing(&t.seller, &id).is_ok()); - let cancelled_listing = t.mp.get_listing(&id); - assert!(!cancelled_listing.is_active); - - // BROKEN: Investor cannot claim refund because claim_refund requires - // the deadline to pass (line 352 of lib.rs). Cancellation before deadline - // with partial funding leaves investor funds stranded. - // Expected: refund should be claimable after cancel, or cancel should - // refund automatically (scope of B9). - let result = t.mp.try_claim_refund(&investor, &id); - // This currently fails with FundingNotExpired because deadline hasn't passed - // even though the listing was cancelled and funds are stuck. - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::FundingNotExpired); - } - - // ── fee arithmetic edge cases ───────────────────────────────────────────── - - #[test] - fn test_request_cancellation_by_admin_success() { - let t = deploy(); - let id = list_one(&t); - assert!(t.mp.try_request_cancellation(&t.admin, &id).is_ok()); - let listing = t.mp.get_listing(&id); - assert!(!listing.is_active); - } - - /// A stranger (not seller or admin) is rejected. - #[test] - fn test_request_cancellation_stranger_rejected() { - let t = deploy(); - let id = list_one(&t); - let stranger = Address::generate(&t.env); - let result = t.mp.try_request_cancellation(&stranger, &id); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::Unauthorized); - } - - /// Requesting cancellation on an already-inactive listing is rejected. - #[test] - fn test_request_cancellation_not_active_rejected() { - let t = deploy(); - let id = list_one(&t); - t.mp.cancel_listing(&t.seller, &id); - let result = t.mp.try_request_cancellation(&t.seller, &id); - assert_eq!( - result.unwrap_err().unwrap(), - MarketplaceError::ListingAlreadyCancelled - ); - } - - /// A second request_cancellation on an already-pending listing is rejected. - #[test] - fn test_request_cancellation_duplicate_rejected() { - let t = deploy(); - let id = list_one(&t); - - // Simulate partial funding by writing directly to contract storage - t.env.as_contract(&t.mp.address, || { - let mut listing: Listing = t - .env - .storage() - .persistent() - .get(&DataKey::Listing(id)) - .unwrap(); - listing.funded_amount = 1_000_000i128; - t.env - .storage() - .persistent() - .set(&DataKey::Listing(id), &listing); - }); - - // First request should succeed (stores CancellationRequest) - assert!(t.mp.try_request_cancellation(&t.seller, &id).is_ok()); - // Second request must fail - let result = t.mp.try_request_cancellation(&t.seller, &id); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::CancellationPending); - } - - // ── admin_confirm_cancellation ──────────────────────────────────────────── - - /// Full two-phase flow: request then confirm deactivates listing and sets the confirmed flag. - #[test] - fn test_admin_confirm_cancellation_success() { - let t = deploy(); - let id = list_one(&t); - - // Simulate partial funding - t.env.as_contract(&t.mp.address, || { - let mut listing: Listing = t - .env - .storage() - .persistent() - .get(&DataKey::Listing(id)) - .unwrap(); - listing.funded_amount = 1_000_000i128; - t.env - .storage() - .persistent() - .set(&DataKey::Listing(id), &listing); - }); - - // Phase 1: seller requests cancellation - t.mp.request_cancellation(&t.seller, &id); - - // Phase 2: admin confirms - assert!(t.mp.try_admin_confirm_cancellation(&t.admin, &id).is_ok()); - - let listing = t.mp.get_listing(&id); - assert!(!listing.is_active); - - // CancellationConfirmed flag must be set so investors can claim refunds - let confirmed: bool = t.env.as_contract(&t.mp.address, || { - t.env - .storage() - .persistent() - .get(&DataKey::CancellationConfirmed(id)) - .unwrap_or(false) - }); - assert!(confirmed); - } - - /// admin_confirm_cancellation without a prior request is rejected. - #[test] - fn test_admin_confirm_cancellation_no_request_rejected() { - let t = deploy(); - let id = list_one(&t); - let result = t.mp.try_admin_confirm_cancellation(&t.admin, &id); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::NoCancellationPending); - } - - /// Non-admin cannot confirm a cancellation. - #[test] - fn test_admin_confirm_cancellation_non_admin_rejected() { - let t = deploy(); - let id = list_one(&t); - - // Simulate partial funding and a pending request via direct storage write - t.env.as_contract(&t.mp.address, || { - let mut listing: Listing = t - .env - .storage() - .persistent() - .get(&DataKey::Listing(id)) - .unwrap(); - listing.funded_amount = 1_000_000i128; - t.env - .storage() - .persistent() - .set(&DataKey::Listing(id), &listing); - t.env.storage().persistent().set( - &DataKey::CancellationRequest(id), - &t.seller, - ); - }); - - let stranger = Address::generate(&t.env); - let result = t.mp.try_admin_confirm_cancellation(&stranger, &id); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::NotAdmin); - } - - // ── claim_refund after confirmed cancellation ───────────────────────────── - - /// After admin confirms cancellation, the FundingNotExpired gate is bypassed. - #[test] - fn test_claim_refund_after_confirmed_cancellation() { - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - let net_contribution: i128 = 950_000i128; - - // Simulate partial funding + investor contribution + confirmed cancellation - t.env.as_contract(&t.mp.address, || { - let mut listing: Listing = t - .env - .storage() - .persistent() - .get(&DataKey::Listing(id)) - .unwrap(); - listing.funded_amount = 1_000_000i128; - t.env - .storage() - .persistent() - .set(&DataKey::Listing(id), &listing); - t.env.storage().persistent().set( - &DataKey::Contribution(id, investor.clone()), - &net_contribution, - ); - t.env - .storage() - .persistent() - .set(&DataKey::CancellationConfirmed(id), &true); - }); - - // The deadline is 30 days in the future; without CancellationConfirmed this - // would return FundingNotExpired. With it set, the gate should be bypassed. - // (The call may still fail at token.transfer because there is no real token - // contract — but the error will NOT be FundingNotExpired.) - let result = t.mp.try_claim_refund(&investor, &id); - if let Err(e) = result { - assert_ne!(e.unwrap(), MarketplaceError::FundingNotExpired); - } - } - - /// Without CancellationConfirmed and before deadline, claim_refund must fail. - #[test] - fn test_claim_refund_before_deadline_without_confirmation_rejected() { - let t = deploy(); - let id = list_one(&t); - let investor = Address::generate(&t.env); - - // Simulate partial (but not full) funding so ListingFullyFunded is not triggered - t.env.as_contract(&t.mp.address, || { - let mut listing: Listing = t - .env - .storage() - .persistent() - .get(&DataKey::Listing(id)) - .unwrap(); - listing.funded_amount = 1_000i128; - t.env - .storage() - .persistent() - .set(&DataKey::Listing(id), &listing); - }); - - let result = t.mp.try_claim_refund(&investor, &id); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::FundingNotExpired); - } - - // ── referral fee-split tests ────────────────────────────────────────────── - - fn list_with_referrer(t: &TestEnv, referrer: Option
) -> u64 { - let id = mint_invoice(t); - let deadline = t.env.ledger().timestamp() + 86_400 * 30; - t.mp.list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &referrer, - ); - id - } - - #[test] - fn test_list_invoice_without_referrer_succeeds() { - let t = deploy(); - // None referrer: 100% fee to treasury - let id = list_with_referrer(&t, None); - let listing = t.mp.get_listing(&id); - assert!(listing.is_active); - } - - #[test] - fn test_list_invoice_with_referrer_succeeds() { - let t = deploy(); - let referrer = Address::generate(&t.env); - let id = list_with_referrer(&t, Some(referrer)); - let listing = t.mp.get_listing(&id); - assert!(listing.is_active); - } - - #[test] - fn test_list_invoice_self_referral_rejected() { - let t = deploy(); - let id = mint_invoice(&t); - let deadline = t.env.ledger().timestamp() + 86_400 * 30; - // seller as referrer is self-referral — must be rejected - let result = t.mp.try_list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &Some(t.seller.clone()), - ); - assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAddress); - } - - #[test] - fn test_fund_invoice_no_referrer_full_fee_to_treasury() { - // With no referrer, entire fee must go to treasury. - // fee_bps = 50 (0.5%), amount = 10_000_000 → fee = 50_000 → treasury gets 50_000. - let t = deploy(); - let id = list_with_referrer(&t, None); - let investor = Address::generate(&t.env); - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) - .mint(&investor, &10_000_000i128); - t.mp.fund_invoice(&investor, &id, &10_000_000i128); - } - - #[test] - fn test_fund_invoice_with_referrer_splits_fee() { - // referrer_split_bps = 2000 (20%). fee_bps = 50. - // amount = 10_000_000 → fee = 50_000 - // referral_fee = 50_000 * 2000 / 10_000 = 10_000 - // treasury_fee = 50_000 - 10_000 = 40_000 - let t = deploy(); - t.mp.set_referrer_split_bps(&t.admin, &2_000u32); - let referrer = Address::generate(&t.env); - let id = list_with_referrer(&t, Some(referrer)); - let investor = Address::generate(&t.env); - soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) - .mint(&investor, &10_000_000i128); - assert!(t.mp.try_fund_invoice(&investor, &id, &10_000_000i128).is_ok()); - } - - #[test] - fn test_set_referrer_split_bps_non_admin_rejected() { - let t = deploy(); - let stranger = Address::generate(&t.env); - let result = t.mp.try_set_referrer_split_bps(&stranger, &2_000u32); - assert!(result.is_err()); - } - - #[test] - fn test_set_referrer_split_bps_over_10000_rejected() { - let t = deploy(); - let result = t.mp.try_set_referrer_split_bps(&t.admin, &10_001u32); - assert!(result.is_err()); - } - - // ── Issue #441: funding_deadline vs due_date buffer ─────────────────────── - - /// funding_deadline exactly equal to due_date → rejected (no buffer at all). - #[test] - fn test_list_invoice_deadline_equals_due_date_rejected() { - let t = deploy(); - let id = mint_invoice(&t); // due_date = now + 60 days - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - // deadline == due_date → 0 buffer < 3-day minimum - let result = t.mp.try_list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &due_date, - &None::
, - ); - assert_eq!( - result.unwrap_err().unwrap(), - KoraError::FundingDeadlineTooCloseToDueDate - ); - } - - /// funding_deadline 1 second before due_date → rejected. - #[test] - fn test_list_invoice_deadline_one_second_before_due_date_rejected() { - let t = deploy(); - let id = mint_invoice(&t); - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - let result = t.mp.try_list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &(due_date - 1), // 1 second buffer — less than 3 days - &None::
, - ); - assert_eq!( - result.unwrap_err().unwrap(), - KoraError::FundingDeadlineTooCloseToDueDate - ); - } - - /// funding_deadline exactly at due_date - buffer → accepted. - #[test] - fn test_list_invoice_deadline_exactly_at_buffer_boundary_accepted() { - let t = deploy(); - let id = mint_invoice(&t); - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - let min_buffer = DEFAULT_MIN_FUNDING_BUFFER; // 3 days - // deadline + buffer == due_date → accepted - let deadline = due_date - min_buffer; - assert!(t.mp.try_list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - ).is_ok()); - } - - /// funding_deadline comfortably before due_date → accepted (existing valid behavior). - #[test] - fn test_list_invoice_deadline_well_before_due_date_accepted() { - let t = deploy(); - let id = list_one(&t); // deadline = now + 30 days, due_date = now + 60 days - let listing = t.mp.get_listing(&id); - assert!(listing.is_active); - } - - /// Admin can configure the buffer; new buffer is respected. - #[test] - fn test_set_min_funding_buffer_admin_can_change() { - let t = deploy(); - // Set buffer to 1 day - t.mp.set_min_funding_buffer(&t.admin, &86_400u64); - assert_eq!(t.mp.get_min_funding_buffer(), 86_400u64); - - // Now a listing with deadline = due_date - 2 days should be accepted - let id = mint_invoice(&t); - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - let deadline = due_date - 2 * 86_400; // 2 days > 1-day buffer - assert!(t.mp.try_list_invoice( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &deadline, - &None::
, - ).is_ok()); - } - - /// Non-admin cannot change the buffer. - #[test] - fn test_set_min_funding_buffer_non_admin_rejected() { - let t = deploy(); - let stranger = Address::generate(&t.env); - let result = t.mp.try_set_min_funding_buffer(&stranger, &86_400u64); - assert_eq!(result.unwrap_err().unwrap(), KoraError::NotAdmin); - } - - // ── Issue #439: Dutch auction / price decay ─────────────────────────────── - - /// list_invoice_with_decay stores a schedule and get_current_price returns start_price before decay begins. - #[test] - fn test_decay_schedule_price_before_decay_start() { - let t = deploy(); - let id = mint_invoice(&t); - let now = t.env.ledger().timestamp(); - let due_date = now + 86_400 * 60; - let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; - let decay_start = now + 86_400 * 5; // decay starts in 5 days - let decay_end = now + 86_400 * 25; // reaches floor in 25 days - - t.mp.list_invoice_with_decay( - &t.seller, - &id, - &10_000_000_000i128, // start price - &10_000_000_000i128, // face value - &t.token, - &funding_deadline, - &None::
, - &8_000_000_000i128, // floor price - &decay_start, - &decay_end, - ); - - // Before decay_start → price == start_price - let price = t.mp.get_current_price(&id); - assert_eq!(price, 10_000_000_000i128); - } - - /// Price at exactly the mid-point of the decay window is half-way between start and floor. - #[test] - fn test_decay_schedule_price_at_midpoint() { - let t = deploy(); - let id = mint_invoice(&t); - let now = t.env.ledger().timestamp(); - let due_date = now + 86_400 * 60; - let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; - let decay_start = now + 1_000; - let decay_end = now + 3_000; // 2000-second window - - t.mp.list_invoice_with_decay( - &t.seller, - &id, - &10_000_000_000i128, - &10_000_000_000i128, - &t.token, - &funding_deadline, - &None::
, - &8_000_000_000i128, // drop = 2_000_000_000 total - &decay_start, - &decay_end, - ); - - // Advance to exactly the mid-point of the window - t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { - timestamp: now + 2_000, // elapsed=1000 out of 2000 - protocol_version: 21, - sequence_number: 2, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - - // drop = 2_000_000_000 * 1000 / 2000 = 1_000_000_000 - // price = 10_000_000_000 - 1_000_000_000 = 9_000_000_000 - let price = t.mp.get_current_price(&id); - assert_eq!(price, 9_000_000_000i128); - } - - /// After decay_end the price equals the floor. - #[test] - fn test_decay_schedule_price_after_decay_end_is_floor() { - let t = deploy(); - let id = mint_invoice(&t); - let now = t.env.ledger().timestamp(); - let due_date = now + 86_400 * 60; - let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; - let decay_start = now + 100; - let decay_end = now + 200; - - t.mp.list_invoice_with_decay( - &t.seller, - &id, - &10_000_000_000i128, - &10_000_000_000i128, - &t.token, - &funding_deadline, - &None::
, - &7_000_000_000i128, - &decay_start, - &decay_end, - ); - - // Advance past decay_end - t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { - timestamp: now + 300, - protocol_version: 21, - sequence_number: 2, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - - let price = t.mp.get_current_price(&id); - assert_eq!(price, 7_000_000_000i128); - } - - /// A listing without a decay schedule returns asking_price unchanged (backward compat). - #[test] - fn test_no_decay_schedule_price_unchanged() { - let t = deploy(); - let id = list_one(&t); - let listing = t.mp.get_listing(&id); - let price = t.mp.get_current_price(&id); - assert_eq!(price, listing.asking_price); - } - - /// floor_price >= asking_price → rejected. - #[test] - fn test_decay_schedule_floor_gte_asking_rejected() { - let t = deploy(); - let id = mint_invoice(&t); - let now = t.env.ledger().timestamp(); - let due_date = now + 86_400 * 60; - let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; - let result = t.mp.try_list_invoice_with_decay( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &funding_deadline, - &None::
, - &9_500_000_000i128, // floor == asking → invalid - &(now + 100), - &(now + 200), - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - // ── Issue #440: Reverse-auction bidding ─────────────────────────────────── - - /// Helper: list an invoice in bidding mode. - fn list_with_bidding(t: &TestEnv, bidding_deadline: u64) -> u64 { - let id = mint_invoice(t); - let due_date = t.env.ledger().timestamp() + 86_400 * 60; - let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; - t.mp.list_invoice_with_bidding( - &t.seller, - &id, - &9_500_000_000i128, - &10_000_000_000i128, - &t.token, - &funding_deadline, - &None::
, - &bidding_deadline, - ); - id - } - - /// submit_bid succeeds during the bidding window and can be retrieved. - #[test] - fn test_submit_bid_success() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; // 7-day window - let id = list_with_bidding(&t, bid_deadline); - - let investor = Address::generate(&t.env); - assert!(t.mp.try_submit_bid( - &investor, - &id, - &9_000_000_000i128, // bid below asking price - &5_000_000_000i128, // amount - ).is_ok()); - - let bid = t.mp.get_bid(&id, &investor); - assert!(bid.is_some()); - let b = bid.unwrap(); - assert_eq!(b.bid_price, 9_000_000_000i128); - assert_eq!(b.amount, 5_000_000_000i128); - } - - /// submit_bid after the bidding window closes → BiddingWindowClosed. - #[test] - fn test_submit_bid_after_window_closed_rejected() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 100; - let id = list_with_bidding(&t, bid_deadline); - - // Advance past bidding deadline - t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { - timestamp: bid_deadline + 1, - protocol_version: 21, - sequence_number: 2, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - - let investor = Address::generate(&t.env); - let result = t.mp.try_submit_bid( - &investor, - &id, - &9_000_000_000i128, - &5_000_000_000i128, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowClosed); - } - - /// fund_invoice while bidding window is open → BiddingWindowActive. - #[test] - fn test_fund_invoice_during_bidding_window_rejected() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; - let id = list_with_bidding(&t, bid_deadline); - - let investor = Address::generate(&t.env); - let result = t.mp.try_fund_invoice(&investor, &id, &1_000_000i128); - assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowActive); - } - - /// Duplicate bid from same investor → BidAlreadyExists. - #[test] - fn test_submit_bid_duplicate_rejected() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; - let id = list_with_bidding(&t, bid_deadline); - - let investor = Address::generate(&t.env); - t.mp.submit_bid(&investor, &id, &9_000_000_000i128, &5_000_000_000i128); - let result = t.mp.try_submit_bid( - &investor, - &id, - &9_000_000_000i128, - &5_000_000_000i128, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::BidAlreadyExists); - } - - /// bid_price exceeds current_asking_price → InvalidAmount. - #[test] - fn test_submit_bid_price_above_asking_rejected() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; - let id = list_with_bidding(&t, bid_deadline); - - let investor = Address::generate(&t.env); - let result = t.mp.try_submit_bid( - &investor, - &id, - &9_500_000_001i128, // > asking_price - &5_000_000_000i128, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); - } - - /// accept_bids before bidding window closes → BiddingWindowActive. - #[test] - fn test_accept_bids_before_window_closes_rejected() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; - let id = list_with_bidding(&t, bid_deadline); - - let investor = Address::generate(&t.env); - t.mp.submit_bid(&investor, &id, &9_000_000_000i128, &5_000_000_000i128); - - let investors = soroban_sdk::vec![&t.env, investor.clone()]; - let result = t.mp.try_accept_bids(&t.seller, &id, &investors); - assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowActive); - } - - /// Non-seller/non-admin cannot accept bids. - #[test] - fn test_accept_bids_stranger_rejected() { - let t = deploy(); - let bid_deadline = t.env.ledger().timestamp() + 100; - let id = list_with_bidding(&t, bid_deadline); - - // Advance past bid deadline - t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { - timestamp: bid_deadline + 1, - protocol_version: 21, - sequence_number: 2, - network_id: Default::default(), - base_reserve: 10, - min_temp_entry_ttl: 1000, - min_persistent_entry_ttl: 1000, - max_entry_ttl: 100_000, - }); - - let stranger = Address::generate(&t.env); - let investors = soroban_sdk::vec![&t.env, stranger.clone()]; - let result = t.mp.try_accept_bids(&stranger, &id, &investors); - assert_eq!(result.unwrap_err().unwrap(), KoraError::Unauthorized); - } - - /// submit_bid on a non-bidding listing → BiddingWindowClosed. - #[test] - fn test_submit_bid_on_non_bidding_listing_rejected() { - let t = deploy(); - let id = list_one(&t); // standard listing (no bidding deadline) - let investor = Address::generate(&t.env); - let result = t.mp.try_submit_bid( - &investor, - &id, - &9_000_000_000i128, - &5_000_000_000i128, - ); - assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowClosed); - } -} +#![no_std] +#![no_std] +// Two-phase cancellation for partially-funded listings (issue #263) +// Dutch-auction price decay (#439) +// Reverse-auction bidding (#440) +// Funding deadline vs due-date guard (#441) + +use kora_shared::{ + errors::CommonError, + events, + reentrancy::ReentrancyGuard, + types::{Bid, DecaySchedule, Listing, RiskTier}, + validation::{bps_of_normalized, require_non_zero_amount, require_valid_fee_bps, require_within_max_amount, safe_add, safe_sub, UPGRADE_TIMELOCK_DELAY}, +}; +use soroban_sdk::{contract, contractimpl, contracttype, token, Address, BytesN, Env, Vec}; + types::{Listing, RiskTier}, + validation::{bps_of_normalized, require_non_zero_amount, require_valid_fee_bps, require_within_max_amount, safe_add, safe_sub, UPGRADE_TIMELOCK_DELAY}, + validation::{bps_of, bps_of_normalized, require_non_zero_amount, require_valid_fee_bps, require_within_max_amount, safe_add, safe_sub, UPGRADE_TIMELOCK_DELAY}, +}; +use soroban_sdk::{contract, contracterror, contractimpl, contracttype, token, Address, BytesN, Env}; + +// ~30 days in ledgers at ~5 s/ledger +const PERSISTENT_TTL_THRESHOLD: u32 = 518_400; +const PERSISTENT_TTL_BUMP: u32 = 518_400; + +/// Default minimum gap (in seconds) that must exist between a listing's +/// `funding_deadline` and the underlying invoice's `due_date` (#441). +/// Default: 3 days = 3 * 86_400 s. +pub const DEFAULT_MIN_FUNDING_BUFFER: u64 = 3 * 86_400; +#[contracterror] +#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] +#[repr(u32)] +pub enum MarketplaceError { + AlreadyInitialized = 1, + ArithmeticOverflow = 2, + CancellationPending = 3, + ComplianceNotAttested = 4, + ExceedsFundingTarget = 5, + FundingDeadlinePassed = 6, + FundingNotExpired = 7, + InvalidAddress = 8, + InvalidAmount = 9, + InvalidDueDate = 10, + InvalidFeeRate = 11, + InvoiceAlreadyExists = 12, + InvoiceFrozen = 13, + ListingAlreadyCancelled = 14, + ListingFullyFunded = 15, + ListingNotFound = 16, + NoCancellationPending = 17, + NoContribution = 18, + NoUpgradeProposed = 19, + NotAdmin = 20, + NotInitialized = 21, + ProtocolPaused = 22, + RefundAlreadyClaimed = 23, + TokenNotWhitelisted = 24, + Unauthorized = 25, + UpgradeTimelockNotElapsed = 26, +} + +impl From for MarketplaceError { + fn from(e: CommonError) -> Self { + match e { + CommonError::InvalidAmount => MarketplaceError::InvalidAmount, + CommonError::InvalidAddress => MarketplaceError::InvalidAddress, + CommonError::InvalidDueDate => MarketplaceError::InvalidDueDate, + CommonError::InvalidFeeRate => MarketplaceError::InvalidFeeRate, + CommonError::ArithmeticOverflow => MarketplaceError::ArithmeticOverflow, + _ => MarketplaceError::InvalidAmount, + } + } +} +/// Default minimum discount (face_value - asking_price) required to list an +/// invoice, in basis points of face_value. Admin-configurable via +/// `set_min_discount_bps`. See docs/marketplace.md. +const DEFAULT_MIN_DISCOUNT_BPS: u32 = 10; + +// ── Storage Keys ────────────────────────────────────────────────────────────── + +#[contracttype] +pub enum DataKey { + Config, + Admin, + InvoiceNft, + FinancingPool, + Treasury, + AccessControl, + FeeBps, + Listing(u64), + WhitelistedToken(Address), + UpgradeProposal, + /// Per-risk-tier fee override: TierFeeBps(ordinal) where AAA=0, AA=1, A=2, B=3, C=4 (#210) + TierFeeBps(u32), + /// Per-investor net contribution for refunds + Contribution(u64, Address), + /// Refund claimed flag + RefundClaimed(u64, Address), + /// Referrer credited on a listing, if any (#issue referral-fee-split) + Referrer(u64), + /// Pending two-phase cancellation request, storing who requested it (#263) + CancellationRequest(u64), + /// Set once admin confirms a two-phase cancellation, unlocking claim_refund (#263) + CancellationConfirmed(u64), + /// Legacy individual risk_registry key (never written; present only so + /// load_config's legacy migration path can look it up and fail cleanly). + RiskRegistry, + /// Referrer address recorded at listing time, if any. + Referrer(u64), + /// Pending two-phase cancellation request (who requested it). + CancellationRequest(u64), + /// Marks a listing's cancellation as admin-confirmed, unblocking refunds. + CancellationConfirmed(u64), + /// Minimum discount (bps of face_value) required to list an invoice. + MinDiscountBps, +} + +// ── Config struct ───────────────────────────────────────────────────────────── + +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MarketplaceConfig { + pub admin: Address, + pub invoice_nft: Address, + pub financing_pool: Address, + pub treasury: Address, + pub access_control: Address, + pub risk_registry: Address, + pub fee_bps: u32, + /// Fraction of the collected fee that goes to the referrer (0 = no split). + pub referrer_split_bps: u32, +} + +// ── Contract ────────────────────────────────────────────────────────────────── + +#[contract] +pub struct MarketplaceContract; + +#[contractimpl] +impl MarketplaceContract { + /// Initialize the marketplace. One-time call. + pub fn initialize( + env: Env, + admin: Address, + invoice_nft: Address, + financing_pool: Address, + treasury: Address, + access_control: Address, + risk_registry: Address, + fee_bps: u32, + ) -> Result<(), MarketplaceError> { + if env.storage().instance().has(&DataKey::Config) { + return Err(MarketplaceError::AlreadyInitialized); + } + require_valid_fee_bps(fee_bps)?; + // Write the consolidated Config entry first so that every subsequent + // load_config call resolves in a single storage lookup. + // Referrer splits are disabled at init and opted into later via + // set_referrer_split_bps — kept out of the constructor to avoid + // widening every deployment call site for a rarely-used feature. + let referrer_split_bps: u32 = 0; + env.storage().instance().set(&DataKey::Admin, &admin); + env.storage().instance().set(&DataKey::InvoiceNft, &invoice_nft); + env.storage().instance().set(&DataKey::FinancingPool, &financing_pool); + env.storage().instance().set(&DataKey::Treasury, &treasury); + env.storage().instance().set(&DataKey::FeeBps, &fee_bps); + env.storage().instance().set(&DataKey::AccessControl, &access_control); + let config = MarketplaceConfig { + admin: admin.clone(), + invoice_nft: invoice_nft.clone(), + financing_pool: financing_pool.clone(), + treasury: treasury.clone(), + access_control: access_control.clone(), + risk_registry: risk_registry.clone(), + fee_bps, + referrer_split_bps: 0, + }; + env.storage().instance().set(&DataKey::Config, &config); + // Also write the individual keys so that require_not_paused (which reads + // DataKey::AccessControl directly for efficiency) can find the address. + env.storage().instance().set(&DataKey::AccessControl, &access_control); + Ok(()) + } + + /// Set the minimum funding-to-due-date buffer in seconds. Admin only. (#441) + /// Defaults to DEFAULT_MIN_FUNDING_BUFFER (3 days) if never explicitly set. + pub fn set_min_funding_buffer( + env: Env, + admin: Address, + buffer_seconds: u64, + ) -> Result<(), KoraError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(KoraError::NotAdmin); + } + env.storage() + .instance() + .set(&DataKey::MinFundingBuffer, &buffer_seconds); + Ok(()) + } + + /// Returns the current minimum funding buffer in seconds. (#441) + pub fn get_min_funding_buffer(env: Env) -> u64 { + env.storage() + .instance() + .get(&DataKey::MinFundingBuffer) + .unwrap_or(DEFAULT_MIN_FUNDING_BUFFER) + } + + /// Update the referrer split fraction. Admin only. + pub fn set_referrer_split_bps(env: Env, admin: Address, referrer_split_bps: u32) -> Result<(), MarketplaceError> { + admin.require_auth(); + let mut config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + require_valid_fee_bps(referrer_split_bps)?; + config.referrer_split_bps = referrer_split_bps; + env.storage().instance().set(&DataKey::Config, &config); + Ok(()) + } + + /// Update the marketplace fee. Admin only. + pub fn set_fee_bps(env: Env, admin: Address, fee_bps: u32) -> Result<(), MarketplaceError> { + admin.require_auth(); + let mut config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + require_valid_fee_bps(fee_bps)?; + let old_bps = config.fee_bps; + config.fee_bps = fee_bps; + env.storage().instance().set(&DataKey::Config, &config); + events::fee_rate_updated(&env, &admin, old_bps, fee_bps); + Ok(()) + } + + /// Alias for set_fee_bps — backwards compatibility. + pub fn update_fee_bps(env: Env, admin: Address, fee_bps: u32) -> Result<(), MarketplaceError> { + Self::set_fee_bps(env, admin, fee_bps) + } + + /// Returns the current fee in basis points. + pub fn get_fee_bps(env: Env) -> Result { + Ok(Self::load_config(&env)?.fee_bps) + } + + /// Update the minimum required discount (face_value - asking_price), in + /// basis points of face_value, that a listing must offer. Admin only. + /// + /// **Errors:** + /// - `KoraError::NotAdmin` — Caller is not the admin. + /// - `KoraError::InvalidFeeRate` — `min_discount_bps` > 10 000. + pub fn set_min_discount_bps(env: Env, admin: Address, min_discount_bps: u32) -> Result<(), KoraError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(KoraError::NotAdmin); + } + require_valid_fee_bps(min_discount_bps)?; + env.storage().instance().set(&DataKey::MinDiscountBps, &min_discount_bps); + Ok(()) + } + + /// Returns the current minimum discount requirement in basis points. + pub fn get_min_discount_bps(env: Env) -> u32 { + env.storage() + .instance() + .get(&DataKey::MinDiscountBps) + .unwrap_or(DEFAULT_MIN_DISCOUNT_BPS) + } + + /// Set a per-risk-tier fee override. Admin only. (#210) + pub fn set_tier_fee_bps( + env: Env, + admin: Address, + tier: RiskTier, + fee_bps: u32, + ) -> Result<(), MarketplaceError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + require_valid_fee_bps(fee_bps)?; + env.storage().instance().set(&DataKey::TierFeeBps(Self::tier_ordinal(&tier)), &fee_bps); + Ok(()) + } + + /// Get the fee for a specific risk tier (falls back to flat fee if no override). (#210) + pub fn get_tier_fee_bps(env: Env, tier: RiskTier) -> Result { + let ordinal = Self::tier_ordinal(&tier); + Ok(env.storage().instance() + .get(&DataKey::TierFeeBps(ordinal)) + .unwrap_or_else(|| Self::load_config(&env).map(|c| c.fee_bps).unwrap_or(50))) + } + + /// Returns the full config struct. + pub fn get_config(env: Env) -> Result { + Self::load_config(&env) + } + + /// Returns the admin address. + pub fn get_admin(env: Env) -> Result { + Ok(Self::load_config(&env)?.admin) + } + + /// Whitelist a stablecoin token. Admin only. + pub fn whitelist_token(env: Env, admin: Address, token: Address) -> Result<(), MarketplaceError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + env.storage() + .persistent() + .set(&DataKey::WhitelistedToken(token.clone()), &true); + Self::bump_persistent(&env, &DataKey::WhitelistedToken(token.clone())); + events::token_whitelisted(&env, &admin, &token); + Ok(()) + } + + /// Remove a token from the whitelist. Admin only. + pub fn remove_token_whitelist( + env: Env, + admin: Address, + token: Address, + ) -> Result<(), MarketplaceError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + if !env + .storage() + .persistent() + .get::<_, bool>(&DataKey::WhitelistedToken(token.clone())) + .unwrap_or(false) + { + return Err(MarketplaceError::TokenNotWhitelisted); + } + env.storage() + .persistent() + .remove(&DataKey::WhitelistedToken(token.clone())); + events::token_whitelist_removed(&env, &admin, &token); + Ok(()) + } + + /// Returns whether a token is whitelisted. + pub fn is_token_whitelisted(env: Env, token: Address) -> bool { + env.storage() + .persistent() + .get(&DataKey::WhitelistedToken(token)) + .unwrap_or(false) + } + + /// SME lists an invoice NFT for financing. + /// An optional `referrer` address may be provided to credit a referring verifier + /// with a portion of the protocol fee collected on each investor contribution. + /// An optional `bidding_deadline` puts the listing into reverse-auction mode (#440). + pub fn list_invoice( + env: Env, + seller: Address, + invoice_id: u64, + asking_price: i128, + face_value: i128, + token: Address, + funding_deadline: u64, + referrer: Option
, + ) -> Result<(), KoraError> { + Self::list_invoice_inner( + env, + seller, + invoice_id, + asking_price, + face_value, + token, + funding_deadline, + referrer, + None, // no bidding deadline + None, // no decay schedule + ) + } + + /// List an invoice with an optional Dutch-auction decay schedule (#439). + /// + /// `min_asking_price` is the floor price (must be > 0 and < asking_price). + /// `decay_start_ts` is when price starts decaying (must be >= now). + /// `decay_end_ts` is when price reaches the floor (must be <= funding_deadline). + pub fn list_invoice_with_decay( + env: Env, + seller: Address, + invoice_id: u64, + asking_price: i128, + face_value: i128, + token: Address, + funding_deadline: u64, + referrer: Option
, + min_asking_price: i128, + decay_start_ts: u64, + decay_end_ts: u64, + ) -> Result<(), KoraError> { + // Validate decay schedule parameters + require_non_zero_amount(min_asking_price)?; + if min_asking_price >= asking_price { + return Err(KoraError::InvalidAmount); + } + if decay_start_ts >= decay_end_ts { + return Err(KoraError::InvalidDueDate); + } + if decay_end_ts > funding_deadline { + return Err(KoraError::InvalidDueDate); + } + + let schedule = DecaySchedule { + start_price: asking_price, + floor_price: min_asking_price, + decay_start_ts, + decay_end_ts, + }; + + Self::list_invoice_inner( + env, + seller, + invoice_id, + asking_price, + face_value, + token, + funding_deadline, + referrer, + None, + Some(schedule), + ) + } + + /// List an invoice in reverse-auction (bidding) mode (#440). + /// + /// `bidding_deadline` must be before `funding_deadline`. + /// Direct `fund_invoice` calls are disabled while the bidding window is open. + pub fn list_invoice_with_bidding( + env: Env, + seller: Address, + invoice_id: u64, + asking_price: i128, + face_value: i128, + token: Address, + funding_deadline: u64, + referrer: Option
, + bidding_deadline: u64, + ) -> Result<(), KoraError> { + if bidding_deadline >= funding_deadline { + return Err(KoraError::InvalidDueDate); + } + kora_shared::validation::require_future_timestamp(&env, bidding_deadline)?; + + Self::list_invoice_inner( + env, + seller, + invoice_id, + asking_price, + face_value, + token, + funding_deadline, + referrer, + Some(bidding_deadline), + None, + ) + } + + /// Internal implementation shared by all list_invoice variants. + fn list_invoice_inner( + env: Env, + seller: Address, + invoice_id: u64, + asking_price: i128, + face_value: i128, + token: Address, + funding_deadline: u64, + referrer: Option
, + bidding_deadline: Option, + decay_schedule: Option, + ) -> Result<(), KoraError> { + ) -> Result<(), MarketplaceError> { + seller.require_auth(); + Self::require_not_paused(&env)?; + + require_non_zero_amount(asking_price)?; + require_non_zero_amount(face_value)?; + require_within_max_amount(asking_price)?; + require_within_max_amount(face_value)?; + + // asking_price must be strictly less than face_value (discount must exist) + if asking_price >= face_value { + return Err(MarketplaceError::InvalidAmount); + } + + // Enforce a minimum discount so listings offer investors meaningful yield. + let min_discount_bps = Self::get_min_discount_bps(env.clone()); + let min_discount = bps_of(face_value, min_discount_bps)?; + let discount = face_value + .checked_sub(asking_price) + .ok_or(KoraError::ArithmeticOverflow)?; + if discount < min_discount { + return Err(KoraError::InvalidAmount); + } + + Self::require_whitelisted_token(&env, &token)?; + Self::require_compliance_attested(&env, &seller)?; + + // Reject if an active listing already exists for this invoice. + // A cancelled listing (is_active == false) does not block re-listing. + if let Some(existing) = env + .storage() + .persistent() + .get::<_, Listing>(&DataKey::Listing(invoice_id)) + { + if existing.is_active { + return Err(MarketplaceError::InvoiceAlreadyExists); + } + } + + let _guard = ReentrancyGuard::new(&env)?; + + let config = Self::load_config(&env)?; + + // ── #441: Fetch invoice BEFORE deadline validation so we can cross-check ── + let nft_client = + kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); + let invoice = nft_client.get_invoice(&invoice_id); + + if invoice.amount != face_value { + return Err(KoraError::InvalidAmount); + } + + // ── #441: Validate funding_deadline is in the future ────────────────── + kora_shared::validation::require_future_timestamp(&env, funding_deadline)?; + + // ── #441: funding_deadline must be at least `min_buffer` seconds before + // the invoice's due_date ────────────────────────────────────── + let min_buffer: u64 = env + .storage() + .instance() + .get(&DataKey::MinFundingBuffer) + .unwrap_or(DEFAULT_MIN_FUNDING_BUFFER); + + let deadline_with_buffer = funding_deadline + .checked_add(min_buffer) + .ok_or(KoraError::ArithmeticOverflow)?; + + if deadline_with_buffer > invoice.due_date { + return Err(KoraError::FundingDeadlineTooCloseToDueDate); + } + + // Referrer may not be the seller (self-referral) + if let Some(ref r) = referrer { + if r == &seller { + return Err(MarketplaceError::InvalidAddress); + } + env.storage() + .persistent() + .set(&DataKey::Referrer(invoice_id), r); + Self::bump_persistent(&env, &DataKey::Referrer(invoice_id)); + } + + nft_client.set_listed(&env.current_contract_address(), &invoice_id); + + // ── #439: Store decay schedule if provided ──────────────────────────── + if let Some(ref schedule) = decay_schedule { + env.storage() + .persistent() + .set(&DataKey::DecaySchedule(invoice_id), schedule); + Self::bump_persistent(&env, &DataKey::DecaySchedule(invoice_id)); + events::decay_schedule_set( + &env, + invoice_id, + &seller, + schedule.floor_price, + schedule.decay_end_ts, + ); + let invoice = nft_client.get_invoice(&invoice_id); + if invoice.amount != face_value { + return Err(MarketplaceError::InvalidAmount); + } + + let listing = Listing { + invoice_id, + seller: seller.clone(), + asking_price, + face_value, + token, + funded_amount: 0, + funding_deadline, + is_active: true, + bidding_deadline, + }; + env.storage() + .persistent() + .set(&DataKey::Listing(invoice_id), &listing); + Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); + events::invoice_listed(&env, invoice_id, &seller, asking_price); + Ok(()) + } + + /// Investor funds a share of an invoice. + /// Rejected when the listing is in bidding mode and the bidding window is still open (#440). + /// Uses the time-adjusted price from the decay schedule when active (#439). + pub fn fund_invoice( + env: Env, + investor: Address, + invoice_id: u64, + amount: i128, + ) -> Result<(), MarketplaceError> { + investor.require_auth(); + Self::require_not_paused(&env)?; + + require_non_zero_amount(amount)?; + require_within_max_amount(amount)?; + + let mut listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(MarketplaceError::ListingNotFound)?; + + if !listing.is_active { + return Err(MarketplaceError::ListingAlreadyCancelled); + } + if env.ledger().timestamp() > listing.funding_deadline { + return Err(MarketplaceError::FundingDeadlinePassed); + } + + // ── #440: Reject direct funding while bidding window is open ────────── + if let Some(bid_dl) = listing.bidding_deadline { + if env.ledger().timestamp() <= bid_dl { + return Err(KoraError::BiddingWindowActive); + } + } + + // ── #439: Use the time-adjusted price (Dutch auction) ───────────────── + let effective_price = Self::current_asking_price_impl(&env, &listing); + let remaining = safe_sub(effective_price, listing.funded_amount)?; + if amount > remaining { + return Err(MarketplaceError::ExceedsFundingTarget); + } + + let config = Self::load_config(&env)?; + + // Check per-invoice freeze before any token operations. + // Enforced in addition to the protocol-wide pause so a single disputed + // invoice can be frozen without halting all protocol activity. + let nft_client = kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); + if nft_client.is_invoice_frozen(&invoice_id) { + return Err(MarketplaceError::InvoiceFrozen); + } + + let token_client = token::Client::new(&env, &listing.token); + let token_decimals = token_client.decimals(); + + // Fetch the invoice's risk tier and apply tier-specific fee (#210) + let invoice = nft_client.get_invoice(&invoice_id); + let effective_fee_bps: u32 = env.storage().instance() + .get(&DataKey::TierFeeBps(Self::tier_ordinal(&invoice.risk_tier))) + .unwrap_or(config.fee_bps); + + let fee = bps_of_normalized(amount, effective_fee_bps, token_decimals)?; + let net = amount + .checked_sub(fee) + .ok_or(MarketplaceError::ArithmeticOverflow)?; + + // Split fee between referrer and treasury + if fee > 0 { + token_client.transfer(&investor, &config.treasury, &fee); + // Record the collected fee in treasury's on-chain accounting (#208) + let treasury_client = kora_treasury::TreasuryContractClient::new(&env, &config.treasury); + treasury_client.collect_fee(&listing.token, &fee); + } + // Transfer net contribution to financing pool + if net > 0 { + token_client.transfer(&investor, &config.financing_pool, &net); + } + + listing.funded_amount = safe_add(listing.funded_amount, amount)?; + + // Track per-investor net contribution for potential refund + let contrib_key = DataKey::Contribution(invoice_id, investor.clone()); + let prev_contrib: i128 = env + .storage() + .persistent() + .get(&contrib_key) + .unwrap_or(0); + env.storage() + .persistent() + .set(&contrib_key, &safe_add(prev_contrib, net)?); + + // Fully funded when funded_amount reaches the current effective price + let fully_funded = listing.funded_amount >= effective_price; + if fully_funded { + listing.is_active = false; + } + + env.storage() + .persistent() + .set(&DataKey::Listing(invoice_id), &listing); + Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); + + events::invoice_funded(&env, invoice_id, &investor, amount); + if fee > 0 { + events::fee_collected(&env, &investor, invoice_id, fee, &listing.token); + } + + if fully_funded { + let pool_client = kora_financing_pool::FinancingPoolContractClient::new( + &env, + &config.financing_pool, + ); + pool_client.release_funds( + &env.current_contract_address(), + &invoice_id, + &listing.token, + ); + } + + Ok(()) + } + + /// Cancel a listing. Caller must be seller or admin. + /// Works for listings with no investor funding (funded_amount == 0). + /// For partially-funded listings prefer `request_cancellation` + `admin_confirm_cancellation`. + pub fn cancel_listing(env: Env, caller: Address, invoice_id: u64) -> Result<(), MarketplaceError> { + caller.require_auth(); + + let mut listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(MarketplaceError::ListingNotFound)?; + + if !listing.is_active { + return Err(MarketplaceError::ListingAlreadyCancelled); + } + + let config = Self::load_config(&env)?; + if caller != listing.seller && caller != config.admin { + return Err(MarketplaceError::Unauthorized); + } + + listing.is_active = false; + env.storage() + .persistent() + .set(&DataKey::Listing(invoice_id), &listing); + Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); + + // Revert the NFT status from Listed → Created so the SME can re-list. + let nft_client = + kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); + nft_client.set_created(&env.current_contract_address(), &invoice_id); + + events::listing_cancelled(&env, invoice_id, &listing.seller); + Ok(()) + } + + // ── Two-phase cancellation (issue #263) ─────────────────────────────────── + + /// Phase 1 — request cancellation of a partially-funded listing. + /// + /// Caller must be the listing seller or the admin. + /// * If `funded_amount == 0` the listing is cancelled immediately (no two-phase needed). + /// * If `funded_amount > 0 && funded_amount < asking_price` a + /// `CancellationRequest` is stored for admin to confirm. + /// Returns `Err(CancellationPending)` if a request already exists. + pub fn request_cancellation( + env: Env, + caller: Address, + invoice_id: u64, + ) -> Result<(), MarketplaceError> { + caller.require_auth(); + + let mut listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(MarketplaceError::ListingNotFound)?; + + if !listing.is_active { + return Err(MarketplaceError::ListingAlreadyCancelled); + } + + let config = Self::load_config(&env)?; + if caller != listing.seller && caller != config.admin { + return Err(MarketplaceError::Unauthorized); + } + + // If no partial funding, cancel immediately — no two-phase needed + if listing.funded_amount == 0 { + listing.is_active = false; + env.storage() + .persistent() + .set(&DataKey::Listing(invoice_id), &listing); + Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); + + // Revert NFT status from Listed → Created so the SME can re-list. + let nft_client = + kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); + nft_client.set_created(&env.current_contract_address(), &invoice_id); + + events::listing_cancelled(&env, invoice_id, &listing.seller); + return Ok(()); + } + + // Guard against duplicate requests + if env + .storage() + .persistent() + .has(&DataKey::CancellationRequest(invoice_id)) + { + return Err(MarketplaceError::CancellationPending); + } + + // Store the cancellation request (who requested it) + env.storage() + .persistent() + .set(&DataKey::CancellationRequest(invoice_id), &caller); + Self::bump_persistent(&env, &DataKey::CancellationRequest(invoice_id)); + + events::cancellation_requested(&env, invoice_id, &caller); + Ok(()) + } + + /// Phase 2 — admin confirms a pending cancellation. + /// + /// * Requires a prior `CancellationRequest` to exist. + /// * Sets `listing.is_active = false`. + /// * Sets `CancellationConfirmed(invoice_id) = true` so investors can call + /// `claim_refund` without waiting for the funding deadline. + pub fn admin_confirm_cancellation( + env: Env, + admin: Address, + invoice_id: u64, + ) -> Result<(), MarketplaceError> { + admin.require_auth(); + + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + + // A pending cancellation request must exist + if !env + .storage() + .persistent() + .has(&DataKey::CancellationRequest(invoice_id)) + { + return Err(MarketplaceError::NoCancellationPending); + } + + let mut listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(MarketplaceError::ListingNotFound)?; + + if !listing.is_active { + return Err(MarketplaceError::ListingAlreadyCancelled); + } + + // Mark listing as inactive + listing.is_active = false; + env.storage() + .persistent() + .set(&DataKey::Listing(invoice_id), &listing); + Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); + + // Consume the pending request + env.storage() + .persistent() + .remove(&DataKey::CancellationRequest(invoice_id)); + + // Enable investor refunds via the existing claim_refund path + env.storage() + .persistent() + .set(&DataKey::CancellationConfirmed(invoice_id), &true); + Self::bump_persistent(&env, &DataKey::CancellationConfirmed(invoice_id)); + + // Revert NFT status from Listed → Created so the SME can re-list. + let nft_client = + kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); + nft_client.set_created(&env.current_contract_address(), &invoice_id); + + events::listing_cancelled(&env, invoice_id, &listing.seller); + Ok(()) + } + + // ───────────────────────────────────────────────────────────────────────── + + /// Claim a refund for a listing that expired without reaching full funding, + /// or whose cancellation was confirmed by the admin via the two-phase flow. + /// + /// The investor gets back the net amount (after fee) sent to the financing pool. + /// Fees already collected by the treasury are NOT refunded. + pub fn claim_refund( + env: Env, + investor: Address, + invoice_id: u64, + ) -> Result<(), MarketplaceError> { + investor.require_auth(); + + let listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(MarketplaceError::ListingNotFound)?; + + // Refund only if the listing never reached full funding + if listing.funded_amount >= listing.asking_price { + return Err(MarketplaceError::ListingFullyFunded); + } + + // Refund is allowed when the cancellation was confirmed OR the deadline passed + let cancellation_confirmed = env + .storage() + .persistent() + .get::<_, bool>(&DataKey::CancellationConfirmed(invoice_id)) + .unwrap_or(false); + + if !cancellation_confirmed && env.ledger().timestamp() <= listing.funding_deadline { + return Err(MarketplaceError::FundingNotExpired); + } + + // Guard: investor hasn't already claimed + let refund_key = DataKey::RefundClaimed(invoice_id, investor.clone()); + if env + .storage() + .persistent() + .get::<_, bool>(&refund_key) + .unwrap_or(false) + { + return Err(MarketplaceError::RefundAlreadyClaimed); + } + + // Look up the investor's net contribution + let contrib_key = DataKey::Contribution(invoice_id, investor.clone()); + let net_contributed: i128 = env + .storage() + .persistent() + .get(&contrib_key) + .unwrap_or(0); + + if net_contributed <= 0 { + return Err(MarketplaceError::NoContribution); + } + + // CEI: mark before external call + env.storage().persistent().set(&refund_key, &true); + + // Transfer net contribution back from financing pool to investor + let config = Self::load_config(&env)?; + let token_client = token::Client::new(&env, &listing.token); + token_client.transfer(&config.financing_pool, &investor, &net_contributed); + + events::refund_claimed(&env, invoice_id, &investor, net_contributed); + Ok(()) + } + + /// Get a listing by invoice_id. + pub fn get_listing(env: Env, invoice_id: u64) -> Result { + env.storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(KoraError::ListingNotFound) + } + + // ── Dutch Auction / Price Decay (#439) ──────────────────────────────────── + + /// View: returns the current effective asking price for a listing. + /// + /// If no decay schedule is set, returns `listing.asking_price` unchanged. + /// If a schedule is active, performs linear interpolation between + /// `start_price` and `floor_price` based on the current ledger timestamp. + pub fn get_current_price(env: Env, invoice_id: u64) -> Result { + let listing: Listing = env + .ok_or(MarketplaceError::ListingNotFound) + pub fn get_listing(env: Env, invoice_id: u64) -> Result { + let listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(KoraError::ListingNotFound)?; + Ok(Self::current_asking_price_impl(&env, &listing)) + } + + /// View: returns the decay schedule for a listing, if one is set. + pub fn get_decay_schedule( + env: Env, + invoice_id: u64, + ) -> Option { + env.storage() + .persistent() + .get(&DataKey::DecaySchedule(invoice_id)) + } + + // ── Reverse Auction / Bid submission (#440) ─────────────────────────────── + + /// Investor submits a bid on a reverse-auction listing. + /// + /// - The listing must have a `bidding_deadline` set. + /// - Current ledger time must be <= `bidding_deadline`. + /// - `bid_price` must be <= current_asking_price and > 0. + /// - `amount` must be > 0 and <= face_value. + /// - Each investor may have at most one active bid per listing. + pub fn submit_bid( + env: Env, + investor: Address, + invoice_id: u64, + bid_price: i128, + amount: i128, + ) -> Result<(), KoraError> { + investor.require_auth(); + Self::require_not_paused(&env)?; + + require_non_zero_amount(bid_price)?; + require_non_zero_amount(amount)?; + require_within_max_amount(bid_price)?; + require_within_max_amount(amount)?; + + let listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(KoraError::ListingNotFound)?; + + if !listing.is_active { + return Err(KoraError::ListingAlreadyCancelled); + } + + // Must be in bidding mode + let bidding_deadline = listing + .bidding_deadline + .ok_or(KoraError::BiddingWindowClosed)?; + + // Must be inside the bidding window + if env.ledger().timestamp() > bidding_deadline { + return Err(KoraError::BiddingWindowClosed); + } + + // bid_price must not exceed the current effective asking price + let current_price = Self::current_asking_price_impl(&env, &listing); + if bid_price > current_price { + return Err(KoraError::InvalidAmount); + } + + // amount must not exceed the face_value + if amount > listing.face_value { + return Err(KoraError::ExceedsFundingTarget); + } + + // One bid per investor per listing + let bid_key = DataKey::Bid(invoice_id, investor.clone()); + if env.storage().persistent().has(&bid_key) { + return Err(KoraError::BidAlreadyExists); + } + + let bid = Bid { + investor: investor.clone(), + invoice_id, + bid_price, + amount, + submitted_at: env.ledger().timestamp(), + }; + + env.storage().persistent().set(&bid_key, &bid); + Self::bump_persistent(&env, &bid_key); + + events::bid_submitted(&env, invoice_id, &investor, bid_price, amount); + Ok(()) + } + + /// Seller accepts one or more winning bids after the bidding window closes (#440). + /// + /// `bid_investors` is the ordered list of investors whose bids the seller accepts. + /// Accepted bids are settled through the same fee/transfer/pool-release pipeline + /// as `fund_invoice`. Acceptance stops once the listing is fully funded. + /// + /// Rules: + /// - Caller must be the listing seller or admin. + /// - `bidding_deadline` must have passed. + /// - Each accepted bid must exist. + /// - Total accepted `amount` must not exceed remaining capacity. + pub fn accept_bids( + env: Env, + caller: Address, + invoice_id: u64, + bid_investors: Vec
, + ) -> Result<(), KoraError> { + caller.require_auth(); + Self::require_not_paused(&env)?; + + let mut listing: Listing = env + .storage() + .persistent() + .get(&DataKey::Listing(invoice_id)) + .ok_or(KoraError::ListingNotFound)?; + + if !listing.is_active { + return Err(KoraError::ListingAlreadyCancelled); + } + + let config = Self::load_config(&env)?; + + // Only seller or admin may accept bids + if caller != listing.seller && caller != config.admin { + return Err(KoraError::Unauthorized); + } + + // Must be in bidding mode and bidding window must have closed + let bidding_deadline = listing + .bidding_deadline + .ok_or(KoraError::BiddingWindowClosed)?; + + if env.ledger().timestamp() <= bidding_deadline { + return Err(KoraError::BiddingWindowActive); + } + + let nft_client = + kora_invoice_nft::InvoiceNftContractClient::new(&env, &config.invoice_nft); + if nft_client.is_invoice_frozen(&invoice_id) { + return Err(KoraError::InvoiceFrozen); + } + + let token_client = token::Client::new(&env, &listing.token); + let token_decimals = token_client.decimals(); + + let invoice = nft_client.get_invoice(&invoice_id); + let effective_fee_bps: u32 = env + .storage() + .instance() + .get(&DataKey::TierFeeBps(Self::tier_ordinal(&invoice.risk_tier))) + .unwrap_or(config.fee_bps); + + let effective_price = Self::current_asking_price_impl(&env, &listing); + + for investor in bid_investors.iter() { + // Stop once fully funded + if listing.funded_amount >= effective_price { + break; + } + + let bid_key = DataKey::Bid(invoice_id, investor.clone()); + let bid: Bid = env + .storage() + .persistent() + .get(&bid_key) + .ok_or(KoraError::BidNotFound)?; + + let remaining = safe_sub(effective_price, listing.funded_amount)?; + // Accept the smaller of bid.amount and remaining capacity + let accept_amount = if bid.amount > remaining { + remaining + } else { + bid.amount + }; + + let fee = bps_of_normalized(accept_amount, effective_fee_bps, token_decimals)?; + let net = accept_amount + .checked_sub(fee) + .ok_or(KoraError::ArithmeticOverflow)?; + + if fee > 0 { + token_client.transfer(&investor, &config.treasury, &fee); + let treasury_client = + kora_treasury::TreasuryContractClient::new(&env, &config.treasury); + treasury_client.collect_fee(&listing.token, &fee); + } + if net > 0 { + token_client.transfer(&investor, &config.financing_pool, &net); + } + + listing.funded_amount = safe_add(listing.funded_amount, accept_amount)?; + + // Track per-investor net contribution for potential refund + let contrib_key = DataKey::Contribution(invoice_id, investor.clone()); + let prev_contrib: i128 = env + .storage() + .persistent() + .get(&contrib_key) + .unwrap_or(0); + env.storage() + .persistent() + .set(&contrib_key, &safe_add(prev_contrib, net)?); + + // Consume the bid + env.storage().persistent().remove(&bid_key); + + events::invoice_funded(&env, invoice_id, &investor, accept_amount); + events::bid_accepted( + &env, + invoice_id, + &listing.seller, + &investor, + bid.bid_price, + accept_amount, + ); + if fee > 0 { + events::fee_collected(&env, &investor, invoice_id, fee, &listing.token); + } + } + + let fully_funded = listing.funded_amount >= effective_price; + if fully_funded { + listing.is_active = false; + } + + env.storage() + .persistent() + .set(&DataKey::Listing(invoice_id), &listing); + Self::bump_persistent(&env, &DataKey::Listing(invoice_id)); + + if fully_funded { + let pool_client = kora_financing_pool::FinancingPoolContractClient::new( + &env, + &config.financing_pool, + ); + pool_client.release_funds( + &env.current_contract_address(), + &invoice_id, + &listing.token, + ); + } + + Ok(()) + } + + /// Returns the bid submitted by `investor` for `invoice_id`, if any. + pub fn get_bid(env: Env, invoice_id: u64, investor: Address) -> Option { + env.storage() + .persistent() + .get(&DataKey::Bid(invoice_id, investor)) + Self::bump_listing(&env, invoice_id); + Ok(listing) + } + + // ── Helpers ─────────────────────────────────────────────────────────────── + + fn require_compliance_attested(env: &Env, sme: &Address) -> Result<(), MarketplaceError> { + let config = Self::load_config(env)?; + let rr = kora_risk_registry::RiskRegistryContractClient::new(env, &config.risk_registry); + if !rr.is_compliance_attested(sme) { + return Err(MarketplaceError::ComplianceNotAttested); + } + Ok(()) + } + + fn require_whitelisted_token(env: &Env, token: &Address) -> Result<(), MarketplaceError> { + let ok: bool = env + .storage() + .persistent() + .get(&DataKey::WhitelistedToken(token.clone())) + .unwrap_or(false); + if !ok { + return Err(MarketplaceError::TokenNotWhitelisted); + } + Ok(()) + } + + /// Compute the current effective asking price for a listing (#439). + /// + /// - If no `DecaySchedule` is stored for the listing, returns `listing.asking_price`. + /// - If now < `decay_start_ts`: returns `start_price`. + /// - If now > `decay_end_ts`: returns `floor_price`. + /// - Otherwise: linear interpolation between `start_price` and `floor_price`. + /// + /// Formula (integer, rounds toward floor): + /// ```text + /// elapsed = now - decay_start_ts + /// duration = decay_end_ts - decay_start_ts + /// drop = (start_price - floor_price) * elapsed / duration + /// price = start_price - drop + /// ``` + fn current_asking_price_impl(env: &Env, listing: &Listing) -> i128 { + let schedule: Option = env + .storage() + .persistent() + .get(&DataKey::DecaySchedule(listing.invoice_id)); + + let schedule = match schedule { + None => return listing.asking_price, + Some(s) => s, + }; + + let now = env.ledger().timestamp(); + + if now <= schedule.decay_start_ts { + return schedule.start_price; + } + if now >= schedule.decay_end_ts { + return schedule.floor_price; + } + + // Linear interpolation (integer arithmetic, truncates toward floor) + let elapsed = (now - schedule.decay_start_ts) as i128; + let duration = (schedule.decay_end_ts - schedule.decay_start_ts) as i128; + let price_drop = (schedule.start_price - schedule.floor_price) + .checked_mul(elapsed) + .unwrap_or(schedule.start_price - schedule.floor_price) + / duration; + + schedule.start_price - price_drop + } + + // ── Upgrade ──────────────────────────────────────────────────────────────── + + pub fn propose_upgrade( + env: Env, + admin: Address, + new_wasm_hash: BytesN<32>, + ) -> Result<(), MarketplaceError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + env.storage().instance().set( + &DataKey::UpgradeProposal, + &(new_wasm_hash.clone(), env.ledger().timestamp()), + ); + events::upgrade_proposed(&env, &admin, &new_wasm_hash); + Ok(()) + } + + pub fn execute_upgrade(env: Env, admin: Address) -> Result<(), MarketplaceError> { + admin.require_auth(); + let config = Self::load_config(&env)?; + if config.admin != admin { + return Err(MarketplaceError::NotAdmin); + } + let (wasm_hash, proposed_at): (BytesN<32>, u64) = env + .storage() + .instance() + .get(&DataKey::UpgradeProposal) + .ok_or(MarketplaceError::NoUpgradeProposed)?; + if env.ledger().timestamp() < proposed_at + UPGRADE_TIMELOCK_DELAY { + return Err(MarketplaceError::UpgradeTimelockNotElapsed); + } + env.storage().instance().remove(&DataKey::UpgradeProposal); + events::upgrade_executed(&env, &admin, &wasm_hash); + env.deployer().update_current_contract_wasm(wasm_hash); + Ok(()) + } + + // ── Private helpers ─────────────────────────────────────────────────────── + + fn load_config(env: &Env) -> Result { + env.storage() + .instance() + .get(&DataKey::Config) + .ok_or(MarketplaceError::NotInitialized) + .get(&DataKey::FeeBps) + .ok_or(KoraError::NotInitialized)?; + // risk_registry was never part of the legacy per-key storage format — + // contracts still on that format must be re-initialized to consolidate + // into `Config` before risk_registry-dependent calls can succeed. + let risk_registry: Address = env + .storage() + .instance() + .get(&DataKey::RiskRegistry) + .ok_or(KoraError::NotInitialized)?; + + let config = MarketplaceConfig { + admin, + invoice_nft, + financing_pool, + treasury, + access_control, + risk_registry, + fee_bps, + referrer_split_bps: 0, + }; + env.storage().instance().set(&DataKey::Config, &config); + Ok(config) + } + + /// NOTE: `DataKey::AccessControl` is read directly (not from inside Config) so this + /// stays cheap on the common path. `initialize` always writes a real AccessControl + /// contract address here, so this performs a live cross-contract pause check. + fn require_not_paused(env: &Env) -> Result<(), MarketplaceError> { + if let Some(ac_contract) = + env.storage() + .instance() + .get::(&DataKey::AccessControl) + { + let ac = + kora_access_control::AccessControlContractClient::new(env, &ac_contract); + if ac.is_paused() { + return Err(MarketplaceError::ProtocolPaused); + } + } + Ok(()) + } + + /// Extend the TTL of any persistent storage entry. + fn bump_persistent(env: &Env, key: &DataKey) { + env.storage() + .persistent() + .extend_ttl(key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_BUMP); + } + + /// Extend the TTL of a listing's persistent storage entry. + fn bump_listing(env: &Env, invoice_id: u64) { + env.storage().persistent().extend_ttl( + &DataKey::Listing(invoice_id), + PERSISTENT_TTL_THRESHOLD, + PERSISTENT_TTL_BUMP, + ); + } + + /// Map RiskTier to a stable u32 ordinal for storage keying. (#210) + #[inline] + fn tier_ordinal(tier: &RiskTier) -> u32 { + match tier { + RiskTier::AAA => 0, + RiskTier::AA => 1, + RiskTier::A => 2, + RiskTier::B => 3, + RiskTier::C => 4, + } + } +} + +// ── Tests ───────────────────────────────────────────────────────────────────── + +#[cfg(test)] +mod tests { + use super::*; + use kora_access_control::AccessControlContract; + use kora_financing_pool::{FinancingPoolContract, FinancingPoolContractClient}; + use kora_invoice_nft::{InvoiceNftContract, InvoiceNftContractClient}; + use soroban_sdk::{ + testutils::{Address as _, Ledger, LedgerInfo}, + Address, Env, + }; + + // ── Test harness ────────────────────────────────────────────────────────── + + struct TestEnv { + env: Env, + admin: Address, + token: Address, + seller: Address, + treasury: Address, + pool: Address, + registry: Address, + staking_token: Address, + mp: MarketplaceContractClient<'static>, + nft: InvoiceNftContractClient<'static>, + } + + fn mint_stake(env: &Env, token: &Address, to: &Address, amount: i128) { + soroban_sdk::token::StellarAssetClient::new(env, token).mint(to, &amount); + } + + fn deploy() -> TestEnv { + let env = Env::default(); + // add_verifier's stake transfer requires verifier.require_auth() from + // inside a nested call (risk_registry -> token), which isn't tied to + // the root invocation — plain mock_all_auths() rejects that. + env.mock_all_auths_allowing_non_root_auth(); + + env.ledger().set(LedgerInfo { + timestamp: 1_700_000_000, + protocol_version: 21, + sequence_number: 1, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + + let admin = Address::generate(&env); + let treasury_id = env.register_contract(None, kora_treasury::TreasuryContract); + let treasury_client = kora_treasury::TreasuryContractClient::new(&env, &treasury_id); + treasury_client.initialize(&admin, &50u32); + let treasury = treasury_id; + + let ac_id = env.register_contract(None, AccessControlContract); + let ac_client = kora_access_control::AccessControlContractClient::new(&env, &ac_id); + ac_client.initialize(&admin); + + let ac_id = env.register_contract(None, AccessControlContract); + + let nft_id = env.register_contract(None, InvoiceNftContract); + let nft = InvoiceNftContractClient::new(&env, &nft_id); + nft.initialize(&admin, &ac_id); + + let pool_id = env.register_contract(None, FinancingPoolContract); + let pool_client = FinancingPoolContractClient::new(&env, &pool_id); + let rr = Address::generate(&env); // risk registry (unused in unit tests) + let oracle = Address::generate(&env); // price oracle (unused in unit tests) + pool_client.initialize(&admin, &nft_id, &rr, &treasury, &ac_id, &200u32, &oracle, &5_000u32); + + let registry_id = env.register_contract(None, kora_risk_registry::RiskRegistryContract); + let registry = registry_id.clone(); + let registry_client = kora_risk_registry::RiskRegistryContractClient::new(&env, ®istry_id); + let staking_token = env.register_stellar_asset_contract_v2(admin.clone()).address(); + let token_admin = Address::generate(&env); + let staking_token = env.register_stellar_asset_contract_v2(token_admin).address(); + registry_client.initialize(&admin, &nft_id, &staking_token, &1_000_000i128, &5_000u32); + + let mp_id = env.register_contract(None, MarketplaceContract); + let mp = MarketplaceContractClient::new(&env, &mp_id); + mp.initialize(&admin, &nft_id, &pool_id, &treasury, &ac_id, ®istry, &50u32); + + // Register marketplace and pool as authorized callers on the NFT contract (#209) + nft.set_authorized_callers(&admin, &mp_id, &pool_id); + + let token_issuer = Address::generate(&env); + let token = env.register_stellar_asset_contract_v2(token_issuer).address(); + mp.whitelist_token(&admin, &token); + treasury_client.whitelist_token(&admin, &token); + + let seller = Address::generate(&env); + + // Default seller must be compliance-attested for list_invoice to succeed. + let verifier = Address::generate(&env); + mint_stake(&env, &staking_token, &verifier, 1_000_000i128); + // list_invoice requires the seller to be a compliance-attested SME. + let verifier = Address::generate(&env); + soroban_sdk::token::StellarAssetClient::new(&env, &staking_token) + .mint(&verifier, &1_000_000i128); + registry_client.add_verifier(&admin, &verifier, &1_000_000i128); + registry_client.register_sme(&verifier, &seller, &50u32, &true); + + TestEnv { env, admin, token, seller, treasury, pool: pool_id, registry, staking_token, mp, nft } + } + + /// Mint an invoice in the NFT contract and return its id. + fn mint_invoice(t: &TestEnv) -> u64 { + use soroban_sdk::{Bytes, String, Symbol}; + let debtor_hash = Bytes::from_slice(&t.env, &[0xABu8; 32]); + let ipfs_cid = String::from_str( + &t.env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + t.nft.mint_invoice( + &t.seller, + &debtor_hash, + &10_000_000_000i128, + &Symbol::new(&t.env, "USDC"), + &due_date, + &ipfs_cid, + &30u32, &None, + &30u32, + &None, + ) + } + + /// Mint an invoice and list it; returns invoice_id. + fn list_one(t: &TestEnv) -> u64 { + let id = mint_invoice(t); + let deadline = t.env.ledger().timestamp() + 86_400 * 30; + t.mp.list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + id + } + + // ── initialize ──────────────────────────────────────────────────────────── + + #[test] + fn test_initialize_already_initialized_returns_error() { + let t = deploy(); + let result = t.mp.try_initialize( + &t.admin, + &Address::generate(&t.env), + &Address::generate(&t.env), + &Address::generate(&t.env), + &Address::generate(&t.env), + &Address::generate(&t.env), + &50u32, + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::AlreadyInitialized); + } + + #[test] + fn test_initialize_invalid_fee_bps_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let mp_id = env.register_contract(None, MarketplaceContract); + let mp = MarketplaceContractClient::new(&env, &mp_id); + let result = mp.try_initialize( + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &10_001u32, + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidFeeRate); + } + + #[test] + fn test_initialize_zero_fee_bps_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let mp_id = env.register_contract(None, MarketplaceContract); + let mp = MarketplaceContractClient::new(&env, &mp_id); + assert!(mp + .try_initialize( + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &0u32, + ) + .is_ok()); + } + + #[test] + fn test_initialize_max_fee_bps_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let mp_id = env.register_contract(None, MarketplaceContract); + let mp = MarketplaceContractClient::new(&env, &mp_id); + assert!(mp + .try_initialize( + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &Address::generate(&env), + &10_000u32, + ) + .is_ok()); + } + + // ── get_admin ───────────────────────────────────────────────────────────── + + #[test] + fn test_get_admin_returns_correct_address() { + let t = deploy(); + assert_eq!(t.mp.get_admin(), t.admin); + } + + #[test] + fn test_get_admin_before_init_returns_error() { + let env = Env::default(); + env.mock_all_auths(); + let mp_id = env.register_contract(None, MarketplaceContract); + let mp = MarketplaceContractClient::new(&env, &mp_id); + assert_eq!( + mp.try_get_admin().unwrap_err().unwrap(), + MarketplaceError::NotInitialized + ); + } + + // ── get_fee_bps ─────────────────────────────────────────────────────────── + + #[test] + fn test_get_fee_bps_returns_initialized_value() { + let t = deploy(); + assert_eq!(t.mp.get_fee_bps(), 50); + } + + // ── update_fee_bps ──────────────────────────────────────────────────────── + + #[test] + fn test_update_fee_bps_success() { + let t = deploy(); + t.mp.update_fee_bps(&t.admin, &100u32); + assert_eq!(t.mp.get_fee_bps(), 100); + } + + #[test] + fn test_update_fee_bps_to_zero_success() { + let t = deploy(); + t.mp.update_fee_bps(&t.admin, &0u32); + assert_eq!(t.mp.get_fee_bps(), 0); + } + + #[test] + fn test_update_fee_bps_to_max_success() { + let t = deploy(); + t.mp.update_fee_bps(&t.admin, &10_000u32); + assert_eq!(t.mp.get_fee_bps(), 10_000); + } + + #[test] + fn test_get_config_returns_initialized_values() { + let t = deploy(); + let config = t.mp.get_config(); + assert_eq!(config.admin, t.admin); + assert_eq!(config.financing_pool, t.pool); + assert_eq!(config.treasury, t.treasury); + assert_eq!(config.fee_bps, 50u32); + } + + // ── whitelist_token ─────────────────────────────────────────────────────── + + #[test] + fn test_whitelist_token_success() { + let t = deploy(); + let new_token = Address::generate(&t.env); + assert!(!t.mp.is_token_whitelisted(&new_token)); + t.mp.whitelist_token(&t.admin, &new_token); + assert!(t.mp.is_token_whitelisted(&new_token)); + } + + #[test] + fn test_whitelist_token_non_admin_rejected() { + let t = deploy(); + let stranger = Address::generate(&t.env); + let new_token = Address::generate(&t.env); + let result = t.mp.try_whitelist_token(&stranger, &new_token); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::NotAdmin); + } + + // ── remove_token_whitelist ──────────────────────────────────────────────── + + #[test] + fn test_remove_token_whitelist_success() { + let t = deploy(); + let new_token = Address::generate(&t.env); + t.mp.whitelist_token(&t.admin, &new_token); + assert!(t.mp.is_token_whitelisted(&new_token)); + t.mp.remove_token_whitelist(&t.admin, &new_token); + assert!(!t.mp.is_token_whitelisted(&new_token)); + } + + #[test] + fn test_remove_token_whitelist_non_admin_rejected() { + let t = deploy(); + let stranger = Address::generate(&t.env); + let new_token = Address::generate(&t.env); + t.mp.whitelist_token(&t.admin, &new_token); + let result = t.mp.try_remove_token_whitelist(&stranger, &new_token); + assert_eq!(result.unwrap_err().unwrap(), KoraError::NotAdmin); + assert!(t.mp.is_token_whitelisted(&new_token)); + } + + #[test] + fn test_remove_token_whitelist_not_whitelisted_rejected() { + let t = deploy(); + let new_token = Address::generate(&t.env); + let result = t.mp.try_remove_token_whitelist(&t.admin, &new_token); + assert_eq!(result.unwrap_err().unwrap(), KoraError::TokenNotWhitelisted); + } + + #[test] + fn test_remove_token_whitelist_blocks_new_listing() { + let t = deploy(); + // t.token is whitelisted by deploy(); remove it, then listing must fail. + t.mp.remove_token_whitelist(&t.admin, &t.token); + assert!(!t.mp.is_token_whitelisted(&t.token)); + + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &9_000i128, + &10_000i128, + &t.token, + &deadline, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::TokenNotWhitelisted); + } + + #[test] + fn test_remove_token_whitelist_existing_listing_unaffected() { + let t = deploy(); + let id = list_one(&t); + // Remove the whitelist for the token used by the already-created listing. + t.mp.remove_token_whitelist(&t.admin, &t.token); + assert!(!t.mp.is_token_whitelisted(&t.token)); + + // The existing listing must remain funded-able despite the removal. + let listing = t.mp.get_listing(&id); + assert!(listing.is_active); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &id, &1_000_000i128); + assert!(result.is_ok()); + } + + // ── list_invoice ────────────────────────────────────────────────────────── + + #[test] + fn test_list_invoice_success() { + let t = deploy(); + let id = list_one(&t); + let listing = t.mp.get_listing(&id); + assert_eq!(listing.invoice_id, 1); + assert_eq!(listing.seller, t.seller); + assert_eq!(listing.asking_price, 9_500_000_000i128); + assert_eq!(listing.face_value, 10_000_000_000i128); + assert!(listing.is_active); + assert_eq!(listing.funded_amount, 0); + } + + #[test] + fn test_list_invoice_nft_status_transitions_to_listed() { + let t = deploy(); + let id = list_one(&t); + let invoice = t.nft.get_invoice(&id); + assert_eq!(invoice.status, kora_shared::types::InvoiceStatus::Listed); + } + + #[test] + fn test_list_invoice_non_whitelisted_token_rejected() { + let t = deploy(); + let _id = mint_invoice(&t); + let bad_token = Address::generate(&t.env); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &9_000i128, + &10_000i128, + &bad_token, + &deadline, + &None::
, + &None, + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::TokenNotWhitelisted); + } + + #[test] + fn test_list_invoice_zero_asking_price_rejected() { + let t = deploy(); + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = + t.mp.try_list_invoice(&t.seller, &1u64, &0i128, &10_000i128, &t.token, &deadline, &None::
); + t.mp.try_list_invoice(&t.seller, &1u64, &0i128, &10_000i128, &t.token, &deadline, &None); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + #[test] + fn test_list_invoice_zero_face_value_rejected() { + let t = deploy(); + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = + t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &0i128, &t.token, &deadline, &None::
); + t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &0i128, &t.token, &deadline, &None); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + #[test] + fn test_list_invoice_asking_price_equal_face_value_rejected() { + let t = deploy(); + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &10_000i128, + &10_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + } + + // ── minimum discount enforcement ────────────────────────────────────────── + + #[test] + fn test_list_invoice_discount_below_minimum_rejected() { + let t = deploy(); + // mint_invoice() always mints a face value of 10_000_000_000. + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + // face_value = 10_000_000_000, default min_discount_bps = 10 → + // min_discount = 10_000_000. A discount of 9_999_999 (asking_price = + // 9_990_000_001) is one below the minimum. + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &9_990_000_001i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + #[test] + fn test_list_invoice_discount_exact_minimum_accepted() { + let t = deploy(); + // mint_invoice() always mints a face value of 10_000_000_000. + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + // face_value = 10_000_000_000, default min_discount_bps = 10 → + // min_discount = 10_000_000. A discount of exactly 10_000_000 + // (asking_price = 9_990_000_000) must be accepted. + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &9_990_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None, + ); + assert!(result.is_ok()); + } + + #[test] + fn test_list_invoice_valid_discount_accepted() { + let t = deploy(); + let id = list_one(&t); + let listing = t.mp.get_listing(&id); + assert!(listing.is_active); + assert_eq!(listing.asking_price, 9_500_000_000i128); + } + + #[test] + fn test_set_min_discount_bps_enforced_on_next_listing() { + let t = deploy(); + // Raise the minimum discount to 10% (1_000 bps); a 5% discount must + // now be rejected even though it passed under the default 10 bps. + t.mp.set_min_discount_bps(&t.admin, &1_000u32); + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + #[test] + fn test_set_min_discount_bps_non_admin_rejected() { + let t = deploy(); + let stranger = Address::generate(&t.env); + let result = t.mp.try_set_min_discount_bps(&stranger, &1_000u32); + assert!(result.is_err()); + } + + #[test] + fn test_set_min_discount_bps_over_10000_rejected() { + let t = deploy(); + let result = t.mp.try_set_min_discount_bps(&t.admin, &10_001u32); + assert!(result.is_err()); + } + + #[test] + fn test_get_min_discount_bps_defaults_to_ten() { + let t = deploy(); + assert_eq!(t.mp.get_min_discount_bps(), 10u32); + } + + #[test] + fn test_list_invoice_asking_price_greater_than_face_value_rejected() { + let t = deploy(); + let _id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &11_000i128, + &10_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + } + + #[test] + fn test_list_invoice_past_deadline_rejected() { + let t = deploy(); + let _id = mint_invoice(&t); + let past = t.env.ledger().timestamp() - 1; + let result = + t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &10_000i128, &t.token, &past, &None::
); + t.mp.try_list_invoice(&t.seller, &1u64, &9_000i128, &10_000i128, &t.token, &past, &None); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidDueDate); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidDueDate); + } + + #[test] + fn test_list_invoice_duplicate_id_rejected() { + let t = deploy(); + let _id = list_one(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &t.seller, + &1u64, + &9_000i128, + &10_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + assert_eq!( + result.unwrap_err().unwrap(), + MarketplaceError::InvoiceAlreadyExists + ); + } + + #[test] + fn test_list_multiple_invoices_independent() { + let t = deploy(); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = + t.mp.try_list_invoice(&t.seller, &1u64, &-1i128, &10_000i128, &t.token, &deadline, &None::
); + t.mp.try_list_invoice(&t.seller, &1u64, &-1i128, &10_000i128, &t.token, &deadline, &None); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + #[test] + fn test_list_invoice_unattested_sme_rejected() { + let t = deploy(); + let verifier = Address::generate(&t.env); + let registry_client = kora_risk_registry::RiskRegistryContractClient::new(&t.env, &t.registry); + mint_stake(&t.env, &t.staking_token, &verifier, 1_000_000i128); + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.staking_token) + .mint(&verifier, &1_000_000i128); + registry_client.add_verifier(&t.admin, &verifier, &1_000_000i128); + + let unattested_seller = Address::generate(&t.env); + registry_client.register_sme(&verifier, &unattested_seller, &50u32, &false); + + let id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400; + let result = t.mp.try_list_invoice( + &unattested_seller, + &1u64, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ComplianceNotAttested); + } + + #[test] + fn test_list_invoice_attested_sme_succeeds() { + let t = deploy(); + let verifier = Address::generate(&t.env); + let registry_client = kora_risk_registry::RiskRegistryContractClient::new(&t.env, &t.registry); + mint_stake(&t.env, &t.staking_token, &verifier, 1_000_000i128); + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.staking_token) + .mint(&verifier, &1_000_000i128); + registry_client.add_verifier(&t.admin, &verifier, &1_000_000i128); + + let attested_seller = Address::generate(&t.env); + registry_client.register_sme(&verifier, &attested_seller, &50u32, &true); + + let deadline = t.env.ledger().timestamp() + 86_400; + let nft_id = { + use soroban_sdk::{Bytes, String, Symbol}; + let debtor_hash = Bytes::from_slice(&t.env, &[0xABu8; 32]); + let ipfs_cid = String::from_str( + &t.env, + "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi", + ); + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + t.nft.mint_invoice( + &attested_seller, + &debtor_hash, + &10_000_000_000i128, + &Symbol::new(&t.env, "USDC"), + &due_date, + &ipfs_cid, + &30u32, &None, + &30u32, + &None, + ) + }; + + assert!(t.mp.try_list_invoice( + &attested_seller, + &nft_id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + &None, + ).is_ok()); + } + + // ── get_listing ─────────────────────────────────────────────────────────── + + #[test] + fn test_get_listing_not_found_returns_error() { + let t = deploy(); + let result = t.mp.try_get_listing(&999u64); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingNotFound); + } + + #[test] + fn test_get_listing_returns_correct_data() { + let t = deploy(); + let deadline = t.env.ledger().timestamp() + 86_400 * 30; + let _id = mint_invoice(&t); + t.mp.list_invoice( + &t.seller, + &1u64, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + let listing = t.mp.get_listing(&1u64); + assert_eq!(listing.asking_price, 9_500_000_000i128); + assert_eq!(listing.face_value, 10_000_000_000i128); + assert_eq!(listing.funding_deadline, deadline); + assert_eq!(listing.token, t.token); + assert!(listing.is_active); + assert_eq!(listing.funded_amount, 0); + } + + // ── fund_invoice (error-path tests that don't require token contracts) ──── + + #[test] + fn test_fund_invoice_listing_not_found() { + let t = deploy(); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &999u64, &1_000i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingNotFound); + } + + #[test] + fn test_fund_invoice_zero_amount_rejected() { + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &id, &0i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + } + + #[test] + fn test_fund_invoice_negative_amount_rejected() { + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &id, &-1i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAmount); + } + + #[test] + fn test_fund_invoice_exceeds_target_rejected() { + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &1u64, &9_500_000_001i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ExceedsFundingTarget); + } + + #[test] + fn test_fund_invoice_after_deadline_rejected() { + let t = deploy(); + let deadline = t.env.ledger().timestamp() + 100; + let _id = mint_invoice(&t); + t.mp.list_invoice( + &t.seller, + &1u64, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + &None, + ); + t.env.ledger().set(LedgerInfo { + timestamp: deadline + 1, + protocol_version: 21, + sequence_number: 2, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &1u64, &1_000_000i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::FundingDeadlinePassed); + } + + #[test] + fn test_fund_invoice_on_cancelled_listing_rejected() { + let t = deploy(); + let id = list_one(&t); + t.mp.cancel_listing(&t.seller, &id); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &1u64, &1_000_000i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingAlreadyCancelled); + } + + #[test] + fn test_funded_amount_overflow_protection() { + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + // asking_price = 9_500_000_000; any amount > that is rejected before overflow + let result = t.mp.try_fund_invoice(&investor, &id, &i128::MAX); + assert!(result.is_err()); + } + + #[test] + fn test_fund_cancelled_listing() { + let t = deploy(); + let id = list_one(&t); + t.mp.cancel_listing(&t.seller, &id); + let listing = t.mp.get_listing(&id); + assert!(!listing.is_active); + + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &id, &1_000_000i128); + assert_eq!( + result.unwrap_err().unwrap(), + MarketplaceError::ListingAlreadyCancelled + ); + } + + #[test] + fn test_fund_invoice_amount_exactly_equals_remaining_target() { + // Test exact boundary: amount == remaining + // Listing: asking_price = 9_500_000_000 + // First fund: 5_000_000_000 (remaining = 4_500_000_000) + // Second fund: 4_500_000_000 (remaining = 0, fully funded) + let t = deploy(); + let id = list_one(&t); + let inv1 = Address::generate(&t.env); + let inv2 = Address::generate(&t.env); + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) + .mint(&inv1, &5_000_000_000i128); + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) + .mint(&inv2, &4_500_000_000i128); + + // First funding: 5B + t.mp.fund_invoice(&inv1, &id, &5_000_000_000i128); + let listing = t.mp.get_listing(&id); + assert_eq!(listing.funded_amount, 5_000_000_000i128); + assert!(listing.is_active); + + // Second funding: exactly the remaining 4.5B + t.mp.fund_invoice(&inv2, &id, &4_500_000_000i128); + let listing = t.mp.get_listing(&id); + assert_eq!(listing.funded_amount, 9_500_000_000i128); + assert!(!listing.is_active, "Listing should be fully funded and inactive"); + } + + // ── cancel_listing ──────────────────────────────────────────────────────── + + #[test] + fn test_cancel_listing_by_seller_success() { + let t = deploy(); + list_one(&t); + assert!(t.mp.try_cancel_listing(&t.seller, &1u64).is_ok()); + let listing = t.mp.get_listing(&1u64); + assert!(!listing.is_active); + } + + #[test] + fn test_cancel_listing_by_admin_success() { + let t = deploy(); + list_one(&t); + assert!(t.mp.try_cancel_listing(&t.admin, &1u64).is_ok()); + let listing = t.mp.get_listing(&1u64); + assert!(!listing.is_active); + } + + #[test] + fn test_cancel_listing_by_stranger_rejected() { + let t = deploy(); + let id = list_one(&t); + let stranger = Address::generate(&t.env); + let result = t.mp.try_cancel_listing(&stranger, &id); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::Unauthorized); + } + + #[test] + fn test_cancel_listing_not_found_returns_error() { + let t = deploy(); + let result = t.mp.try_cancel_listing(&t.seller, &999u64); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingNotFound); + } + + #[test] + fn test_cancel_listing_already_cancelled_returns_error() { + let t = deploy(); + list_one(&t); + t.mp.cancel_listing(&t.seller, &1u64); + let result = t.mp.try_cancel_listing(&t.seller, &1u64); + assert_eq!( + result.unwrap_err().unwrap(), + MarketplaceError::ListingAlreadyCancelled + ); + } + + /// After cancel_listing the NFT status must be reverted to Created. + #[test] + fn test_cancel_listing_reverts_nft_status_to_created() { + let t = deploy(); + let id = list_one(&t); + // After listing the NFT must be Listed. + assert_eq!(t.nft.get_invoice(&id).status, kora_shared::types::InvoiceStatus::Listed); + + t.mp.cancel_listing(&t.seller, &id); + + // After cancellation the NFT must be back to Created. + assert_eq!(t.nft.get_invoice(&id).status, kora_shared::types::InvoiceStatus::Created); + } + + /// Full list → cancel → relist flow must succeed end-to-end. + #[test] + fn test_list_cancel_relist_succeeds() { + let t = deploy(); + let id = list_one(&t); + + // Cancel the initial listing. + t.mp.cancel_listing(&t.seller, &id); + + // NFT is back to Created; the cancelled listing key (is_active=false) must + // not block a fresh listing for the same invoice. + let new_deadline = t.env.ledger().timestamp() + 86_400 * 30; + let result = t.mp.try_list_invoice( + &t.seller, + &id, + &9_000_000_000i128, + &10_000_000_000i128, + &t.token, + &new_deadline, + &None, + ); + assert!(result.is_ok(), "Re-listing after cancel must succeed, got: {:?}", result.err()); + let new_listing = t.mp.get_listing(&id); + assert!(new_listing.is_active); + assert_eq!(new_listing.asking_price, 9_000_000_000i128); + // NFT must be Listed again after re-listing. + assert_eq!(t.nft.get_invoice(&id).status, kora_shared::types::InvoiceStatus::Listed); + } + + #[test] + fn test_cancel_listing_state_unchanged_after_failed_cancel() { + let t = deploy(); + let _id = list_one(&t); + let stranger = Address::generate(&t.env); + let _ = t.mp.try_cancel_listing(&stranger, &1u64); + // Listing must still be active + let listing = t.mp.get_listing(&1u64); + assert!(listing.is_active); + } + + #[test] + fn test_fund_after_cancel_rejected() { + let t = deploy(); + let id = list_one(&t); + t.mp.cancel_listing(&t.admin, &id); + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &1u64, &1_000_000i128); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::ListingAlreadyCancelled); + } + + // ── request_cancellation ────────────────────────────────────────────────── + + /// Seller requests cancellation of a listing with no funding — cancels immediately. + #[test] + fn test_request_cancellation_by_seller_success() { + let t = deploy(); + let id = list_one(&t); + // funded_amount == 0 → immediate cancel, no two-phase needed + assert!(t.mp.try_request_cancellation(&t.seller, &id).is_ok()); + let listing = t.mp.get_listing(&id); + assert!(!listing.is_active); + } + + #[test] + fn test_cancel_listing_after_partial_funding_exposes_fund_loss_risk() { + // BUG EXPOSURE: When a listing is cancelled after receiving partial funding, + // the investor's net contribution remains locked in financing_pool with no + // refund path. claim_refund requires deadline expiry; cancel_listing has no + // refund logic. This is the gap that B9 (reclaim mechanism) must address. + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + let partial_amount = 2_000_000_000i128; + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) + .mint(&investor, &partial_amount); + + // Investor funds the listing partially + t.mp.fund_invoice(&investor, &id, &partial_amount); + let listing = t.mp.get_listing(&id); + assert_eq!(listing.funded_amount, partial_amount); + assert!(listing.is_active); + + // Seller cancels the partially-funded listing + assert!(t.mp.try_cancel_listing(&t.seller, &id).is_ok()); + let cancelled_listing = t.mp.get_listing(&id); + assert!(!cancelled_listing.is_active); + + // BROKEN: Investor cannot claim refund because claim_refund requires + // the deadline to pass (line 352 of lib.rs). Cancellation before deadline + // with partial funding leaves investor funds stranded. + // Expected: refund should be claimable after cancel, or cancel should + // refund automatically (scope of B9). + let result = t.mp.try_claim_refund(&investor, &id); + // This currently fails with FundingNotExpired because deadline hasn't passed + // even though the listing was cancelled and funds are stuck. + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::FundingNotExpired); + } + + // ── fee arithmetic edge cases ───────────────────────────────────────────── + + #[test] + fn test_request_cancellation_by_admin_success() { + let t = deploy(); + let id = list_one(&t); + assert!(t.mp.try_request_cancellation(&t.admin, &id).is_ok()); + let listing = t.mp.get_listing(&id); + assert!(!listing.is_active); + } + + /// A stranger (not seller or admin) is rejected. + #[test] + fn test_request_cancellation_stranger_rejected() { + let t = deploy(); + let id = list_one(&t); + let stranger = Address::generate(&t.env); + let result = t.mp.try_request_cancellation(&stranger, &id); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::Unauthorized); + } + + /// Requesting cancellation on an already-inactive listing is rejected. + #[test] + fn test_request_cancellation_not_active_rejected() { + let t = deploy(); + let id = list_one(&t); + t.mp.cancel_listing(&t.seller, &id); + let result = t.mp.try_request_cancellation(&t.seller, &id); + assert_eq!( + result.unwrap_err().unwrap(), + MarketplaceError::ListingAlreadyCancelled + ); + } + + /// A second request_cancellation on an already-pending listing is rejected. + #[test] + fn test_request_cancellation_duplicate_rejected() { + let t = deploy(); + let id = list_one(&t); + + // Simulate partial funding by writing directly to contract storage + t.env.as_contract(&t.mp.address, || { + let mut listing: Listing = t + .env + .storage() + .persistent() + .get(&DataKey::Listing(id)) + .unwrap(); + listing.funded_amount = 1_000_000i128; + t.env + .storage() + .persistent() + .set(&DataKey::Listing(id), &listing); + }); + + // First request should succeed (stores CancellationRequest) + assert!(t.mp.try_request_cancellation(&t.seller, &id).is_ok()); + // Second request must fail + let result = t.mp.try_request_cancellation(&t.seller, &id); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::CancellationPending); + } + + // ── admin_confirm_cancellation ──────────────────────────────────────────── + + /// Full two-phase flow: request then confirm deactivates listing and sets the confirmed flag. + #[test] + fn test_admin_confirm_cancellation_success() { + let t = deploy(); + let id = list_one(&t); + + // Simulate partial funding + t.env.as_contract(&t.mp.address, || { + let mut listing: Listing = t + .env + .storage() + .persistent() + .get(&DataKey::Listing(id)) + .unwrap(); + listing.funded_amount = 1_000_000i128; + t.env + .storage() + .persistent() + .set(&DataKey::Listing(id), &listing); + }); + + // Phase 1: seller requests cancellation + t.mp.request_cancellation(&t.seller, &id); + + // Phase 2: admin confirms + assert!(t.mp.try_admin_confirm_cancellation(&t.admin, &id).is_ok()); + + let listing = t.mp.get_listing(&id); + assert!(!listing.is_active); + + // CancellationConfirmed flag must be set so investors can claim refunds + let confirmed: bool = t.env.as_contract(&t.mp.address, || { + t.env + .storage() + .persistent() + .get(&DataKey::CancellationConfirmed(id)) + .unwrap_or(false) + }); + assert!(confirmed); + } + + /// admin_confirm_cancellation without a prior request is rejected. + #[test] + fn test_admin_confirm_cancellation_no_request_rejected() { + let t = deploy(); + let id = list_one(&t); + let result = t.mp.try_admin_confirm_cancellation(&t.admin, &id); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::NoCancellationPending); + } + + /// Non-admin cannot confirm a cancellation. + #[test] + fn test_admin_confirm_cancellation_non_admin_rejected() { + let t = deploy(); + let id = list_one(&t); + + // Simulate partial funding and a pending request via direct storage write + t.env.as_contract(&t.mp.address, || { + let mut listing: Listing = t + .env + .storage() + .persistent() + .get(&DataKey::Listing(id)) + .unwrap(); + listing.funded_amount = 1_000_000i128; + t.env + .storage() + .persistent() + .set(&DataKey::Listing(id), &listing); + t.env.storage().persistent().set( + &DataKey::CancellationRequest(id), + &t.seller, + ); + }); + + let stranger = Address::generate(&t.env); + let result = t.mp.try_admin_confirm_cancellation(&stranger, &id); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::NotAdmin); + } + + // ── claim_refund after confirmed cancellation ───────────────────────────── + + /// After admin confirms cancellation, the FundingNotExpired gate is bypassed. + #[test] + fn test_claim_refund_after_confirmed_cancellation() { + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + let net_contribution: i128 = 950_000i128; + + // Simulate partial funding + investor contribution + confirmed cancellation + t.env.as_contract(&t.mp.address, || { + let mut listing: Listing = t + .env + .storage() + .persistent() + .get(&DataKey::Listing(id)) + .unwrap(); + listing.funded_amount = 1_000_000i128; + t.env + .storage() + .persistent() + .set(&DataKey::Listing(id), &listing); + t.env.storage().persistent().set( + &DataKey::Contribution(id, investor.clone()), + &net_contribution, + ); + t.env + .storage() + .persistent() + .set(&DataKey::CancellationConfirmed(id), &true); + }); + + // The deadline is 30 days in the future; without CancellationConfirmed this + // would return FundingNotExpired. With it set, the gate should be bypassed. + // (The call may still fail at token.transfer because there is no real token + // contract — but the error will NOT be FundingNotExpired.) + let result = t.mp.try_claim_refund(&investor, &id); + if let Err(e) = result { + assert_ne!(e.unwrap(), MarketplaceError::FundingNotExpired); + } + } + + /// Without CancellationConfirmed and before deadline, claim_refund must fail. + #[test] + fn test_claim_refund_before_deadline_without_confirmation_rejected() { + let t = deploy(); + let id = list_one(&t); + let investor = Address::generate(&t.env); + + // Simulate partial (but not full) funding so ListingFullyFunded is not triggered + t.env.as_contract(&t.mp.address, || { + let mut listing: Listing = t + .env + .storage() + .persistent() + .get(&DataKey::Listing(id)) + .unwrap(); + listing.funded_amount = 1_000i128; + t.env + .storage() + .persistent() + .set(&DataKey::Listing(id), &listing); + }); + + let result = t.mp.try_claim_refund(&investor, &id); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::FundingNotExpired); + } + + // ── referral fee-split tests ────────────────────────────────────────────── + + fn list_with_referrer(t: &TestEnv, referrer: Option
) -> u64 { + let id = mint_invoice(t); + let deadline = t.env.ledger().timestamp() + 86_400 * 30; + t.mp.list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &referrer, + ); + id + } + + #[test] + fn test_list_invoice_without_referrer_succeeds() { + let t = deploy(); + // None referrer: 100% fee to treasury + let id = list_with_referrer(&t, None); + let listing = t.mp.get_listing(&id); + assert!(listing.is_active); + } + + #[test] + fn test_list_invoice_with_referrer_succeeds() { + let t = deploy(); + let referrer = Address::generate(&t.env); + let id = list_with_referrer(&t, Some(referrer)); + let listing = t.mp.get_listing(&id); + assert!(listing.is_active); + } + + #[test] + fn test_list_invoice_self_referral_rejected() { + let t = deploy(); + let id = mint_invoice(&t); + let deadline = t.env.ledger().timestamp() + 86_400 * 30; + // seller as referrer is self-referral — must be rejected + let result = t.mp.try_list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &Some(t.seller.clone()), + ); + assert_eq!(result.unwrap_err().unwrap(), MarketplaceError::InvalidAddress); + } + + #[test] + fn test_fund_invoice_no_referrer_full_fee_to_treasury() { + // With no referrer, entire fee must go to treasury. + // fee_bps = 50 (0.5%), amount = 10_000_000 → fee = 50_000 → treasury gets 50_000. + let t = deploy(); + let id = list_with_referrer(&t, None); + let investor = Address::generate(&t.env); + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) + .mint(&investor, &10_000_000i128); + t.mp.fund_invoice(&investor, &id, &10_000_000i128); + } + + #[test] + fn test_fund_invoice_with_referrer_splits_fee() { + // referrer_split_bps = 2000 (20%). fee_bps = 50. + // amount = 10_000_000 → fee = 50_000 + // referral_fee = 50_000 * 2000 / 10_000 = 10_000 + // treasury_fee = 50_000 - 10_000 = 40_000 + let t = deploy(); + t.mp.set_referrer_split_bps(&t.admin, &2_000u32); + let referrer = Address::generate(&t.env); + let id = list_with_referrer(&t, Some(referrer)); + let investor = Address::generate(&t.env); + soroban_sdk::token::StellarAssetClient::new(&t.env, &t.token) + .mint(&investor, &10_000_000i128); + assert!(t.mp.try_fund_invoice(&investor, &id, &10_000_000i128).is_ok()); + } + + #[test] + fn test_set_referrer_split_bps_non_admin_rejected() { + let t = deploy(); + let stranger = Address::generate(&t.env); + let result = t.mp.try_set_referrer_split_bps(&stranger, &2_000u32); + assert!(result.is_err()); + } + + #[test] + fn test_set_referrer_split_bps_over_10000_rejected() { + let t = deploy(); + let result = t.mp.try_set_referrer_split_bps(&t.admin, &10_001u32); + assert!(result.is_err()); + } + + // ── Issue #441: funding_deadline vs due_date buffer ─────────────────────── + + /// funding_deadline exactly equal to due_date → rejected (no buffer at all). + #[test] + fn test_list_invoice_deadline_equals_due_date_rejected() { + let t = deploy(); + let id = mint_invoice(&t); // due_date = now + 60 days + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + // deadline == due_date → 0 buffer < 3-day minimum + let result = t.mp.try_list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &due_date, + &None::
, + ); + assert_eq!( + result.unwrap_err().unwrap(), + KoraError::FundingDeadlineTooCloseToDueDate + ); + } + + /// funding_deadline 1 second before due_date → rejected. + #[test] + fn test_list_invoice_deadline_one_second_before_due_date_rejected() { + let t = deploy(); + let id = mint_invoice(&t); + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + let result = t.mp.try_list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &(due_date - 1), // 1 second buffer — less than 3 days + &None::
, + ); + assert_eq!( + result.unwrap_err().unwrap(), + KoraError::FundingDeadlineTooCloseToDueDate + ); + } + + /// funding_deadline exactly at due_date - buffer → accepted. + #[test] + fn test_list_invoice_deadline_exactly_at_buffer_boundary_accepted() { + let t = deploy(); + let id = mint_invoice(&t); + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + let min_buffer = DEFAULT_MIN_FUNDING_BUFFER; // 3 days + // deadline + buffer == due_date → accepted + let deadline = due_date - min_buffer; + assert!(t.mp.try_list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + ).is_ok()); + } + + /// funding_deadline comfortably before due_date → accepted (existing valid behavior). + #[test] + fn test_list_invoice_deadline_well_before_due_date_accepted() { + let t = deploy(); + let id = list_one(&t); // deadline = now + 30 days, due_date = now + 60 days + let listing = t.mp.get_listing(&id); + assert!(listing.is_active); + } + + /// Admin can configure the buffer; new buffer is respected. + #[test] + fn test_set_min_funding_buffer_admin_can_change() { + let t = deploy(); + // Set buffer to 1 day + t.mp.set_min_funding_buffer(&t.admin, &86_400u64); + assert_eq!(t.mp.get_min_funding_buffer(), 86_400u64); + + // Now a listing with deadline = due_date - 2 days should be accepted + let id = mint_invoice(&t); + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + let deadline = due_date - 2 * 86_400; // 2 days > 1-day buffer + assert!(t.mp.try_list_invoice( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &deadline, + &None::
, + ).is_ok()); + } + + /// Non-admin cannot change the buffer. + #[test] + fn test_set_min_funding_buffer_non_admin_rejected() { + let t = deploy(); + let stranger = Address::generate(&t.env); + let result = t.mp.try_set_min_funding_buffer(&stranger, &86_400u64); + assert_eq!(result.unwrap_err().unwrap(), KoraError::NotAdmin); + } + + // ── Issue #439: Dutch auction / price decay ─────────────────────────────── + + /// list_invoice_with_decay stores a schedule and get_current_price returns start_price before decay begins. + #[test] + fn test_decay_schedule_price_before_decay_start() { + let t = deploy(); + let id = mint_invoice(&t); + let now = t.env.ledger().timestamp(); + let due_date = now + 86_400 * 60; + let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; + let decay_start = now + 86_400 * 5; // decay starts in 5 days + let decay_end = now + 86_400 * 25; // reaches floor in 25 days + + t.mp.list_invoice_with_decay( + &t.seller, + &id, + &10_000_000_000i128, // start price + &10_000_000_000i128, // face value + &t.token, + &funding_deadline, + &None::
, + &8_000_000_000i128, // floor price + &decay_start, + &decay_end, + ); + + // Before decay_start → price == start_price + let price = t.mp.get_current_price(&id); + assert_eq!(price, 10_000_000_000i128); + } + + /// Price at exactly the mid-point of the decay window is half-way between start and floor. + #[test] + fn test_decay_schedule_price_at_midpoint() { + let t = deploy(); + let id = mint_invoice(&t); + let now = t.env.ledger().timestamp(); + let due_date = now + 86_400 * 60; + let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; + let decay_start = now + 1_000; + let decay_end = now + 3_000; // 2000-second window + + t.mp.list_invoice_with_decay( + &t.seller, + &id, + &10_000_000_000i128, + &10_000_000_000i128, + &t.token, + &funding_deadline, + &None::
, + &8_000_000_000i128, // drop = 2_000_000_000 total + &decay_start, + &decay_end, + ); + + // Advance to exactly the mid-point of the window + t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { + timestamp: now + 2_000, // elapsed=1000 out of 2000 + protocol_version: 21, + sequence_number: 2, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + + // drop = 2_000_000_000 * 1000 / 2000 = 1_000_000_000 + // price = 10_000_000_000 - 1_000_000_000 = 9_000_000_000 + let price = t.mp.get_current_price(&id); + assert_eq!(price, 9_000_000_000i128); + } + + /// After decay_end the price equals the floor. + #[test] + fn test_decay_schedule_price_after_decay_end_is_floor() { + let t = deploy(); + let id = mint_invoice(&t); + let now = t.env.ledger().timestamp(); + let due_date = now + 86_400 * 60; + let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; + let decay_start = now + 100; + let decay_end = now + 200; + + t.mp.list_invoice_with_decay( + &t.seller, + &id, + &10_000_000_000i128, + &10_000_000_000i128, + &t.token, + &funding_deadline, + &None::
, + &7_000_000_000i128, + &decay_start, + &decay_end, + ); + + // Advance past decay_end + t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { + timestamp: now + 300, + protocol_version: 21, + sequence_number: 2, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + + let price = t.mp.get_current_price(&id); + assert_eq!(price, 7_000_000_000i128); + } + + /// A listing without a decay schedule returns asking_price unchanged (backward compat). + #[test] + fn test_no_decay_schedule_price_unchanged() { + let t = deploy(); + let id = list_one(&t); + let listing = t.mp.get_listing(&id); + let price = t.mp.get_current_price(&id); + assert_eq!(price, listing.asking_price); + } + + /// floor_price >= asking_price → rejected. + #[test] + fn test_decay_schedule_floor_gte_asking_rejected() { + let t = deploy(); + let id = mint_invoice(&t); + let now = t.env.ledger().timestamp(); + let due_date = now + 86_400 * 60; + let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; + let result = t.mp.try_list_invoice_with_decay( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &funding_deadline, + &None::
, + &9_500_000_000i128, // floor == asking → invalid + &(now + 100), + &(now + 200), + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + // ── Issue #440: Reverse-auction bidding ─────────────────────────────────── + + /// Helper: list an invoice in bidding mode. + fn list_with_bidding(t: &TestEnv, bidding_deadline: u64) -> u64 { + let id = mint_invoice(t); + let due_date = t.env.ledger().timestamp() + 86_400 * 60; + let funding_deadline = due_date - DEFAULT_MIN_FUNDING_BUFFER; + t.mp.list_invoice_with_bidding( + &t.seller, + &id, + &9_500_000_000i128, + &10_000_000_000i128, + &t.token, + &funding_deadline, + &None::
, + &bidding_deadline, + ); + id + } + + /// submit_bid succeeds during the bidding window and can be retrieved. + #[test] + fn test_submit_bid_success() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; // 7-day window + let id = list_with_bidding(&t, bid_deadline); + + let investor = Address::generate(&t.env); + assert!(t.mp.try_submit_bid( + &investor, + &id, + &9_000_000_000i128, // bid below asking price + &5_000_000_000i128, // amount + ).is_ok()); + + let bid = t.mp.get_bid(&id, &investor); + assert!(bid.is_some()); + let b = bid.unwrap(); + assert_eq!(b.bid_price, 9_000_000_000i128); + assert_eq!(b.amount, 5_000_000_000i128); + } + + /// submit_bid after the bidding window closes → BiddingWindowClosed. + #[test] + fn test_submit_bid_after_window_closed_rejected() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 100; + let id = list_with_bidding(&t, bid_deadline); + + // Advance past bidding deadline + t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { + timestamp: bid_deadline + 1, + protocol_version: 21, + sequence_number: 2, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + + let investor = Address::generate(&t.env); + let result = t.mp.try_submit_bid( + &investor, + &id, + &9_000_000_000i128, + &5_000_000_000i128, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowClosed); + } + + /// fund_invoice while bidding window is open → BiddingWindowActive. + #[test] + fn test_fund_invoice_during_bidding_window_rejected() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; + let id = list_with_bidding(&t, bid_deadline); + + let investor = Address::generate(&t.env); + let result = t.mp.try_fund_invoice(&investor, &id, &1_000_000i128); + assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowActive); + } + + /// Duplicate bid from same investor → BidAlreadyExists. + #[test] + fn test_submit_bid_duplicate_rejected() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; + let id = list_with_bidding(&t, bid_deadline); + + let investor = Address::generate(&t.env); + t.mp.submit_bid(&investor, &id, &9_000_000_000i128, &5_000_000_000i128); + let result = t.mp.try_submit_bid( + &investor, + &id, + &9_000_000_000i128, + &5_000_000_000i128, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::BidAlreadyExists); + } + + /// bid_price exceeds current_asking_price → InvalidAmount. + #[test] + fn test_submit_bid_price_above_asking_rejected() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; + let id = list_with_bidding(&t, bid_deadline); + + let investor = Address::generate(&t.env); + let result = t.mp.try_submit_bid( + &investor, + &id, + &9_500_000_001i128, // > asking_price + &5_000_000_000i128, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::InvalidAmount); + } + + /// accept_bids before bidding window closes → BiddingWindowActive. + #[test] + fn test_accept_bids_before_window_closes_rejected() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 86_400 * 7; + let id = list_with_bidding(&t, bid_deadline); + + let investor = Address::generate(&t.env); + t.mp.submit_bid(&investor, &id, &9_000_000_000i128, &5_000_000_000i128); + + let investors = soroban_sdk::vec![&t.env, investor.clone()]; + let result = t.mp.try_accept_bids(&t.seller, &id, &investors); + assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowActive); + } + + /// Non-seller/non-admin cannot accept bids. + #[test] + fn test_accept_bids_stranger_rejected() { + let t = deploy(); + let bid_deadline = t.env.ledger().timestamp() + 100; + let id = list_with_bidding(&t, bid_deadline); + + // Advance past bid deadline + t.env.ledger().set(soroban_sdk::testutils::LedgerInfo { + timestamp: bid_deadline + 1, + protocol_version: 21, + sequence_number: 2, + network_id: Default::default(), + base_reserve: 10, + min_temp_entry_ttl: 1000, + min_persistent_entry_ttl: 1000, + max_entry_ttl: 100_000, + }); + + let stranger = Address::generate(&t.env); + let investors = soroban_sdk::vec![&t.env, stranger.clone()]; + let result = t.mp.try_accept_bids(&stranger, &id, &investors); + assert_eq!(result.unwrap_err().unwrap(), KoraError::Unauthorized); + } + + /// submit_bid on a non-bidding listing → BiddingWindowClosed. + #[test] + fn test_submit_bid_on_non_bidding_listing_rejected() { + let t = deploy(); + let id = list_one(&t); // standard listing (no bidding deadline) + let investor = Address::generate(&t.env); + let result = t.mp.try_submit_bid( + &investor, + &id, + &9_000_000_000i128, + &5_000_000_000i128, + ); + assert_eq!(result.unwrap_err().unwrap(), KoraError::BiddingWindowClosed); + } +} diff --git a/contracts/marketplace/test_snapshots/tests/test_cancel_listing_already_cancelled_returns_error.1.json b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_already_cancelled_returns_error.1.json new file mode 100644 index 0000000..fb95b7e --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_already_cancelled_returns_error.1.json @@ -0,0 +1,2211 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "cancel_listing", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "LST_CXL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "error": { + "contract": 21 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "cancel_listing" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_admin_success.1.json b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_admin_success.1.json new file mode 100644 index 0000000..281ee67 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_admin_success.1.json @@ -0,0 +1,2209 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "cancel_listing", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "LST_CXL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_seller_success.1.json b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_seller_success.1.json new file mode 100644 index 0000000..b166d7c --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_seller_success.1.json @@ -0,0 +1,2209 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "cancel_listing", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "LST_CXL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_stranger_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_stranger_rejected.1.json new file mode 100644 index 0000000..1ddb734 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_by_stranger_rejected.1.json @@ -0,0 +1,2072 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "error": { + "contract": 1 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "cancel_listing" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_cancel_listing_not_found_returns_error.1.json b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_not_found_returns_error.1.json new file mode 100644 index 0000000..1662c77 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_not_found_returns_error.1.json @@ -0,0 +1,1351 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 999 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "error": { + "contract": 20 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 20 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 20 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "cancel_listing" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 999 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_cancel_listing_state_unchanged_after_failed_cancel.1.json b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_state_unchanged_after_failed_cancel.1.json new file mode 100644 index 0000000..b1430fb --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_cancel_listing_state_unchanged_after_failed_cancel.1.json @@ -0,0 +1,2196 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "error": { + "contract": 1 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "cancel_listing" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_after_cancel_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_after_cancel_rejected.1.json new file mode 100644 index 0000000..bbc66d2 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_after_cancel_rejected.1.json @@ -0,0 +1,2223 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "cancel_listing", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "LST_CXL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 21 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_cancelled_listing.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_cancelled_listing.1.json new file mode 100644 index 0000000..d291bbe --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_cancelled_listing.1.json @@ -0,0 +1,2443 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "cancel_listing", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "LST_CXL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 21 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_after_deadline_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_after_deadline_rejected.1.json new file mode 100644 index 0000000..b519f94 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_after_deadline_rejected.1.json @@ -0,0 +1,2084 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700000100 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 2, + "timestamp": 1700000101, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1700000100 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700000100 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 23 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 23 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 23 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_exceeds_target_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_exceeds_target_rejected.1.json new file mode 100644 index 0000000..81d1875 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_exceeds_target_rejected.1.json @@ -0,0 +1,2084 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000001 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 25 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 25 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 25 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000001 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_fee_math_correct.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_fee_math_correct.1.json new file mode 100644 index 0000000..4e52639 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_fee_math_correct.1.json @@ -0,0 +1,2854 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "fund_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 50000 + } + } + ] + } + }, + "sub_invocations": [] + }, + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 9950000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 50000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9950000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 50000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 50000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 9950000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 9950000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FND" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "FEE_COL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 50000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_fully_funded_deactivates_listing.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_fully_funded_deactivates_listing.1.json new file mode 100644 index 0000000..74d6aa5 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_fully_funded_deactivates_listing.1.json @@ -0,0 +1,3236 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "fund_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 47500000 + } + } + ] + } + }, + "sub_invocations": [] + }, + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 9452500000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Funded" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": { + "vec": [ + { + "symbol": "Pool" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": { + "vec": [ + { + "symbol": "Pool" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "late_penalty_bps" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "repaid_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "total_funded" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 47500000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9452500000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 500000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 47500000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 47500000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 9452500000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 9452500000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FND" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "FEE_COL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 47500000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "release_funds" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_funded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_funded" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "release_funds" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_listing_not_found.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_listing_not_found.1.json new file mode 100644 index 0000000..ee1cace --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_listing_not_found.1.json @@ -0,0 +1,1363 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 999 + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 20 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 20 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 20 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 999 + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_multiple_partial_fundings.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_multiple_partial_fundings.1.json new file mode 100644 index 0000000..cc2cb0c --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_multiple_partial_fundings.1.json @@ -0,0 +1,3492 @@ +{ + "generators": { + "address": 12, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "fund_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 4000000000 + } + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 20000000 + } + } + ] + } + }, + "sub_invocations": [] + }, + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 3980000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "fund_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 4000000000 + } + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 20000000 + } + } + ] + } + }, + "sub_invocations": [] + }, + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 3980000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 8000000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 40000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 7960000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 5000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 4000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 20000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 20000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 3980000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 3980000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FND" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 4000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "FEE_COL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 20000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 4000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 20000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 20000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 3980000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 3980000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FND" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "i128": { + "hi": 0, + "lo": 4000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "FEE_COL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 20000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 8000000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_on_cancelled_listing_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_on_cancelled_listing_rejected.1.json new file mode 100644 index 0000000..c3e5ee8 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_on_cancelled_listing_rejected.1.json @@ -0,0 +1,2223 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "cancel_listing", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "cancel_listing" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "LST_CXL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1700000000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "cancel_listing" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 21 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 21 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_partial_updates_funded_amount.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_partial_updates_funded_amount.1.json new file mode 100644 index 0000000..69cff74 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_partial_updates_funded_amount.1.json @@ -0,0 +1,2854 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "fund_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + }, + "sub_invocations": [ + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 5000000 + } + } + ] + } + }, + "sub_invocations": [] + }, + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "transfer", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 995000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 995000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 2000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": { + "hi": 0, + "lo": 5000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 5000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "transfer" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "i128": { + "hi": 0, + "lo": 995000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "transfer" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 995000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "transfer" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_FND" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "FEE_COL" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 5000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_fund_invoice_zero_amount_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_zero_amount_rejected.1.json new file mode 100644 index 0000000..c9a7880 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_fund_invoice_zero_amount_rejected.1.json @@ -0,0 +1,2084 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "fund_invoice" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "fund_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_get_config_returns_initialized_values.1.json b/contracts/marketplace/test_snapshots/tests/test_get_config_returns_initialized_values.1.json new file mode 100644 index 0000000..577c951 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_get_config_returns_initialized_values.1.json @@ -0,0 +1,1314 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_config" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_config" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_get_listing_not_found_returns_error.1.json b/contracts/marketplace/test_snapshots/tests/test_get_listing_not_found_returns_error.1.json new file mode 100644 index 0000000..7261658 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_get_listing_not_found_returns_error.1.json @@ -0,0 +1,1341 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 999 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "error": { + "contract": 20 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 20 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 20 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "get_listing" + }, + { + "vec": [ + { + "u64": 999 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_get_listing_returns_correct_data.1.json b/contracts/marketplace/test_snapshots/tests/test_get_listing_returns_correct_data.1.json new file mode 100644 index 0000000..291d620 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_get_listing_returns_correct_data.1.json @@ -0,0 +1,2070 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_initialize_already_initialized_returns_error.1.json b/contracts/marketplace/test_snapshots/tests/test_initialize_already_initialized_returns_error.1.json new file mode 100644 index 0000000..d19093c --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_initialize_already_initialized_returns_error.1.json @@ -0,0 +1,1369 @@ +{ + "generators": { + "address": 13, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": { + "error": { + "contract": 93 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 93 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 93 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "initialize" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + }, + { + "u32": 50 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_initialize_invalid_fee_bps_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_initialize_invalid_fee_bps_rejected.1.json new file mode 100644 index 0000000..980d79e --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_initialize_invalid_fee_bps_rejected.1.json @@ -0,0 +1,219 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u32": 10001 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": { + "error": { + "contract": 40 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 40 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 40 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "initialize" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "u32": 10001 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_initialize_success.1.json b/contracts/marketplace/test_snapshots/tests/test_initialize_success.1.json new file mode 100644 index 0000000..dde6ddb --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_initialize_success.1.json @@ -0,0 +1,1512 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "error": { + "contract": 10 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "vec": [ + { + "string": "contract call failed" + }, + { + "symbol": "set_listed" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "escalating error to panic" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "caught error from function" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_legacy_state_migrates_to_config.1.json b/contracts/marketplace/test_snapshots/tests/test_legacy_state_migrates_to_config.1.json new file mode 100644 index 0000000..577c951 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_legacy_state_migrates_to_config.1.json @@ -0,0 +1,1314 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_config" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_config" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_asking_price_equal_face_value_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_asking_price_equal_face_value_rejected.1.json new file mode 100644 index 0000000..49c3584 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_asking_price_equal_face_value_rejected.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_asking_price_greater_than_face_value_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_asking_price_greater_than_face_value_rejected.1.json new file mode 100644 index 0000000..5fd0c8a --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_asking_price_greater_than_face_value_rejected.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 11000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 11000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_duplicate_id_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_duplicate_id_rejected.1.json new file mode 100644 index 0000000..6b3b9eb --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_duplicate_id_rejected.1.json @@ -0,0 +1,2108 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 11 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 11 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_negative_asking_price_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_negative_asking_price_rejected.1.json new file mode 100644 index 0000000..f3077d1 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_negative_asking_price_rejected.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": -1, + "lo": 18446744073709551615 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": -1, + "lo": 18446744073709551615 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_nft_status_transitions_to_listed.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_nft_status_transitions_to_listed.1.json new file mode 100644 index 0000000..020a480 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_nft_status_transitions_to_listed.1.json @@ -0,0 +1,2108 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_invoice" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_non_whitelisted_token_returns_error.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_non_whitelisted_token_returns_error.1.json new file mode 100644 index 0000000..fc24ad9 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_non_whitelisted_token_returns_error.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 42 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 42 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 42 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_past_deadline_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_past_deadline_rejected.1.json new file mode 100644 index 0000000..968782c --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_past_deadline_rejected.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1699999999 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 15 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 15 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 15 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1699999999 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_success.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_success.1.json new file mode 100644 index 0000000..291d620 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_success.1.json @@ -0,0 +1,2070 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "function_name": "mint_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "list_invoice", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "vec": [ + { + "symbol": "Invoice" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 1700000000 + } + }, + { + "key": { + "symbol": "currency" + }, + "val": { + "symbol": "USDC" + } + }, + { + "key": { + "symbol": "debtor_hash" + }, + "val": { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + } + }, + { + "key": { + "symbol": "due_date" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "funded_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "ipfs_cid" + }, + "val": { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + } + }, + { + "key": { + "symbol": "repaid_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "risk_score" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "risk_tier" + }, + "val": { + "vec": [ + { + "symbol": "AAA" + } + ] + } + }, + { + "key": { + "symbol": "sme" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Listed" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "Listing" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "bytes": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "symbol": "USDC" + }, + { + "u64": 1702592000 + }, + { + "string": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi" + }, + { + "u32": 10 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_CRT" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint_invoice" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1702592000 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 1 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "INV_LST" + } + ], + "data": { + "vec": [ + { + "u64": 1 + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "u64": 1 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_listing" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "asking_price" + }, + "val": { + "i128": { + "hi": 0, + "lo": 9500000000 + } + } + }, + { + "key": { + "symbol": "face_value" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000000 + } + } + }, + { + "key": { + "symbol": "funded_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "funding_deadline" + }, + "val": { + "u64": 1702592000 + } + }, + { + "key": { + "symbol": "invoice_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "is_active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "seller" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "token" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_zero_asking_price_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_zero_asking_price_rejected.1.json new file mode 100644 index 0000000..30474ae --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_zero_asking_price_rejected.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_list_invoice_zero_face_value_rejected.1.json b/contracts/marketplace/test_snapshots/tests/test_list_invoice_zero_face_value_rejected.1.json new file mode 100644 index 0000000..ba421d7 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_list_invoice_zero_face_value_rejected.1.json @@ -0,0 +1,1387 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "error": { + "contract": 14 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 14 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 1 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 0 + } + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_whitelist_multiple_tokens.1.json b/contracts/marketplace/test_snapshots/tests/test_whitelist_multiple_tokens.1.json new file mode 100644 index 0000000..ab70ede --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_whitelist_multiple_tokens.1.json @@ -0,0 +1,2147 @@ +{ + "generators": { + "address": 12, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 99 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 99 + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "error": { + "contract": 10 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "vec": [ + { + "string": "contract call failed" + }, + { + "symbol": "set_listed" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 99 + } + ] + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "escalating error to panic" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "caught error from function" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 99 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "list_invoice" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 99 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "u64": 1700086400 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 99 + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_listed" + } + ], + "data": { + "error": { + "contract": 10 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "vec": [ + { + "string": "contract call failed" + }, + { + "symbol": "set_listed" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "u64": 99 + } + ] + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "escalating error to panic" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "string": "caught error from function" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 10 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "list_invoice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "u64": 99 + }, + { + "i128": { + "hi": 0, + "lo": 9000 + } + }, + { + "i128": { + "hi": 0, + "lo": 10000 + } + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + }, + { + "u64": 1700086400 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_whitelist_token_non_admin_returns_not_admin.1.json b/contracts/marketplace/test_snapshots/tests/test_whitelist_token_non_admin_returns_not_admin.1.json new file mode 100644 index 0000000..e71458a --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_whitelist_token_non_admin_returns_not_admin.1.json @@ -0,0 +1,1351 @@ +{ + "generators": { + "address": 12, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "error": { + "contract": 2 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 2 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 2 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "whitelist_token" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/marketplace/test_snapshots/tests/test_whitelist_token_success.1.json b/contracts/marketplace/test_snapshots/tests/test_whitelist_token_success.1.json new file mode 100644 index 0000000..9905773 --- /dev/null +++ b/contracts/marketplace/test_snapshots/tests/test_whitelist_token_success.1.json @@ -0,0 +1,1399 @@ +{ + "generators": { + "address": 11, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "function_name": "whitelist_token", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + } + }, + "sub_invocations": [] + } + ] + ] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 1, + "timestamp": 1700000000, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 10, + "min_persistent_entry_ttl": 1000, + "min_temp_entry_ttl": 1000, + "max_entry_ttl": 100000, + "ledger_entries": [ + [ + { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "balance": 0, + "seq_num": 0, + "num_sub_entries": 0, + "inflation_dest": null, + "flags": 0, + "home_domain": "", + "thresholds": "01010101", + "signers": [], + "ext": "v0" + } + }, + "ext": "v0" + }, + null + ] + ], + [ + { + "contract_data": { + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "AccessControl" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "NextId" + } + ] + }, + "val": { + "u64": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LatePenaltyBps" + } + ] + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "vec": [ + { + "symbol": "WhitelistedToken" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + }, + "durability": "persistent", + "val": { + "bool": true + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "financing_pool" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "invoice_nft" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "FeeBps" + } + ] + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "vec": [ + { + "symbol": "FinancingPool" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "vec": [ + { + "symbol": "InvoiceNft" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Treasury" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 1000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_data": { + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 100000 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 1000 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "init_asset" + } + ], + "data": { + "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "init_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "set_admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "set_admin" + }, + { + "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896" + }, + { + "symbol": "mint" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "mint" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000000000000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "mint" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000006", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000008" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 200 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000008", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "initialize" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 50 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000009" + }, + { + "symbol": "whitelist_token" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "TOK_WL" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000009", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "whitelist_token" + } + ], + "data": "void" + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/shared/src/errors.rs b/contracts/shared/src/errors.rs index 03576e6..f7fa1fd 100644 --- a/contracts/shared/src/errors.rs +++ b/contracts/shared/src/errors.rs @@ -1,165 +1,165 @@ -use soroban_sdk::contracterror; - -/// Common validation/arithmetic errors shared by every contract's -/// `kora_shared::validation` and `kora_shared::reentrancy` helpers. -/// -/// Kept deliberately small: Soroban's `#[contracterror]` macro caps an error -/// enum at 50 variants (`SCSpecUDTErrorEnumV0.cases<50>` in the XDR spec). -/// Domain-specific errors belong on each contract's own local error enum, -/// which implements `From` so `?` still works through the -/// shared validation helpers. -#[contracterror] -#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] -#[repr(u32)] -pub enum CommonError { - InvalidAmount = 1, - InvalidDueDate = 2, - InvalidRiskScore = 3, - InvalidCid = 4, - InvalidFeeRate = 5, - InvalidAddress = 6, - EmptyString = 7, - EmptyBytes = 8, - FieldTooLong = 9, - ArithmeticOverflow = 10, - /// Returned by `safe_sub` when the result would underflow (a < b). - ArithmeticUnderflow = 11, - /// Reentrancy guard triggered. - Reentrancy = 12, -#[contracterror(export = false)] -#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] -#[repr(u32)] -pub enum KoraError { - // Auth & Access - Unauthorized = 1, - NotAdmin = 2, - NotVerifier = 3, - ProtocolPaused = 4, - AlreadyPaused = 5, - NotPaused = 6, - RoleNotAssigned = 7, - - // Invoice - InvoiceNotFound = 10, - InvoiceAlreadyExists = 11, - InvalidInvoiceStatus = 12, - InvoiceExpired = 13, - InvalidAmount = 14, - InvalidDueDate = 15, - InvalidRiskScore = 16, - InvalidCid = 17, - InvoiceFrozen = 18, - BatchSizeExceeded = 19, - NotInvoiceOwner = 19, - - // Marketplace - ListingNotFound = 20, - ListingAlreadyCancelled = 21, - ListingExpired = 22, - FundingDeadlinePassed = 23, - InsufficientFunds = 24, - ExceedsFundingTarget = 25, - AlreadyFullyFunded = 26, - ListingFullyFunded = 27, - FundingNotExpired = 28, - RefundAlreadyClaimed = 29, - NoContribution = 95, - /// funding_deadline is too close to the invoice's due_date (#441) - FundingDeadlineTooCloseToDueDate = 103, - /// A bidding window is active; direct fund_invoice is not allowed in bidding mode (#440) - BiddingWindowActive = 104, - /// The bidding window has closed; no new bids may be submitted (#440) - BiddingWindowClosed = 105, - /// No bid found for the given (invoice_id, investor) pair (#440) - BidNotFound = 106, - /// Investor already has an active bid on this invoice (#440) - BidAlreadyExists = 107, - - // Pool - PoolNotFound = 30, - PoolAlreadyClosed = 31, - RepaymentAlreadyMade = 32, - InsufficientPoolBalance = 33, - PositionNotFound = 34, - SaleAlreadyListed = 35, - SaleNotFound = 36, - - // Treasury - InvalidFeeRate = 40, - WithdrawalFailed = 41, - TokenNotWhitelisted = 42, - WithdrawalRateLimitExceeded = 43, - WithdrawalCapTimelockNotElapsed = 44, - NoCapChangeProposed = 45, - - // Risk - SMENotRegistered = 50, - DebtorNotRegistered = 51, - RiskScoreOutOfRange = 52, - ComplianceNotAttested = 53, - // SME profile exists but has not been marked `verified` by a risk_registry verifier - SMENotVerified = 54, - - // General - ArithmeticOverflow = 90, - /// Returned by `safe_sub` when the result would underflow (a < b). - ArithmeticUnderflow = 91, - InvalidAddress = 92, - EmptyString = 93, - AlreadyInitialized = 94, - NotInitialized = 96, - /// Distinct error for empty bytes (semantically different from EmptyString) - EmptyBytes = 97, - /// Reentrancy guard triggered - // Reentrancy guard triggered - Reentrancy = 98, - /// Byte slice has the wrong length (e.g. debtor_hash must be exactly 32 bytes) - InvalidLength = 99, - // Upgrade - NoUpgradeProposed = 100, - UpgradeTimelockNotElapsed = 101, - /// Field value exceeds the allowed maximum length - FieldTooLong = 102, - // Parameter governance - ParameterProposalNotFound = 110, - ParameterProposalAlreadyExecuted = 111, - NotMultisigSigner = 112, - AlreadyVoted = 113, - GovernanceThresholdNotMet = 114, - GovernanceTimelockNotElapsed = 115, - InvalidParameterValue = 116, - /// Cooldown between debtor risk score updates per (verifier, debtor_hash) pair - ScoreUpdateCooldownNotElapsed = 117, - /// Marketplace two-phase cancellation - CancellationPending = 118, - NoCancellationPending = 119, - - // Multisig admin-action proposals - InvalidThreshold = 120, - ProposalNotFound = 121, - ProposalAlreadyExecuted = 122, - ProposalExpired = 123, - AlreadyApproved = 124, - ThresholdNotMet = 125, - MultisigNotConfigured = 126, - SignerNotFound = 127, - - // Invoice ownership, credit limit, currency allowlist - CreditLimitExceeded = 130, - NotInvoiceOwner = 131, - CurrencyNotAllowed = 132, - // Minting/amending an invoice would push the SME's aggregate OutstandingExposure - // above their risk_registry-assigned SmeProfile.credit_limit - CreditLimitExceeded = 120, - // A currency symbol is not on the invoice_nft CurrencyAllowlist - CurrencyNotAllowed = 121, - // Access-control admin-action multisig - InvalidThreshold = 122, - ProposalNotFound = 123, - ProposalAlreadyExecuted = 124, - ProposalExpired = 125, - AlreadyApproved = 126, - ThresholdNotMet = 127, - MultisigNotConfigured = 128, - SignerNotFound = 129, -} +use soroban_sdk::contracterror; + +/// Common validation/arithmetic errors shared by every contract's +/// `kora_shared::validation` and `kora_shared::reentrancy` helpers. +/// +/// Kept deliberately small: Soroban's `#[contracterror]` macro caps an error +/// enum at 50 variants (`SCSpecUDTErrorEnumV0.cases<50>` in the XDR spec). +/// Domain-specific errors belong on each contract's own local error enum, +/// which implements `From` so `?` still works through the +/// shared validation helpers. +#[contracterror] +#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] +#[repr(u32)] +pub enum CommonError { + InvalidAmount = 1, + InvalidDueDate = 2, + InvalidRiskScore = 3, + InvalidCid = 4, + InvalidFeeRate = 5, + InvalidAddress = 6, + EmptyString = 7, + EmptyBytes = 8, + FieldTooLong = 9, + ArithmeticOverflow = 10, + /// Returned by `safe_sub` when the result would underflow (a < b). + ArithmeticUnderflow = 11, + /// Reentrancy guard triggered. + Reentrancy = 12, +#[contracterror(export = false)] +#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] +#[repr(u32)] +pub enum KoraError { + // Auth & Access + Unauthorized = 1, + NotAdmin = 2, + NotVerifier = 3, + ProtocolPaused = 4, + AlreadyPaused = 5, + NotPaused = 6, + RoleNotAssigned = 7, + + // Invoice + InvoiceNotFound = 10, + InvoiceAlreadyExists = 11, + InvalidInvoiceStatus = 12, + InvoiceExpired = 13, + InvalidAmount = 14, + InvalidDueDate = 15, + InvalidRiskScore = 16, + InvalidCid = 17, + InvoiceFrozen = 18, + BatchSizeExceeded = 19, + NotInvoiceOwner = 19, + + // Marketplace + ListingNotFound = 20, + ListingAlreadyCancelled = 21, + ListingExpired = 22, + FundingDeadlinePassed = 23, + InsufficientFunds = 24, + ExceedsFundingTarget = 25, + AlreadyFullyFunded = 26, + ListingFullyFunded = 27, + FundingNotExpired = 28, + RefundAlreadyClaimed = 29, + NoContribution = 95, + /// funding_deadline is too close to the invoice's due_date (#441) + FundingDeadlineTooCloseToDueDate = 103, + /// A bidding window is active; direct fund_invoice is not allowed in bidding mode (#440) + BiddingWindowActive = 104, + /// The bidding window has closed; no new bids may be submitted (#440) + BiddingWindowClosed = 105, + /// No bid found for the given (invoice_id, investor) pair (#440) + BidNotFound = 106, + /// Investor already has an active bid on this invoice (#440) + BidAlreadyExists = 107, + + // Pool + PoolNotFound = 30, + PoolAlreadyClosed = 31, + RepaymentAlreadyMade = 32, + InsufficientPoolBalance = 33, + PositionNotFound = 34, + SaleAlreadyListed = 35, + SaleNotFound = 36, + + // Treasury + InvalidFeeRate = 40, + WithdrawalFailed = 41, + TokenNotWhitelisted = 42, + WithdrawalRateLimitExceeded = 43, + WithdrawalCapTimelockNotElapsed = 44, + NoCapChangeProposed = 45, + + // Risk + SMENotRegistered = 50, + DebtorNotRegistered = 51, + RiskScoreOutOfRange = 52, + ComplianceNotAttested = 53, + // SME profile exists but has not been marked `verified` by a risk_registry verifier + SMENotVerified = 54, + + // General + ArithmeticOverflow = 90, + /// Returned by `safe_sub` when the result would underflow (a < b). + ArithmeticUnderflow = 91, + InvalidAddress = 92, + EmptyString = 93, + AlreadyInitialized = 94, + NotInitialized = 96, + /// Distinct error for empty bytes (semantically different from EmptyString) + EmptyBytes = 97, + /// Reentrancy guard triggered + // Reentrancy guard triggered + Reentrancy = 98, + /// Byte slice has the wrong length (e.g. debtor_hash must be exactly 32 bytes) + InvalidLength = 99, + // Upgrade + NoUpgradeProposed = 100, + UpgradeTimelockNotElapsed = 101, + /// Field value exceeds the allowed maximum length + FieldTooLong = 102, + // Parameter governance + ParameterProposalNotFound = 110, + ParameterProposalAlreadyExecuted = 111, + NotMultisigSigner = 112, + AlreadyVoted = 113, + GovernanceThresholdNotMet = 114, + GovernanceTimelockNotElapsed = 115, + InvalidParameterValue = 116, + /// Cooldown between debtor risk score updates per (verifier, debtor_hash) pair + ScoreUpdateCooldownNotElapsed = 117, + /// Marketplace two-phase cancellation + CancellationPending = 118, + NoCancellationPending = 119, + + // Multisig admin-action proposals + InvalidThreshold = 120, + ProposalNotFound = 121, + ProposalAlreadyExecuted = 122, + ProposalExpired = 123, + AlreadyApproved = 124, + ThresholdNotMet = 125, + MultisigNotConfigured = 126, + SignerNotFound = 127, + + // Invoice ownership, credit limit, currency allowlist + CreditLimitExceeded = 130, + NotInvoiceOwner = 131, + CurrencyNotAllowed = 132, + // Minting/amending an invoice would push the SME's aggregate OutstandingExposure + // above their risk_registry-assigned SmeProfile.credit_limit + CreditLimitExceeded = 120, + // A currency symbol is not on the invoice_nft CurrencyAllowlist + CurrencyNotAllowed = 121, + // Access-control admin-action multisig + InvalidThreshold = 122, + ProposalNotFound = 123, + ProposalAlreadyExecuted = 124, + ProposalExpired = 125, + AlreadyApproved = 126, + ThresholdNotMet = 127, + MultisigNotConfigured = 128, + SignerNotFound = 129, +} diff --git a/contracts/shared/src/reentrancy.rs b/contracts/shared/src/reentrancy.rs index 22b39e2..c1aca20 100644 --- a/contracts/shared/src/reentrancy.rs +++ b/contracts/shared/src/reentrancy.rs @@ -1,187 +1,187 @@ -use crate::errors::CommonError; -use soroban_sdk::{contracttype, Env}; - -/// Storage key for the reentrancy lock. -#[contracttype] -pub enum GuardKey { - Lock, -} - -// ── Low-level helpers ───────────────────────────────────────────────────────── - -/// Acquire the reentrancy lock. Returns `CommonError::Reentrancy` if already held. -pub fn acquire_guard(env: &Env) -> Result<(), CommonError> { - if env.storage().instance().has(&GuardKey::Lock) { - return Err(CommonError::Reentrancy); - } - env.storage().instance().set(&GuardKey::Lock, &true); - Ok(()) -} - -/// Release the reentrancy lock. -pub fn release_guard(env: &Env) { - env.storage().instance().remove(&GuardKey::Lock); -} - -/// Returns `true` if the reentrancy lock is currently held. -pub fn is_locked(env: &Env) -> bool { - env.storage().instance().has(&GuardKey::Lock) -} - -// ── RAII Guard ─────────────────────────────────────────────────────────────── - -/// RAII reentrancy guard. Acquires the lock on construction and releases it -/// when dropped, guaranteeing exactly one release per successful acquire. -pub struct ReentrancyGuard { - env: Env, -} - -impl ReentrancyGuard { - pub fn new(env: &Env) -> Result { - acquire_guard(env)?; - Ok(Self { env: env.clone() }) - } -} - -impl Drop for ReentrancyGuard { - fn drop(&mut self) { - release_guard(&self.env); - } -} - -// ── Tests ───────────────────────────────────────────────────────────────────── - - -#[cfg(test)] -mod tests { - use super::*; - use soroban_sdk::{contract, contractimpl, Env}; - - /// Dummy contract solely so `as_contract` below has a real registered - /// contract instance to attach the storage-backed guard functions to. - #[contract] - struct DummyContract; - - #[contractimpl] - impl DummyContract { - pub fn noop() {} - } - - /// Storage access requires an active contract frame; these tests exercise - /// the guard's storage-backed functions directly (not through a real - /// contract invocation), so each body runs inside `env.as_contract(..)`. - fn with_contract_env(f: impl FnOnce(&Env)) { - let env = Env::default(); - let contract_id = env.register_contract(None, DummyContract); - env.as_contract(&contract_id, || f(&env)); - } - - #[test] - fn test_acquire_succeeds_when_unlocked() { - with_contract_env(|env| { - assert!(acquire_guard(env).is_ok()); - release_guard(env); - }); - } - - #[test] - fn test_acquire_fails_when_locked() { - with_contract_env(|env| { - acquire_guard(env).unwrap(); - let result = acquire_guard(env); - assert_eq!(result.err().unwrap(), CommonError::Reentrancy); - release_guard(env); - }); - } - - #[test] - fn test_release_allows_reacquire() { - with_contract_env(|env| { - acquire_guard(env).unwrap(); - release_guard(env); - assert!(acquire_guard(env).is_ok()); - release_guard(env); - }); - } - - #[test] - fn test_is_locked_reflects_state() { - with_contract_env(|env| { - assert!(!is_locked(env)); - acquire_guard(env).unwrap(); - assert!(is_locked(env)); - release_guard(env); - assert!(!is_locked(env)); - }); - } - - #[test] - fn test_double_acquire_returns_reentrancy_error() { - with_contract_env(|env| { - acquire_guard(env).unwrap(); - let err = acquire_guard(env).err().unwrap(); - assert_eq!(err, CommonError::Reentrancy); - release_guard(env); - }); - } - - #[test] - fn test_release_without_acquire_is_safe() { - with_contract_env(|env| { - release_guard(env); - assert!(acquire_guard(env).is_ok()); - release_guard(env); - }); - } - - #[test] - fn test_raii_guard_releases_on_early_return() { - with_contract_env(|env| { - fn protected(env: &Env) -> Result<(), CommonError> { - let _guard = ReentrancyGuard::new(env)?; - Err(CommonError::InvalidAmount) - } - let _ = protected(env); - assert!(!is_locked(env)); - }); - } - - #[test] - fn test_raii_guard_releases_on_success() { - with_contract_env(|env| { - fn protected(env: &Env) -> Result<(), CommonError> { - let _guard = ReentrancyGuard::new(env)?; - Ok(()) - } - protected(env).unwrap(); - assert!(!is_locked(env)); - }); - } - - #[test] - fn test_raii_nested_guard_fails() { - with_contract_env(|env| { - let _guard = ReentrancyGuard::new(env).unwrap(); - assert_eq!(ReentrancyGuard::new(env).err().unwrap(), CommonError::Reentrancy); - }); - } - - #[test] - fn test_multiple_guard_cycles() { - with_contract_env(|env| { - for _ in 0..5 { - assert!(acquire_guard(env).is_ok()); - release_guard(env); - } - }); - } - - #[test] - fn test_raii_nested_guard_fails_and_releases_on_drop() { - with_contract_env(|env| { - let _guard = ReentrancyGuard::new(env).unwrap(); - let result = ReentrancyGuard::new(env); - assert_eq!(result.err().unwrap(), CommonError::Reentrancy); - }); - } -} +use crate::errors::CommonError; +use soroban_sdk::{contracttype, Env}; + +/// Storage key for the reentrancy lock. +#[contracttype] +pub enum GuardKey { + Lock, +} + +// ── Low-level helpers ───────────────────────────────────────────────────────── + +/// Acquire the reentrancy lock. Returns `CommonError::Reentrancy` if already held. +pub fn acquire_guard(env: &Env) -> Result<(), CommonError> { + if env.storage().instance().has(&GuardKey::Lock) { + return Err(CommonError::Reentrancy); + } + env.storage().instance().set(&GuardKey::Lock, &true); + Ok(()) +} + +/// Release the reentrancy lock. +pub fn release_guard(env: &Env) { + env.storage().instance().remove(&GuardKey::Lock); +} + +/// Returns `true` if the reentrancy lock is currently held. +pub fn is_locked(env: &Env) -> bool { + env.storage().instance().has(&GuardKey::Lock) +} + +// ── RAII Guard ─────────────────────────────────────────────────────────────── + +/// RAII reentrancy guard. Acquires the lock on construction and releases it +/// when dropped, guaranteeing exactly one release per successful acquire. +pub struct ReentrancyGuard { + env: Env, +} + +impl ReentrancyGuard { + pub fn new(env: &Env) -> Result { + acquire_guard(env)?; + Ok(Self { env: env.clone() }) + } +} + +impl Drop for ReentrancyGuard { + fn drop(&mut self) { + release_guard(&self.env); + } +} + +// ── Tests ───────────────────────────────────────────────────────────────────── + + +#[cfg(test)] +mod tests { + use super::*; + use soroban_sdk::{contract, contractimpl, Env}; + + /// Dummy contract solely so `as_contract` below has a real registered + /// contract instance to attach the storage-backed guard functions to. + #[contract] + struct DummyContract; + + #[contractimpl] + impl DummyContract { + pub fn noop() {} + } + + /// Storage access requires an active contract frame; these tests exercise + /// the guard's storage-backed functions directly (not through a real + /// contract invocation), so each body runs inside `env.as_contract(..)`. + fn with_contract_env(f: impl FnOnce(&Env)) { + let env = Env::default(); + let contract_id = env.register_contract(None, DummyContract); + env.as_contract(&contract_id, || f(&env)); + } + + #[test] + fn test_acquire_succeeds_when_unlocked() { + with_contract_env(|env| { + assert!(acquire_guard(env).is_ok()); + release_guard(env); + }); + } + + #[test] + fn test_acquire_fails_when_locked() { + with_contract_env(|env| { + acquire_guard(env).unwrap(); + let result = acquire_guard(env); + assert_eq!(result.err().unwrap(), CommonError::Reentrancy); + release_guard(env); + }); + } + + #[test] + fn test_release_allows_reacquire() { + with_contract_env(|env| { + acquire_guard(env).unwrap(); + release_guard(env); + assert!(acquire_guard(env).is_ok()); + release_guard(env); + }); + } + + #[test] + fn test_is_locked_reflects_state() { + with_contract_env(|env| { + assert!(!is_locked(env)); + acquire_guard(env).unwrap(); + assert!(is_locked(env)); + release_guard(env); + assert!(!is_locked(env)); + }); + } + + #[test] + fn test_double_acquire_returns_reentrancy_error() { + with_contract_env(|env| { + acquire_guard(env).unwrap(); + let err = acquire_guard(env).err().unwrap(); + assert_eq!(err, CommonError::Reentrancy); + release_guard(env); + }); + } + + #[test] + fn test_release_without_acquire_is_safe() { + with_contract_env(|env| { + release_guard(env); + assert!(acquire_guard(env).is_ok()); + release_guard(env); + }); + } + + #[test] + fn test_raii_guard_releases_on_early_return() { + with_contract_env(|env| { + fn protected(env: &Env) -> Result<(), CommonError> { + let _guard = ReentrancyGuard::new(env)?; + Err(CommonError::InvalidAmount) + } + let _ = protected(env); + assert!(!is_locked(env)); + }); + } + + #[test] + fn test_raii_guard_releases_on_success() { + with_contract_env(|env| { + fn protected(env: &Env) -> Result<(), CommonError> { + let _guard = ReentrancyGuard::new(env)?; + Ok(()) + } + protected(env).unwrap(); + assert!(!is_locked(env)); + }); + } + + #[test] + fn test_raii_nested_guard_fails() { + with_contract_env(|env| { + let _guard = ReentrancyGuard::new(env).unwrap(); + assert_eq!(ReentrancyGuard::new(env).err().unwrap(), CommonError::Reentrancy); + }); + } + + #[test] + fn test_multiple_guard_cycles() { + with_contract_env(|env| { + for _ in 0..5 { + assert!(acquire_guard(env).is_ok()); + release_guard(env); + } + }); + } + + #[test] + fn test_raii_nested_guard_fails_and_releases_on_drop() { + with_contract_env(|env| { + let _guard = ReentrancyGuard::new(env).unwrap(); + let result = ReentrancyGuard::new(env); + assert_eq!(result.err().unwrap(), CommonError::Reentrancy); + }); + } +} diff --git a/contracts/shared/src/validation.rs b/contracts/shared/src/validation.rs index 2185cec..d1044f9 100644 --- a/contracts/shared/src/validation.rs +++ b/contracts/shared/src/validation.rs @@ -1,997 +1,997 @@ -use soroban_sdk::{Address, Bytes, Env, String}; -use crate::errors::CommonError; - -/// Minimum timelock delay for upgrade proposals (24 hours in seconds). -pub const UPGRADE_TIMELOCK_DELAY: u64 = 86_400; - -// ── Amount guards ───────────────────────────────────────────────────────────── - -/// Upper bound for i128 amounts — prevents overflow in intermediate arithmetic -/// (e.g., multiplication by fee/bps values). Any amount above this ceiling risks -/// overflow when multiplied by 10_000 (max bps). -pub const MAX_AMOUNT: i128 = i128::MAX / 2; - -/// Reject amounts that exceed the overflow-safety ceiling. -#[inline] -pub fn require_within_max_amount(amount: i128) -> Result<(), CommonError> { - if amount > MAX_AMOUNT { - return Err(CommonError::InvalidAmount); - } - Ok(()) -} - -/// Reject zero or negative amounts. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_non_zero_amount; -/// assert!(require_non_zero_amount(100).is_ok()); -/// assert!(require_non_zero_amount(0).is_err()); -/// assert!(require_non_zero_amount(-50).is_err()); -/// ``` -pub fn require_non_zero_amount(amount: i128) -> Result<(), CommonError> { - if amount <= 0 { - return Err(CommonError::InvalidAmount); - } - Ok(()) -} - -/// Allows zero but rejects negative values. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_non_negative_amount; -/// assert!(require_non_negative_amount(100).is_ok()); -/// assert!(require_non_negative_amount(0).is_ok()); -/// assert!(require_non_negative_amount(-50).is_err()); -/// ``` -pub fn require_non_negative_amount(amount: i128) -> Result<(), CommonError> { - if amount < 0 { - return Err(CommonError::InvalidAmount); - } - Ok(()) -} - -/// Reject amounts outside [0, max]. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_amount_within_bounds; -/// assert!(require_amount_within_bounds(50, 100).is_ok()); -/// assert!(require_amount_within_bounds(100, 100).is_ok()); -/// assert!(require_amount_within_bounds(101, 100).is_err()); -/// assert!(require_amount_within_bounds(-1, 100).is_err()); -/// ``` -pub fn require_amount_within_bounds(amount: i128, max: i128) -> Result<(), CommonError> { - if amount < 0 || amount > max { - return Err(CommonError::InvalidAmount); - } - Ok(()) -} - -// ── Timestamp guards ────────────────────────────────────────────────────────── - -/// Reject timestamps that are not strictly in the future relative to the -/// current ledger time. Equal timestamps are also rejected. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_future_timestamp; -/// use soroban_sdk::Env; -/// -/// let env = Env::default(); -/// // Set ledger timestamp to 1000 -/// env.ledger().set_timestamp(1000); -/// assert!(require_future_timestamp(&env, 1001).is_ok()); // future -/// assert!(require_future_timestamp(&env, 1000).is_err()); // equal -/// assert!(require_future_timestamp(&env, 999).is_err()); // past -/// ``` -pub fn require_future_timestamp(env: &Env, ts: u64) -> Result<(), CommonError> { - if ts <= env.ledger().timestamp() { - return Err(CommonError::InvalidDueDate); - } - Ok(()) -} - -// ── Risk / fee guards ───────────────────────────────────────────────────────── - -/// Reject risk scores above 100. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_valid_risk_score; -/// assert!(require_valid_risk_score(50).is_ok()); -/// assert!(require_valid_risk_score(100).is_ok()); -/// assert!(require_valid_risk_score(101).is_err()); -/// ``` -pub fn require_valid_risk_score(score: u32) -> Result<(), CommonError> { - if score > 100 { - return Err(CommonError::InvalidRiskScore); - } - Ok(()) -} - -/// Reject fee rates above 10 000 bps (100 %). -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_valid_fee_bps; -/// assert!(require_valid_fee_bps(50).is_ok()); // 0.5% -/// assert!(require_valid_fee_bps(10000).is_ok()); // 100% -/// assert!(require_valid_fee_bps(10001).is_err()); // > 100% -/// ``` -pub fn require_valid_fee_bps(bps: u32) -> Result<(), CommonError> { - if bps > 10_000 { - return Err(CommonError::InvalidFeeRate); - } - Ok(()) -} - -/// Validates that `bps` is within [min_bps, max_bps] inclusive. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_valid_bps_range; -/// assert!(require_valid_bps_range(50, 0, 100).is_ok()); -/// assert!(require_valid_bps_range(0, 0, 100).is_ok()); -/// assert!(require_valid_bps_range(100, 0, 100).is_ok()); -/// assert!(require_valid_bps_range(101, 0, 100).is_err()); -/// ``` -pub fn require_valid_bps_range(bps: u32, min_bps: u32, max_bps: u32) -> Result<(), CommonError> { - if bps < min_bps || bps > max_bps { - return Err(CommonError::InvalidFeeRate); - } - Ok(()) -} - -// ── String / bytes guards ───────────────────────────────────────────────────── - -/// Reject empty Soroban strings. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_non_empty_string; -/// use soroban_sdk::{Env, String as SorobanString}; -/// -/// let env = Env::default(); -/// let empty = SorobanString::from_str(&env, ""); -/// let non_empty = SorobanString::from_str(&env, "hello"); -/// assert!(require_non_empty_string(&empty).is_err()); -/// assert!(require_non_empty_string(&non_empty).is_ok()); -/// ``` -pub fn require_non_empty_string(s: &String) -> Result<(), CommonError> { - if s.len() == 0 { - return Err(CommonError::EmptyString); - } - Ok(()) -} - -/// Maximum supported IPFS CID length in bytes. -const CID_MAX_LEN: u32 = 128; - -/// Validate that a string is a structurally valid IPFS CID (v0 or v1). -/// -/// CIDv0: exactly 46 base58btc characters, "Qm" prefix. -/// CIDv1: multibase-prefixed ('b'/'B' base32, 'z' base58, 'f'/'F' base16, -/// 'u'/'U' base64url, 'k'/'K' base36), minimum 10 characters. -pub fn require_valid_ipfs_cid(cid: &String) -> Result<(), CommonError> { - let len = cid.len(); - if len < 2 || len > CID_MAX_LEN { - return Err(CommonError::InvalidCid); - } - let mut buf = [0u8; CID_MAX_LEN as usize]; - cid.copy_into_slice(&mut buf[..len as usize]); - let first = buf[0]; - let second = buf[1]; - // CIDv0: "Qm" prefix, exactly 46 chars, base58btc alphabet - if first == b'Q' && second == b'm' { - if len != 46 { - return Err(CommonError::InvalidCid); - } - for &c in &buf[..46] { - if !is_base58_char(c) { - return Err(CommonError::InvalidCid); - } - } - return Ok(()); - } - // CIDv1: multibase prefix — common encodings only - if matches!(first, b'b' | b'B' | b'z' | b'f' | b'F' | b'u' | b'U' | b'k' | b'K') { - if len < 10 { - return Err(CommonError::InvalidCid); - } - return Ok(()); - } - Err(CommonError::InvalidCid) -} - -/// Returns true for characters in the base58btc alphabet. -/// Excludes: '0' (zero), 'O' (uppercase O), 'I' (uppercase I), 'l' (lowercase L). -fn is_base58_char(c: u8) -> bool { - matches!(c, - b'1'..=b'9' - | b'A'..=b'H' - | b'J'..=b'N' - | b'P'..=b'Z' - | b'a'..=b'k' - | b'm'..=b'z' - ) -} - -/// Reject empty byte slices. Returns `EmptyBytes` (distinct from `EmptyString`). -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_non_empty_bytes; -/// use soroban_sdk::{Env, Bytes}; -/// -/// let env = Env::default(); -/// let empty = Bytes::from_slice(&env, &[]); -/// let non_empty = Bytes::from_slice(&env, &[1, 2, 3]); -/// assert!(require_non_empty_bytes(&empty).is_err()); -/// assert!(require_non_empty_bytes(&non_empty).is_ok()); -/// ``` -#[inline] -pub fn require_non_empty_bytes(b: &Bytes) -> Result<(), CommonError> { - if b.len() == 0 { - return Err(CommonError::EmptyBytes); - } - Ok(()) -} - -/// Reject strings whose length exceeds `max_bytes`. -#[inline] -pub fn require_max_length_string(s: &String, max_bytes: u32) -> Result<(), CommonError> { - if s.len() > max_bytes { - return Err(CommonError::FieldTooLong); - } - Ok(()) -} - -/// Reject byte slices whose length exceeds `max_bytes`. -#[inline] -pub fn require_max_length_bytes(b: &Bytes, max_bytes: u32) -> Result<(), CommonError> { - if b.len() > max_bytes { - return Err(CommonError::FieldTooLong); - } - Ok(()) -} - -/// Reject byte slices that are not exactly `expected_len` bytes. -#[inline] -pub fn require_exact_length(b: &Bytes, expected_len: u32) -> Result<(), KoraError> { - if b.len() != expected_len { - return Err(KoraError::InvalidLength); - } - Ok(()) -} - -/// Maximum allowed byte length for an IPFS CID stored on-chain. -pub const MAX_IPFS_CID_LEN: u32 = 128; - -/// Maximum allowed byte length for a debtor hash stored on-chain. -pub const MAX_DEBTOR_HASH_LEN: u32 = 64; - -// ── Batch size guards ───────────────────────────────────────────────────────── - -/// Maximum number of invoices allowed in a single batch mint operation. -/// -/// Chosen conservatively based on measured resource cost per invoice: -/// - 1 persistent storage write (~50K CPU instructions) -/// - 1 event emission (~5K CPU instructions) -/// - 1 TTL bump (~10K CPU instructions) -/// = ~65K CPU per invoice -/// -/// With 25 invoices: ~1.625M total CPU (safe margin under Soroban's ~80M budget) -/// Allows reasonable batch sizes while leaving headroom for auth checks, reentrancy -/// guard, state transitions, and other middleware. -pub const MAX_BATCH_MINT_SIZE: u32 = 25; - -/// Reject batch mint requests with more invoices than the configured maximum. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_batch_size_within_limit; -/// assert!(require_batch_size_within_limit(10).is_ok()); -/// assert!(require_batch_size_within_limit(25).is_ok()); // At limit -/// assert!(require_batch_size_within_limit(26).is_err()); // Over limit -/// ``` -#[inline] -pub fn require_batch_size_within_limit(batch_size: u32) -> Result<(), KoraError> { - if batch_size > MAX_BATCH_MINT_SIZE { - return Err(KoraError::BatchSizeExceeded); - } - Ok(()) -} - -// ── Safe arithmetic ─────────────────────────────────────────────────────────── - -/// Compute `amount * bps / 10_000` with overflow protection. -/// Rejects negative amounts to prevent silent negative fees. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::bps_of; -/// assert_eq!(bps_of(10_000, 100).unwrap(), 100); // 1% of 10_000 = 100 -/// assert_eq!(bps_of(1_000_000, 50).unwrap(), 5_000); // 0.5% of 1_000_000 = 5_000 -/// assert!(bps_of(-1_000, 50).is_err()); // negative amount rejected -/// ``` -#[inline] -pub fn bps_of(amount: i128, bps: u32) -> Result { - if amount < 0 { - return Err(CommonError::InvalidAmount); - } - amount - .checked_mul(bps as i128) - .and_then(|v| v.checked_div(10_000)) - .ok_or(CommonError::ArithmeticOverflow) -} - -/// Safe addition — returns `ArithmeticOverflow` on overflow. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::safe_add; -/// assert_eq!(safe_add(100, 200).unwrap(), 300); -/// assert!(safe_add(i128::MAX, 1).is_err()); -/// ``` -pub fn safe_add(a: i128, b: i128) -> Result { - a.checked_add(b).ok_or(CommonError::ArithmeticOverflow) -} - -/// Safe subtraction — returns `ArithmeticUnderflow` when result would underflow. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::safe_sub; -/// assert_eq!(safe_sub(300, 100).unwrap(), 200); -/// assert!(safe_sub(100, 200).is_err()); // underflow -/// ``` -pub fn safe_sub(a: i128, b: i128) -> Result { - a.checked_sub(b).ok_or(CommonError::ArithmeticUnderflow) -} - -/// Reject the contract's own address being passed as a counterparty or admin. -/// Prevents self-referential configuration bugs (e.g. admin == contract itself). -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_not_self; -/// use soroban_sdk::Env; -/// -/// let env = Env::default(); -/// let contract_addr = env.current_contract_address(); -/// let other_addr = soroban_sdk::Address::generate(&env); -/// assert!(require_not_self(&env, &contract_addr).is_err()); -/// assert!(require_not_self(&env, &other_addr).is_ok()); -/// ``` -pub fn require_not_self(env: &Env, addr: &Address) -> Result<(), CommonError> { - if addr == &env.current_contract_address() { - return Err(CommonError::InvalidAddress); - } - Ok(()) -} - -/// Reject two addresses being identical where they must be distinct -/// (e.g. admin == treasury, or two different contract addresses colliding). -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::require_distinct; -/// use soroban_sdk::{Env, Address}; -/// -/// let env = Env::default(); -/// let addr1 = Address::generate(&env); -/// let addr2 = Address::generate(&env); -/// assert!(require_distinct(&addr1, &addr2).is_ok()); -/// assert!(require_distinct(&addr1, &addr1).is_err()); -/// ``` -pub fn require_distinct(a: &Address, b: &Address) -> Result<(), CommonError> { - if a == b { - return Err(CommonError::InvalidAddress); - } - Ok(()) -} - -/// Safe multiplication — returns `ArithmeticOverflow` on overflow. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::safe_mul; -/// assert_eq!(safe_mul(10, 20).unwrap(), 200); -/// assert!(safe_mul(i128::MAX, 2).is_err()); -/// ``` -pub fn safe_mul(a: i128, b: i128) -> Result { - a.checked_mul(b).ok_or(CommonError::ArithmeticOverflow) -} - -/// Safe division — returns `InvalidAmount` on divide-by-zero, `ArithmeticOverflow` otherwise. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::safe_div; -/// assert_eq!(safe_div(200, 4).unwrap(), 50); -/// assert!(safe_div(100, 0).is_err()); // divide by zero -/// ``` -pub fn safe_div(a: i128, b: i128) -> Result { - if b == 0 { - return Err(CommonError::InvalidAmount); - } - a.checked_div(b).ok_or(CommonError::ArithmeticOverflow) -} - -// ── Decimal normalization ──────────────────────────────────────────────────── - -/// The standard decimal precision used for all internal arithmetic (7 decimals, -/// matching Stellar's stroop convention: 1 XLM = 10^7 stroops). -pub const STANDARD_DECIMALS: u32 = 7; - -/// Normalize an amount from `token_decimals` to `STANDARD_DECIMALS`. -/// Scales up (multiplies) if token has fewer decimals, scales down (divides) -/// if token has more. Returns `ArithmeticOverflow` on overflow. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::{normalize_amount, STANDARD_DECIMALS}; -/// // USDC 6-decimal: 1 USDC = 1_000_000 normalized to 10_000_000 (7 decimals) -/// assert_eq!(normalize_amount(1_000_000, 6).unwrap(), 10_000_000); -/// // 7 decimals: no change -/// assert_eq!(normalize_amount(1_000_000, 7).unwrap(), 1_000_000); -/// // 8 decimals: scale down -/// assert_eq!(normalize_amount(100_000_000, 8).unwrap(), 10_000_000); -/// ``` -pub fn normalize_amount(amount: i128, token_decimals: u32) -> Result { - if token_decimals == STANDARD_DECIMALS { - return Ok(amount); - } - if token_decimals < STANDARD_DECIMALS { - let scale = 10i128 - .checked_pow(STANDARD_DECIMALS - token_decimals) - .ok_or(CommonError::ArithmeticOverflow)?; - amount.checked_mul(scale).ok_or(CommonError::ArithmeticOverflow) - } else { - let scale = 10i128 - .checked_pow(token_decimals - STANDARD_DECIMALS) - .ok_or(CommonError::ArithmeticOverflow)?; - amount.checked_div(scale).ok_or(CommonError::ArithmeticOverflow) - } -} - -/// Denormalize an amount from `STANDARD_DECIMALS` back to `token_decimals`. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::{normalize_amount, denormalize_amount}; -/// let original = 1_000_000i128; // 1 USDC (6 decimals) -/// let normalized = normalize_amount(original, 6).unwrap(); -/// let restored = denormalize_amount(normalized, 6).unwrap(); -/// assert_eq!(restored, original); -/// ``` -pub fn denormalize_amount(amount: i128, token_decimals: u32) -> Result { - if token_decimals == STANDARD_DECIMALS { - return Ok(amount); - } - if token_decimals < STANDARD_DECIMALS { - let scale = 10i128 - .checked_pow(STANDARD_DECIMALS - token_decimals) - .ok_or(CommonError::ArithmeticOverflow)?; - amount.checked_div(scale).ok_or(CommonError::ArithmeticOverflow) - } else { - let scale = 10i128 - .checked_pow(token_decimals - STANDARD_DECIMALS) - .ok_or(CommonError::ArithmeticOverflow)?; - amount.checked_mul(scale).ok_or(CommonError::ArithmeticOverflow) - } -} - -/// Compute `amount * bps / 10_000` with decimal normalization. -/// Normalizes to STANDARD_DECIMALS, computes bps, then denormalizes back. -/// For same-decimal (7) tokens, behavior is identical to `bps_of`. -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::bps_of_normalized; -/// // USDC (6-decimal): 1 USDC with 1% fee -/// assert_eq!(bps_of_normalized(1_000_000, 100, 6).unwrap(), 10_000); -/// // Same decimal as standard: should match bps_of behavior -/// assert_eq!(bps_of_normalized(10_000, 100, 7).unwrap(), 100); -/// ``` -pub fn bps_of_normalized( - amount: i128, - bps: u32, - token_decimals: u32, -) -> Result { - if amount < 0 { - return Err(CommonError::InvalidAmount); - } - let normalized = normalize_amount(amount, token_decimals)?; - let result = normalized - .checked_mul(bps as i128) - .and_then(|v| v.checked_div(10_000)) - .ok_or(CommonError::ArithmeticOverflow)?; - denormalize_amount(result, token_decimals) -} - -// ── TTL helpers ────────────────────────────────────────────────────────────── - -/// Default TTL threshold in ledgers (~30 days at ~5s/ledger). -pub const DEFAULT_TTL_THRESHOLD: u32 = 518_400; - -/// Default TTL bump amount in ledgers (~30 days at ~5s/ledger). -pub const DEFAULT_TTL_BUMP: u32 = 518_400; - -/// Extend the TTL of a persistent storage entry if it's below the threshold. -/// -/// This is a helper for contracts to manage their persistent storage TTL. -/// Call this after writing to persistent storage to ensure the entry -/// doesn't expire unexpectedly. -/// -/// # Arguments -/// * `env` - The Soroban environment -/// * `key` - The storage key to extend -/// * `threshold` - The minimum TTL in ledgers before extension is triggered -/// * `bump` - The amount of ledgers to extend the TTL by -/// -/// # Examples -/// ```ignore -/// use kora_shared::validation::{extend_persistent_ttl, DEFAULT_TTL_THRESHOLD, DEFAULT_TTL_BUMP}; -/// use soroban_sdk::Env; -/// -/// let env = Env::default(); -/// // Example key (would be actual storage key in contract) -/// let key = "admin"; -/// // Extend TTL if below threshold, bumping by DEFAULT_TTL_BUMP ledgers -/// extend_persistent_ttl(&env, &key, DEFAULT_TTL_THRESHOLD, DEFAULT_TTL_BUMP); -/// ``` -pub fn extend_persistent_ttl + soroban_sdk::TryFromVal>( - env: &Env, - key: &K, - threshold: u32, - bump: u32, -) { - env.storage().persistent().extend_ttl(key, threshold, bump); -} - -// ── Tests ───────────────────────────────────────────────────────────────────── - -#[cfg(test)] -mod tests { - use super::*; - use soroban_sdk::{testutils::Ledger, Env, String as SorobanString}; - - #[test] - fn test_require_non_zero_amount() { - assert!(require_non_zero_amount(0).is_err()); - assert!(require_non_zero_amount(-1).is_err()); - assert!(require_non_zero_amount(1).is_ok()); - } - - #[test] - fn test_require_non_negative_amount() { - assert!(require_non_negative_amount(-1).is_err()); - assert!(require_non_negative_amount(0).is_ok()); - assert!(require_non_negative_amount(1).is_ok()); - } - - #[test] - fn test_require_amount_within_bounds() { - assert!(require_amount_within_bounds(-1, 100).is_err()); - assert!(require_amount_within_bounds(0, 100).is_ok()); - assert!(require_amount_within_bounds(100, 100).is_ok()); - assert!(require_amount_within_bounds(101, 100).is_err()); - } - - #[test] - fn test_require_future_timestamp() { - let env = Env::default(); - env.ledger().set_timestamp(1_000_000); - - assert!(require_future_timestamp(&env, 1_000_000).is_err()); // equal (not future) - assert!(require_future_timestamp(&env, 999_999).is_err()); // past - assert!(require_future_timestamp(&env, 1_000_001).is_ok()); // future - } - - #[test] - fn test_require_valid_risk_score() { - assert!(require_valid_risk_score(0).is_ok()); - assert!(require_valid_risk_score(50).is_ok()); - assert!(require_valid_risk_score(100).is_ok()); - assert!(require_valid_risk_score(101).is_err()); - } - - #[test] - fn test_require_valid_fee_bps() { - assert!(require_valid_fee_bps(0).is_ok()); - assert!(require_valid_fee_bps(50).is_ok()); - assert!(require_valid_fee_bps(10_000).is_ok()); - assert!(require_valid_fee_bps(10_001).is_err()); - } - - #[test] - fn test_require_valid_bps_range() { - assert!(require_valid_bps_range(50, 0, 1000).is_ok()); - assert!(require_valid_bps_range(0, 0, 1000).is_ok()); - assert!(require_valid_bps_range(1000, 0, 1000).is_ok()); - assert!(require_valid_bps_range(1001, 0, 1000).is_err()); - } - - #[test] - fn test_require_non_empty_string() { - let env = Env::default(); - let empty_str = SorobanString::from_str(&env, ""); - let non_empty_str = SorobanString::from_str(&env, "test"); - - assert!(require_non_empty_string(&empty_str).is_err()); - assert!(require_non_empty_string(&non_empty_str).is_ok()); - } - - #[test] - fn test_require_valid_ipfs_cid_valid_cidv0() { - let env = Env::default(); - // 46-char CIDv0: "Qm" prefix, base58btc alphabet - let cid = SorobanString::from_str(&env, "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG"); - assert!(require_valid_ipfs_cid(&cid).is_ok()); - } - - #[test] - fn test_require_valid_ipfs_cid_valid_cidv1() { - let env = Env::default(); - // CIDv1 base32lower (starts with 'b'), 59 chars - let cid = SorobanString::from_str(&env, "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"); - assert!(require_valid_ipfs_cid(&cid).is_ok()); - } - - #[test] - fn test_require_valid_ipfs_cid_cidv1_base58_prefix() { - let env = Env::default(); - // CIDv1 with 'z' (base58btc) prefix - let cid = SorobanString::from_str(&env, "zdj7Wkkt7TxoHk4QyYaZhmjLYGHRPmCdLFwJiC6JD6EKB6Tb"); - assert!(require_valid_ipfs_cid(&cid).is_ok()); - } - - #[test] - fn test_require_valid_ipfs_cid_single_char_rejected() { - let env = Env::default(); - let cid = SorobanString::from_str(&env, "x"); - assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); - } - - #[test] - fn test_require_valid_ipfs_cid_garbage_rejected() { - let env = Env::default(); - let cid = SorobanString::from_str(&env, "not-a-valid-cid-string"); - assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); - } - - #[test] - fn test_require_valid_ipfs_cid_cidv0_wrong_length_rejected() { - let env = Env::default(); - // "Qm" prefix but only 10 chars (not 46) - let cid = SorobanString::from_str(&env, "QmShortXxx"); - assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); - } - - #[test] - fn test_require_valid_ipfs_cid_cidv0_invalid_chars_rejected() { - let env = Env::default(); - // 46 chars, Qm prefix, but contains '0' (excluded from base58) - let cid = SorobanString::from_str(&env, "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnP000"); - assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); - } - - #[test] - fn test_require_valid_ipfs_cid_cidv1_too_short_rejected() { - let env = Env::default(); - // CIDv1 multibase prefix but too short (< 10 chars) - let cid = SorobanString::from_str(&env, "bafy"); - assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); - } - - #[test] - fn test_require_non_empty_bytes() { - let env = Env::default(); - let empty_bytes = Bytes::from_slice(&env, &[]); - let non_empty_bytes = Bytes::from_slice(&env, &[1, 2, 3]); - - let empty_result = require_non_empty_bytes(&empty_bytes); - assert!(empty_result.is_err()); - assert_eq!( - empty_result.unwrap_err(), - CommonError::EmptyBytes, - "Empty bytes should return EmptyBytes error" - ); - - assert!(require_non_empty_bytes(&non_empty_bytes).is_ok()); - } - - #[test] - fn test_bps_of_safe() { - assert_eq!(bps_of(10_000, 100).unwrap(), 100); - assert_eq!(bps_of(1_000_000, 50).unwrap(), 5_000); - assert!(bps_of(i128::MAX, 10_000).is_err()); - } - - #[test] - fn test_bps_of_negative_amount_rejected() { - // Negative amounts must be rejected to prevent silent negative fees - assert!(bps_of(-1_000, 50).is_err()); - } - - #[test] - fn test_bps_of_zero_bps() { - // Zero bps should always yield zero fee - assert_eq!(bps_of(1_000_000, 0).unwrap(), 0); - } - - #[test] - fn test_safe_add() { - assert_eq!(safe_add(100, 200).unwrap(), 300); - assert!(safe_add(i128::MAX, 1).is_err()); - } - - #[test] - fn test_safe_sub() { - assert_eq!(safe_sub(300, 100).unwrap(), 200); - assert_eq!(safe_sub(100, 200).unwrap(), -100); - // Underflow returns ArithmeticUnderflow - let err = safe_sub(i128::MIN, 1).unwrap_err(); - assert_eq!(err, CommonError::ArithmeticUnderflow); - } - - #[test] - fn test_safe_mul() { - assert_eq!(safe_mul(10, 20).unwrap(), 200); - assert!(safe_mul(i128::MAX, 2).is_err()); - } - - #[test] - fn test_safe_div() { - assert_eq!(safe_div(200, 4).unwrap(), 50); - assert!(safe_div(100, 0).is_err()); - } - - #[test] - fn test_safe_div_by_one() { - assert_eq!(safe_div(100, 1).unwrap(), 100); - } - - #[test] - fn test_safe_div_negative_dividend() { - assert_eq!(safe_div(-100, 4).unwrap(), -25); - } - - #[test] - fn test_safe_add_overflow() { - assert!(safe_add(i128::MAX, 1).is_err()); - assert_eq!(safe_add(i128::MAX, 0).unwrap(), i128::MAX); - } - - #[test] - fn test_safe_sub_underflow() { - let err = safe_sub(i128::MIN, 1).unwrap_err(); - assert_eq!(err, CommonError::ArithmeticUnderflow); - } - - #[test] - fn test_safe_mul_zero() { - assert_eq!(safe_mul(i128::MAX, 0).unwrap(), 0); - assert_eq!(safe_mul(0, i128::MAX).unwrap(), 0); - } - - #[test] - fn test_bps_of_boundary_values() { - // 100% (10_000 bps) - assert_eq!(bps_of(1_000_000, 10_000).unwrap(), 1_000_000); - // 0% - assert_eq!(bps_of(1_000_000, 0).unwrap(), 0); - // 1 bps (0.01%) - assert_eq!(bps_of(10_000, 1).unwrap(), 1); - } - - #[test] - fn test_require_amount_within_bounds_zero_max() { - assert!(require_amount_within_bounds(0, 0).is_ok()); - assert!(require_amount_within_bounds(1, 0).is_err()); - assert!(require_amount_within_bounds(-1, 0).is_err()); - } - - #[test] - fn test_require_valid_bps_range_min_equals_max() { - assert!(require_valid_bps_range(50, 50, 50).is_ok()); - assert!(require_valid_bps_range(49, 50, 50).is_err()); - assert!(require_valid_bps_range(51, 50, 50).is_err()); - } - - #[test] - fn test_require_valid_fee_bps_boundary() { - assert!(require_valid_fee_bps(9_999).is_ok()); - assert!(require_valid_fee_bps(10_000).is_ok()); - assert!(require_valid_fee_bps(10_001).is_err()); - } - - #[test] - fn test_require_valid_risk_score_boundary() { - assert!(require_valid_risk_score(99).is_ok()); - assert!(require_valid_risk_score(100).is_ok()); - assert!(require_valid_risk_score(101).is_err()); - } - - #[test] - fn test_normalize_amount_same_decimals_noop() { - assert_eq!(normalize_amount(1_000_000, 7).unwrap(), 1_000_000); - } - - #[test] - fn test_normalize_amount_6_to_7_scales_up() { - // USDC 6-decimal: 1 USDC = 1_000_000 → normalized to 10_000_000 - assert_eq!(normalize_amount(1_000_000, 6).unwrap(), 10_000_000); - } - - #[test] - fn test_normalize_amount_8_to_7_scales_down() { - assert_eq!(normalize_amount(100_000_000, 8).unwrap(), 10_000_000); - } - - #[test] - fn test_denormalize_amount_roundtrip() { - let original = 5_000_000i128; - let normalized = normalize_amount(original, 6).unwrap(); - let back = denormalize_amount(normalized, 6).unwrap(); - assert_eq!(back, original); - } - - #[test] - fn test_bps_of_normalized_same_decimal_matches_bps_of() { - // 7 decimals: bps_of_normalized should match bps_of - assert_eq!(bps_of_normalized(10_000, 100, 7).unwrap(), bps_of(10_000, 100).unwrap()); - assert_eq!(bps_of_normalized(1_000_000, 50, 7).unwrap(), bps_of(1_000_000, 50).unwrap()); - } - - #[test] - fn test_bps_of_normalized_6_decimal_token() { - // 1 USDC (6 dec) = 1_000_000. 1% (100 bps) fee = 10_000 - assert_eq!(bps_of_normalized(1_000_000, 100, 6).unwrap(), 10_000); - } - - #[test] - fn test_bps_of_normalized_negative_rejected() { - assert!(bps_of_normalized(-1_000, 50, 6).is_err()); - } - - #[test] - fn test_require_max_length_string_at_max_ok() { - let env = Env::default(); - let s = SorobanString::from_str(&env, "a".repeat(128 as usize).as_str()); - assert!(require_max_length_string(&s, 128).is_ok()); - } - - #[test] - fn test_require_max_length_string_exceeds_max_fails() { - let env = Env::default(); - let s = SorobanString::from_str(&env, "a".repeat(129 as usize).as_str()); - assert!(require_max_length_string(&s, 128).is_err()); - } - - #[test] - fn test_require_max_length_bytes_at_max_ok() { - let env = Env::default(); - let b = Bytes::from_slice(&env, &[0u8; 64]); - assert!(require_max_length_bytes(&b, 64).is_ok()); - } - - #[test] - fn test_require_max_length_bytes_exceeds_max_fails() { - let env = Env::default(); - let b = Bytes::from_slice(&env, &[0u8; 65]); - assert!(require_max_length_bytes(&b, 64).is_err()); - } - - #[test] - fn test_require_batch_size_within_limit_at_max() { - assert!(require_batch_size_within_limit(MAX_BATCH_MINT_SIZE).is_ok()); - } - - #[test] - fn test_require_batch_size_within_limit_under_max() { - assert!(require_batch_size_within_limit(10).is_ok()); - assert!(require_batch_size_within_limit(1).is_ok()); - assert!(require_batch_size_within_limit(0).is_ok()); - } - - #[test] - fn test_require_batch_size_within_limit_exceeds_max() { - assert!(require_batch_size_within_limit(MAX_BATCH_MINT_SIZE + 1).is_err()); - assert_eq!( - require_batch_size_within_limit(MAX_BATCH_MINT_SIZE + 1).unwrap_err(), - KoraError::BatchSizeExceeded - ); - } -} - -#[cfg(test)] -mod proptests { - use super::*; - use proptest::prelude::*; - - proptest! { - /// Invariant 1: bps_of never exceeds the input amount when bps <= 10_000. - /// fee = amount * bps / 10_000, so fee <= amount for bps in [0, 10_000]. - #[test] - fn bps_of_never_exceeds_amount( - amount in 0i128..=1_000_000_000_000i128, - bps in 0u32..=10_000u32, - ) { - let fee = bps_of(amount, bps).unwrap(); - prop_assert!(fee >= 0, "fee must be non-negative"); - prop_assert!(fee <= amount, "fee {} must not exceed amount {}", fee, amount); - } - - /// Invariant 2: safe_add and safe_sub are inverses for non-overflowing values. - /// For any a, b where a+b doesn't overflow: safe_sub(safe_add(a, b), b) == a. - #[test] - fn add_sub_roundtrip( - a in 0i128..=(i128::MAX / 2), - b in 0i128..=(i128::MAX / 2), - ) { - let sum = safe_add(a, b).unwrap(); - let back = safe_sub(sum, b).unwrap(); - prop_assert_eq!(back, a); - } - - /// Invariant 3: bps_of(amount, 10_000) always equals amount (100% fee). - /// And bps_of(amount, 0) always equals 0 (0% fee). - #[test] - fn bps_of_boundary_identity(amount in 0i128..=1_000_000_000_000i128) { - let full = bps_of(amount, 10_000).unwrap(); - prop_assert_eq!(full, amount, "100% bps must equal the full amount"); - - let zero = bps_of(amount, 0).unwrap(); - prop_assert_eq!(zero, 0, "0% bps must yield zero"); - } - - /// Invariant 4: For any valid split of contributed amounts across N investors - /// where each contributed_i / total_pool is computed as share_bps, the sum - /// of all share_bps never exceeds 10_000. - #[test] - fn investor_shares_never_exceed_total( - n in 2u32..=10u32, - total_pool in 1_000i128..=1_000_000_000i128, - seed in 1u64..=u64::MAX, - ) { - let mut rng_state = seed; - let mut remaining = total_pool; - let mut total_bps = 0u32; - - for i in 0..n { - let contributed = if i == n - 1 { - remaining - } else { - // Simple deterministic split - rng_state = rng_state.wrapping_mul(6364136223846793005).wrapping_add(1); - let frac = (rng_state % 80) + 1; // 1-80% of remaining - let c = (remaining * frac as i128) / 100; - let c = if c == 0 { 1 } else { c }; - let c = c.min(remaining); - remaining -= c; - c - }; - - if contributed <= 0 || total_pool <= 0 { - continue; - } - let share_bps = (contributed - .checked_mul(10_000) - .unwrap() - .checked_div(total_pool) - .unwrap()) as u32; - total_bps += share_bps; - } - - prop_assert!( - total_bps <= 10_000, - "Sum of investor share_bps ({}) must not exceed 10_000", - total_bps - ); - } - } -} +use soroban_sdk::{Address, Bytes, Env, String}; +use crate::errors::CommonError; + +/// Minimum timelock delay for upgrade proposals (24 hours in seconds). +pub const UPGRADE_TIMELOCK_DELAY: u64 = 86_400; + +// ── Amount guards ───────────────────────────────────────────────────────────── + +/// Upper bound for i128 amounts — prevents overflow in intermediate arithmetic +/// (e.g., multiplication by fee/bps values). Any amount above this ceiling risks +/// overflow when multiplied by 10_000 (max bps). +pub const MAX_AMOUNT: i128 = i128::MAX / 2; + +/// Reject amounts that exceed the overflow-safety ceiling. +#[inline] +pub fn require_within_max_amount(amount: i128) -> Result<(), CommonError> { + if amount > MAX_AMOUNT { + return Err(CommonError::InvalidAmount); + } + Ok(()) +} + +/// Reject zero or negative amounts. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_non_zero_amount; +/// assert!(require_non_zero_amount(100).is_ok()); +/// assert!(require_non_zero_amount(0).is_err()); +/// assert!(require_non_zero_amount(-50).is_err()); +/// ``` +pub fn require_non_zero_amount(amount: i128) -> Result<(), CommonError> { + if amount <= 0 { + return Err(CommonError::InvalidAmount); + } + Ok(()) +} + +/// Allows zero but rejects negative values. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_non_negative_amount; +/// assert!(require_non_negative_amount(100).is_ok()); +/// assert!(require_non_negative_amount(0).is_ok()); +/// assert!(require_non_negative_amount(-50).is_err()); +/// ``` +pub fn require_non_negative_amount(amount: i128) -> Result<(), CommonError> { + if amount < 0 { + return Err(CommonError::InvalidAmount); + } + Ok(()) +} + +/// Reject amounts outside [0, max]. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_amount_within_bounds; +/// assert!(require_amount_within_bounds(50, 100).is_ok()); +/// assert!(require_amount_within_bounds(100, 100).is_ok()); +/// assert!(require_amount_within_bounds(101, 100).is_err()); +/// assert!(require_amount_within_bounds(-1, 100).is_err()); +/// ``` +pub fn require_amount_within_bounds(amount: i128, max: i128) -> Result<(), CommonError> { + if amount < 0 || amount > max { + return Err(CommonError::InvalidAmount); + } + Ok(()) +} + +// ── Timestamp guards ────────────────────────────────────────────────────────── + +/// Reject timestamps that are not strictly in the future relative to the +/// current ledger time. Equal timestamps are also rejected. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_future_timestamp; +/// use soroban_sdk::Env; +/// +/// let env = Env::default(); +/// // Set ledger timestamp to 1000 +/// env.ledger().set_timestamp(1000); +/// assert!(require_future_timestamp(&env, 1001).is_ok()); // future +/// assert!(require_future_timestamp(&env, 1000).is_err()); // equal +/// assert!(require_future_timestamp(&env, 999).is_err()); // past +/// ``` +pub fn require_future_timestamp(env: &Env, ts: u64) -> Result<(), CommonError> { + if ts <= env.ledger().timestamp() { + return Err(CommonError::InvalidDueDate); + } + Ok(()) +} + +// ── Risk / fee guards ───────────────────────────────────────────────────────── + +/// Reject risk scores above 100. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_valid_risk_score; +/// assert!(require_valid_risk_score(50).is_ok()); +/// assert!(require_valid_risk_score(100).is_ok()); +/// assert!(require_valid_risk_score(101).is_err()); +/// ``` +pub fn require_valid_risk_score(score: u32) -> Result<(), CommonError> { + if score > 100 { + return Err(CommonError::InvalidRiskScore); + } + Ok(()) +} + +/// Reject fee rates above 10 000 bps (100 %). +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_valid_fee_bps; +/// assert!(require_valid_fee_bps(50).is_ok()); // 0.5% +/// assert!(require_valid_fee_bps(10000).is_ok()); // 100% +/// assert!(require_valid_fee_bps(10001).is_err()); // > 100% +/// ``` +pub fn require_valid_fee_bps(bps: u32) -> Result<(), CommonError> { + if bps > 10_000 { + return Err(CommonError::InvalidFeeRate); + } + Ok(()) +} + +/// Validates that `bps` is within [min_bps, max_bps] inclusive. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_valid_bps_range; +/// assert!(require_valid_bps_range(50, 0, 100).is_ok()); +/// assert!(require_valid_bps_range(0, 0, 100).is_ok()); +/// assert!(require_valid_bps_range(100, 0, 100).is_ok()); +/// assert!(require_valid_bps_range(101, 0, 100).is_err()); +/// ``` +pub fn require_valid_bps_range(bps: u32, min_bps: u32, max_bps: u32) -> Result<(), CommonError> { + if bps < min_bps || bps > max_bps { + return Err(CommonError::InvalidFeeRate); + } + Ok(()) +} + +// ── String / bytes guards ───────────────────────────────────────────────────── + +/// Reject empty Soroban strings. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_non_empty_string; +/// use soroban_sdk::{Env, String as SorobanString}; +/// +/// let env = Env::default(); +/// let empty = SorobanString::from_str(&env, ""); +/// let non_empty = SorobanString::from_str(&env, "hello"); +/// assert!(require_non_empty_string(&empty).is_err()); +/// assert!(require_non_empty_string(&non_empty).is_ok()); +/// ``` +pub fn require_non_empty_string(s: &String) -> Result<(), CommonError> { + if s.len() == 0 { + return Err(CommonError::EmptyString); + } + Ok(()) +} + +/// Maximum supported IPFS CID length in bytes. +const CID_MAX_LEN: u32 = 128; + +/// Validate that a string is a structurally valid IPFS CID (v0 or v1). +/// +/// CIDv0: exactly 46 base58btc characters, "Qm" prefix. +/// CIDv1: multibase-prefixed ('b'/'B' base32, 'z' base58, 'f'/'F' base16, +/// 'u'/'U' base64url, 'k'/'K' base36), minimum 10 characters. +pub fn require_valid_ipfs_cid(cid: &String) -> Result<(), CommonError> { + let len = cid.len(); + if len < 2 || len > CID_MAX_LEN { + return Err(CommonError::InvalidCid); + } + let mut buf = [0u8; CID_MAX_LEN as usize]; + cid.copy_into_slice(&mut buf[..len as usize]); + let first = buf[0]; + let second = buf[1]; + // CIDv0: "Qm" prefix, exactly 46 chars, base58btc alphabet + if first == b'Q' && second == b'm' { + if len != 46 { + return Err(CommonError::InvalidCid); + } + for &c in &buf[..46] { + if !is_base58_char(c) { + return Err(CommonError::InvalidCid); + } + } + return Ok(()); + } + // CIDv1: multibase prefix — common encodings only + if matches!(first, b'b' | b'B' | b'z' | b'f' | b'F' | b'u' | b'U' | b'k' | b'K') { + if len < 10 { + return Err(CommonError::InvalidCid); + } + return Ok(()); + } + Err(CommonError::InvalidCid) +} + +/// Returns true for characters in the base58btc alphabet. +/// Excludes: '0' (zero), 'O' (uppercase O), 'I' (uppercase I), 'l' (lowercase L). +fn is_base58_char(c: u8) -> bool { + matches!(c, + b'1'..=b'9' + | b'A'..=b'H' + | b'J'..=b'N' + | b'P'..=b'Z' + | b'a'..=b'k' + | b'm'..=b'z' + ) +} + +/// Reject empty byte slices. Returns `EmptyBytes` (distinct from `EmptyString`). +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_non_empty_bytes; +/// use soroban_sdk::{Env, Bytes}; +/// +/// let env = Env::default(); +/// let empty = Bytes::from_slice(&env, &[]); +/// let non_empty = Bytes::from_slice(&env, &[1, 2, 3]); +/// assert!(require_non_empty_bytes(&empty).is_err()); +/// assert!(require_non_empty_bytes(&non_empty).is_ok()); +/// ``` +#[inline] +pub fn require_non_empty_bytes(b: &Bytes) -> Result<(), CommonError> { + if b.len() == 0 { + return Err(CommonError::EmptyBytes); + } + Ok(()) +} + +/// Reject strings whose length exceeds `max_bytes`. +#[inline] +pub fn require_max_length_string(s: &String, max_bytes: u32) -> Result<(), CommonError> { + if s.len() > max_bytes { + return Err(CommonError::FieldTooLong); + } + Ok(()) +} + +/// Reject byte slices whose length exceeds `max_bytes`. +#[inline] +pub fn require_max_length_bytes(b: &Bytes, max_bytes: u32) -> Result<(), CommonError> { + if b.len() > max_bytes { + return Err(CommonError::FieldTooLong); + } + Ok(()) +} + +/// Reject byte slices that are not exactly `expected_len` bytes. +#[inline] +pub fn require_exact_length(b: &Bytes, expected_len: u32) -> Result<(), KoraError> { + if b.len() != expected_len { + return Err(KoraError::InvalidLength); + } + Ok(()) +} + +/// Maximum allowed byte length for an IPFS CID stored on-chain. +pub const MAX_IPFS_CID_LEN: u32 = 128; + +/// Maximum allowed byte length for a debtor hash stored on-chain. +pub const MAX_DEBTOR_HASH_LEN: u32 = 64; + +// ── Batch size guards ───────────────────────────────────────────────────────── + +/// Maximum number of invoices allowed in a single batch mint operation. +/// +/// Chosen conservatively based on measured resource cost per invoice: +/// - 1 persistent storage write (~50K CPU instructions) +/// - 1 event emission (~5K CPU instructions) +/// - 1 TTL bump (~10K CPU instructions) +/// = ~65K CPU per invoice +/// +/// With 25 invoices: ~1.625M total CPU (safe margin under Soroban's ~80M budget) +/// Allows reasonable batch sizes while leaving headroom for auth checks, reentrancy +/// guard, state transitions, and other middleware. +pub const MAX_BATCH_MINT_SIZE: u32 = 25; + +/// Reject batch mint requests with more invoices than the configured maximum. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_batch_size_within_limit; +/// assert!(require_batch_size_within_limit(10).is_ok()); +/// assert!(require_batch_size_within_limit(25).is_ok()); // At limit +/// assert!(require_batch_size_within_limit(26).is_err()); // Over limit +/// ``` +#[inline] +pub fn require_batch_size_within_limit(batch_size: u32) -> Result<(), KoraError> { + if batch_size > MAX_BATCH_MINT_SIZE { + return Err(KoraError::BatchSizeExceeded); + } + Ok(()) +} + +// ── Safe arithmetic ─────────────────────────────────────────────────────────── + +/// Compute `amount * bps / 10_000` with overflow protection. +/// Rejects negative amounts to prevent silent negative fees. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::bps_of; +/// assert_eq!(bps_of(10_000, 100).unwrap(), 100); // 1% of 10_000 = 100 +/// assert_eq!(bps_of(1_000_000, 50).unwrap(), 5_000); // 0.5% of 1_000_000 = 5_000 +/// assert!(bps_of(-1_000, 50).is_err()); // negative amount rejected +/// ``` +#[inline] +pub fn bps_of(amount: i128, bps: u32) -> Result { + if amount < 0 { + return Err(CommonError::InvalidAmount); + } + amount + .checked_mul(bps as i128) + .and_then(|v| v.checked_div(10_000)) + .ok_or(CommonError::ArithmeticOverflow) +} + +/// Safe addition — returns `ArithmeticOverflow` on overflow. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::safe_add; +/// assert_eq!(safe_add(100, 200).unwrap(), 300); +/// assert!(safe_add(i128::MAX, 1).is_err()); +/// ``` +pub fn safe_add(a: i128, b: i128) -> Result { + a.checked_add(b).ok_or(CommonError::ArithmeticOverflow) +} + +/// Safe subtraction — returns `ArithmeticUnderflow` when result would underflow. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::safe_sub; +/// assert_eq!(safe_sub(300, 100).unwrap(), 200); +/// assert!(safe_sub(100, 200).is_err()); // underflow +/// ``` +pub fn safe_sub(a: i128, b: i128) -> Result { + a.checked_sub(b).ok_or(CommonError::ArithmeticUnderflow) +} + +/// Reject the contract's own address being passed as a counterparty or admin. +/// Prevents self-referential configuration bugs (e.g. admin == contract itself). +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_not_self; +/// use soroban_sdk::Env; +/// +/// let env = Env::default(); +/// let contract_addr = env.current_contract_address(); +/// let other_addr = soroban_sdk::Address::generate(&env); +/// assert!(require_not_self(&env, &contract_addr).is_err()); +/// assert!(require_not_self(&env, &other_addr).is_ok()); +/// ``` +pub fn require_not_self(env: &Env, addr: &Address) -> Result<(), CommonError> { + if addr == &env.current_contract_address() { + return Err(CommonError::InvalidAddress); + } + Ok(()) +} + +/// Reject two addresses being identical where they must be distinct +/// (e.g. admin == treasury, or two different contract addresses colliding). +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::require_distinct; +/// use soroban_sdk::{Env, Address}; +/// +/// let env = Env::default(); +/// let addr1 = Address::generate(&env); +/// let addr2 = Address::generate(&env); +/// assert!(require_distinct(&addr1, &addr2).is_ok()); +/// assert!(require_distinct(&addr1, &addr1).is_err()); +/// ``` +pub fn require_distinct(a: &Address, b: &Address) -> Result<(), CommonError> { + if a == b { + return Err(CommonError::InvalidAddress); + } + Ok(()) +} + +/// Safe multiplication — returns `ArithmeticOverflow` on overflow. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::safe_mul; +/// assert_eq!(safe_mul(10, 20).unwrap(), 200); +/// assert!(safe_mul(i128::MAX, 2).is_err()); +/// ``` +pub fn safe_mul(a: i128, b: i128) -> Result { + a.checked_mul(b).ok_or(CommonError::ArithmeticOverflow) +} + +/// Safe division — returns `InvalidAmount` on divide-by-zero, `ArithmeticOverflow` otherwise. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::safe_div; +/// assert_eq!(safe_div(200, 4).unwrap(), 50); +/// assert!(safe_div(100, 0).is_err()); // divide by zero +/// ``` +pub fn safe_div(a: i128, b: i128) -> Result { + if b == 0 { + return Err(CommonError::InvalidAmount); + } + a.checked_div(b).ok_or(CommonError::ArithmeticOverflow) +} + +// ── Decimal normalization ──────────────────────────────────────────────────── + +/// The standard decimal precision used for all internal arithmetic (7 decimals, +/// matching Stellar's stroop convention: 1 XLM = 10^7 stroops). +pub const STANDARD_DECIMALS: u32 = 7; + +/// Normalize an amount from `token_decimals` to `STANDARD_DECIMALS`. +/// Scales up (multiplies) if token has fewer decimals, scales down (divides) +/// if token has more. Returns `ArithmeticOverflow` on overflow. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::{normalize_amount, STANDARD_DECIMALS}; +/// // USDC 6-decimal: 1 USDC = 1_000_000 normalized to 10_000_000 (7 decimals) +/// assert_eq!(normalize_amount(1_000_000, 6).unwrap(), 10_000_000); +/// // 7 decimals: no change +/// assert_eq!(normalize_amount(1_000_000, 7).unwrap(), 1_000_000); +/// // 8 decimals: scale down +/// assert_eq!(normalize_amount(100_000_000, 8).unwrap(), 10_000_000); +/// ``` +pub fn normalize_amount(amount: i128, token_decimals: u32) -> Result { + if token_decimals == STANDARD_DECIMALS { + return Ok(amount); + } + if token_decimals < STANDARD_DECIMALS { + let scale = 10i128 + .checked_pow(STANDARD_DECIMALS - token_decimals) + .ok_or(CommonError::ArithmeticOverflow)?; + amount.checked_mul(scale).ok_or(CommonError::ArithmeticOverflow) + } else { + let scale = 10i128 + .checked_pow(token_decimals - STANDARD_DECIMALS) + .ok_or(CommonError::ArithmeticOverflow)?; + amount.checked_div(scale).ok_or(CommonError::ArithmeticOverflow) + } +} + +/// Denormalize an amount from `STANDARD_DECIMALS` back to `token_decimals`. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::{normalize_amount, denormalize_amount}; +/// let original = 1_000_000i128; // 1 USDC (6 decimals) +/// let normalized = normalize_amount(original, 6).unwrap(); +/// let restored = denormalize_amount(normalized, 6).unwrap(); +/// assert_eq!(restored, original); +/// ``` +pub fn denormalize_amount(amount: i128, token_decimals: u32) -> Result { + if token_decimals == STANDARD_DECIMALS { + return Ok(amount); + } + if token_decimals < STANDARD_DECIMALS { + let scale = 10i128 + .checked_pow(STANDARD_DECIMALS - token_decimals) + .ok_or(CommonError::ArithmeticOverflow)?; + amount.checked_div(scale).ok_or(CommonError::ArithmeticOverflow) + } else { + let scale = 10i128 + .checked_pow(token_decimals - STANDARD_DECIMALS) + .ok_or(CommonError::ArithmeticOverflow)?; + amount.checked_mul(scale).ok_or(CommonError::ArithmeticOverflow) + } +} + +/// Compute `amount * bps / 10_000` with decimal normalization. +/// Normalizes to STANDARD_DECIMALS, computes bps, then denormalizes back. +/// For same-decimal (7) tokens, behavior is identical to `bps_of`. +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::bps_of_normalized; +/// // USDC (6-decimal): 1 USDC with 1% fee +/// assert_eq!(bps_of_normalized(1_000_000, 100, 6).unwrap(), 10_000); +/// // Same decimal as standard: should match bps_of behavior +/// assert_eq!(bps_of_normalized(10_000, 100, 7).unwrap(), 100); +/// ``` +pub fn bps_of_normalized( + amount: i128, + bps: u32, + token_decimals: u32, +) -> Result { + if amount < 0 { + return Err(CommonError::InvalidAmount); + } + let normalized = normalize_amount(amount, token_decimals)?; + let result = normalized + .checked_mul(bps as i128) + .and_then(|v| v.checked_div(10_000)) + .ok_or(CommonError::ArithmeticOverflow)?; + denormalize_amount(result, token_decimals) +} + +// ── TTL helpers ────────────────────────────────────────────────────────────── + +/// Default TTL threshold in ledgers (~30 days at ~5s/ledger). +pub const DEFAULT_TTL_THRESHOLD: u32 = 518_400; + +/// Default TTL bump amount in ledgers (~30 days at ~5s/ledger). +pub const DEFAULT_TTL_BUMP: u32 = 518_400; + +/// Extend the TTL of a persistent storage entry if it's below the threshold. +/// +/// This is a helper for contracts to manage their persistent storage TTL. +/// Call this after writing to persistent storage to ensure the entry +/// doesn't expire unexpectedly. +/// +/// # Arguments +/// * `env` - The Soroban environment +/// * `key` - The storage key to extend +/// * `threshold` - The minimum TTL in ledgers before extension is triggered +/// * `bump` - The amount of ledgers to extend the TTL by +/// +/// # Examples +/// ```ignore +/// use kora_shared::validation::{extend_persistent_ttl, DEFAULT_TTL_THRESHOLD, DEFAULT_TTL_BUMP}; +/// use soroban_sdk::Env; +/// +/// let env = Env::default(); +/// // Example key (would be actual storage key in contract) +/// let key = "admin"; +/// // Extend TTL if below threshold, bumping by DEFAULT_TTL_BUMP ledgers +/// extend_persistent_ttl(&env, &key, DEFAULT_TTL_THRESHOLD, DEFAULT_TTL_BUMP); +/// ``` +pub fn extend_persistent_ttl + soroban_sdk::TryFromVal>( + env: &Env, + key: &K, + threshold: u32, + bump: u32, +) { + env.storage().persistent().extend_ttl(key, threshold, bump); +} + +// ── Tests ───────────────────────────────────────────────────────────────────── + +#[cfg(test)] +mod tests { + use super::*; + use soroban_sdk::{testutils::Ledger, Env, String as SorobanString}; + + #[test] + fn test_require_non_zero_amount() { + assert!(require_non_zero_amount(0).is_err()); + assert!(require_non_zero_amount(-1).is_err()); + assert!(require_non_zero_amount(1).is_ok()); + } + + #[test] + fn test_require_non_negative_amount() { + assert!(require_non_negative_amount(-1).is_err()); + assert!(require_non_negative_amount(0).is_ok()); + assert!(require_non_negative_amount(1).is_ok()); + } + + #[test] + fn test_require_amount_within_bounds() { + assert!(require_amount_within_bounds(-1, 100).is_err()); + assert!(require_amount_within_bounds(0, 100).is_ok()); + assert!(require_amount_within_bounds(100, 100).is_ok()); + assert!(require_amount_within_bounds(101, 100).is_err()); + } + + #[test] + fn test_require_future_timestamp() { + let env = Env::default(); + env.ledger().set_timestamp(1_000_000); + + assert!(require_future_timestamp(&env, 1_000_000).is_err()); // equal (not future) + assert!(require_future_timestamp(&env, 999_999).is_err()); // past + assert!(require_future_timestamp(&env, 1_000_001).is_ok()); // future + } + + #[test] + fn test_require_valid_risk_score() { + assert!(require_valid_risk_score(0).is_ok()); + assert!(require_valid_risk_score(50).is_ok()); + assert!(require_valid_risk_score(100).is_ok()); + assert!(require_valid_risk_score(101).is_err()); + } + + #[test] + fn test_require_valid_fee_bps() { + assert!(require_valid_fee_bps(0).is_ok()); + assert!(require_valid_fee_bps(50).is_ok()); + assert!(require_valid_fee_bps(10_000).is_ok()); + assert!(require_valid_fee_bps(10_001).is_err()); + } + + #[test] + fn test_require_valid_bps_range() { + assert!(require_valid_bps_range(50, 0, 1000).is_ok()); + assert!(require_valid_bps_range(0, 0, 1000).is_ok()); + assert!(require_valid_bps_range(1000, 0, 1000).is_ok()); + assert!(require_valid_bps_range(1001, 0, 1000).is_err()); + } + + #[test] + fn test_require_non_empty_string() { + let env = Env::default(); + let empty_str = SorobanString::from_str(&env, ""); + let non_empty_str = SorobanString::from_str(&env, "test"); + + assert!(require_non_empty_string(&empty_str).is_err()); + assert!(require_non_empty_string(&non_empty_str).is_ok()); + } + + #[test] + fn test_require_valid_ipfs_cid_valid_cidv0() { + let env = Env::default(); + // 46-char CIDv0: "Qm" prefix, base58btc alphabet + let cid = SorobanString::from_str(&env, "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG"); + assert!(require_valid_ipfs_cid(&cid).is_ok()); + } + + #[test] + fn test_require_valid_ipfs_cid_valid_cidv1() { + let env = Env::default(); + // CIDv1 base32lower (starts with 'b'), 59 chars + let cid = SorobanString::from_str(&env, "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"); + assert!(require_valid_ipfs_cid(&cid).is_ok()); + } + + #[test] + fn test_require_valid_ipfs_cid_cidv1_base58_prefix() { + let env = Env::default(); + // CIDv1 with 'z' (base58btc) prefix + let cid = SorobanString::from_str(&env, "zdj7Wkkt7TxoHk4QyYaZhmjLYGHRPmCdLFwJiC6JD6EKB6Tb"); + assert!(require_valid_ipfs_cid(&cid).is_ok()); + } + + #[test] + fn test_require_valid_ipfs_cid_single_char_rejected() { + let env = Env::default(); + let cid = SorobanString::from_str(&env, "x"); + assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); + } + + #[test] + fn test_require_valid_ipfs_cid_garbage_rejected() { + let env = Env::default(); + let cid = SorobanString::from_str(&env, "not-a-valid-cid-string"); + assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); + } + + #[test] + fn test_require_valid_ipfs_cid_cidv0_wrong_length_rejected() { + let env = Env::default(); + // "Qm" prefix but only 10 chars (not 46) + let cid = SorobanString::from_str(&env, "QmShortXxx"); + assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); + } + + #[test] + fn test_require_valid_ipfs_cid_cidv0_invalid_chars_rejected() { + let env = Env::default(); + // 46 chars, Qm prefix, but contains '0' (excluded from base58) + let cid = SorobanString::from_str(&env, "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnP000"); + assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); + } + + #[test] + fn test_require_valid_ipfs_cid_cidv1_too_short_rejected() { + let env = Env::default(); + // CIDv1 multibase prefix but too short (< 10 chars) + let cid = SorobanString::from_str(&env, "bafy"); + assert_eq!(require_valid_ipfs_cid(&cid).unwrap_err(), CommonError::InvalidCid); + } + + #[test] + fn test_require_non_empty_bytes() { + let env = Env::default(); + let empty_bytes = Bytes::from_slice(&env, &[]); + let non_empty_bytes = Bytes::from_slice(&env, &[1, 2, 3]); + + let empty_result = require_non_empty_bytes(&empty_bytes); + assert!(empty_result.is_err()); + assert_eq!( + empty_result.unwrap_err(), + CommonError::EmptyBytes, + "Empty bytes should return EmptyBytes error" + ); + + assert!(require_non_empty_bytes(&non_empty_bytes).is_ok()); + } + + #[test] + fn test_bps_of_safe() { + assert_eq!(bps_of(10_000, 100).unwrap(), 100); + assert_eq!(bps_of(1_000_000, 50).unwrap(), 5_000); + assert!(bps_of(i128::MAX, 10_000).is_err()); + } + + #[test] + fn test_bps_of_negative_amount_rejected() { + // Negative amounts must be rejected to prevent silent negative fees + assert!(bps_of(-1_000, 50).is_err()); + } + + #[test] + fn test_bps_of_zero_bps() { + // Zero bps should always yield zero fee + assert_eq!(bps_of(1_000_000, 0).unwrap(), 0); + } + + #[test] + fn test_safe_add() { + assert_eq!(safe_add(100, 200).unwrap(), 300); + assert!(safe_add(i128::MAX, 1).is_err()); + } + + #[test] + fn test_safe_sub() { + assert_eq!(safe_sub(300, 100).unwrap(), 200); + assert_eq!(safe_sub(100, 200).unwrap(), -100); + // Underflow returns ArithmeticUnderflow + let err = safe_sub(i128::MIN, 1).unwrap_err(); + assert_eq!(err, CommonError::ArithmeticUnderflow); + } + + #[test] + fn test_safe_mul() { + assert_eq!(safe_mul(10, 20).unwrap(), 200); + assert!(safe_mul(i128::MAX, 2).is_err()); + } + + #[test] + fn test_safe_div() { + assert_eq!(safe_div(200, 4).unwrap(), 50); + assert!(safe_div(100, 0).is_err()); + } + + #[test] + fn test_safe_div_by_one() { + assert_eq!(safe_div(100, 1).unwrap(), 100); + } + + #[test] + fn test_safe_div_negative_dividend() { + assert_eq!(safe_div(-100, 4).unwrap(), -25); + } + + #[test] + fn test_safe_add_overflow() { + assert!(safe_add(i128::MAX, 1).is_err()); + assert_eq!(safe_add(i128::MAX, 0).unwrap(), i128::MAX); + } + + #[test] + fn test_safe_sub_underflow() { + let err = safe_sub(i128::MIN, 1).unwrap_err(); + assert_eq!(err, CommonError::ArithmeticUnderflow); + } + + #[test] + fn test_safe_mul_zero() { + assert_eq!(safe_mul(i128::MAX, 0).unwrap(), 0); + assert_eq!(safe_mul(0, i128::MAX).unwrap(), 0); + } + + #[test] + fn test_bps_of_boundary_values() { + // 100% (10_000 bps) + assert_eq!(bps_of(1_000_000, 10_000).unwrap(), 1_000_000); + // 0% + assert_eq!(bps_of(1_000_000, 0).unwrap(), 0); + // 1 bps (0.01%) + assert_eq!(bps_of(10_000, 1).unwrap(), 1); + } + + #[test] + fn test_require_amount_within_bounds_zero_max() { + assert!(require_amount_within_bounds(0, 0).is_ok()); + assert!(require_amount_within_bounds(1, 0).is_err()); + assert!(require_amount_within_bounds(-1, 0).is_err()); + } + + #[test] + fn test_require_valid_bps_range_min_equals_max() { + assert!(require_valid_bps_range(50, 50, 50).is_ok()); + assert!(require_valid_bps_range(49, 50, 50).is_err()); + assert!(require_valid_bps_range(51, 50, 50).is_err()); + } + + #[test] + fn test_require_valid_fee_bps_boundary() { + assert!(require_valid_fee_bps(9_999).is_ok()); + assert!(require_valid_fee_bps(10_000).is_ok()); + assert!(require_valid_fee_bps(10_001).is_err()); + } + + #[test] + fn test_require_valid_risk_score_boundary() { + assert!(require_valid_risk_score(99).is_ok()); + assert!(require_valid_risk_score(100).is_ok()); + assert!(require_valid_risk_score(101).is_err()); + } + + #[test] + fn test_normalize_amount_same_decimals_noop() { + assert_eq!(normalize_amount(1_000_000, 7).unwrap(), 1_000_000); + } + + #[test] + fn test_normalize_amount_6_to_7_scales_up() { + // USDC 6-decimal: 1 USDC = 1_000_000 → normalized to 10_000_000 + assert_eq!(normalize_amount(1_000_000, 6).unwrap(), 10_000_000); + } + + #[test] + fn test_normalize_amount_8_to_7_scales_down() { + assert_eq!(normalize_amount(100_000_000, 8).unwrap(), 10_000_000); + } + + #[test] + fn test_denormalize_amount_roundtrip() { + let original = 5_000_000i128; + let normalized = normalize_amount(original, 6).unwrap(); + let back = denormalize_amount(normalized, 6).unwrap(); + assert_eq!(back, original); + } + + #[test] + fn test_bps_of_normalized_same_decimal_matches_bps_of() { + // 7 decimals: bps_of_normalized should match bps_of + assert_eq!(bps_of_normalized(10_000, 100, 7).unwrap(), bps_of(10_000, 100).unwrap()); + assert_eq!(bps_of_normalized(1_000_000, 50, 7).unwrap(), bps_of(1_000_000, 50).unwrap()); + } + + #[test] + fn test_bps_of_normalized_6_decimal_token() { + // 1 USDC (6 dec) = 1_000_000. 1% (100 bps) fee = 10_000 + assert_eq!(bps_of_normalized(1_000_000, 100, 6).unwrap(), 10_000); + } + + #[test] + fn test_bps_of_normalized_negative_rejected() { + assert!(bps_of_normalized(-1_000, 50, 6).is_err()); + } + + #[test] + fn test_require_max_length_string_at_max_ok() { + let env = Env::default(); + let s = SorobanString::from_str(&env, "a".repeat(128 as usize).as_str()); + assert!(require_max_length_string(&s, 128).is_ok()); + } + + #[test] + fn test_require_max_length_string_exceeds_max_fails() { + let env = Env::default(); + let s = SorobanString::from_str(&env, "a".repeat(129 as usize).as_str()); + assert!(require_max_length_string(&s, 128).is_err()); + } + + #[test] + fn test_require_max_length_bytes_at_max_ok() { + let env = Env::default(); + let b = Bytes::from_slice(&env, &[0u8; 64]); + assert!(require_max_length_bytes(&b, 64).is_ok()); + } + + #[test] + fn test_require_max_length_bytes_exceeds_max_fails() { + let env = Env::default(); + let b = Bytes::from_slice(&env, &[0u8; 65]); + assert!(require_max_length_bytes(&b, 64).is_err()); + } + + #[test] + fn test_require_batch_size_within_limit_at_max() { + assert!(require_batch_size_within_limit(MAX_BATCH_MINT_SIZE).is_ok()); + } + + #[test] + fn test_require_batch_size_within_limit_under_max() { + assert!(require_batch_size_within_limit(10).is_ok()); + assert!(require_batch_size_within_limit(1).is_ok()); + assert!(require_batch_size_within_limit(0).is_ok()); + } + + #[test] + fn test_require_batch_size_within_limit_exceeds_max() { + assert!(require_batch_size_within_limit(MAX_BATCH_MINT_SIZE + 1).is_err()); + assert_eq!( + require_batch_size_within_limit(MAX_BATCH_MINT_SIZE + 1).unwrap_err(), + KoraError::BatchSizeExceeded + ); + } +} + +#[cfg(test)] +mod proptests { + use super::*; + use proptest::prelude::*; + + proptest! { + /// Invariant 1: bps_of never exceeds the input amount when bps <= 10_000. + /// fee = amount * bps / 10_000, so fee <= amount for bps in [0, 10_000]. + #[test] + fn bps_of_never_exceeds_amount( + amount in 0i128..=1_000_000_000_000i128, + bps in 0u32..=10_000u32, + ) { + let fee = bps_of(amount, bps).unwrap(); + prop_assert!(fee >= 0, "fee must be non-negative"); + prop_assert!(fee <= amount, "fee {} must not exceed amount {}", fee, amount); + } + + /// Invariant 2: safe_add and safe_sub are inverses for non-overflowing values. + /// For any a, b where a+b doesn't overflow: safe_sub(safe_add(a, b), b) == a. + #[test] + fn add_sub_roundtrip( + a in 0i128..=(i128::MAX / 2), + b in 0i128..=(i128::MAX / 2), + ) { + let sum = safe_add(a, b).unwrap(); + let back = safe_sub(sum, b).unwrap(); + prop_assert_eq!(back, a); + } + + /// Invariant 3: bps_of(amount, 10_000) always equals amount (100% fee). + /// And bps_of(amount, 0) always equals 0 (0% fee). + #[test] + fn bps_of_boundary_identity(amount in 0i128..=1_000_000_000_000i128) { + let full = bps_of(amount, 10_000).unwrap(); + prop_assert_eq!(full, amount, "100% bps must equal the full amount"); + + let zero = bps_of(amount, 0).unwrap(); + prop_assert_eq!(zero, 0, "0% bps must yield zero"); + } + + /// Invariant 4: For any valid split of contributed amounts across N investors + /// where each contributed_i / total_pool is computed as share_bps, the sum + /// of all share_bps never exceeds 10_000. + #[test] + fn investor_shares_never_exceed_total( + n in 2u32..=10u32, + total_pool in 1_000i128..=1_000_000_000i128, + seed in 1u64..=u64::MAX, + ) { + let mut rng_state = seed; + let mut remaining = total_pool; + let mut total_bps = 0u32; + + for i in 0..n { + let contributed = if i == n - 1 { + remaining + } else { + // Simple deterministic split + rng_state = rng_state.wrapping_mul(6364136223846793005).wrapping_add(1); + let frac = (rng_state % 80) + 1; // 1-80% of remaining + let c = (remaining * frac as i128) / 100; + let c = if c == 0 { 1 } else { c }; + let c = c.min(remaining); + remaining -= c; + c + }; + + if contributed <= 0 || total_pool <= 0 { + continue; + } + let share_bps = (contributed + .checked_mul(10_000) + .unwrap() + .checked_div(total_pool) + .unwrap()) as u32; + total_bps += share_bps; + } + + prop_assert!( + total_bps <= 10_000, + "Sum of investor share_bps ({}) must not exceed 10_000", + total_bps + ); + } + } +} diff --git a/docs/invoice-nft.md b/docs/invoice-nft.md index 30aacba..565ef38 100644 --- a/docs/invoice-nft.md +++ b/docs/invoice-nft.md @@ -1,5 +1,67 @@ # Invoice NFT Contract +<<<<<<< HEAD +## Overview + +The `invoice_nft` contract is the source of truth for every invoice in the Kora protocol. It mints invoice NFTs, owns the invoice lifecycle state machine, and is the sole authority that may advance or block status transitions. + +## Status State Machine + +``` +Created → Listed → Funded → Repaid + ↘ Defaulted +``` + +| Transition | Function | Caller | +|--------------|---------------|------------------| +| → Listed | `set_listed` | Marketplace | +| → Funded | `set_funded` | Financing Pool | +| → Repaid | `set_repaid` | Financing Pool | +| → Defaulted | `set_defaulted` | Admin | + +## Freeze Mechanism + +### Design + +Freeze enforcement is **owned internally by `invoice_nft`**, not delegated to callers. Every status-mutating function (`set_listed`, `set_funded`, `set_repaid`) calls the private `require_not_frozen` guard before executing. This provides defense-in-depth: no caller — current or future — can advance a frozen invoice's state by forgetting an external pre-check. + +This is intentional and important. Earlier designs relied on external callers (e.g., `marketplace.fund_invoice`) to call `is_invoice_frozen` themselves before invoking invoice transitions. That approach is fragile: a single missed call site anywhere in the protocol silently defeats the freeze. The current design closes that class of bypass entirely. + +### Admin Operations + +| Function | Who can call | Effect | +|--------------------|--------------|---------------------------------------------| +| `freeze_invoice` | Admin only | Blocks all status transitions on the invoice | +| `unfreeze_invoice` | Admin only | Removes the freeze; transitions resume | +| `is_invoice_frozen`| Anyone | Returns `true` if the invoice is frozen | + +### Error + +A frozen invoice returns `KoraError::InvoiceFrozen (17)` on any attempted transition. + +### Use Cases + +- KYC / AML dispute on the SME or debtor +- Regulatory hold pending investigation +- Emergency administrative block + +### Storage + +Freeze state is stored as a `persistent` boolean under `DataKey::FrozenInvoice(invoice_id)`. The key is removed (not set to false) on unfreeze to reclaim storage. + +## Error Codes + +| Code | Variant | Meaning | +|------|------------------------|------------------------------------------| +| 10 | `InvoiceNotFound` | No invoice exists for the given ID | +| 11 | `InvoiceAlreadyExists` | Duplicate invoice ID in marketplace | +| 12 | `InvalidInvoiceStatus` | Transition not allowed from current state | +| 13 | `InvoiceExpired` | Invoice past due date | +| 14 | `InvalidAmount` | Zero or negative amount | +| 15 | `InvalidDueDate` | Due date not in the future | +| 16 | `InvalidRiskScore` | Risk score out of 0–100 range | +| 17 | `InvoiceFrozen` | Invoice is administratively frozen | +======= The `invoice_nft` contract is the canonical source of truth for all invoice state in the Kora Protocol. Each invoice is represented as an immutable NFT with a unique ID, capturing all financial and metadata details of the underlying invoice. ## Invoice NFT Data Model @@ -602,3 +664,4 @@ admin calls invoice_nft.set_defaulted(admin_address, invoice_id) ### No Signature Delegation - Only the SME can mint their own invoices (no delegation mechanism) - Future versions may support signed delegation for agents +>>>>>>> origin/Kora-Contract46