diff --git a/contracts/.gitignore b/contracts/.gitignore index 796603f3..a7eaa152 100644 --- a/contracts/.gitignore +++ b/contracts/.gitignore @@ -1,2 +1,3 @@ target -.env \ No newline at end of file +.env +test_snapshots/ \ No newline at end of file diff --git a/contracts/asset-maintenance/src/lib.rs b/contracts/asset-maintenance/src/lib.rs index 1bc42af5..f8b11a27 100644 --- a/contracts/asset-maintenance/src/lib.rs +++ b/contracts/asset-maintenance/src/lib.rs @@ -1,7 +1,5 @@ #![no_std] -use soroban_sdk::{ - contract, contractimpl, contracttype, symbol_short, Address, Env, String, Vec, -}; +use soroban_sdk::{contract, contractimpl, contracttype, symbol_short, Address, Env, String, Vec}; mod test; @@ -143,11 +141,11 @@ pub enum DataKey { Admin, AssetRegistry, Provider(Address), - MaintenanceHistory(u64), // asset_id -> Vec - MaintenanceSchedule(u64), // asset_id -> ScheduledMaintenance - Warranty(u64), // asset_id -> WarrantyInfo - Alerts(u64), // asset_id -> Vec - AssetStats(u64), // asset_id -> AssetStats (downtime, total cost, etc.) + MaintenanceHistory(u64), // asset_id -> Vec + MaintenanceSchedule(u64), // asset_id -> ScheduledMaintenance + Warranty(u64), // asset_id -> WarrantyInfo + Alerts(u64), // asset_id -> Vec + AssetStats(u64), // asset_id -> AssetStats (downtime, total cost, etc.) } #[contracttype] @@ -540,7 +538,7 @@ impl AssetMaintenanceContract { } } - score.min(100).max(0) + score.clamp(0, 100) } fn verify_asset_exists(_env: &Env, _asset_id: u64) -> bool { diff --git a/contracts/asset-maintenance/src/test.rs b/contracts/asset-maintenance/src/test.rs index ff3e32c6..74ab59c7 100644 --- a/contracts/asset-maintenance/src/test.rs +++ b/contracts/asset-maintenance/src/test.rs @@ -8,7 +8,7 @@ use soroban_sdk::{vec, Address, Env, String}; #[test] fn test_init_and_provider_registration() { let env = Env::default(); - let contract_id = env.register_contract(None, AssetMaintenanceContract); + let contract_id = env.register(AssetMaintenanceContract, ()); let client = AssetMaintenanceContractClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -35,11 +35,11 @@ fn test_init_and_provider_registration() { let fetched = client.get_provider_details(&provider_addr).unwrap(); assert_eq!(fetched.name, String::from_str(&env, "Service Corp")); - assert_eq!(fetched.is_active, true); + assert!(fetched.is_active); client.deactivate_provider(&provider_addr); let deactivated = client.get_provider_details(&provider_addr).unwrap(); - assert_eq!(deactivated.is_active, false); + assert!(!deactivated.is_active); } #[test] @@ -47,7 +47,7 @@ fn test_maintenance_lifecycle() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register_contract(None, AssetMaintenanceContract); + let contract_id = env.register(AssetMaintenanceContract, ()); let client = AssetMaintenanceContractClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -112,7 +112,7 @@ fn test_warranty_and_claims() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register_contract(None, AssetMaintenanceContract); + let contract_id = env.register(AssetMaintenanceContract, ()); let client = AssetMaintenanceContractClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -147,7 +147,7 @@ fn test_alerts_and_stats() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register_contract(None, AssetMaintenanceContract); + let contract_id = env.register(AssetMaintenanceContract, ()); let client = AssetMaintenanceContractClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -172,11 +172,11 @@ fn test_alerts_and_stats() { client.acknowledge_maintenance_alert(&asset_id, &0, &admin); let acknowledged_alerts = client.get_alerts(&asset_id); - assert_eq!(acknowledged_alerts.get(0).unwrap().acknowledged, true); + assert!(acknowledged_alerts.get(0).unwrap().acknowledged); // Test stats let stats = client.get_asset_stats(&asset_id); assert_eq!(stats.service_count, 0); // No service yet - assert_eq!(client.is_maintenance_cost_excessive(&asset_id, &1000), false); + assert!(!client.is_maintenance_cost_excessive(&asset_id, &1000)); } diff --git a/contracts/asset-maintenance/test_snapshots/test/test_alerts_and_stats.1.json b/contracts/asset-maintenance/test_snapshots/test/test_alerts_and_stats.1.json deleted file mode 100644 index 18fe594a..00000000 --- a/contracts/asset-maintenance/test_snapshots/test/test_alerts_and_stats.1.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [], - [], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "acknowledge_maintenance_alert", - "args": [ - { - "u64": 103 - }, - { - "u32": 0 - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Alerts" - }, - { - "u64": 103 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Alerts" - }, - { - "u64": 103 - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "acknowledged" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "acknowledged_by" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - }, - { - "key": { - "symbol": "alert_type" - }, - "val": { - "vec": [ - { - "symbol": "ServiceDue" - } - ] - } - }, - { - "key": { - "symbol": "asset_id" - }, - "val": { - "u64": 103 - } - }, - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "due_date" - }, - "val": { - "u64": 86400 - } - }, - { - "key": { - "symbol": "message" - }, - "val": { - "string": "Service due soon" - } - }, - { - "key": { - "symbol": "severity" - }, - "val": { - "vec": [ - { - "symbol": "High" - } - ] - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/asset-maintenance/test_snapshots/test/test_init_and_provider_registration.1.json b/contracts/asset-maintenance/test_snapshots/test/test_init_and_provider_registration.1.json deleted file mode 100644 index b9e60568..00000000 --- a/contracts/asset-maintenance/test_snapshots/test/test_init_and_provider_registration.1.json +++ /dev/null @@ -1,475 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_provider", - "args": [ - { - "map": [ - { - "key": { - "symbol": "address" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "average_rating" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "certification_details" - }, - "val": { - "string": "ISO9001" - } - }, - { - "key": { - "symbol": "contact_hash" - }, - "val": { - "string": "hash" - } - }, - { - "key": { - "symbol": "is_active" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Service Corp" - } - }, - { - "key": { - "symbol": "registration_timestamp" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "service_area" - }, - "val": { - "string": "Global" - } - }, - { - "key": { - "symbol": "specialization" - }, - "val": { - "vec": [ - { - "string": "Engines" - } - ] - } - }, - { - "key": { - "symbol": "total_services" - }, - "val": { - "u32": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "deactivate_provider", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Provider" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Provider" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "address" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "average_rating" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "certification_details" - }, - "val": { - "string": "ISO9001" - } - }, - { - "key": { - "symbol": "contact_hash" - }, - "val": { - "string": "hash" - } - }, - { - "key": { - "symbol": "is_active" - }, - "val": { - "bool": false - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Service Corp" - } - }, - { - "key": { - "symbol": "registration_timestamp" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "service_area" - }, - "val": { - "string": "Global" - } - }, - { - "key": { - "symbol": "specialization" - }, - "val": { - "vec": [ - { - "string": "Engines" - } - ] - } - }, - { - "key": { - "symbol": "total_services" - }, - "val": { - "u32": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/asset-maintenance/test_snapshots/test/test_maintenance_lifecycle.1.json b/contracts/asset-maintenance/test_snapshots/test/test_maintenance_lifecycle.1.json deleted file mode 100644 index d213feda..00000000 --- a/contracts/asset-maintenance/test_snapshots/test/test_maintenance_lifecycle.1.json +++ /dev/null @@ -1,985 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_provider", - "args": [ - { - "map": [ - { - "key": { - "symbol": "address" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "average_rating" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "certification_details" - }, - "val": { - "string": "ISO9001" - } - }, - { - "key": { - "symbol": "contact_hash" - }, - "val": { - "string": "hash" - } - }, - { - "key": { - "symbol": "is_active" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Service Corp" - } - }, - { - "key": { - "symbol": "registration_timestamp" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "service_area" - }, - "val": { - "string": "Global" - } - }, - { - "key": { - "symbol": "specialization" - }, - "val": { - "vec": [ - { - "string": "Engines" - } - ] - } - }, - { - "key": { - "symbol": "total_services" - }, - "val": { - "u32": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_maintenance_record", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_id" - }, - "val": { - "u64": 101 - } - }, - { - "key": { - "symbol": "condition_after" - }, - "val": { - "u32": 9 - } - }, - { - "key": { - "symbol": "condition_before" - }, - "val": { - "u32": 7 - } - }, - { - "key": { - "symbol": "description" - }, - "val": { - "string": "Regular Checkup" - } - }, - { - "key": { - "symbol": "documents_ipfs" - }, - "val": { - "vec": [ - { - "string": "ipfs://abc" - } - ] - } - }, - { - "key": { - "symbol": "duration_hours" - }, - "val": { - "u32": 4 - } - }, - { - "key": { - "symbol": "issues_found" - }, - "val": { - "string": "None" - } - }, - { - "key": { - "symbol": "issues_resolved" - }, - "val": { - "string": "N/A" - } - }, - { - "key": { - "symbol": "labor_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100 - } - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Main Shop" - } - }, - { - "key": { - "symbol": "maintenance_type" - }, - "val": { - "vec": [ - { - "symbol": "Preventive" - } - ] - } - }, - { - "key": { - "symbol": "next_recommendation" - }, - "val": { - "string": "Check in 6 months" - } - }, - { - "key": { - "symbol": "parts_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 50 - } - } - }, - { - "key": { - "symbol": "parts_replaced" - }, - "val": { - "vec": [ - { - "string": "Filter" - } - ] - } - }, - { - "key": { - "symbol": "provider" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "quality_rating" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "record_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "service_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "technician_id" - }, - "val": { - "string": "TECH-01" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "total_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 150 - } - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetStats" - }, - { - "u64": 101 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetStats" - }, - { - "u64": 101 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "health_score" - }, - "val": { - "u32": 75 - } - }, - { - "key": { - "symbol": "service_count" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "total_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 150 - } - } - }, - { - "key": { - "symbol": "total_downtime_hours" - }, - "val": { - "u64": 4 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "MaintenanceHistory" - }, - { - "u64": 101 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "MaintenanceHistory" - }, - { - "u64": 101 - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "asset_id" - }, - "val": { - "u64": 101 - } - }, - { - "key": { - "symbol": "condition_after" - }, - "val": { - "u32": 9 - } - }, - { - "key": { - "symbol": "condition_before" - }, - "val": { - "u32": 7 - } - }, - { - "key": { - "symbol": "description" - }, - "val": { - "string": "Regular Checkup" - } - }, - { - "key": { - "symbol": "documents_ipfs" - }, - "val": { - "vec": [ - { - "string": "ipfs://abc" - } - ] - } - }, - { - "key": { - "symbol": "duration_hours" - }, - "val": { - "u32": 4 - } - }, - { - "key": { - "symbol": "issues_found" - }, - "val": { - "string": "None" - } - }, - { - "key": { - "symbol": "issues_resolved" - }, - "val": { - "string": "N/A" - } - }, - { - "key": { - "symbol": "labor_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100 - } - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Main Shop" - } - }, - { - "key": { - "symbol": "maintenance_type" - }, - "val": { - "vec": [ - { - "symbol": "Preventive" - } - ] - } - }, - { - "key": { - "symbol": "next_recommendation" - }, - "val": { - "string": "Check in 6 months" - } - }, - { - "key": { - "symbol": "parts_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 50 - } - } - }, - { - "key": { - "symbol": "parts_replaced" - }, - "val": { - "vec": [ - { - "string": "Filter" - } - ] - } - }, - { - "key": { - "symbol": "provider" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "quality_rating" - }, - "val": { - "u32": 10 - } - }, - { - "key": { - "symbol": "record_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "service_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "technician_id" - }, - "val": { - "string": "TECH-01" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "total_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 150 - } - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Provider" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Provider" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "address" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "average_rating" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "certification_details" - }, - "val": { - "string": "ISO9001" - } - }, - { - "key": { - "symbol": "contact_hash" - }, - "val": { - "string": "hash" - } - }, - { - "key": { - "symbol": "is_active" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Service Corp" - } - }, - { - "key": { - "symbol": "registration_timestamp" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "service_area" - }, - "val": { - "string": "Global" - } - }, - { - "key": { - "symbol": "specialization" - }, - "val": { - "vec": [ - { - "string": "Engines" - } - ] - } - }, - { - "key": { - "symbol": "total_services" - }, - "val": { - "u32": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/asset-maintenance/test_snapshots/test/test_warranty_and_claims.1.json b/contracts/asset-maintenance/test_snapshots/test/test_warranty_and_claims.1.json deleted file mode 100644 index 6ff456dd..00000000 --- a/contracts/asset-maintenance/test_snapshots/test/test_warranty_and_claims.1.json +++ /dev/null @@ -1,329 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetRegistry" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Warranty" - }, - { - "u64": 102 - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Warranty" - }, - { - "u64": 102 - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_id" - }, - "val": { - "u64": 102 - } - }, - { - "key": { - "symbol": "claim_count" - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "symbol": "coverage_details" - }, - "val": { - "string": "Full" - } - }, - { - "key": { - "symbol": "end_date" - }, - "val": { - "u64": 31536000 - } - }, - { - "key": { - "symbol": "is_transferable" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "max_claims" - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "symbol": "provider" - }, - "val": { - "string": "OEM" - } - }, - { - "key": { - "symbol": "start_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "terms_hash" - }, - "val": { - "string": "hash" - } - }, - { - "key": { - "symbol": "warranty_type" - }, - "val": { - "string": "Manufacturer" - } - } - ] - } - } - }, - "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": 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": "0000000000000000000000000000000000000000000000000000000000000001", - "type_": "contract", - "body": { - "v0": { - "topics": [ - { - "symbol": "WarrClm" - }, - { - "u64": 102 - } - ], - "data": { - "vec": [ - { - "i128": { - "hi": 0, - "lo": 300 - } - }, - { - "u64": 0 - } - ] - } - } - } - }, - "failed_call": false - } - ] -} \ No newline at end of file diff --git a/contracts/assetsup/src/asset.rs b/contracts/assetsup/src/asset.rs index 42c5d91d..daee3f8c 100644 --- a/contracts/assetsup/src/asset.rs +++ b/contracts/assetsup/src/asset.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{Address, BytesN, String, Vec, contracttype}; +use soroban_sdk::{contracttype, Address, BytesN, String, Vec}; use crate::types::{AssetStatus, CustomAttribute}; diff --git a/contracts/assetsup/src/audit.rs b/contracts/assetsup/src/audit.rs index ff0e0a8a..2a0da014 100644 --- a/contracts/assetsup/src/audit.rs +++ b/contracts/assetsup/src/audit.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{Address, BytesN, Env, String, Vec, contracttype}; +use soroban_sdk::{contracttype, Address, BytesN, Env, String, Vec}; use crate::types::ActionType; @@ -17,6 +17,7 @@ pub struct AuditEntry { pub note: String, } +#[allow(dead_code)] pub fn log_action( env: &Env, asset_id: &BytesN<32>, diff --git a/contracts/assetsup/src/branch.rs b/contracts/assetsup/src/branch.rs index 5e91284d..393cbb99 100644 --- a/contracts/assetsup/src/branch.rs +++ b/contracts/assetsup/src/branch.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{Address, BytesN, String, contracttype}; +use soroban_sdk::{contracttype, Address, BytesN, String}; #[contracttype] #[derive(Clone, Debug, Eq, PartialEq)] diff --git a/contracts/assetsup/src/detokenization.rs b/contracts/assetsup/src/detokenization.rs index 888aea1a..dc16c436 100644 --- a/contracts/assetsup/src/detokenization.rs +++ b/contracts/assetsup/src/detokenization.rs @@ -1,27 +1,25 @@ use crate::error::Error; -use crate::types::{ContractEvent, DetokenizationProposal, TokenDataKey, TokenizedAsset}; +use crate::types::{ + ActiveProposal, DetokenizationProposal, ExecutedProposal, RejectedProposal, TokenDataKey, + TokenizedAsset, +}; use crate::voting; -use soroban_sdk::{Address, BigInt, Env}; +use soroban_sdk::{Address, Env}; /// Propose detokenization (requires voting) -pub fn propose_detokenization( - env: &Env, - asset_id: u64, - proposer: Address, -) -> Result { +pub fn propose_detokenization(env: &Env, asset_id: u64, proposer: Address) -> Result { let store = env.storage().persistent(); // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Check if proposal already exists let proposal_key = TokenDataKey::DetokenizationProposal(asset_id); if store.has(&proposal_key) { - if let Some(Some(DetokenizationProposal::Active { .. })) = store.get(&proposal_key) { + if let Some(DetokenizationProposal::Active(_)) = + store.get::<_, DetokenizationProposal>(&proposal_key) + { return Err(Error::DetokenizationAlreadyProposed); } } @@ -30,11 +28,11 @@ pub fn propose_detokenization( let proposal_id = asset_id; // Use asset_id as proposal_id for simplicity let timestamp = env.ledger().timestamp(); - let proposal = DetokenizationProposal::Active { + let proposal = DetokenizationProposal::Active(ActiveProposal { proposal_id, proposer, created_at: timestamp, - }; + }); store.set(&proposal_key, &proposal); @@ -42,24 +40,17 @@ pub fn propose_detokenization( } /// Execute detokenization if vote passed -pub fn execute_detokenization( - env: &Env, - asset_id: u64, - proposal_id: u64, -) -> Result<(), Error> { +pub fn execute_detokenization(env: &Env, asset_id: u64, proposal_id: u64) -> Result<(), Error> { let store = env.storage().persistent(); // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let mut tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Check if proposal is active let proposal_key = TokenDataKey::DetokenizationProposal(asset_id); - match store.get(&proposal_key) { - Some(Some(DetokenizationProposal::Active { .. })) => { + match store.get::<_, DetokenizationProposal>(&proposal_key) { + Some(DetokenizationProposal::Active(_)) => { // Continue } _ => { @@ -75,56 +66,46 @@ pub fn execute_detokenization( // Update proposal to executed let timestamp = env.ledger().timestamp(); - let executed_proposal = DetokenizationProposal::Executed { + let executed_proposal = DetokenizationProposal::Executed(ExecutedProposal { proposal_id, executed_at: timestamp, - }; + }); store.set(&proposal_key, &executed_proposal); // Clear all votes voting::clear_proposal_votes(env, asset_id, proposal_id)?; - // Emit event + // Emit event: (asset_id, proposal_id) env.events().publish( ("detokenization", "asset_detokenized"), - ContractEvent::AssetDetokenized { - asset_id, - proposal_id, - }, + (asset_id, proposal_id), ); Ok(()) } /// Reject detokenization proposal +#[allow(dead_code)] pub fn reject_detokenization(env: &Env, asset_id: u64) -> Result<(), Error> { let store = env.storage().persistent(); // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get proposal let proposal_key = TokenDataKey::DetokenizationProposal(asset_id); - let proposal: DetokenizationProposal = store - .get(&proposal_key) - .ok_or(Error::InvalidProposal)? - .ok_or(Error::InvalidProposal)?; + let proposal: DetokenizationProposal = + store.get(&proposal_key).ok_or(Error::InvalidProposal)?; match proposal { - DetokenizationProposal::Active { - proposal_id, - .. - } => { + DetokenizationProposal::Active(ActiveProposal { proposal_id, .. }) => { // Mark as rejected let timestamp = env.ledger().timestamp(); - let rejected_proposal = DetokenizationProposal::Rejected { + let rejected_proposal = DetokenizationProposal::Rejected(RejectedProposal { proposal_id, rejected_at: timestamp, - }; + }); store.set(&proposal_key, &rejected_proposal); // Clear votes @@ -144,10 +125,7 @@ pub fn get_detokenization_proposal( let store = env.storage().persistent(); let key = TokenDataKey::DetokenizationProposal(asset_id); - store - .get(&key) - .ok_or(Error::InvalidProposal)? - .ok_or(Error::InvalidProposal) + store.get(&key).ok_or(Error::InvalidProposal) } /// Check if detokenization is in progress @@ -155,8 +133,8 @@ pub fn is_detokenization_active(env: &Env, asset_id: u64) -> Result let store = env.storage().persistent(); let key = TokenDataKey::DetokenizationProposal(asset_id); - match store.get(&key) { - Some(Some(DetokenizationProposal::Active { .. })) => Ok(true), + match store.get::<_, DetokenizationProposal>(&key) { + Some(DetokenizationProposal::Active(_)) => Ok(true), _ => Ok(false), } } diff --git a/contracts/assetsup/src/dividends.rs b/contracts/assetsup/src/dividends.rs index 4e8d3aab..9ba0819e 100644 --- a/contracts/assetsup/src/dividends.rs +++ b/contracts/assetsup/src/dividends.rs @@ -1,14 +1,10 @@ use crate::error::Error; -use crate::types::{ContractEvent, OwnershipRecord, TokenDataKey, TokenizedAsset}; -use soroban_sdk::{Address, BigInt, Env}; +use crate::types::{OwnershipRecord, TokenDataKey, TokenizedAsset}; +use soroban_sdk::{Address, Env, Vec}; /// Distribute dividends proportionally to all token holders -pub fn distribute_dividends( - env: &Env, - asset_id: u64, - total_amount: BigInt, -) -> Result<(), Error> { - if total_amount <= BigInt::from_i128(env, 0) { +pub fn distribute_dividends(env: &Env, asset_id: u64, total_amount: i128) -> Result<(), Error> { + if total_amount <= 0 { return Err(Error::InvalidDividendAmount); } @@ -16,10 +12,7 @@ pub fn distribute_dividends( // Get tokenized asset let key = TokenDataKey::TokenizedAsset(asset_id); - let tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; if !tokenized_asset.revenue_sharing_enabled { return Err(Error::InvalidDividendAmount); @@ -27,107 +20,74 @@ pub fn distribute_dividends( // Get all token holders let holders_key = TokenDataKey::TokenHoldersList(asset_id); - let holders = store - .get(&holders_key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let holders: Vec
= store.get(&holders_key).ok_or(Error::AssetNotTokenized)?; // Distribute proportionally to each holder for holder in holders.iter() { let holder_key = TokenDataKey::TokenHolder(asset_id, holder.clone()); - let mut ownership: OwnershipRecord = store - .get(&holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let mut ownership: OwnershipRecord = store.get(&holder_key).ok_or(Error::HolderNotFound)?; // Calculate proportional dividend: (balance / total_supply) * total_amount - let proportion = (&ownership.balance * &total_amount) / &tokenized_asset.total_supply; + let proportion = (ownership.balance * total_amount) / tokenized_asset.total_supply; // Add to unclaimed dividends - ownership.unclaimed_dividends = &ownership.unclaimed_dividends + &proportion; + ownership.unclaimed_dividends += proportion; store.set(&holder_key, &ownership); } - // Emit event + // Emit event: (asset_id, total_amount, holder_count) env.events().publish( ("dividend", "distributed"), - ContractEvent::DividendDistributed { - asset_id, - total_amount, - holder_count: holders.len() as u32, - }, + (asset_id, total_amount, holders.len()), ); Ok(()) } /// Claim unclaimed dividends -pub fn claim_dividends( - env: &Env, - asset_id: u64, - holder: Address, -) -> Result { +pub fn claim_dividends(env: &Env, asset_id: u64, holder: Address) -> Result { let store = env.storage().persistent(); // Get tokenized asset let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get holder's ownership record let holder_key = TokenDataKey::TokenHolder(asset_id, holder.clone()); - let mut ownership: OwnershipRecord = store - .get(&holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let mut ownership: OwnershipRecord = store.get(&holder_key).ok_or(Error::HolderNotFound)?; // Get unclaimed amount - let unclaimed = ownership.unclaimed_dividends.clone(); + let unclaimed = ownership.unclaimed_dividends; - if unclaimed <= BigInt::from_i128(env, 0) { + if unclaimed <= 0 { return Err(Error::NoDividendsToClaim); } // Clear unclaimed dividends - ownership.unclaimed_dividends = BigInt::from_i128(env, 0); + ownership.unclaimed_dividends = 0; store.set(&holder_key, &ownership); - // Emit event - env.events().publish( - ("dividend", "claimed"), - ContractEvent::DividendClaimed { - asset_id, - holder, - amount: unclaimed.clone(), - }, - ); + // Emit event: (asset_id, holder, amount) + env.events() + .publish(("dividend", "claimed"), (asset_id, holder, unclaimed)); Ok(unclaimed) } /// Get unclaimed dividends for a holder -pub fn get_unclaimed_dividends( - env: &Env, - asset_id: u64, - holder: Address, -) -> Result { +pub fn get_unclaimed_dividends(env: &Env, asset_id: u64, holder: Address) -> Result { let store = env.storage().persistent(); // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get holder's ownership record let holder_key = TokenDataKey::TokenHolder(asset_id, holder); - match store.get(&holder_key) { - Some(Some(ownership)) => Ok(ownership.unclaimed_dividends), - _ => Ok(BigInt::from_i128(env, 0)), + match store.get::<_, OwnershipRecord>(&holder_key) { + Some(ownership) => Ok(ownership.unclaimed_dividends), + None => Ok(0), } } @@ -136,10 +96,7 @@ pub fn enable_revenue_sharing(env: &Env, asset_id: u64) -> Result<(), Error> { let store = env.storage().persistent(); let key = TokenDataKey::TokenizedAsset(asset_id); - let mut tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let mut tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; tokenized_asset.revenue_sharing_enabled = true; store.set(&key, &tokenized_asset); @@ -152,10 +109,7 @@ pub fn disable_revenue_sharing(env: &Env, asset_id: u64) -> Result<(), Error> { let store = env.storage().persistent(); let key = TokenDataKey::TokenizedAsset(asset_id); - let mut tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let mut tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; tokenized_asset.revenue_sharing_enabled = false; store.set(&key, &tokenized_asset); diff --git a/contracts/assetsup/src/error.rs b/contracts/assetsup/src/error.rs index f9ebebcb..4bc39d18 100644 --- a/contracts/assetsup/src/error.rs +++ b/contracts/assetsup/src/error.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{Env, contracterror, panic_with_error}; +use soroban_sdk::{contracterror, panic_with_error, Env}; #[contracterror] #[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] diff --git a/contracts/assetsup/src/insurance.rs b/contracts/assetsup/src/insurance.rs index 8c305b32..73cb7318 100644 --- a/contracts/assetsup/src/insurance.rs +++ b/contracts/assetsup/src/insurance.rs @@ -1,9 +1,7 @@ -#![allow(clippy::too_many_arguments)] +#![allow(dead_code)] -use soroban_sdk::{ - contracttype, Address, BytesN, Env, String, Vec, Map, Symbol, log -}; -use crate::{Error, handle_error}; +use crate::Error; +use soroban_sdk::{contracttype, log, Address, BytesN, Env, Vec}; #[contracttype] #[derive(Clone, Debug, Eq, PartialEq)] @@ -83,10 +81,7 @@ pub enum DataKey { AssetPolicies(BytesN<32>), } -pub fn create_policy( - env: Env, - policy: InsurancePolicy, -) -> Result<(), Error> { +pub fn create_policy(env: Env, policy: InsurancePolicy) -> Result<(), Error> { policy.insurer.require_auth(); if policy.coverage_amount <= 0 || policy.deductible >= policy.coverage_amount { @@ -113,18 +108,13 @@ pub fn create_policy( Ok(()) } -pub fn file_claim( - env: Env, - claim: InsuranceClaim, -) -> Result<(), Error> { +pub fn file_claim(env: Env, claim: InsuranceClaim) -> Result<(), Error> { claim.claimant.require_auth(); let store = env.storage().persistent(); let policy_key = DataKey::Policy(claim.policy_id.clone()); - let policy: InsurancePolicy = store - .get(&policy_key) - .ok_or(Error::AssetNotFound)?; + let policy: InsurancePolicy = store.get(&policy_key).ok_or(Error::AssetNotFound)?; if policy.status != PolicyStatus::Active { return Err(Error::Unauthorized); @@ -141,11 +131,7 @@ pub fn file_claim( Ok(()) } -pub fn approve_claim( - env: Env, - claim_id: BytesN<32>, - approver: Address, -) -> Result<(), Error> { +pub fn approve_claim(env: Env, claim_id: BytesN<32>, approver: Address) -> Result<(), Error> { approver.require_auth(); let store = env.storage().persistent(); @@ -162,10 +148,7 @@ pub fn approve_claim( Ok(()) } -pub fn pay_claim( - env: Env, - claim_id: BytesN<32>, -) -> Result<(), Error> { +pub fn pay_claim(env: Env, claim_id: BytesN<32>) -> Result<(), Error> { let store = env.storage().persistent(); let key = DataKey::Claim(claim_id.clone()); diff --git a/contracts/assetsup/src/lib.rs b/contracts/assetsup/src/lib.rs index 4306364d..2cfe4545 100644 --- a/contracts/assetsup/src/lib.rs +++ b/contracts/assetsup/src/lib.rs @@ -1,19 +1,22 @@ #![no_std] +#![allow(clippy::too_many_arguments)] -use crate::error::{Error, handle_error}; -use soroban_sdk::{Address, BigInt, BytesN, Env, String, Vec, contract, contractimpl, contracttype, symbol_short}; +use crate::error::{handle_error, Error}; +use soroban_sdk::{ + contract, contractimpl, contracttype, symbol_short, Address, BytesN, Env, String, Vec, +}; pub(crate) mod asset; pub(crate) mod audit; pub(crate) mod branch; +pub(crate) mod detokenization; +pub(crate) mod dividends; pub(crate) mod error; -pub(crate) mod types; pub(crate) mod insurance; pub(crate) mod tokenization; -pub(crate) mod dividends; -pub(crate) mod voting; pub(crate) mod transfer_restrictions; -pub(crate) mod detokenization; +pub(crate) mod types; +pub(crate) mod voting; #[cfg(test)] mod tests; @@ -49,7 +52,9 @@ impl AssetUpContract { // Initialize contract state env.storage().persistent().set(&DataKey::Paused, &false); - env.storage().persistent().set(&DataKey::TotalAssetCount, &0u64); + env.storage() + .persistent() + .set(&DataKey::TotalAssetCount, &0u64); // Set contract metadata let metadata = ContractMetadata { @@ -58,10 +63,14 @@ impl AssetUpContract { description: String::from_str(&env, "Professional asset registry smart contract"), created_at: env.ledger().timestamp(), }; - env.storage().persistent().set(&DataKey::ContractMetadata, &metadata); + env.storage() + .persistent() + .set(&DataKey::ContractMetadata, &metadata); // Add admin as first authorized registrar - env.storage().persistent().set(&DataKey::AuthorizedRegistrar(admin.clone()), &true); + env.storage() + .persistent() + .set(&DataKey::AuthorizedRegistrar(admin.clone()), &true); Ok(()) } @@ -77,11 +86,19 @@ impl AssetUpContract { } pub fn is_paused(env: Env) -> Result { - Ok(env.storage().persistent().get(&DataKey::Paused).unwrap_or(false)) + Ok(env + .storage() + .persistent() + .get(&DataKey::Paused) + .unwrap_or(false)) } pub fn get_total_asset_count(env: Env) -> Result { - Ok(env.storage().persistent().get(&DataKey::TotalAssetCount).unwrap_or(0u64)) + Ok(env + .storage() + .persistent() + .get(&DataKey::TotalAssetCount) + .unwrap_or(0u64)) } pub fn get_contract_metadata(env: Env) -> Result { @@ -93,7 +110,11 @@ impl AssetUpContract { } pub fn is_authorized_registrar(env: Env, address: Address) -> Result { - Ok(env.storage().persistent().get(&DataKey::AuthorizedRegistrar(address)).unwrap_or(false)) + Ok(env + .storage() + .persistent() + .get(&DataKey::AuthorizedRegistrar(address)) + .unwrap_or(false)) } // Asset functions @@ -124,14 +145,17 @@ impl AssetUpContract { // Update owner registry let owner_key = asset::DataKey::OwnerRegistry(asset.owner.clone()); - let mut owner_assets: Vec> = store.get(&owner_key).unwrap_or_else(|| Vec::new(&env)); + let mut owner_assets: Vec> = + store.get(&owner_key).unwrap_or_else(|| Vec::new(&env)); owner_assets.push_back(asset.id.clone()); store.set(&owner_key, &owner_assets); // Update total asset count let mut total_count = Self::get_total_asset_count(env.clone())?; total_count += 1; - env.storage().persistent().set(&DataKey::TotalAssetCount, &total_count); + env.storage() + .persistent() + .set(&DataKey::TotalAssetCount, &total_count); // Emit event env.events().publish( @@ -159,7 +183,10 @@ impl AssetUpContract { } // Validate owner address is not zero address - let zero_address = Address::from_str(&env, "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF"); + let zero_address = Address::from_str( + env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); if asset.owner == zero_address { return Err(Error::InvalidOwnerAddress); } @@ -241,7 +268,10 @@ impl AssetUpContract { } // Validate new owner is not zero address - let zero_address = Address::from_str(&env, "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF"); + let zero_address = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); if new_owner == zero_address { return Err(Error::InvalidOwnerAddress); } @@ -263,7 +293,8 @@ impl AssetUpContract { // Remove asset from old owner's registry let old_owner_key = asset::DataKey::OwnerRegistry(old_owner.clone()); - let mut old_owner_assets: Vec> = store.get(&old_owner_key).unwrap_or_else(|| Vec::new(&env)); + let mut old_owner_assets: Vec> = + store.get(&old_owner_key).unwrap_or_else(|| Vec::new(&env)); if let Some(index) = old_owner_assets.iter().position(|x| x == asset_id) { old_owner_assets.remove(index as u32); } @@ -271,7 +302,8 @@ impl AssetUpContract { // Add asset to new owner's registry let new_owner_key = asset::DataKey::OwnerRegistry(new_owner.clone()); - let mut new_owner_assets: Vec> = store.get(&new_owner_key).unwrap_or_else(|| Vec::new(&env)); + let mut new_owner_assets: Vec> = + store.get(&new_owner_key).unwrap_or_else(|| Vec::new(&env)); new_owner_assets.push_back(asset_id.clone()); store.set(&new_owner_key, &new_owner_assets); @@ -357,7 +389,10 @@ impl AssetUpContract { }) } - pub fn batch_get_asset_info(env: Env, asset_ids: Vec>) -> Result, Error> { + pub fn batch_get_asset_info( + env: Env, + asset_ids: Vec>, + ) -> Result, Error> { let mut results = Vec::new(&env); for asset_id in asset_ids.iter() { match Self::get_asset_info(env.clone(), asset_id.clone()) { @@ -374,7 +409,10 @@ impl AssetUpContract { current_admin.require_auth(); // Validate new admin is not zero address - let zero_address = Address::from_str(&env, "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF"); + let zero_address = Address::from_str( + &env, + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF", + ); if new_admin == zero_address { return Err(Error::InvalidOwnerAddress); } @@ -383,8 +421,12 @@ impl AssetUpContract { env.storage().persistent().set(&DataKey::Admin, &new_admin); // Remove old admin from authorized registrars and add new admin - env.storage().persistent().set(&DataKey::AuthorizedRegistrar(old_admin.clone()), &false); - env.storage().persistent().set(&DataKey::AuthorizedRegistrar(new_admin.clone()), &true); + env.storage() + .persistent() + .set(&DataKey::AuthorizedRegistrar(old_admin.clone()), &false); + env.storage() + .persistent() + .set(&DataKey::AuthorizedRegistrar(new_admin.clone()), &true); // Emit event env.events().publish( @@ -399,7 +441,9 @@ impl AssetUpContract { let admin = Self::get_admin(env.clone())?; admin.require_auth(); - env.storage().persistent().set(&DataKey::AuthorizedRegistrar(registrar), &true); + env.storage() + .persistent() + .set(&DataKey::AuthorizedRegistrar(registrar), &true); Ok(()) } @@ -412,7 +456,9 @@ impl AssetUpContract { return Err(Error::Unauthorized); } - env.storage().persistent().set(&DataKey::AuthorizedRegistrar(registrar), &false); + env.storage() + .persistent() + .set(&DataKey::AuthorizedRegistrar(registrar), &false); Ok(()) } @@ -462,9 +508,9 @@ impl AssetUpContract { env: Env, asset_id: u64, symbol: String, - total_supply: BigInt, + total_supply: i128, decimals: u32, - min_voting_threshold: BigInt, + min_voting_threshold: i128, tokenizer: Address, name: String, description: String, @@ -499,7 +545,7 @@ impl AssetUpContract { pub fn mint_tokens( env: Env, asset_id: u64, - amount: BigInt, + amount: i128, minter: Address, ) -> Result { minter.require_auth(); @@ -510,7 +556,7 @@ impl AssetUpContract { pub fn burn_tokens( env: Env, asset_id: u64, - amount: BigInt, + amount: i128, burner: Address, ) -> Result { burner.require_auth(); @@ -523,7 +569,7 @@ impl AssetUpContract { asset_id: u64, from: Address, to: Address, - amount: BigInt, + amount: i128, ) -> Result<(), Error> { from.require_auth(); @@ -534,7 +580,7 @@ impl AssetUpContract { } /// Get token balance for an address - pub fn get_token_balance(env: Env, asset_id: u64, holder: Address) -> Result { + pub fn get_token_balance(env: Env, asset_id: u64, holder: Address) -> Result { tokenization::get_token_balance(&env, asset_id, holder) } @@ -543,14 +589,16 @@ impl AssetUpContract { tokenization::get_token_holders(&env, asset_id) } - /// Lock tokens until timestamp + /// Lock tokens until timestamp (only the asset tokenizer can call this) pub fn lock_tokens( env: Env, asset_id: u64, holder: Address, until_timestamp: u64, + caller: Address, ) -> Result<(), Error> { - tokenization::lock_tokens(&env, asset_id, holder, until_timestamp) + caller.require_auth(); + tokenization::lock_tokens(&env, asset_id, holder, until_timestamp, caller) } /// Unlock tokens @@ -558,12 +606,17 @@ impl AssetUpContract { tokenization::unlock_tokens(&env, asset_id, holder) } + /// Check if a holder's tokens are currently locked + pub fn is_tokens_locked(env: Env, asset_id: u64, holder: Address) -> bool { + tokenization::is_tokens_locked(&env, asset_id, holder) + } + /// Get ownership percentage for a holder (in basis points) pub fn get_ownership_percentage( env: Env, asset_id: u64, holder: Address, - ) -> Result { + ) -> Result { tokenization::calculate_ownership_percentage(&env, asset_id, holder) } @@ -573,11 +626,7 @@ impl AssetUpContract { } /// Update asset valuation - pub fn update_valuation( - env: Env, - asset_id: u64, - new_valuation: BigInt, - ) -> Result<(), Error> { + pub fn update_valuation(env: Env, asset_id: u64, new_valuation: i128) -> Result<(), Error> { tokenization::update_valuation(&env, asset_id, new_valuation) } @@ -586,16 +635,12 @@ impl AssetUpContract { // ===================== /// Distribute dividends proportionally to all holders - pub fn distribute_dividends( - env: Env, - asset_id: u64, - total_amount: BigInt, - ) -> Result<(), Error> { + pub fn distribute_dividends(env: Env, asset_id: u64, total_amount: i128) -> Result<(), Error> { dividends::distribute_dividends(&env, asset_id, total_amount) } /// Claim unclaimed dividends - pub fn claim_dividends(env: Env, asset_id: u64, holder: Address) -> Result { + pub fn claim_dividends(env: Env, asset_id: u64, holder: Address) -> Result { holder.require_auth(); dividends::claim_dividends(&env, asset_id, holder) } @@ -605,7 +650,7 @@ impl AssetUpContract { env: Env, asset_id: u64, holder: Address, - ) -> Result { + ) -> Result { dividends::get_unclaimed_dividends(&env, asset_id, holder) } @@ -635,11 +680,7 @@ impl AssetUpContract { } /// Get vote tally for a proposal - pub fn get_vote_tally( - env: Env, - asset_id: u64, - proposal_id: u64, - ) -> Result { + pub fn get_vote_tally(env: Env, asset_id: u64, proposal_id: u64) -> Result { voting::get_vote_tally(&env, asset_id, proposal_id) } @@ -654,11 +695,7 @@ impl AssetUpContract { } /// Check if proposal passed - pub fn proposal_passed( - env: Env, - asset_id: u64, - proposal_id: u64, - ) -> Result { + pub fn proposal_passed(env: Env, asset_id: u64, proposal_id: u64) -> Result { voting::proposal_passed(&env, asset_id, proposal_id) } @@ -688,11 +725,7 @@ impl AssetUpContract { } /// Remove address from whitelist - pub fn remove_from_whitelist( - env: Env, - asset_id: u64, - address: Address, - ) -> Result<(), Error> { + pub fn remove_from_whitelist(env: Env, asset_id: u64, address: Address) -> Result<(), Error> { transfer_restrictions::remove_from_whitelist(&env, asset_id, address) } @@ -721,11 +754,7 @@ impl AssetUpContract { } /// Execute detokenization (if vote passed) - pub fn execute_detokenization( - env: Env, - asset_id: u64, - proposal_id: u64, - ) -> Result<(), Error> { + pub fn execute_detokenization(env: Env, asset_id: u64, proposal_id: u64) -> Result<(), Error> { detokenization::execute_detokenization(&env, asset_id, proposal_id) } diff --git a/contracts/assetsup/src/tests/detokenization_new.rs b/contracts/assetsup/src/tests/detokenization_new.rs index 17714c86..ac98fa1d 100644 --- a/contracts/assetsup/src/tests/detokenization_new.rs +++ b/contracts/assetsup/src/tests/detokenization_new.rs @@ -2,22 +2,23 @@ extern crate std; -use soroban_sdk::{Address, BigInt, Env, String}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{Address, Env, String}; +use crate::detokenization; use crate::tokenization; use crate::types::AssetType; use crate::voting; -use crate::detokenization; +use crate::AssetUpContract; -fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { - let asset_id = 1000u64; - let _ = tokenization::tokenize_asset( +fn setup_tokenized_asset(env: &Env, asset_id: u64, tokenizer: &Address) { + tokenization::tokenize_asset( env, asset_id, String::from_str(env, "DETON"), - BigInt::from_i128(env, 1000), + 1000, 2, - BigInt::from_i128(env, 100), + 100, tokenizer.clone(), crate::types::TokenMetadata { name: String::from_str(env, "Detokenization Test"), @@ -29,122 +30,161 @@ fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { accredited_investor_required: false, geographic_restrictions: soroban_sdk::Vec::new(env), }, - ); - asset_id + ) + .unwrap(); } #[test] fn test_propose_detokenization() { let env = Env::default(); - let tokenizer = Address::random(&env); - let proposer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); - - let proposal_id = detokenization::propose_detokenization(&env, asset_id, proposer).unwrap(); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let proposer = Address::generate(&env); + let asset_id = 1000u64; - // Verify proposal exists - let proposal = detokenization::get_detokenization_proposal(&env, asset_id).ok(); - assert!(proposal.is_some()); + let proposal_some = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + let _proposal_id = + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); + // Verify proposal exists + detokenization::get_detokenization_proposal(&env, asset_id) + .ok() + .is_some() + }); + + assert!(proposal_some); } #[test] fn test_duplicate_proposal_prevention() { let env = Env::default(); - let tokenizer = Address::random(&env); - let proposer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let proposer = Address::generate(&env); + let asset_id = 1000u64; - // Propose once - detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); + let second_err = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + // Propose once + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); + // Try to propose again + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).is_err() + }); - // Try to propose again - let result = detokenization::propose_detokenization(&env, asset_id, proposer); - assert!(result.is_err()); + assert!(second_err); } #[test] fn test_detokenization_active_check() { let env = Env::default(); - let tokenizer = Address::random(&env); - let proposer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let proposer = Address::generate(&env); + let asset_id = 1000u64; - // Should not be active initially - let is_active = detokenization::is_detokenization_active(&env, asset_id).unwrap(); - assert!(!is_active); + let (before_active, after_active) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Should not be active initially + let before = detokenization::is_detokenization_active(&env, asset_id).unwrap(); - // Propose - detokenization::propose_detokenization(&env, asset_id, proposer).unwrap(); + // Propose + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); - // Should be active now - let is_active = detokenization::is_detokenization_active(&env, asset_id).unwrap(); - assert!(is_active); + // Should be active now + let after = detokenization::is_detokenization_active(&env, asset_id).unwrap(); + (before, after) + }); + + assert!(!before_active); + assert!(after_active); } #[test] fn test_execute_detokenization_without_majority() { let env = Env::default(); - let tokenizer = Address::random(&env); - let proposer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let proposer = Address::generate(&env); + let asset_id = 1000u64; - // Propose - let proposal_id = detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); + let execute_err = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + // Propose + let proposal_id = + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); + // Try to execute without votes + detokenization::execute_detokenization(&env, asset_id, proposal_id).is_err() + }); - // Try to execute without votes - let result = detokenization::execute_detokenization(&env, asset_id, proposal_id); - assert!(result.is_err()); // Should fail - no majority + assert!(execute_err); // Should fail - no majority } #[test] fn test_execute_detokenization_with_majority() { let env = Env::default(); - let tokenizer = Address::random(&env); - let proposer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let proposer = Address::generate(&env); + let asset_id = 1000u64; + + let (execute_ok, is_active) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Propose - let proposal_id = detokenization::propose_detokenization(&env, asset_id, proposer).unwrap(); + // Propose + let proposal_id = + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); - // Get >50% votes - // Tokenizer has 1000 tokens (100%), cast vote - voting::cast_vote(&env, asset_id, proposal_id, tokenizer.clone()).unwrap(); + // Tokenizer has 1000 tokens (100%), cast vote + voting::cast_vote(&env, asset_id, proposal_id, tokenizer.clone()).unwrap(); - // Now execute - should succeed - let result = detokenization::execute_detokenization(&env, asset_id, proposal_id); - assert!(result.is_ok()); + // Now execute - should succeed + let ok = detokenization::execute_detokenization(&env, asset_id, proposal_id).is_ok(); - // Should no longer be active - let is_active = detokenization::is_detokenization_active(&env, asset_id).unwrap(); + // Should no longer be active + let active = detokenization::is_detokenization_active(&env, asset_id).unwrap(); + (ok, active) + }); + + assert!(execute_ok); assert!(!is_active); } #[test] fn test_detokenization_majority_threshold() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let proposer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let proposer = Address::generate(&env); + let asset_id = 1000u64; + + let (first_execute_err, second_execute_ok) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Transfer 400 to holder2 (40% < 50% threshold) + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 400) + .unwrap(); - // Transfer 400 to holder2 (40% < 50% threshold) - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 400)) - .unwrap(); + // Propose + let proposal_id = + detokenization::propose_detokenization(&env, asset_id, proposer.clone()).unwrap(); - // Propose - let proposal_id = detokenization::propose_detokenization(&env, asset_id, proposer).unwrap(); + // Only holder2 votes (40%) + voting::cast_vote(&env, asset_id, proposal_id, holder2.clone()).unwrap(); - // Only holder2 votes (40%) - voting::cast_vote(&env, asset_id, proposal_id, holder2).unwrap(); + // Should fail execution (only 40%) + let first_err = + detokenization::execute_detokenization(&env, asset_id, proposal_id).is_err(); - // Should fail execution - let result = detokenization::execute_detokenization(&env, asset_id, proposal_id); - assert!(result.is_err()); + // Now tokenizer also votes (100% total) + voting::cast_vote(&env, asset_id, proposal_id, tokenizer.clone()).unwrap(); - // Now tokenizer also votes (100% total) - voting::cast_vote(&env, asset_id, proposal_id, tokenizer).unwrap(); + // Should succeed + let second_ok = detokenization::execute_detokenization(&env, asset_id, proposal_id).is_ok(); + (first_err, second_ok) + }); - // Should succeed - let result = detokenization::execute_detokenization(&env, asset_id, proposal_id); - assert!(result.is_ok()); + assert!(first_execute_err); + assert!(second_execute_ok); } diff --git a/contracts/assetsup/src/tests/dividends_new.rs b/contracts/assetsup/src/tests/dividends_new.rs index 421d9d59..8606f8e9 100644 --- a/contracts/assetsup/src/tests/dividends_new.rs +++ b/contracts/assetsup/src/tests/dividends_new.rs @@ -2,21 +2,22 @@ extern crate std; -use soroban_sdk::{Address, BigInt, Env, String}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{Address, Env, String}; +use crate::dividends; use crate::tokenization; use crate::types::AssetType; -use crate::dividends; +use crate::AssetUpContract; -fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { - let asset_id = 800u64; - let _ = tokenization::tokenize_asset( +fn setup_tokenized_asset(env: &Env, asset_id: u64, tokenizer: &Address) { + tokenization::tokenize_asset( env, asset_id, String::from_str(env, "DIV"), - BigInt::from_i128(env, 1000), + 1000, 2, - BigInt::from_i128(env, 100), + 100, tokenizer.clone(), crate::types::TokenMetadata { name: String::from_str(env, "Dividend Test"), @@ -28,111 +29,141 @@ fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { accredited_investor_required: false, geographic_restrictions: soroban_sdk::Vec::new(env), }, - ); - asset_id + ) + .unwrap(); } #[test] fn test_distribute_dividends_no_revenue_sharing() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 800u64; + + let result_err = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + // Try to distribute without enabling revenue sharing + dividends::distribute_dividends(&env, asset_id, 1000).is_err() + }); - // Try to distribute without enabling revenue sharing - let result = dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 1000)); - assert!(result.is_err()); + assert!(result_err); } #[test] fn test_distribute_dividends() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let asset_id = 800u64; - // Enable revenue sharing - dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + let (tokenizer_dividend, holder2_dividend) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Transfer tokens to holder2 (500 out of 1000) - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 500)) - .unwrap(); + // Enable revenue sharing + dividends::enable_revenue_sharing(&env, asset_id).unwrap(); - // Distribute 1000 tokens as dividend - dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 1000)).unwrap(); + // Transfer tokens to holder2 (500 out of 1000) + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 500) + .unwrap(); - // Tokenizer should have 500 unclaimed (50% of 1000) - let tokenizer_dividend = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); - assert_eq!(tokenizer_dividend, BigInt::from_i128(&env, 500)); + // Distribute 1000 tokens as dividend + dividends::distribute_dividends(&env, asset_id, 1000).unwrap(); + let t_div = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + let h2_div = dividends::get_unclaimed_dividends(&env, asset_id, holder2.clone()).unwrap(); + (t_div, h2_div) + }); + + // Tokenizer should have 500 unclaimed (50% of 1000) + assert_eq!(tokenizer_dividend, 500_i128); // Holder2 should have 500 unclaimed (50% of 1000) - let holder2_dividend = dividends::get_unclaimed_dividends(&env, asset_id, holder2.clone()).unwrap(); - assert_eq!(holder2_dividend, BigInt::from_i128(&env, 500)); + assert_eq!(holder2_dividend, 500_i128); } #[test] fn test_claim_dividends() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 800u64; - // Enable revenue sharing and distribute - dividends::enable_revenue_sharing(&env, asset_id).unwrap(); - dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 500)).unwrap(); + let (claimed, remaining) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Claim dividends - let claimed = dividends::claim_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + // Enable revenue sharing and distribute + dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + dividends::distribute_dividends(&env, asset_id, 500).unwrap(); - // Should have claimed full 500 - assert_eq!(claimed, BigInt::from_i128(&env, 500)); + // Claim dividends + let claimed = dividends::claim_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + + // Check remaining + let remaining = + dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + (claimed, remaining) + }); + // Should have claimed full 500 + assert_eq!(claimed, 500_i128); // Should have 0 unclaimed now - let remaining = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer).unwrap(); - assert_eq!(remaining, BigInt::from_i128(&env, 0)); + assert_eq!(remaining, 0_i128); } #[test] fn test_claim_dividends_insufficient() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 800u64; - // Enable revenue sharing but don't distribute - dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + let result_err = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Try to claim (should have 0) - let result = dividends::claim_dividends(&env, asset_id, tokenizer); - assert!(result.is_err()); + // Enable revenue sharing but don't distribute + dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + + // Try to claim (should have 0) + dividends::claim_dividends(&env, asset_id, tokenizer.clone()).is_err() + }); + + assert!(result_err); } #[test] fn test_proportional_dividend_distribution() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let holder3 = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let holder3 = Address::generate(&env); + let asset_id = 800u64; + + let (t_div, h2_div, h3_div) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Enable revenue sharing - dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + // Enable revenue sharing + dividends::enable_revenue_sharing(&env, asset_id).unwrap(); - // Transfer: tokenizer 400, holder2 300, holder3 300 (total 1000) - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 300)) - .unwrap(); - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder3.clone(), BigInt::from_i128(&env, 300)) - .unwrap(); + // Transfer: tokenizer 400, holder2 300, holder3 300 (total 1000) + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 300) + .unwrap(); + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder3.clone(), 300) + .unwrap(); - // Distribute 1000 as dividend - dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 1000)).unwrap(); + // Distribute 1000 as dividend + dividends::distribute_dividends(&env, asset_id, 1000).unwrap(); - // Verify proportional distribution - let t_div = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer).unwrap(); - let h2_div = dividends::get_unclaimed_dividends(&env, asset_id, holder2).unwrap(); - let h3_div = dividends::get_unclaimed_dividends(&env, asset_id, holder3).unwrap(); + let t = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + let h2 = dividends::get_unclaimed_dividends(&env, asset_id, holder2.clone()).unwrap(); + let h3 = dividends::get_unclaimed_dividends(&env, asset_id, holder3.clone()).unwrap(); + (t, h2, h3) + }); // Tokenizer: 400/1000 * 1000 = 400 // Holder2: 300/1000 * 1000 = 300 // Holder3: 300/1000 * 1000 = 300 - assert_eq!(t_div, BigInt::from_i128(&env, 400)); - assert_eq!(h2_div, BigInt::from_i128(&env, 300)); - assert_eq!(h3_div, BigInt::from_i128(&env, 300)); + assert_eq!(t_div, 400_i128); + assert_eq!(h2_div, 300_i128); + assert_eq!(h3_div, 300_i128); } diff --git a/contracts/assetsup/src/tests/integration.rs b/contracts/assetsup/src/tests/integration.rs index f1116749..188139fd 100644 --- a/contracts/assetsup/src/tests/integration.rs +++ b/contracts/assetsup/src/tests/integration.rs @@ -2,229 +2,257 @@ extern crate std; -use soroban_sdk::{Address, BigInt, Env, String}; +use soroban_sdk::testutils::{Address as _, Ledger as _}; +use soroban_sdk::{Address, Env, String}; -use crate::tokenization; -use crate::types::AssetType; -use crate::voting; use crate::detokenization; use crate::dividends; +use crate::tokenization; use crate::transfer_restrictions; +use crate::types::AssetType; +use crate::voting; +use crate::AssetUpContract; /// Integration test: Full tokenization workflow #[test] fn test_full_tokenization_workflow() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let holder3 = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let holder3 = Address::generate(&env); let asset_id = 5000u64; - // Step 1: Tokenize asset - let tokenized = tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "INTEGRATION"), - BigInt::from_i128(&env, 1000), - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Integration Test"), - description: String::from_str(&env, "Full workflow test"), - asset_type: AssetType::Physical, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); - - assert_eq!(tokenized.total_supply, BigInt::from_i128(&env, 1000)); - - // Step 2: Transfer tokens to other holders - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 400)) - .unwrap(); - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder3.clone(), BigInt::from_i128(&env, 200)) + env.as_contract(&contract_id, || { + // Step 1: Tokenize asset + let tokenized = tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "INTEGRATION"), + 1000, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Integration Test"), + description: String::from_str(&env, "Full workflow test"), + asset_type: AssetType::Physical, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) .unwrap(); - // Verify balances - let tokenizer_balance = tokenization::get_token_balance(&env, asset_id, tokenizer.clone()).unwrap(); - let holder2_balance = tokenization::get_token_balance(&env, asset_id, holder2.clone()).unwrap(); - let holder3_balance = tokenization::get_token_balance(&env, asset_id, holder3.clone()).unwrap(); - - assert_eq!(tokenizer_balance, BigInt::from_i128(&env, 400)); // 1000 - 400 - 200 - assert_eq!(holder2_balance, BigInt::from_i128(&env, 400)); - assert_eq!(holder3_balance, BigInt::from_i128(&env, 200)); - - // Step 3: Calculate ownership percentages - let tokenizer_pct = tokenization::calculate_ownership_percentage(&env, asset_id, tokenizer.clone()).unwrap(); - let holder2_pct = tokenization::calculate_ownership_percentage(&env, asset_id, holder2.clone()).unwrap(); - let holder3_pct = tokenization::calculate_ownership_percentage(&env, asset_id, holder3.clone()).unwrap(); - - // Percentages in basis points: 40% = 4000, 40% = 4000, 20% = 2000 - assert_eq!(tokenizer_pct, BigInt::from_i128(&env, 4000)); - assert_eq!(holder2_pct, BigInt::from_i128(&env, 4000)); - assert_eq!(holder3_pct, BigInt::from_i128(&env, 2000)); - - // Step 4: Set transfer restrictions - let restriction = crate::types::TransferRestriction { - require_accredited: false, - geographic_allowed: soroban_sdk::Vec::new(&env), - }; - transfer_restrictions::set_transfer_restriction(&env, asset_id, restriction).unwrap(); - - // Step 5: Enable dividends and distribute - dividends::enable_revenue_sharing(&env, asset_id).unwrap(); - dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 1000)).unwrap(); - - // Verify dividend distribution - let tokenizer_div = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); - let holder2_div = dividends::get_unclaimed_dividends(&env, asset_id, holder2.clone()).unwrap(); - let holder3_div = dividends::get_unclaimed_dividends(&env, asset_id, holder3.clone()).unwrap(); - - // Should be proportional to ownership - assert_eq!(tokenizer_div, BigInt::from_i128(&env, 400)); - assert_eq!(holder2_div, BigInt::from_i128(&env, 400)); - assert_eq!(holder3_div, BigInt::from_i128(&env, 200)); - - // Step 6: Claim dividends - let claimed = dividends::claim_dividends(&env, asset_id, tokenizer.clone()).unwrap(); - assert_eq!(claimed, BigInt::from_i128(&env, 400)); - - // Step 7: Propose detokenization - let proposer = Address::random(&env); - let proposal_id = detokenization::propose_detokenization(&env, asset_id, proposer).unwrap(); - - // Step 8: Vote on detokenization - voting::cast_vote(&env, asset_id, proposal_id, tokenizer.clone()).unwrap(); - voting::cast_vote(&env, asset_id, proposal_id, holder2.clone()).unwrap(); - - // Step 9: Check vote tally - let tally = voting::get_vote_tally(&env, asset_id, proposal_id).unwrap(); - // 400 + 400 = 800 (> 500 which is 50%) - assert_eq!(tally, BigInt::from_i128(&env, 800)); - - // Step 10: Check if passed and execute - let passed = voting::proposal_passed(&env, asset_id, proposal_id).unwrap(); - assert!(passed); - - let execute_result = detokenization::execute_detokenization(&env, asset_id, proposal_id); - assert!(execute_result.is_ok()); + assert_eq!(tokenized.total_supply, 1000_i128); + + // Step 2: Transfer tokens to other holders + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 400) + .unwrap(); + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder3.clone(), 200) + .unwrap(); + + // Verify balances + let tokenizer_balance = + tokenization::get_token_balance(&env, asset_id, tokenizer.clone()).unwrap(); + let holder2_balance = + tokenization::get_token_balance(&env, asset_id, holder2.clone()).unwrap(); + let holder3_balance = + tokenization::get_token_balance(&env, asset_id, holder3.clone()).unwrap(); + + assert_eq!(tokenizer_balance, 400_i128); // 1000 - 400 - 200 + assert_eq!(holder2_balance, 400_i128); + assert_eq!(holder3_balance, 200_i128); + + // Step 3: Calculate ownership percentages + let tokenizer_pct = + tokenization::calculate_ownership_percentage(&env, asset_id, tokenizer.clone()) + .unwrap(); + let holder2_pct = + tokenization::calculate_ownership_percentage(&env, asset_id, holder2.clone()).unwrap(); + let holder3_pct = + tokenization::calculate_ownership_percentage(&env, asset_id, holder3.clone()).unwrap(); + + // Percentages in basis points: 40% = 4000, 40% = 4000, 20% = 2000 + assert_eq!(tokenizer_pct, 4000_i128); + assert_eq!(holder2_pct, 4000_i128); + assert_eq!(holder3_pct, 2000_i128); + + // Step 4: Set transfer restrictions + let restriction = crate::types::TransferRestriction { + require_accredited: false, + geographic_allowed: soroban_sdk::Vec::new(&env), + }; + transfer_restrictions::set_transfer_restriction(&env, asset_id, restriction).unwrap(); + + // Step 5: Enable dividends and distribute + dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + dividends::distribute_dividends(&env, asset_id, 1000).unwrap(); + + // Verify dividend distribution + let tokenizer_div = + dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + let holder2_div = + dividends::get_unclaimed_dividends(&env, asset_id, holder2.clone()).unwrap(); + let holder3_div = + dividends::get_unclaimed_dividends(&env, asset_id, holder3.clone()).unwrap(); + + // Should be proportional to ownership + assert_eq!(tokenizer_div, 400_i128); + assert_eq!(holder2_div, 400_i128); + assert_eq!(holder3_div, 200_i128); + + // Step 6: Claim dividends + let claimed = dividends::claim_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + assert_eq!(claimed, 400_i128); + + // Step 7: Propose detokenization + let proposer = Address::generate(&env); + let proposal_id = detokenization::propose_detokenization(&env, asset_id, proposer).unwrap(); + + // Step 8: Vote on detokenization + voting::cast_vote(&env, asset_id, proposal_id, tokenizer.clone()).unwrap(); + voting::cast_vote(&env, asset_id, proposal_id, holder2.clone()).unwrap(); + + // Step 9: Check vote tally + let tally = voting::get_vote_tally(&env, asset_id, proposal_id).unwrap(); + // 400 + 400 = 800 (> 500 which is 50%) + assert_eq!(tally, 800_i128); + + // Step 10: Check if passed and execute + let passed = voting::proposal_passed(&env, asset_id, proposal_id).unwrap(); + assert!(passed); + + let execute_result = detokenization::execute_detokenization(&env, asset_id, proposal_id); + assert!(execute_result.is_ok()); + }); } /// Test: Multiple dividend distributions #[test] fn test_multiple_dividend_distributions() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); let asset_id = 5001u64; - // Setup - tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "MULTIDIV"), - BigInt::from_i128(&env, 1000), - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Multiple Dividends"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); - - // Transfer 500 to holder2 - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 500)) + let (unclaimed, unclaimed2) = env.as_contract(&contract_id, || { + // Setup + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "MULTIDIV"), + 1000, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Multiple Dividends"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) .unwrap(); - // Enable dividends - dividends::enable_revenue_sharing(&env, asset_id).unwrap(); + // Transfer 500 to holder2 + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 500) + .unwrap(); - // First distribution - dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 500)).unwrap(); + // Enable dividends + dividends::enable_revenue_sharing(&env, asset_id).unwrap(); - // Second distribution - dividends::distribute_dividends(&env, asset_id, BigInt::from_i128(&env, 500)).unwrap(); + // First distribution + dividends::distribute_dividends(&env, asset_id, 500).unwrap(); + // Second distribution + dividends::distribute_dividends(&env, asset_id, 500).unwrap(); - // Should accumulate - let unclaimed = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); - assert_eq!(unclaimed, BigInt::from_i128(&env, 500)); // 250 + 250 + // Should accumulate + let u1 = dividends::get_unclaimed_dividends(&env, asset_id, tokenizer.clone()).unwrap(); + let u2 = dividends::get_unclaimed_dividends(&env, asset_id, holder2.clone()).unwrap(); + (u1, u2) + }); - let unclaimed2 = dividends::get_unclaimed_dividends(&env, asset_id, holder2).unwrap(); - assert_eq!(unclaimed2, BigInt::from_i128(&env, 500)); // 250 + 250 + assert_eq!(unclaimed, 500_i128); // 250 + 250 + assert_eq!(unclaimed2, 500_i128); // 250 + 250 } /// Test: Token locking and voting #[test] fn test_locked_tokens_with_voting() { let env = Env::default(); + let contract_id = env.register(AssetUpContract, ()); env.ledger().with_mut(|li| { li.timestamp = 1000; }); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); let asset_id = 5002u64; - // Setup - tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "LOCKV"), - BigInt::from_i128(&env, 1000), - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Locked Voting"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); - - // Transfer to holder2 - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 600)) + let (transfer_blocked, vote_ok) = env.as_contract(&contract_id, || { + // Setup + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "LOCKV"), + 1000, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Locked Voting"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) .unwrap(); - // Lock holder2's tokens until timestamp 5000 - tokenization::lock_tokens(&env, asset_id, holder2.clone(), 5000).unwrap(); + // Transfer to holder2 + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 600) + .unwrap(); - // Try to transfer (should fail) - let transfer_result = - tokenization::transfer_tokens(&env, asset_id, holder2.clone(), tokenizer.clone(), BigInt::from_i128(&env, 100)); - assert!(transfer_result.is_err()); + // Lock holder2's tokens until timestamp 5000 (tokenizer is the caller/authorizer) + tokenization::lock_tokens(&env, asset_id, holder2.clone(), 5000, tokenizer.clone()) + .unwrap(); - // But can still vote - let vote_result = voting::cast_vote(&env, asset_id, 1, holder2.clone()); - assert!(vote_result.is_ok()); // Locked tokens still count for voting + // Try to transfer (should fail because locked) + let transfer_blocked = + tokenization::transfer_tokens(&env, asset_id, holder2.clone(), tokenizer.clone(), 100) + .is_err(); + + // But can still vote (locked tokens still count for voting) + let vote_ok = voting::cast_vote(&env, asset_id, 1, holder2.clone()).is_ok(); + + (transfer_blocked, vote_ok) + }); + + assert!(transfer_blocked); + assert!(vote_ok); // Locked tokens still count for voting // Advance time past lock env.ledger().with_mut(|li| { li.timestamp = 6000; }); - // Unlock and try transfer again - tokenization::unlock_tokens(&env, asset_id, holder2.clone()).unwrap(); - let transfer_result = - tokenization::transfer_tokens(&env, asset_id, holder2.clone(), tokenizer.clone(), BigInt::from_i128(&env, 100)); - assert!(transfer_result.is_ok()); + env.as_contract(&contract_id, || { + // Unlock and try transfer again + tokenization::unlock_tokens(&env, asset_id, holder2.clone()).unwrap(); + let transfer_result = + tokenization::transfer_tokens(&env, asset_id, holder2.clone(), tokenizer.clone(), 100); + assert!(transfer_result.is_ok()); + }); } diff --git a/contracts/assetsup/src/tests/mod.rs b/contracts/assetsup/src/tests/mod.rs index 30806116..35d61704 100644 --- a/contracts/assetsup/src/tests/mod.rs +++ b/contracts/assetsup/src/tests/mod.rs @@ -1,12 +1,12 @@ -mod access_control; -mod asset; -mod branch; -mod initialize; -mod transfer; -mod types; -mod tokenization_new; -mod voting_new; -mod dividends_new; -mod transfer_restrictions_new; mod detokenization_new; +mod dividends_new; mod integration; +mod tokenization_new; +mod transfer_restrictions_new; +mod voting_new; +// mod access_control; +// mod asset; +// mod branch; +// mod initialize; +// mod transfer; +// mod types; diff --git a/contracts/assetsup/src/tests/tokenization_new.rs b/contracts/assetsup/src/tests/tokenization_new.rs index 6d1ec94a..4fbed2b6 100644 --- a/contracts/assetsup/src/tests/tokenization_new.rs +++ b/contracts/assetsup/src/tests/tokenization_new.rs @@ -2,33 +2,56 @@ extern crate std; -use soroban_sdk::{Address, BigInt, Env, String}; +use soroban_sdk::testutils::{Address as _, Ledger as _}; +use soroban_sdk::{Address, Env, String}; -use crate::types::{AssetType, TokenizedAsset}; use crate::tokenization; +use crate::types::AssetType; +use crate::AssetUpContract; fn make_asset_id(seed: u64) -> u64 { seed } +fn setup_tokenized(env: &Env, asset_id: u64, tokenizer: &Address) { + tokenization::tokenize_asset( + env, + asset_id, + String::from_str(env, "TOKEN"), + 1000, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(env, "Lock Test Asset"), + description: String::from_str(env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(env), + }, + ) + .unwrap(); +} + #[test] fn test_tokenize_asset() { let env = Env::default(); - let tokenizer = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); let asset_id = make_asset_id(100); let symbol = String::from_str(&env, "ASSET100"); - let total_supply = BigInt::from_i128(&env, 1000); + let total_supply = 1000_i128; let decimals = 2u32; - let name = String::from_str(&env, "Test Asset"); - let description = String::from_str(&env, "Testing tokenization"); - let asset_type = AssetType::Digital; - let min_voting_threshold = BigInt::from_i128(&env, 100); + let min_voting_threshold = 100_i128; let metadata = crate::types::TokenMetadata { - name, - description, - asset_type, + name: String::from_str(&env, "Test Asset"), + description: String::from_str(&env, "Testing tokenization"), + asset_type: AssetType::Digital, ipfs_uri: None, legal_docs_hash: None, valuation_report_hash: None, @@ -36,17 +59,19 @@ fn test_tokenize_asset() { geographic_restrictions: soroban_sdk::Vec::new(&env), }; - let tokenized_asset = tokenization::tokenize_asset( - &env, - asset_id, - symbol.clone(), - total_supply.clone(), - decimals, - min_voting_threshold, - tokenizer.clone(), - metadata, - ) - .unwrap(); + let tokenized_asset = env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + asset_id, + symbol.clone(), + total_supply, + decimals, + min_voting_threshold, + tokenizer.clone(), + metadata, + ) + .unwrap() + }); assert_eq!(tokenized_asset.asset_id, asset_id); assert_eq!(tokenized_asset.symbol, symbol); @@ -59,27 +84,30 @@ fn test_tokenize_asset() { #[test] fn test_tokenize_asset_invalid_supply() { let env = Env::default(); - let tokenizer = Address::random(&env); - - let result = tokenization::tokenize_asset( - &env, - 100, - String::from_str(&env, "ASSET100"), - BigInt::from_i128(&env, 0), // Invalid supply - 2, - BigInt::from_i128(&env, 100), - tokenizer, - crate::types::TokenMetadata { - name: String::from_str(&env, "Test"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + + let result = env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + 100, + String::from_str(&env, "ASSET100"), + 0, // Invalid supply + 2, + 100, + tokenizer, + crate::types::TokenMetadata { + name: String::from_str(&env, "Test"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) + }); assert!(result.is_err()); } @@ -87,212 +115,383 @@ fn test_tokenize_asset_invalid_supply() { #[test] fn test_mint_tokens() { let env = Env::default(); - let tokenizer = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); let asset_id = make_asset_id(200); - let initial_supply = BigInt::from_i128(&env, 500); - let mint_amount = BigInt::from_i128(&env, 200); - - // Tokenize first - let _ = tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "AST200"), - initial_supply, - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Mint Test"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); - - // Mint tokens - let updated_asset = tokenization::mint_tokens(&env, asset_id, mint_amount.clone(), tokenizer.clone()).unwrap(); + let initial_supply = 500_i128; + let mint_amount = 200_i128; + + let (updated_supply, balance) = env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "AST200"), + initial_supply, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Mint Test"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) + .unwrap(); - // Verify supply increased - assert_eq!(updated_asset.total_supply, &initial_supply + &mint_amount); + let updated = + tokenization::mint_tokens(&env, asset_id, mint_amount, tokenizer.clone()).unwrap(); + let bal = tokenization::get_token_balance(&env, asset_id, tokenizer.clone()).unwrap(); + (updated.total_supply, bal) + }); - // Verify tokenizer's balance updated - let balance = tokenization::get_token_balance(&env, asset_id, tokenizer).unwrap(); - assert_eq!(balance, &initial_supply + &mint_amount); + assert_eq!(updated_supply, initial_supply + mint_amount); + assert_eq!(balance, initial_supply + mint_amount); } #[test] fn test_burn_tokens() { let env = Env::default(); - let tokenizer = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); let asset_id = make_asset_id(300); - let initial_supply = BigInt::from_i128(&env, 1000); - let burn_amount = BigInt::from_i128(&env, 400); - - // Tokenize - let _ = tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "AST300"), - initial_supply, - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Burn Test"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); + let initial_supply = 1000_i128; + let burn_amount = 400_i128; + + let new_supply = env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "AST300"), + initial_supply, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Burn Test"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) + .unwrap(); - // Burn tokens - let updated_asset = tokenization::burn_tokens(&env, asset_id, burn_amount.clone(), tokenizer.clone()).unwrap(); + let updated = + tokenization::burn_tokens(&env, asset_id, burn_amount, tokenizer.clone()).unwrap(); + updated.total_supply + }); - // Verify supply decreased - assert_eq!(updated_asset.total_supply, &BigInt::from_i128(&env, 1000) - &burn_amount); + assert_eq!(new_supply, 1000_i128 - burn_amount); } #[test] fn test_transfer_tokens() { let env = Env::default(); - let tokenizer = Address::random(&env); - let recipient = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let recipient = Address::generate(&env); let asset_id = make_asset_id(400); - let total_supply = BigInt::from_i128(&env, 1000); - let transfer_amount = BigInt::from_i128(&env, 300); - - // Tokenize - let _ = tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "AST400"), - total_supply, - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Transfer Test"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); + let total_supply = 1000_i128; + let transfer_amount = 300_i128; + + let (tokenizer_balance, recipient_balance) = env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "AST400"), + total_supply, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Transfer Test"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) + .unwrap(); - // Transfer - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), recipient.clone(), transfer_amount.clone()) + tokenization::transfer_tokens( + &env, + asset_id, + tokenizer.clone(), + recipient.clone(), + transfer_amount, + ) .unwrap(); - // Verify balances - let tokenizer_balance = tokenization::get_token_balance(&env, asset_id, tokenizer).unwrap(); - let recipient_balance = tokenization::get_token_balance(&env, asset_id, recipient).unwrap(); + let tb = tokenization::get_token_balance(&env, asset_id, tokenizer.clone()).unwrap(); + let rb = tokenization::get_token_balance(&env, asset_id, recipient.clone()).unwrap(); + (tb, rb) + }); - assert_eq!(tokenizer_balance, &BigInt::from_i128(&env, 1000) - &transfer_amount); + assert_eq!(tokenizer_balance, 1000_i128 - transfer_amount); assert_eq!(recipient_balance, transfer_amount); } #[test] fn test_lock_tokens() { let env = Env::default(); - env.ledger().with_mut(|li| { - li.timestamp = 1000; - }); + env.ledger().with_mut(|li| li.timestamp = 1000); - let tokenizer = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let recipient = Address::generate(&env); let asset_id = make_asset_id(500); - // Tokenize - let _ = tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "AST500"), - BigInt::from_i128(&env, 1000), - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Lock Test"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); - - // Lock tokens until timestamp 5000 - tokenization::lock_tokens(&env, asset_id, tokenizer.clone(), 5000).unwrap(); - - // Try to transfer (should fail) - let recipient = Address::random(&env); - let result = - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), recipient.clone(), BigInt::from_i128(&env, 100)); + env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "AST500"), + 1000, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Lock Test"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) + .unwrap(); - assert!(result.is_err()); + tokenization::lock_tokens(&env, asset_id, tokenizer.clone(), 5000, tokenizer.clone()) + .unwrap(); + + // Try to transfer (should fail) + let result = tokenization::transfer_tokens( + &env, + asset_id, + tokenizer.clone(), + recipient.clone(), + 100, + ); + assert!(result.is_err()); + }); // Advance time past lock period - env.ledger().with_mut(|li| { - li.timestamp = 6000; + env.ledger().with_mut(|li| li.timestamp = 6000); + + env.as_contract(&contract_id, || { + // Transfer should now succeed + let result = tokenization::transfer_tokens( + &env, + asset_id, + tokenizer.clone(), + recipient.clone(), + 100, + ); + assert!(result.is_ok()); }); - - // Transfer should now succeed - let result = tokenization::transfer_tokens(&env, asset_id, tokenizer, recipient, BigInt::from_i128(&env, 100)); - assert!(result.is_ok()); } #[test] fn test_ownership_percentage() { let env = Env::default(); - let tokenizer = Address::random(&env); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); let asset_id = make_asset_id(600); - let total_supply = BigInt::from_i128(&env, 1000); - // Tokenize - let _ = tokenization::tokenize_asset( - &env, - asset_id, - String::from_str(&env, "AST600"), - total_supply, - 2, - BigInt::from_i128(&env, 100), - tokenizer.clone(), - crate::types::TokenMetadata { - name: String::from_str(&env, "Percentage Test"), - description: String::from_str(&env, "Test"), - asset_type: AssetType::Digital, - ipfs_uri: None, - legal_docs_hash: None, - valuation_report_hash: None, - accredited_investor_required: false, - geographic_restrictions: soroban_sdk::Vec::new(&env), - }, - ) - .unwrap(); + let percentage = env.as_contract(&contract_id, || { + tokenization::tokenize_asset( + &env, + asset_id, + String::from_str(&env, "AST600"), + 1000, + 2, + 100, + tokenizer.clone(), + crate::types::TokenMetadata { + name: String::from_str(&env, "Percentage Test"), + description: String::from_str(&env, "Test"), + asset_type: AssetType::Digital, + ipfs_uri: None, + legal_docs_hash: None, + valuation_report_hash: None, + accredited_investor_required: false, + geographic_restrictions: soroban_sdk::Vec::new(&env), + }, + ) + .unwrap(); - // Tokenizer should have 100% ownership - let percentage = tokenization::calculate_ownership_percentage(&env, asset_id, tokenizer).unwrap(); + tokenization::calculate_ownership_percentage(&env, asset_id, tokenizer.clone()).unwrap() + }); // 100% = 10000 basis points - assert_eq!(percentage, BigInt::from_i128(&env, 10000)); + assert_eq!(percentage, 10000_i128); +} + +// ===================== +// Token Lock Tests +// ===================== + +#[test] +fn test_is_tokens_locked_when_active() { + let env = Env::default(); + env.ledger().with_mut(|li| li.timestamp = 1000); + + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = make_asset_id(700); + + let locked = env.as_contract(&contract_id, || { + setup_tokenized(&env, asset_id, &tokenizer); + // Lock until 5000; current timestamp is 1000 — should be locked + tokenization::lock_tokens(&env, asset_id, tokenizer.clone(), 5000, tokenizer.clone()) + .unwrap(); + tokenization::is_tokens_locked(&env, asset_id, tokenizer.clone()) + }); + + assert!(locked); +} + +#[test] +fn test_is_tokens_locked_after_expiry() { + let env = Env::default(); + env.ledger().with_mut(|li| li.timestamp = 1000); + + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let recipient = Address::generate(&env); + let asset_id = make_asset_id(800); + + env.as_contract(&contract_id, || { + setup_tokenized(&env, asset_id, &tokenizer); + // Lock until 2000 + tokenization::lock_tokens(&env, asset_id, tokenizer.clone(), 2000, tokenizer.clone()) + .unwrap(); + }); + + // Advance time past the lock + env.ledger().with_mut(|li| li.timestamp = 3000); + + env.as_contract(&contract_id, || { + // Lock has expired — is_tokens_locked should return false + assert!(!tokenization::is_tokens_locked( + &env, + asset_id, + tokenizer.clone() + )); + + // Transfer should also succeed because lock expired + let result = tokenization::transfer_tokens( + &env, + asset_id, + tokenizer.clone(), + recipient.clone(), + 100, + ); + assert!(result.is_ok()); + }); +} + +#[test] +fn test_unlock_tokens_clears_lock_regardless_of_timestamp() { + let env = Env::default(); + env.ledger().with_mut(|li| li.timestamp = 1000); + + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let recipient = Address::generate(&env); + let asset_id = make_asset_id(900); + + env.as_contract(&contract_id, || { + setup_tokenized(&env, asset_id, &tokenizer); + + // Lock until far future + tokenization::lock_tokens(&env, asset_id, tokenizer.clone(), 99999, tokenizer.clone()) + .unwrap(); + assert!(tokenization::is_tokens_locked( + &env, + asset_id, + tokenizer.clone() + )); + + // Unlock while still inside the lock window + tokenization::unlock_tokens(&env, asset_id, tokenizer.clone()).unwrap(); + + // Lock should be gone + assert!(!tokenization::is_tokens_locked( + &env, + asset_id, + tokenizer.clone() + )); + + // Transfer should now succeed even though original lock hasn't "expired" + let result = tokenization::transfer_tokens( + &env, + asset_id, + tokenizer.clone(), + recipient.clone(), + 100, + ); + assert!(result.is_ok()); + }); +} + +#[test] +fn test_is_tokens_locked_no_lock_returns_false() { + let env = Env::default(); + env.ledger().with_mut(|li| li.timestamp = 1000); + + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = make_asset_id(1000); + + let locked = env.as_contract(&contract_id, || { + setup_tokenized(&env, asset_id, &tokenizer); + // No lock set — should return false + tokenization::is_tokens_locked(&env, asset_id, tokenizer.clone()) + }); + + assert!(!locked); +} + +#[test] +fn test_lock_tokens_unauthorized() { + let env = Env::default(); + env.ledger().with_mut(|li| li.timestamp = 1000); + + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let intruder = Address::generate(&env); + let asset_id = make_asset_id(1100); + + let (lock_result, still_unlocked) = env.as_contract(&contract_id, || { + setup_tokenized(&env, asset_id, &tokenizer); + + // Non-tokenizer tries to lock — should fail + let r = + tokenization::lock_tokens(&env, asset_id, tokenizer.clone(), 5000, intruder.clone()); + + // Holder is still unlocked + let unlocked = !tokenization::is_tokens_locked(&env, asset_id, tokenizer.clone()); + (r, unlocked) + }); + + assert!(lock_result.is_err()); + assert!(still_unlocked); } diff --git a/contracts/assetsup/src/tests/transfer_restrictions_new.rs b/contracts/assetsup/src/tests/transfer_restrictions_new.rs index 85169706..a1448293 100644 --- a/contracts/assetsup/src/tests/transfer_restrictions_new.rs +++ b/contracts/assetsup/src/tests/transfer_restrictions_new.rs @@ -2,21 +2,22 @@ extern crate std; -use soroban_sdk::{Address, BigInt, Env, String}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{Address, Env, String}; use crate::tokenization; -use crate::types::{AssetType, TransferRestriction}; use crate::transfer_restrictions; +use crate::types::{AssetType, TransferRestriction}; +use crate::AssetUpContract; -fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { - let asset_id = 900u64; - let _ = tokenization::tokenize_asset( +fn setup_tokenized_asset(env: &Env, asset_id: u64, tokenizer: &Address) { + tokenization::tokenize_asset( env, asset_id, String::from_str(env, "RESTR"), - BigInt::from_i128(env, 1000), + 1000, 2, - BigInt::from_i128(env, 100), + 100, tokenizer.clone(), crate::types::TokenMetadata { name: String::from_str(env, "Restriction Test"), @@ -28,101 +29,140 @@ fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { accredited_investor_required: false, geographic_restrictions: soroban_sdk::Vec::new(env), }, - ); - asset_id + ) + .unwrap(); } #[test] fn test_set_transfer_restriction() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 900u64; + + let (set_ok, has_restrictions) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - let restriction = TransferRestriction { - require_accredited: true, - geographic_allowed: soroban_sdk::Vec::new(&env), - }; + let restriction = TransferRestriction { + require_accredited: true, + geographic_allowed: soroban_sdk::Vec::new(&env), + }; - let result = transfer_restrictions::set_transfer_restriction(&env, asset_id, restriction); - assert!(result.is_ok()); + let ok = + transfer_restrictions::set_transfer_restriction(&env, asset_id, restriction).is_ok(); + let has = transfer_restrictions::has_transfer_restrictions(&env, asset_id).unwrap(); + (ok, has) + }); - // Verify restriction was set - let has_restrictions = transfer_restrictions::has_transfer_restrictions(&env, asset_id).unwrap(); + assert!(set_ok); assert!(has_restrictions); } #[test] fn test_whitelist_operations() { let env = Env::default(); - let tokenizer = Address::random(&env); - let whitelisted = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let whitelisted = Address::generate(&env); + let asset_id = 900u64; + + let (is_wl_after_add, list_len, is_wl_after_remove) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Add to whitelist - transfer_restrictions::add_to_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); + // Add to whitelist + transfer_restrictions::add_to_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); - // Check if whitelisted - let is_wl = transfer_restrictions::is_whitelisted(&env, asset_id, whitelisted.clone()).unwrap(); - assert!(is_wl); + let is_wl_add = + transfer_restrictions::is_whitelisted(&env, asset_id, whitelisted.clone()).unwrap(); + let whitelist = transfer_restrictions::get_whitelist(&env, asset_id).unwrap(); + let len = whitelist.len(); - // Get whitelist - let whitelist = transfer_restrictions::get_whitelist(&env, asset_id).unwrap(); - assert_eq!(whitelist.len(), 1); + // Remove from whitelist + transfer_restrictions::remove_from_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); - // Remove from whitelist - transfer_restrictions::remove_from_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); + let is_wl_rem = + transfer_restrictions::is_whitelisted(&env, asset_id, whitelisted.clone()).unwrap(); + (is_wl_add, len, is_wl_rem) + }); - // Verify removed - let is_wl = transfer_restrictions::is_whitelisted(&env, asset_id, whitelisted).unwrap(); - assert!(!is_wl); + assert!(is_wl_after_add); + assert_eq!(list_len, 1); + assert!(!is_wl_after_remove); } #[test] fn test_whitelist_duplicate_prevention() { let env = Env::default(); - let tokenizer = Address::random(&env); - let whitelisted = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let whitelisted = Address::generate(&env); + let asset_id = 900u64; + + let list_len = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Add to whitelist twice + transfer_restrictions::add_to_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); + transfer_restrictions::add_to_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); - // Add to whitelist twice - transfer_restrictions::add_to_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); - transfer_restrictions::add_to_whitelist(&env, asset_id, whitelisted.clone()).unwrap(); + // Should still have only 1 entry + transfer_restrictions::get_whitelist(&env, asset_id) + .unwrap() + .len() + }); - // Should still have only 1 entry - let whitelist = transfer_restrictions::get_whitelist(&env, asset_id).unwrap(); - assert_eq!(whitelist.len(), 1); + assert_eq!(list_len, 1); } #[test] fn test_validate_transfer_no_restrictions() { let env = Env::default(); - let tokenizer = Address::random(&env); - let recipient = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let recipient = Address::generate(&env); + let asset_id = 900u64; + + let valid = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Validate transfer when no restrictions exist + transfer_restrictions::validate_transfer( + &env, + asset_id, + tokenizer.clone(), + recipient.clone(), + ) + .unwrap() + }); - // Validate transfer when no restrictions exist - let valid = transfer_restrictions::validate_transfer(&env, asset_id, tokenizer, recipient).unwrap(); assert!(valid); } #[test] fn test_get_transfer_restriction() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); - - // Should fail initially (no restriction) - let restriction = transfer_restrictions::get_transfer_restriction(&env, asset_id); - assert!(restriction.is_err()); - - // Set restriction - let new_restriction = TransferRestriction { - require_accredited: true, - geographic_allowed: soroban_sdk::Vec::new(&env), - }; - transfer_restrictions::set_transfer_restriction(&env, asset_id, new_restriction.clone()).unwrap(); - - // Should now exist - let restriction = transfer_restrictions::get_transfer_restriction(&env, asset_id).unwrap(); - assert_eq!(restriction.require_accredited, true); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 900u64; + + let (before_err, after_require_accredited) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Should fail initially (no restriction) + let before = transfer_restrictions::get_transfer_restriction(&env, asset_id).is_err(); + + // Set restriction + let new_restriction = TransferRestriction { + require_accredited: true, + geographic_allowed: soroban_sdk::Vec::new(&env), + }; + transfer_restrictions::set_transfer_restriction(&env, asset_id, new_restriction).unwrap(); + + // Should now exist + let after = transfer_restrictions::get_transfer_restriction(&env, asset_id).unwrap(); + (before, after.require_accredited) + }); + + assert!(before_err); + assert!(after_require_accredited); } diff --git a/contracts/assetsup/src/tests/voting_new.rs b/contracts/assetsup/src/tests/voting_new.rs index 1af2088a..58513788 100644 --- a/contracts/assetsup/src/tests/voting_new.rs +++ b/contracts/assetsup/src/tests/voting_new.rs @@ -2,21 +2,22 @@ extern crate std; -use soroban_sdk::{Address, BigInt, Env, String}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{Address, Env, String}; use crate::tokenization; use crate::types::AssetType; use crate::voting; +use crate::AssetUpContract; -fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { - let asset_id = 700u64; - let _ = tokenization::tokenize_asset( +fn setup_tokenized_asset(env: &Env, asset_id: u64, tokenizer: &Address) { + tokenization::tokenize_asset( env, asset_id, String::from_str(env, "VOTE"), - BigInt::from_i128(env, 1000), + 1000, 2, - BigInt::from_i128(env, 100), + 100, tokenizer.clone(), crate::types::TokenMetadata { name: String::from_str(env, "Voting Test"), @@ -28,96 +29,120 @@ fn setup_tokenized_asset(env: &Env, tokenizer: &Address) -> u64 { accredited_investor_required: false, geographic_restrictions: soroban_sdk::Vec::new(env), }, - ); - asset_id + ) + .unwrap(); } #[test] fn test_cast_vote() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 700u64; - // Cast vote - let result = voting::cast_vote(&env, asset_id, 1, tokenizer.clone()); - assert!(result.is_ok()); + let (cast_ok, has_voted) = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + let result = voting::cast_vote(&env, asset_id, 1, tokenizer.clone()); + let voted = voting::has_voted(&env, asset_id, 1, tokenizer.clone()).unwrap(); + (result.is_ok(), voted) + }); - // Verify vote was recorded - let has_voted = voting::has_voted(&env, asset_id, 1, tokenizer).unwrap(); + assert!(cast_ok); assert!(has_voted); } #[test] fn test_double_vote_prevention() { let env = Env::default(); - let tokenizer = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let asset_id = 700u64; - // Cast first vote - voting::cast_vote(&env, asset_id, 1, tokenizer.clone()).unwrap(); + let second_vote_err = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + // Cast first vote + voting::cast_vote(&env, asset_id, 1, tokenizer.clone()).unwrap(); + // Try to vote again + voting::cast_vote(&env, asset_id, 1, tokenizer.clone()).is_err() + }); - // Try to vote again - let result = voting::cast_vote(&env, asset_id, 1, tokenizer); - assert!(result.is_err()); + assert!(second_vote_err); } #[test] fn test_vote_tally() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let asset_id = 700u64; - // Transfer some tokens to second holder - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 300)) - .unwrap(); + let tally = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Cast votes - voting::cast_vote(&env, asset_id, 1, tokenizer.clone()).unwrap(); - voting::cast_vote(&env, asset_id, 1, holder2.clone()).unwrap(); + // Transfer some tokens to second holder + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 300) + .unwrap(); - // Check tally - let tally = voting::get_vote_tally(&env, asset_id, 1).unwrap(); + // Cast votes + voting::cast_vote(&env, asset_id, 1, tokenizer.clone()).unwrap(); + voting::cast_vote(&env, asset_id, 1, holder2.clone()).unwrap(); + + // Check tally + voting::get_vote_tally(&env, asset_id, 1).unwrap() + }); // Tokenizer has 700, holder2 has 300 = 1000 total - assert_eq!(tally, BigInt::from_i128(&env, 1000)); + assert_eq!(tally, 1000_i128); } #[test] fn test_proposal_passed() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let asset_id = 700u64; + + let passed = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); - // Transfer 600 tokens to holder2 (>50% of 1000) - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 600)) - .unwrap(); + // Transfer 600 tokens to holder2 (>50% of 1000) + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 600) + .unwrap(); - // Holder2 votes (600 votes) - voting::cast_vote(&env, asset_id, 1, holder2).unwrap(); + // Holder2 votes (600 votes) + voting::cast_vote(&env, asset_id, 1, holder2.clone()).unwrap(); + + // Check if proposal passed + voting::proposal_passed(&env, asset_id, 1).unwrap() + }); - // Check if proposal passed - let passed = voting::proposal_passed(&env, asset_id, 1).unwrap(); assert!(passed); } #[test] fn test_proposal_failed() { let env = Env::default(); - let tokenizer = Address::random(&env); - let holder2 = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let holder2 = Address::generate(&env); + let asset_id = 700u64; + + let passed = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Transfer 400 tokens to holder2 (<50% of 1000) + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), 400) + .unwrap(); - // Transfer 400 tokens to holder2 (<50% of 1000) - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), holder2.clone(), BigInt::from_i128(&env, 400)) - .unwrap(); + // Holder2 votes with 400 tokens (40% — below threshold) + voting::cast_vote(&env, asset_id, 1, holder2.clone()).unwrap(); - // Both vote (600 + 400 = 1000, but holder2 has only 40%) - voting::cast_vote(&env, asset_id, 1, holder2.clone()).unwrap(); + // Check if proposal failed + voting::proposal_passed(&env, asset_id, 1).unwrap() + }); - // Check if proposal failed (single voter with <50%) - let passed = voting::proposal_passed(&env, asset_id, 1).unwrap(); // With only 400/1000 votes, should not pass 50% threshold assert!(!passed); } @@ -125,15 +150,21 @@ fn test_proposal_failed() { #[test] fn test_insufficient_voting_power() { let env = Env::default(); - let tokenizer = Address::random(&env); - let new_holder = Address::random(&env); - let asset_id = setup_tokenized_asset(&env, &tokenizer); + let contract_id = env.register(AssetUpContract, ()); + let tokenizer = Address::generate(&env); + let new_holder = Address::generate(&env); + let asset_id = 700u64; + + let vote_err = env.as_contract(&contract_id, || { + setup_tokenized_asset(&env, asset_id, &tokenizer); + + // Transfer 50 tokens to new_holder (below 100 threshold) + tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), new_holder.clone(), 50) + .unwrap(); - // Transfer tokens down to below voting threshold (100) - tokenization::transfer_tokens(&env, asset_id, tokenizer.clone(), new_holder.clone(), BigInt::from_i128(&env, 950)) - .unwrap(); + // new_holder has 50 tokens (below 100 threshold), should not be able to vote + voting::cast_vote(&env, asset_id, 1, new_holder.clone()).is_err() + }); - // New holder has 50 tokens (below 100 threshold), should not be able to vote - let result = voting::cast_vote(&env, asset_id, 1, new_holder); - assert!(result.is_err()); + assert!(vote_err); } diff --git a/contracts/assetsup/src/tokenization.rs b/contracts/assetsup/src/tokenization.rs index 1a3285cc..fcd61b95 100644 --- a/contracts/assetsup/src/tokenization.rs +++ b/contracts/assetsup/src/tokenization.rs @@ -1,23 +1,22 @@ use crate::error::Error; -use crate::types::{ - ContractEvent, OwnershipRecord, TokenDataKey, TokenMetadata, TokenizedAsset, -}; -use soroban_sdk::{Address, BigInt, Env, String, Vec}; +use crate::types::{OwnershipRecord, TokenDataKey, TokenMetadata, TokenizedAsset}; +use soroban_sdk::{Address, Env, String, Vec}; /// Initialize tokenization by creating tokenized asset /// Only contract admin or asset owner can tokenize +#[allow(clippy::too_many_arguments)] pub fn tokenize_asset( env: &Env, asset_id: u64, symbol: String, - total_supply: BigInt, + total_supply: i128, decimals: u32, - min_voting_threshold: BigInt, + min_voting_threshold: i128, tokenizer: Address, metadata: TokenMetadata, ) -> Result { // Validate inputs - if total_supply <= BigInt::from_i128(env, 0) { + if total_supply <= 0 { return Err(Error::InvalidTokenSupply); } @@ -32,37 +31,37 @@ pub fn tokenize_asset( let timestamp = env.ledger().timestamp(); let tokenized_asset = TokenizedAsset { asset_id, - total_supply: total_supply.clone(), + total_supply, symbol: symbol.clone(), decimals, - locked_tokens: BigInt::from_i128(env, 0), + locked_tokens: 0, tokenizer: tokenizer.clone(), - valuation: total_supply.clone(), + valuation: total_supply, token_holders_count: 1, - tokens_in_circulation: total_supply.clone(), + tokens_in_circulation: total_supply, min_voting_threshold, revenue_sharing_enabled: false, tokenization_timestamp: timestamp, - detokenization_required_threshold: 50, // 50% majority + detokenize_threshold: 50, // 50% majority }; // Store tokenized asset store.set(&key, &tokenized_asset); // Store metadata - let metadata_key = TokenDataKey::TokenizedAsset(asset_id); - store.set(&(b"token_metadata", asset_id), &metadata); + let metadata_key = TokenDataKey::TokenMetadata(asset_id); + store.set(&metadata_key, &metadata); // Initialize tokenizer as first holder with full supply let ownership = OwnershipRecord { owner: tokenizer.clone(), - balance: total_supply.clone(), + balance: total_supply, acquisition_timestamp: timestamp, - average_purchase_price: BigInt::from_i128(env, 1), - voting_power: total_supply.clone(), - dividend_entitlement: total_supply.clone(), - unclaimed_dividends: BigInt::from_i128(env, 0), - ownership_percentage: BigInt::from_i128(env, 10000), // 100% in basis points + average_purchase_price: 1, + voting_power: total_supply, + dividend_entitlement: total_supply, + unclaimed_dividends: 0, + ownership_percentage: 10000, // 100% in basis points }; let holder_key = TokenDataKey::TokenHolder(asset_id, tokenizer.clone()); @@ -74,16 +73,10 @@ pub fn tokenize_asset( let holders_list_key = TokenDataKey::TokenHoldersList(asset_id); store.set(&holders_list_key, &holders); - // Emit event + // Emit event: (asset_id, supply, symbol, decimals, tokenizer) env.events().publish( ("token", "asset_tokenized"), - ContractEvent::AssetTokenized { - asset_id, - supply: total_supply, - symbol, - decimals, - tokenizer, - }, + (asset_id, total_supply, symbol, decimals, tokenizer), ); Ok(tokenized_asset) @@ -94,10 +87,10 @@ pub fn tokenize_asset( pub fn mint_tokens( env: &Env, asset_id: u64, - amount: BigInt, + amount: i128, minter: Address, ) -> Result { - if amount <= BigInt::from_i128(env, 0) { + if amount <= 0 { return Err(Error::InvalidTokenSupply); } @@ -105,10 +98,7 @@ pub fn mint_tokens( let key = TokenDataKey::TokenizedAsset(asset_id); // Get tokenized asset - let mut tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let mut tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Only tokenizer can mint if tokenized_asset.tokenizer != minter { @@ -116,35 +106,27 @@ pub fn mint_tokens( } // Update total supply - tokenized_asset.total_supply = &tokenized_asset.total_supply + &amount; - tokenized_asset.tokens_in_circulation = &tokenized_asset.tokens_in_circulation + &amount; + tokenized_asset.total_supply += amount; + tokenized_asset.tokens_in_circulation += amount; // Update tokenizer's ownership let holder_key = TokenDataKey::TokenHolder(asset_id, minter.clone()); - let mut ownership: OwnershipRecord = store - .get(&holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let mut ownership: OwnershipRecord = store.get(&holder_key).ok_or(Error::HolderNotFound)?; - ownership.balance = &ownership.balance + &amount; - ownership.voting_power = ownership.balance.clone(); - ownership.dividend_entitlement = ownership.balance.clone(); + ownership.balance += amount; + ownership.voting_power = ownership.balance; + ownership.dividend_entitlement = ownership.balance; // Recalculate ownership percentage - ownership.ownership_percentage = - (&ownership.balance * BigInt::from_i128(env, 10000)) / &tokenized_asset.total_supply; + ownership.ownership_percentage = (ownership.balance * 10000) / tokenized_asset.total_supply; store.set(&holder_key, &ownership); store.set(&key, &tokenized_asset.clone()); - // Emit event + // Emit event: (asset_id, amount, new_supply) env.events().publish( ("token", "tokens_minted"), - ContractEvent::TokensMinted { - asset_id, - amount, - new_supply: tokenized_asset.total_supply.clone(), - }, + (asset_id, amount, tokenized_asset.total_supply), ); Ok(tokenized_asset) @@ -155,10 +137,10 @@ pub fn mint_tokens( pub fn burn_tokens( env: &Env, asset_id: u64, - amount: BigInt, + amount: i128, burner: Address, ) -> Result { - if amount <= BigInt::from_i128(env, 0) { + if amount <= 0 { return Err(Error::InvalidTokenSupply); } @@ -166,10 +148,7 @@ pub fn burn_tokens( let key = TokenDataKey::TokenizedAsset(asset_id); // Get tokenized asset - let mut tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let mut tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Only tokenizer can burn if tokenized_asset.tokenizer != burner { @@ -178,38 +157,30 @@ pub fn burn_tokens( // Get burner's balance let holder_key = TokenDataKey::TokenHolder(asset_id, burner.clone()); - let mut ownership: OwnershipRecord = store - .get(&holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let mut ownership: OwnershipRecord = store.get(&holder_key).ok_or(Error::HolderNotFound)?; if ownership.balance < amount { return Err(Error::InsufficientBalance); } // Update balances - ownership.balance = &ownership.balance - &amount; - ownership.voting_power = ownership.balance.clone(); - ownership.dividend_entitlement = ownership.balance.clone(); + ownership.balance -= amount; + ownership.voting_power = ownership.balance; + ownership.dividend_entitlement = ownership.balance; // Recalculate ownership percentage - ownership.ownership_percentage = - (&ownership.balance * BigInt::from_i128(env, 10000)) / &tokenized_asset.total_supply; + ownership.ownership_percentage = (ownership.balance * 10000) / tokenized_asset.total_supply; - tokenized_asset.total_supply = &tokenized_asset.total_supply - &amount; - tokenized_asset.tokens_in_circulation = &tokenized_asset.tokens_in_circulation - &amount; + tokenized_asset.total_supply -= amount; + tokenized_asset.tokens_in_circulation -= amount; store.set(&holder_key, &ownership); store.set(&key, &tokenized_asset.clone()); - // Emit event + // Emit event: (asset_id, amount, new_supply) env.events().publish( ("token", "tokens_burned"), - ContractEvent::TokensBurned { - asset_id, - amount, - new_supply: tokenized_asset.total_supply.clone(), - }, + (asset_id, amount, tokenized_asset.total_supply), ); Ok(tokenized_asset) @@ -221,9 +192,9 @@ pub fn transfer_tokens( asset_id: u64, from: Address, to: Address, - amount: BigInt, + amount: i128, ) -> Result<(), Error> { - if amount <= BigInt::from_i128(env, 0) { + if amount <= 0 { return Err(Error::InvalidTokenSupply); } @@ -231,14 +202,11 @@ pub fn transfer_tokens( // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Check if from address has locked tokens let lock_key = TokenDataKey::TokenLockedUntil(asset_id, from.clone()); - if let Some(Some(lock_time)) = store.get::<_, u64>(&lock_key) { + if let Some(lock_time) = store.get::<_, u64>(&lock_key) { if env.ledger().timestamp() < lock_time { return Err(Error::TokensAreLocked); } @@ -246,10 +214,8 @@ pub fn transfer_tokens( // Get from balance let from_holder_key = TokenDataKey::TokenHolder(asset_id, from.clone()); - let mut from_ownership: OwnershipRecord = store - .get(&from_holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let mut from_ownership: OwnershipRecord = + store.get(&from_holder_key).ok_or(Error::HolderNotFound)?; if from_ownership.balance < amount { return Err(Error::InsufficientBalance); @@ -258,35 +224,35 @@ pub fn transfer_tokens( // Get to balance (or create new holder) let to_holder_key = TokenDataKey::TokenHolder(asset_id, to.clone()); let mut to_ownership: OwnershipRecord = match store.get(&to_holder_key) { - Some(Some(ownership)) => ownership, - _ => { + Some(ownership) => ownership, + None => { // Create new holder let timestamp = env.ledger().timestamp(); OwnershipRecord { owner: to.clone(), - balance: BigInt::from_i128(env, 0), + balance: 0, acquisition_timestamp: timestamp, - average_purchase_price: BigInt::from_i128(env, 1), - voting_power: BigInt::from_i128(env, 0), - dividend_entitlement: BigInt::from_i128(env, 0), - unclaimed_dividends: BigInt::from_i128(env, 0), - ownership_percentage: BigInt::from_i128(env, 0), + average_purchase_price: 1, + voting_power: 0, + dividend_entitlement: 0, + unclaimed_dividends: 0, + ownership_percentage: 0, } } }; // Update balances - from_ownership.balance = &from_ownership.balance - &amount; - from_ownership.voting_power = from_ownership.balance.clone(); - from_ownership.dividend_entitlement = from_ownership.balance.clone(); + from_ownership.balance -= amount; + from_ownership.voting_power = from_ownership.balance; + from_ownership.dividend_entitlement = from_ownership.balance; from_ownership.ownership_percentage = - (&from_ownership.balance * BigInt::from_i128(env, 10000)) / &tokenized_asset.total_supply; + (from_ownership.balance * 10000) / tokenized_asset.total_supply; - to_ownership.balance = &to_ownership.balance + &amount; - to_ownership.voting_power = to_ownership.balance.clone(); - to_ownership.dividend_entitlement = to_ownership.balance.clone(); + to_ownership.balance += amount; + to_ownership.voting_power = to_ownership.balance; + to_ownership.dividend_entitlement = to_ownership.balance; to_ownership.ownership_percentage = - (&to_ownership.balance * BigInt::from_i128(env, 10000)) / &tokenized_asset.total_supply; + (to_ownership.balance * 10000) / tokenized_asset.total_supply; store.set(&from_holder_key, &from_ownership); store.set(&to_holder_key, &to_ownership); @@ -295,7 +261,6 @@ pub fn transfer_tokens( let holders_list_key = TokenDataKey::TokenHoldersList(asset_id); let mut holders: Vec
= store .get(&holders_list_key) - .ok_or(Error::AssetNotTokenized)? .ok_or(Error::AssetNotTokenized)?; let is_new_holder = !holders.iter().any(|h| h == to); @@ -304,32 +269,23 @@ pub fn transfer_tokens( store.set(&holders_list_key, &holders); } - // Emit event + // Emit event: (asset_id, from, to, amount) env.events().publish( ("token", "tokens_transferred"), - ContractEvent::TokensTransferred { - asset_id, - from: from.clone(), - to: to.clone(), - amount, - }, + (asset_id, from.clone(), to.clone(), amount), ); Ok(()) } /// Get token balance for an address -pub fn get_token_balance( - env: &Env, - asset_id: u64, - holder: Address, -) -> Result { +pub fn get_token_balance(env: &Env, asset_id: u64, holder: Address) -> Result { let store = env.storage().persistent(); let key = TokenDataKey::TokenHolder(asset_id, holder); - match store.get(&key) { - Some(Some(ownership)) => Ok(ownership.balance), - _ => Ok(BigInt::from_i128(env, 0)), + match store.get::<_, OwnershipRecord>(&key) { + Some(ownership) => Ok(ownership.balance), + None => Ok(0), } } @@ -338,46 +294,37 @@ pub fn get_token_holders(env: &Env, asset_id: u64) -> Result, Error let store = env.storage().persistent(); let key = TokenDataKey::TokenHoldersList(asset_id); - store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized) + store.get(&key).ok_or(Error::AssetNotTokenized) } -/// Lock tokens until a specific timestamp +/// Lock tokens until a specific timestamp. +/// Only the tokenizer of the asset can lock a holder's tokens. pub fn lock_tokens( env: &Env, asset_id: u64, holder: Address, until_timestamp: u64, + caller: Address, ) -> Result<(), Error> { // Verify asset is tokenized let store = env.storage().persistent(); let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Only tokenizer can lock - let tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; - // Note: In production, would check authorization - // For now, assuming called from trusted context + if tokenized_asset.tokenizer != caller { + return Err(Error::Unauthorized); + } let lock_key = TokenDataKey::TokenLockedUntil(asset_id, holder.clone()); store.set(&lock_key, &until_timestamp); + // Emit event: (asset_id, holder, until_timestamp) env.events().publish( ("token", "tokens_locked"), - ContractEvent::TokensLocked { - asset_id, - holder, - until_timestamp, - }, + (asset_id, holder, until_timestamp), ); Ok(()) @@ -389,10 +336,7 @@ pub fn unlock_tokens(env: &Env, asset_id: u64, holder: Address) -> Result<(), Er // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; let lock_key = TokenDataKey::TokenLockedUntil(asset_id, holder.clone()); @@ -401,102 +345,81 @@ pub fn unlock_tokens(env: &Env, asset_id: u64, holder: Address) -> Result<(), Er store.remove(&lock_key); } - env.events().publish( - ("token", "tokens_unlocked"), - ContractEvent::TokensUnlocked { - asset_id, - holder, - }, - ); + // Emit event: (asset_id, holder) + env.events() + .publish(("token", "tokens_unlocked"), (asset_id, holder)); Ok(()) } +/// Returns true if the holder's tokens are currently locked (lock timestamp is in the future). +pub fn is_tokens_locked(env: &Env, asset_id: u64, holder: Address) -> bool { + let store = env.storage().persistent(); + let lock_key = TokenDataKey::TokenLockedUntil(asset_id, holder); + match store.get::<_, u64>(&lock_key) { + Some(lock_until) => env.ledger().timestamp() < lock_until, + None => false, + } +} + /// Calculate ownership percentage for a holder (in basis points) pub fn calculate_ownership_percentage( env: &Env, asset_id: u64, holder: Address, -) -> Result { +) -> Result { let store = env.storage().persistent(); // Get asset let key = TokenDataKey::TokenizedAsset(asset_id); - let tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get holder balance let holder_key = TokenDataKey::TokenHolder(asset_id, holder); - let ownership: OwnershipRecord = store - .get(&holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let ownership: OwnershipRecord = store.get(&holder_key).ok_or(Error::HolderNotFound)?; // Calculate percentage: (balance / total_supply) * 10000 - if tokenized_asset.total_supply <= BigInt::from_i128(env, 0) { - return Ok(BigInt::from_i128(env, 0)); + if tokenized_asset.total_supply <= 0 { + return Ok(0); } - Ok((&ownership.balance * BigInt::from_i128(env, 10000)) / &tokenized_asset.total_supply) + Ok((ownership.balance * 10000) / tokenized_asset.total_supply) } /// Get tokenized asset details -pub fn get_tokenized_asset( - env: &Env, - asset_id: u64, -) -> Result { +pub fn get_tokenized_asset(env: &Env, asset_id: u64) -> Result { let store = env.storage().persistent(); let key = TokenDataKey::TokenizedAsset(asset_id); - store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized) + store.get(&key).ok_or(Error::AssetNotTokenized) } /// Get token metadata -pub fn get_token_metadata( - env: &Env, - asset_id: u64, -) -> Result { +#[allow(dead_code)] +pub fn get_token_metadata(env: &Env, asset_id: u64) -> Result { let store = env.storage().persistent(); + let key = TokenDataKey::TokenMetadata(asset_id); - store - .get(&(b"token_metadata", asset_id)) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized) + store.get(&key).ok_or(Error::AssetNotTokenized) } /// Update asset valuation -pub fn update_valuation( - env: &Env, - asset_id: u64, - new_valuation: BigInt, -) -> Result<(), Error> { - if new_valuation <= BigInt::from_i128(env, 0) { +pub fn update_valuation(env: &Env, asset_id: u64, new_valuation: i128) -> Result<(), Error> { + if new_valuation <= 0 { return Err(Error::InvalidValuation); } let store = env.storage().persistent(); let key = TokenDataKey::TokenizedAsset(asset_id); - let mut tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let mut tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; - tokenized_asset.valuation = new_valuation.clone(); + tokenized_asset.valuation = new_valuation; store.set(&key, &tokenized_asset); - env.events().publish( - ("token", "valuation_updated"), - ContractEvent::ValuationUpdated { - asset_id, - new_valuation, - }, - ); + // Emit event: (asset_id, new_valuation) + env.events() + .publish(("token", "valuation_updated"), (asset_id, new_valuation)); Ok(()) } diff --git a/contracts/assetsup/src/transfer_restrictions.rs b/contracts/assetsup/src/transfer_restrictions.rs index e5218dff..ecac18b5 100644 --- a/contracts/assetsup/src/transfer_restrictions.rs +++ b/contracts/assetsup/src/transfer_restrictions.rs @@ -1,6 +1,6 @@ use crate::error::Error; -use crate::types::{ContractEvent, TokenDataKey, TransferRestriction}; -use soroban_sdk::{Address, Env, String, Vec}; +use crate::types::{TokenDataKey, TransferRestriction}; +use soroban_sdk::{Address, Env, Vec}; /// Set transfer restrictions for an asset pub fn set_transfer_restriction( @@ -14,12 +14,10 @@ pub fn set_transfer_restriction( let key = TokenDataKey::TransferRestriction(asset_id); store.set(&key, &restriction); + // Emit event: (asset_id, require_accredited) env.events().publish( ("transfer", "restriction_set"), - ContractEvent::TransferRestrictionSet { - asset_id, - require_accredited: restriction.require_accredited, - }, + (asset_id, restriction.require_accredited), ); Ok(()) @@ -30,10 +28,7 @@ pub fn add_to_whitelist(env: &Env, asset_id: u64, address: Address) -> Result<() let store = env.storage().persistent(); let key = TokenDataKey::Whitelist(asset_id); - let mut whitelist: Vec
= store - .get(&key) - .flatten() - .unwrap_or_else(|| Vec::new(env)); + let mut whitelist: Vec
= store.get(&key).flatten().unwrap_or_else(|| Vec::new(env)); // Check if already in whitelist if whitelist.iter().any(|a| a == address) { @@ -43,37 +38,28 @@ pub fn add_to_whitelist(env: &Env, asset_id: u64, address: Address) -> Result<() whitelist.push_back(address.clone()); store.set(&key, &whitelist); - env.events().publish( - ("transfer", "whitelist_added"), - ContractEvent::WhitelistAddressAdded { asset_id, address }, - ); + // Emit event: (asset_id, address) + env.events() + .publish(("transfer", "whitelist_added"), (asset_id, address)); Ok(()) } /// Remove an address from the whitelist -pub fn remove_from_whitelist( - env: &Env, - asset_id: u64, - address: Address, -) -> Result<(), Error> { +pub fn remove_from_whitelist(env: &Env, asset_id: u64, address: Address) -> Result<(), Error> { let store = env.storage().persistent(); let key = TokenDataKey::Whitelist(asset_id); - let mut whitelist: Vec
= store - .get(&key) - .flatten() - .unwrap_or_else(|| Vec::new(env)); + let mut whitelist: Vec
= store.get(&key).flatten().unwrap_or_else(|| Vec::new(env)); // Find and remove address if let Some(index) = whitelist.iter().position(|a| a == address) { whitelist.remove(index as u32); store.set(&key, &whitelist); - env.events().publish( - ("transfer", "whitelist_removed"), - ContractEvent::WhitelistAddressRemoved { asset_id, address }, - ); + // Emit event: (asset_id, address) + env.events() + .publish(("transfer", "whitelist_removed"), (asset_id, address)); } Ok(()) @@ -84,10 +70,7 @@ pub fn is_whitelisted(env: &Env, asset_id: u64, address: Address) -> Result = store - .get(&key) - .flatten() - .unwrap_or_else(|| Vec::new(env)); + let whitelist: Vec
= store.get(&key).flatten().unwrap_or_else(|| Vec::new(env)); Ok(whitelist.iter().any(|a| a == address)) } @@ -97,18 +80,15 @@ pub fn get_whitelist(env: &Env, asset_id: u64) -> Result, Error> { let store = env.storage().persistent(); let key = TokenDataKey::Whitelist(asset_id); - Ok(store - .get(&key) - .flatten() - .unwrap_or_else(|| Vec::new(env))) + Ok(store.get(&key).flatten().unwrap_or_else(|| Vec::new(env))) } /// Validate if a transfer is allowed based on restrictions pub fn validate_transfer( env: &Env, asset_id: u64, - from: Address, - to: Address, + _from: Address, + _to: Address, ) -> Result { let store = env.storage().persistent(); @@ -140,6 +120,7 @@ pub fn validate_transfer( } /// Check if transfer restrictions are enabled for an asset +#[allow(dead_code)] pub fn has_transfer_restrictions(env: &Env, asset_id: u64) -> Result { let store = env.storage().persistent(); @@ -148,20 +129,16 @@ pub fn has_transfer_restrictions(env: &Env, asset_id: u64) -> Result Result { +#[allow(dead_code)] +pub fn get_transfer_restriction(env: &Env, asset_id: u64) -> Result { let store = env.storage().persistent(); let key = TokenDataKey::TransferRestriction(asset_id); - store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized) + store.get(&key).ok_or(Error::AssetNotTokenized) } /// Clear transfer restrictions +#[allow(dead_code)] pub fn clear_transfer_restrictions(env: &Env, asset_id: u64) -> Result<(), Error> { let store = env.storage().persistent(); diff --git a/contracts/assetsup/src/types.rs b/contracts/assetsup/src/types.rs index acf25098..a1c633b8 100644 --- a/contracts/assetsup/src/types.rs +++ b/contracts/assetsup/src/types.rs @@ -1,5 +1,5 @@ #![allow(clippy::upper_case_acronyms)] -use soroban_sdk::{Address, BigInt, BytesN, String, Vec, contracttype}; +use soroban_sdk::{contracttype, Address, BytesN, String, Vec}; /// Represents the fundamental type of asset being managed /// Distinguishes between physical and digital assets for different handling requirements @@ -91,7 +91,7 @@ pub enum TokenDataKey { TokenLockedUntil(u64, Address), /// Stores vote record for (asset_id, proposal_id, voter_address) VoteRecord(u64, u64, Address), - /// Stores vote tally (BigInt) for (asset_id, proposal_id) + /// Stores vote tally (i128) for (asset_id, proposal_id) VoteTally(u64, u64), /// Stores TransferRestriction for asset_id TransferRestriction(u64), @@ -101,80 +101,8 @@ pub enum TokenDataKey { UnclaimedDividend(u64, Address), /// Stores detokenization proposal status DetokenizationProposal(u64), -} - -/// Events emitted by the contract -#[contracttype] -#[derive(Clone, Debug, Eq, PartialEq)] -pub enum ContractEvent { - AssetTokenized { - asset_id: u64, - supply: BigInt, - symbol: String, - decimals: u32, - tokenizer: Address, - }, - TokensMinted { - asset_id: u64, - amount: BigInt, - new_supply: BigInt, - }, - TokensBurned { - asset_id: u64, - amount: BigInt, - new_supply: BigInt, - }, - TokensTransferred { - asset_id: u64, - from: Address, - to: Address, - amount: BigInt, - }, - TokensLocked { - asset_id: u64, - holder: Address, - until_timestamp: u64, - }, - TokensUnlocked { - asset_id: u64, - holder: Address, - }, - DividendDistributed { - asset_id: u64, - total_amount: BigInt, - holder_count: u32, - }, - DividendClaimed { - asset_id: u64, - holder: Address, - amount: BigInt, - }, - VoteCast { - asset_id: u64, - proposal_id: u64, - voter: Address, - weight: BigInt, - }, - AssetDetokenized { - asset_id: u64, - proposal_id: u64, - }, - ValuationUpdated { - asset_id: u64, - new_valuation: BigInt, - }, - TransferRestrictionSet { - asset_id: u64, - require_accredited: bool, - }, - WhitelistAddressAdded { - asset_id: u64, - address: Address, - }, - WhitelistAddressRemoved { - asset_id: u64, - address: Address, - }, + /// Stores TokenMetadata for asset_id + TokenMetadata(u64), } /// Represents a tokenized asset on-chain @@ -184,29 +112,29 @@ pub struct TokenizedAsset { /// Original asset ID (reference to registry) pub asset_id: u64, /// Total number of tokens issued - pub total_supply: BigInt, + pub total_supply: i128, /// Token symbol (unique per asset) pub symbol: String, /// Number of decimals for fractional ownership pub decimals: u32, /// Total tokens currently locked (non-transferable) - pub locked_tokens: BigInt, + pub locked_tokens: i128, /// Tokenizer / asset owner pub tokenizer: Address, /// Asset valuation (in stroops) - pub valuation: BigInt, + pub valuation: i128, /// Number of unique token holders pub token_holders_count: u32, /// Tokens currently in circulation (not burned) - pub tokens_in_circulation: BigInt, + pub tokens_in_circulation: i128, /// Minimum tokens required to vote - pub min_voting_threshold: BigInt, + pub min_voting_threshold: i128, /// Revenue sharing enabled flag pub revenue_sharing_enabled: bool, /// Timestamp when asset was tokenized pub tokenization_timestamp: u64, - /// Percentage required for detokenization (basis points, e.g., 5000 = 50%) - pub detokenization_required_threshold: u32, + /// Percentage required for detokenization (e.g. 50 = 50%) + pub detokenize_threshold: u32, } /// Metadata associated with a tokenized asset @@ -234,19 +162,19 @@ pub struct TokenMetadata { pub struct OwnershipRecord { pub owner: Address, /// Current token balance - pub balance: BigInt, + pub balance: i128, /// Timestamp of first acquisition pub acquisition_timestamp: u64, /// Average price per token at acquisition - pub average_purchase_price: BigInt, + pub average_purchase_price: i128, /// Voting power (weighted by balance) - pub voting_power: BigInt, + pub voting_power: i128, /// Entitlement to dividends - pub dividend_entitlement: BigInt, + pub dividend_entitlement: i128, /// Unclaimed dividends pending - pub unclaimed_dividends: BigInt, + pub unclaimed_dividends: i128, /// Ownership percentage in basis points (e.g., 5000 = 50%) - pub ownership_percentage: BigInt, + pub ownership_percentage: i128, } /// Transfer restrictions for tokens @@ -259,21 +187,41 @@ pub struct TransferRestriction { pub geographic_allowed: Vec, } -/// Detokenization proposal +// ===================== +// DetokenizationProposal — Option B: wrapper structs preserve named fields +// while satisfying #[contracttype]'s restriction on enum variant fields. +// ===================== + +/// Data for an active detokenization proposal +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ActiveProposal { + pub proposal_id: u64, + pub proposer: Address, + pub created_at: u64, +} + +/// Data for an executed detokenization proposal +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExecutedProposal { + pub proposal_id: u64, + pub executed_at: u64, +} + +/// Data for a rejected detokenization proposal +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct RejectedProposal { + pub proposal_id: u64, + pub rejected_at: u64, +} + +/// Detokenization proposal — each variant wraps its own named struct #[contracttype] #[derive(Clone, Debug, Eq, PartialEq)] pub enum DetokenizationProposal { - Active { - proposal_id: u64, - proposer: Address, - created_at: u64, - }, - Executed { - proposal_id: u64, - executed_at: u64, - }, - Rejected { - proposal_id: u64, - rejected_at: u64, - }, + Active(ActiveProposal), + Executed(ExecutedProposal), + Rejected(RejectedProposal), } diff --git a/contracts/assetsup/src/voting.rs b/contracts/assetsup/src/voting.rs index ce4ff17c..c76d622b 100644 --- a/contracts/assetsup/src/voting.rs +++ b/contracts/assetsup/src/voting.rs @@ -1,29 +1,18 @@ use crate::error::Error; -use crate::types::{ContractEvent, TokenDataKey, TokenizedAsset}; -use soroban_sdk::{Address, BigInt, Env, Vec}; +use crate::types::{OwnershipRecord, TokenDataKey, TokenizedAsset}; +use soroban_sdk::{Address, Env, Vec}; /// Cast a vote on a proposal -pub fn cast_vote( - env: &Env, - asset_id: u64, - proposal_id: u64, - voter: Address, -) -> Result<(), Error> { +pub fn cast_vote(env: &Env, asset_id: u64, proposal_id: u64, voter: Address) -> Result<(), Error> { let store = env.storage().persistent(); // Get tokenized asset let key = TokenDataKey::TokenizedAsset(asset_id); - let tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get voter's balance let holder_key = TokenDataKey::TokenHolder(asset_id, voter.clone()); - let ownership = store - .get(&holder_key) - .ok_or(Error::HolderNotFound)? - .ok_or(Error::HolderNotFound)?; + let ownership: OwnershipRecord = store.get(&holder_key).ok_or(Error::HolderNotFound)?; // Check if voter has sufficient voting power if ownership.balance < tokenized_asset.min_voting_threshold { @@ -41,49 +30,31 @@ pub fn cast_vote( // Update vote tally let tally_key = TokenDataKey::VoteTally(asset_id, proposal_id); - let current_tally: BigInt = store - .get(&tally_key) - .flatten() - .unwrap_or_else(|| BigInt::from_i128(env, 0)); + let current_tally: i128 = store.get::<_, i128>(&tally_key).unwrap_or(0); - let new_tally = ¤t_tally + &ownership.balance; + let new_tally = current_tally + ownership.balance; store.set(&tally_key, &new_tally); - // Emit event + // Emit event: (asset_id, proposal_id, voter, weight) env.events().publish( ("voting", "vote_cast"), - ContractEvent::VoteCast { - asset_id, - proposal_id, - voter, - weight: ownership.balance, - }, + (asset_id, proposal_id, voter, ownership.balance), ); Ok(()) } /// Get vote tally for a proposal -pub fn get_vote_tally( - env: &Env, - asset_id: u64, - proposal_id: u64, -) -> Result { +pub fn get_vote_tally(env: &Env, asset_id: u64, proposal_id: u64) -> Result { let store = env.storage().persistent(); // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; let tally_key = TokenDataKey::VoteTally(asset_id, proposal_id); - Ok(store - .get(&tally_key) - .flatten() - .unwrap_or_else(|| BigInt::from_i128(env, 0))) + Ok(store.get::<_, i128>(&tally_key).unwrap_or(0)) } /// Check if an address has voted on a proposal @@ -97,10 +68,7 @@ pub fn has_voted( // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; let vote_key = TokenDataKey::VoteRecord(asset_id, proposal_id, voter); @@ -108,36 +76,26 @@ pub fn has_voted( } /// Check if a proposal passed (vote tally > 50% of total supply) -pub fn proposal_passed( - env: &Env, - asset_id: u64, - proposal_id: u64, -) -> Result { +pub fn proposal_passed(env: &Env, asset_id: u64, proposal_id: u64) -> Result { let store = env.storage().persistent(); // Get tokenized asset let key = TokenDataKey::TokenizedAsset(asset_id); - let tokenized_asset: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let tokenized_asset: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get vote tally let tally_key = TokenDataKey::VoteTally(asset_id, proposal_id); - let tally: BigInt = store - .get(&tally_key) - .flatten() - .unwrap_or_else(|| BigInt::from_i128(env, 0)); + let tally: i128 = store.get::<_, i128>(&tally_key).unwrap_or(0); - // Calculate required threshold (50% + 1) + // Calculate required threshold let threshold = - (&tokenized_asset.total_supply * BigInt::from_i128(env, tokenized_asset.detokenization_required_threshold as i128)) - / BigInt::from_i128(env, 100); + (tokenized_asset.total_supply * tokenized_asset.detokenize_threshold as i128) / 100; Ok(tally > threshold) } /// Get list of voters who participated in a proposal +#[allow(dead_code)] pub fn get_proposal_voters( env: &Env, asset_id: u64, @@ -147,17 +105,11 @@ pub fn get_proposal_voters( // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get all token holders let holders_key = TokenDataKey::TokenHoldersList(asset_id); - let holders: Vec
= store - .get(&holders_key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let holders: Vec
= store.get(&holders_key).ok_or(Error::AssetNotTokenized)?; // Filter those who voted let mut voters = Vec::new(env); @@ -172,26 +124,16 @@ pub fn get_proposal_voters( } /// Clear all voting records for a proposal (after execution or rejection) -pub fn clear_proposal_votes( - env: &Env, - asset_id: u64, - proposal_id: u64, -) -> Result<(), Error> { +pub fn clear_proposal_votes(env: &Env, asset_id: u64, proposal_id: u64) -> Result<(), Error> { let store = env.storage().persistent(); // Verify asset is tokenized let key = TokenDataKey::TokenizedAsset(asset_id); - let _: TokenizedAsset = store - .get(&key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let _: TokenizedAsset = store.get(&key).ok_or(Error::AssetNotTokenized)?; // Get all token holders let holders_key = TokenDataKey::TokenHoldersList(asset_id); - let holders: Vec
= store - .get(&holders_key) - .ok_or(Error::AssetNotTokenized)? - .ok_or(Error::AssetNotTokenized)?; + let holders: Vec
= store.get(&holders_key).ok_or(Error::AssetNotTokenized)?; // Remove all vote records for holder in holders.iter() { diff --git a/contracts/assetsup/test_snapshots/tests/access_control/test_asset_owner_can_log_audit_action.1.json b/contracts/assetsup/test_snapshots/tests/access_control/test_asset_owner_can_log_audit_action.1.json deleted file mode 100644 index 020e043c..00000000 --- a/contracts/assetsup/test_snapshots/tests/access_control/test_asset_owner_can_log_audit_action.1.json +++ /dev/null @@ -1,588 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_create_branch.1.json b/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_create_branch.1.json deleted file mode 100644 index 4ff0a01a..00000000 --- a/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_create_branch.1.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Test Branch" - }, - { - "string": "Test Location" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Test Location" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_log_audit_action.1.json b/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_log_audit_action.1.json deleted file mode 100644 index 020e043c..00000000 --- a/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_log_audit_action.1.json +++ /dev/null @@ -1,588 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_tokenize_asset.1.json b/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_tokenize_asset.1.json deleted file mode 100644 index dab07b6c..00000000 --- a/contracts/assetsup/test_snapshots/tests/access_control/test_global_admin_can_tokenize_asset.1.json +++ /dev/null @@ -1,643 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "tokenize_asset", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/access_control/test_multiple_audit_logs_for_asset.1.json b/contracts/assetsup/test_snapshots/tests/access_control/test_multiple_audit_logs_for_asset.1.json deleted file mode 100644 index 944eb7d2..00000000 --- a/contracts/assetsup/test_snapshots/tests/access_control/test_multiple_audit_logs_for_asset.1.json +++ /dev/null @@ -1,693 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "log_action", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "vec": [ - { - "symbol": "Inspected" - } - ] - }, - { - "string": "Safety inspection" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 2000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - }, - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Inspected" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Safety inspection" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/asset/test_register_and_get_asset_success.1.json b/contracts/assetsup/test_snapshots/tests/asset/test_register_and_get_asset_success.1.json deleted file mode 100644 index 30cab151..00000000 --- a/contracts/assetsup/test_snapshots/tests/asset/test_register_and_get_asset_success.1.json +++ /dev/null @@ -1,497 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Digital" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Electronics" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 20 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Laptop A" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 120000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1725000000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1800000000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Asset" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Digital" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Electronics" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 20 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Laptop A" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 120000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1725000000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1800000000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/asset/test_register_asset_duplicate.1.json b/contracts/assetsup/test_snapshots/tests/asset/test_register_asset_duplicate.1.json deleted file mode 100644 index af1fd369..00000000 --- a/contracts/assetsup/test_snapshots/tests/asset/test_register_asset_duplicate.1.json +++ /dev/null @@ -1,497 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Furniture" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 12000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Office Chair" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 15000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1750000000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Asset" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Furniture" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 12000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Office Chair" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 15000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1700000000 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1750000000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/asset/test_update_status_creates_audit_log.1.json b/contracts/assetsup/test_snapshots/tests/asset/test_update_status_creates_audit_log.1.json deleted file mode 100644 index 139b2bf8..00000000 --- a/contracts/assetsup/test_snapshots/tests/asset/test_update_status_creates_audit_log.1.json +++ /dev/null @@ -1,596 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "9e2b92242521971b9940a9ded06b307c9d74d5316d43b545ca5ef67e3f9ec93a" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 900 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 12345 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "8bcda75d46ac26a2e1aff5e3562da3d8466a092fdd8cc9ed05a7ad21d3e08c9b" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 67890 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "update_asset_status", - "args": [ - { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - }, - { - "vec": [ - { - "symbol": "InMaintenance" - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Asset" - }, - { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "9e2b92242521971b9940a9ded06b307c9d74d5316d43b545ca5ef67e3f9ec93a" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Test Category" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 900 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 12345 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "InMaintenance" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "8bcda75d46ac26a2e1aff5e3562da3d8466a092fdd8cc9ed05a7ad21d3e08c9b" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 67890 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "9eb73418d79f261e3ad00e39c9814bcf585538578b5bab8944cb2e5ee975b8e8" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - }, - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Maintained" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset in maintenance" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_add_asset_to_branch.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_add_asset_to_branch.1.json deleted file mode 100644 index aedb44e2..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_add_asset_to_branch.1.json +++ /dev/null @@ -1,777 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Main Branch" - }, - { - "string": "New York" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Computer" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Computer" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "New York" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Main Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_add_asset_to_nonexistent_branch.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_add_asset_to_nonexistent_branch.1.json deleted file mode 100644 index 76bf6c37..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_add_asset_to_nonexistent_branch.1.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "generators": { - "address": 2, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_add_duplicate_asset_to_branch.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_add_duplicate_asset_to_branch.1.json deleted file mode 100644 index a2abf5e6..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_add_duplicate_asset_to_branch.1.json +++ /dev/null @@ -1,778 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Main Branch" - }, - { - "string": "New York" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Computer" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Computer" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "New York" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Main Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_add_nonexistent_asset_to_branch.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_add_nonexistent_asset_to_branch.1.json deleted file mode 100644 index 9d4058d4..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_add_nonexistent_asset_to_branch.1.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Main Branch" - }, - { - "string": "New York" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "New York" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Main Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_create_branch.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_create_branch.1.json deleted file mode 100644 index 00b5a727..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_create_branch.1.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Main Branch" - }, - { - "string": "New York" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "New York" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Main Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_create_branch_duplicate.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_create_branch_duplicate.1.json deleted file mode 100644 index 9d4058d4..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_create_branch_duplicate.1.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Main Branch" - }, - { - "string": "New York" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "New York" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Main Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_create_branch_empty_name.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_create_branch_empty_name.1.json deleted file mode 100644 index 450e79c7..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_create_branch_empty_name.1.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_assets_multiple.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_assets_multiple.1.json deleted file mode 100644 index 7dc912f3..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_assets_multiple.1.json +++ /dev/null @@ -1,1627 +0,0 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "string": "Main Branch" - }, - { - "string": "New York" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Computer" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Asset 1" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0505050505050505050505050505050505050505050505050505050505050505" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Desk" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 400 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Asset 2" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 500 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0606060606060606060606060606060606060606060606060606060606060606" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Car" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 15000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Asset 3" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 20000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0707070707070707070707070707070707070707070707070707070707070707" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Computer" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Asset 1" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0505050505050505050505050505050505050505050505050505050505050505" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Desk" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 400 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Asset 2" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 500 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0606060606060606060606060606060606060606060606060606060606060606" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Car" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 15000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Asset 3" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 20000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1234567890 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0707070707070707070707070707070707070707070707070707070707070707" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1234567890 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - }, - { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0202020202020202020202020202020202020202020202020202020202020202" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0303030303030303030303030303030303030303030303030303030303030303" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0404040404040404040404040404040404040404040404040404040404040404" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0101010101010101010101010101010101010101010101010101010101010101" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "New York" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Main Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_assets_nonexistent_branch.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_assets_nonexistent_branch.1.json deleted file mode 100644 index 76bf6c37..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_assets_nonexistent_branch.1.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "generators": { - "address": 2, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_nonexistent.1.json b/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_nonexistent.1.json deleted file mode 100644 index 76bf6c37..00000000 --- a/contracts/assetsup/test_snapshots/tests/branch/test_get_branch_nonexistent.1.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "generators": { - "address": 2, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/initialize/test_admin_doesnt_exist.1.json b/contracts/assetsup/test_snapshots/tests/initialize/test_admin_doesnt_exist.1.json deleted file mode 100644 index 56557491..00000000 --- a/contracts/assetsup/test_snapshots/tests/initialize/test_admin_doesnt_exist.1.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "generators": { - "address": 2, - "nonce": 0 - }, - "auth": [ - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/initialize/test_initialize.1.json b/contracts/assetsup/test_snapshots/tests/initialize/test_initialize.1.json deleted file mode 100644 index 76bf6c37..00000000 --- a/contracts/assetsup/test_snapshots/tests/initialize/test_initialize.1.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "generators": { - "address": 2, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/initialize/test_initialize_panic.1.json b/contracts/assetsup/test_snapshots/tests/initialize/test_initialize_panic.1.json deleted file mode 100644 index 76bf6c37..00000000 --- a/contracts/assetsup/test_snapshots/tests/initialize/test_initialize_panic.1.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "generators": { - "address": 2, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "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": null - } - } - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/tokenize/test_tokenize_asset_success.1.json b/contracts/assetsup/test_snapshots/tests/tokenize/test_tokenize_asset_success.1.json deleted file mode 100644 index 2ac71c54..00000000 --- a/contracts/assetsup/test_snapshots/tests/tokenize/test_tokenize_asset_success.1.json +++ /dev/null @@ -1,643 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Digital" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Compute" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 900000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 7 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Server X" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1725000100 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1826000000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "tokenize_asset", - "args": [ - { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - }, - { - "bytes": "0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Digital" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Compute" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 900000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 7 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Server X" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1725000100 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1826000000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/tokenize/test_tokenize_asset_without_admin_initialized.1.json b/contracts/assetsup/test_snapshots/tests/tokenize/test_tokenize_asset_without_admin_initialized.1.json deleted file mode 100644 index 514b8d10..00000000 --- a/contracts/assetsup/test_snapshots/tests/tokenize/test_tokenize_asset_without_admin_initialized.1.json +++ /dev/null @@ -1,497 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Network" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 45000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Router Y" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 50000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1700000001 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "1718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1760000000 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Asset" - }, - { - "bytes": "15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Network" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 45000 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Router Y" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 50000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 1700000001 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "1718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 1760000000 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 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": null - } - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 801925984706572462 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_by_admin.1.json b/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_by_admin.1.json deleted file mode 100644 index f83f4904..00000000 --- a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_by_admin.1.json +++ /dev/null @@ -1,1061 +0,0 @@ -{ - "generators": { - "address": 5, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - }, - { - "string": "Initial Branch" - }, - { - "string": "Location A" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - }, - { - "string": "New Branch" - }, - { - "string": "Location B" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Digital" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Software" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 500 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Admin Transfer" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 500 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "transfer_asset", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - }, - { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Digital" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Software" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 500 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 2 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Admin Transfer" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 500 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "0405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - }, - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Transferred" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset transferred" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location A" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Initial Branch" - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location B" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "New Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - "key": { - "ledger_key_nonce": { - "nonce": 2032731177588607455 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_by_owner.1.json b/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_by_owner.1.json deleted file mode 100644 index 33fd4f01..00000000 --- a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_by_owner.1.json +++ /dev/null @@ -1,1065 +0,0 @@ -{ - "generators": { - "address": 5, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - }, - { - "string": "Initial Branch" - }, - { - "string": "Location A" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - }, - { - "string": "New Branch" - }, - { - "string": "Location B" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Equipment" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "transfer_asset", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - }, - { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "sequence_number": 0, - "timestamp": 12345, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Equipment" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - }, - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Transferred" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset transferred" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 12345 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location A" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Initial Branch" - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "1415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location B" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "New Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_unauthorized.1.json b/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_unauthorized.1.json deleted file mode 100644 index 1f6a3ccb..00000000 --- a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_asset_unauthorized.1.json +++ /dev/null @@ -1,961 +0,0 @@ -{ - "generators": { - "address": 6, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - }, - { - "string": "Branch 1" - }, - { - "string": "Location" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - }, - { - "string": "Branch 2" - }, - { - "string": "Location" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Tool" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Unauthorized Test" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Tool" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Unauthorized Test" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 100 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Branch 1" - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Branch 2" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_nonexistent_asset.1.json b/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_nonexistent_asset.1.json deleted file mode 100644 index 87e242bf..00000000 --- a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_nonexistent_asset.1.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "generators": { - "address": 3, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "6465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283" - }, - { - "string": "Branch" - }, - { - "string": "Location" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "6465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "6465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "6465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "6465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "6465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_code": { - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - 4095 - ] - ] - ] - }, - "events": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_to_nonexistent_branch.1.json b/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_to_nonexistent_branch.1.json deleted file mode 100644 index f7ba5a0f..00000000 --- a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_to_nonexistent_branch.1.json +++ /dev/null @@ -1,777 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - }, - { - "string": "Initial" - }, - { - "string": "Location" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Equipment" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Equipment" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 800 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 1 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Test Asset" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 1000 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Initial" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_to_same_branch.1.json b/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_to_same_branch.1.json deleted file mode 100644 index 85b25350..00000000 --- a/contracts/assetsup/test_snapshots/tests/transfer/test_transfer_to_same_branch.1.json +++ /dev/null @@ -1,837 +0,0 @@ -{ - "generators": { - "address": 4, - "nonce": 0 - }, - "auth": [ - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "initialize", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "create_branch", - "args": [ - { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - }, - { - "string": "Branch" - }, - { - "string": "Location" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "register_asset", - "args": [ - { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Furniture" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 150 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 3 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Same Branch Transfer" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 200 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "transfer_asset", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - }, - { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - }, - { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [], - [], - [] - ], - "ledger": { - "protocol_version": 22, - "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": "Admin" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Admin" - } - ] - }, - "durability": "persistent", - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Asset" - }, - { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "asset_type" - }, - "val": { - "vec": [ - { - "symbol": "Physical" - } - ] - } - }, - { - "key": { - "symbol": "branch_id" - }, - "val": { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - }, - { - "key": { - "symbol": "category" - }, - "val": { - "string": "Furniture" - } - }, - { - "key": { - "symbol": "current_value" - }, - "val": { - "i128": { - "hi": 0, - "lo": 150 - } - } - }, - { - "key": { - "symbol": "department_id" - }, - "val": { - "u64": 3 - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Same Branch Transfer" - } - }, - { - "key": { - "symbol": "owner" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "purchase_cost" - }, - "val": { - "i128": { - "hi": 0, - "lo": 200 - } - } - }, - { - "key": { - "symbol": "purchase_date" - }, - "val": { - "u64": 0 - } - }, - { - "key": { - "symbol": "status" - }, - "val": { - "vec": [ - { - "symbol": "Active" - } - ] - } - }, - { - "key": { - "symbol": "stellar_token_id" - }, - "val": { - "bytes": "08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627" - } - }, - { - "key": { - "symbol": "warranty_expiry" - }, - "val": { - "u64": 0 - } - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AssetList" - }, - { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "AuditLog" - }, - { - "bytes": "0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "action" - }, - "val": { - "vec": [ - { - "symbol": "Procured" - } - ] - } - }, - { - "key": { - "symbol": "actor" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - }, - { - "key": { - "symbol": "note" - }, - "val": { - "string": "Asset registered" - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": 0 - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - 4095 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - ] - }, - "durability": "persistent" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Branch" - }, - { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "admin" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" - } - }, - { - "key": { - "symbol": "id" - }, - "val": { - "bytes": "32333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051" - } - }, - { - "key": { - "symbol": "location" - }, - "val": { - "string": "Location" - } - }, - { - "key": { - "symbol": "name" - }, - "val": { - "string": "Branch" - } - } - ] - } - } - }, - "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": null - } - } - } - }, - "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_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" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 1033654523790656264 - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - 6311999 - ] - ], - [ - { - "contract_data": { - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "durability": "temporary" - } - }, - [ - { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - "key": { - "ledger_key_nonce": { - "nonce": 4837995959683129791 - } - }, - "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": [] -} \ No newline at end of file diff --git a/contracts/multisig-wallet/src/lib.rs b/contracts/multisig-wallet/src/lib.rs index 74ba6823..3533ed84 100644 --- a/contracts/multisig-wallet/src/lib.rs +++ b/contracts/multisig-wallet/src/lib.rs @@ -1,14 +1,14 @@ #![no_std] -use soroban_sdk::{contract, contractimpl, symbol_short, Address, Env, String, Vec, Val, IntoVal, Map}; +use soroban_sdk::{contract, contractimpl, symbol_short, Address, Env, Symbol, Val, Vec}; -mod types; mod errors; #[cfg(test)] mod tests; +mod types; -pub use crate::types::*; pub use crate::errors::Error; +pub use crate::types::*; #[contract] pub struct MultisigWallet; @@ -16,7 +16,12 @@ pub struct MultisigWallet; #[contractimpl] impl MultisigWallet { /// Initialize wallet with initial owners and threshold - pub fn initialize(env: Env, admin: Address, owners: Vec
, threshold: u32) -> Result<(), Error> { + pub fn initialize( + env: Env, + admin: Address, + owners: Vec
, + threshold: u32, + ) -> Result<(), Error> { admin.require_auth(); if env.storage().instance().has(&DataKey::Owners) { @@ -32,9 +37,13 @@ impl MultisigWallet { } env.storage().instance().set(&DataKey::Owners, &owners); - env.storage().instance().set(&DataKey::Threshold, &threshold); + env.storage() + .instance() + .set(&DataKey::Threshold, &threshold); env.storage().instance().set(&DataKey::NextTxId, &1u64); - env.storage().instance().set(&DataKey::NextProposalId, &1u64); + env.storage() + .instance() + .set(&DataKey::NextProposalId, &1u64); env.storage().instance().set(&DataKey::Frozen, &false); env.storage().instance().set(&DataKey::DailyLimit, &0u128); @@ -49,19 +58,22 @@ impl MultisigWallet { total_confirmations: 0, last_activity: env.ledger().timestamp(), }; - env.storage().persistent().set(&DataKey::OwnerProfile(owner), &profile); + env.storage() + .persistent() + .set(&DataKey::OwnerProfile(owner), &profile); } Ok(()) } /// Submit transaction proposal + #[allow(clippy::too_many_arguments)] pub fn submit_transaction( env: Env, initiator: Address, tx_type: TransactionType, target: Address, - function_name: String, + function_name: Symbol, parameters: Vec, deadline_offset: u64, value: u128, @@ -71,7 +83,9 @@ impl MultisigWallet { Self::check_not_frozen(&env)?; let tx_id: u64 = env.storage().instance().get(&DataKey::NextTxId).unwrap(); - env.storage().instance().set(&DataKey::NextTxId, &(tx_id + 1)); + env.storage() + .instance() + .set(&DataKey::NextTxId, &(tx_id + 1)); let threshold: u32 = env.storage().instance().get(&DataKey::Threshold).unwrap(); @@ -91,7 +105,9 @@ impl MultisigWallet { value, }; - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); env.events().publish( (symbol_short!("tx_sub"), tx_id), @@ -107,7 +123,11 @@ impl MultisigWallet { Self::check_owner(&env, &confirmer)?; Self::check_not_frozen(&env)?; - let mut tx: Transaction = env.storage().persistent().get(&DataKey::Transaction(tx_id)).ok_or(Error::TransactionNotFound)?; + let mut tx: Transaction = env + .storage() + .persistent() + .get(&DataKey::Transaction(tx_id)) + .ok_or(Error::TransactionNotFound)?; if tx.status != TransactionStatus::Pending { return Err(Error::TransactionAlreadyExecuted); @@ -115,7 +135,9 @@ impl MultisigWallet { if env.ledger().timestamp() > tx.deadline { tx.status = TransactionStatus::Expired; - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); return Err(Error::TransactionExpired); } @@ -129,15 +151,23 @@ impl MultisigWallet { // return Err(Error::CannotConfirmOwnTransaction); // } - let mut profile: OwnerProfile = env.storage().persistent().get(&DataKey::OwnerProfile(confirmer.clone())).unwrap(); - + let mut profile: OwnerProfile = env + .storage() + .persistent() + .get(&DataKey::OwnerProfile(confirmer.clone())) + .unwrap(); + env.storage().persistent().set(&confirm_key, &true); tx.confirmations_count += profile.voting_weight; - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); profile.total_confirmations += 1; profile.last_activity = env.ledger().timestamp(); - env.storage().persistent().set(&DataKey::OwnerProfile(confirmer.clone()), &profile); + env.storage() + .persistent() + .set(&DataKey::OwnerProfile(confirmer.clone()), &profile); env.events().publish( (symbol_short!("tx_conf"), tx_id), @@ -157,7 +187,11 @@ impl MultisigWallet { revoker.require_auth(); Self::check_owner(&env, &revoker)?; - let mut tx: Transaction = env.storage().persistent().get(&DataKey::Transaction(tx_id)).ok_or(Error::TransactionNotFound)?; + let mut tx: Transaction = env + .storage() + .persistent() + .get(&DataKey::Transaction(tx_id)) + .ok_or(Error::TransactionNotFound)?; if tx.status != TransactionStatus::Pending { return Err(Error::TransactionAlreadyExecuted); @@ -168,11 +202,17 @@ impl MultisigWallet { return Err(Error::Unauthorized); } - let profile: OwnerProfile = env.storage().persistent().get(&DataKey::OwnerProfile(revoker.clone())).unwrap(); + let profile: OwnerProfile = env + .storage() + .persistent() + .get(&DataKey::OwnerProfile(revoker.clone())) + .unwrap(); env.storage().persistent().remove(&confirm_key); tx.confirmations_count -= profile.voting_weight; - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); env.events().publish( (symbol_short!("tx_rev"), tx_id), @@ -186,7 +226,11 @@ impl MultisigWallet { pub fn execute_transaction(env: Env, tx_id: u64) -> Result<(), Error> { Self::check_not_frozen(&env)?; - let mut tx: Transaction = env.storage().persistent().get(&DataKey::Transaction(tx_id)).ok_or(Error::TransactionNotFound)?; + let mut tx: Transaction = env + .storage() + .persistent() + .get(&DataKey::Transaction(tx_id)) + .ok_or(Error::TransactionNotFound)?; if tx.status != TransactionStatus::Pending { return Err(Error::TransactionAlreadyExecuted); @@ -198,7 +242,9 @@ impl MultisigWallet { if env.ledger().timestamp() > tx.deadline { tx.status = TransactionStatus::Expired; - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); return Err(Error::TransactionExpired); } @@ -210,10 +256,13 @@ impl MultisigWallet { // Mark as executed first to prevent re-entrancy issues if any tx.status = TransactionStatus::Executed; tx.execution_timestamp = env.ledger().timestamp(); - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); // Perform cross-contract call - let _result: Val = env.invoke_contract(&tx.target, &tx.function_name, tx.parameters.clone()); + let _result: Val = + env.invoke_contract(&tx.target, &tx.function_name, tx.parameters.clone()); env.events().publish( (symbol_short!("tx_exec"), tx_id), @@ -226,8 +275,12 @@ impl MultisigWallet { /// Cancel transaction (by initiator or all owners) pub fn cancel_transaction(env: Env, caller: Address, tx_id: u64) -> Result<(), Error> { caller.require_auth(); - - let mut tx: Transaction = env.storage().persistent().get(&DataKey::Transaction(tx_id)).ok_or(Error::TransactionNotFound)?; + + let mut tx: Transaction = env + .storage() + .persistent() + .get(&DataKey::Transaction(tx_id)) + .ok_or(Error::TransactionNotFound)?; if tx.status != TransactionStatus::Pending { return Err(Error::TransactionAlreadyExecuted); @@ -240,7 +293,9 @@ impl MultisigWallet { } tx.status = TransactionStatus::Revoked; - env.storage().persistent().set(&DataKey::Transaction(tx_id), &tx); + env.storage() + .persistent() + .set(&DataKey::Transaction(tx_id), &tx); env.events().publish( (symbol_short!("tx_can"), tx_id), @@ -251,7 +306,11 @@ impl MultisigWallet { } /// Ownership proposals - pub fn propose_add_owner(env: Env, proposer: Address, new_owner: Address) -> Result { + pub fn propose_add_owner( + env: Env, + proposer: Address, + new_owner: Address, + ) -> Result { proposer.require_auth(); Self::check_owner(&env, &proposer)?; @@ -260,11 +319,21 @@ impl MultisigWallet { return Err(Error::OwnerAlreadyExists); } - let proposal_id = Self::create_proposal(&env, proposer, ProposalType::AddOwner, Some(new_owner), None)?; + let proposal_id = Self::create_proposal( + &env, + proposer, + ProposalType::AddOwner, + Some(new_owner), + None, + )?; Ok(proposal_id) } - pub fn propose_remove_owner(env: Env, proposer: Address, owner_to_remove: Address) -> Result { + pub fn propose_remove_owner( + env: Env, + proposer: Address, + owner_to_remove: Address, + ) -> Result { proposer.require_auth(); Self::check_owner(&env, &proposer)?; @@ -275,14 +344,24 @@ impl MultisigWallet { let threshold: u32 = env.storage().instance().get(&DataKey::Threshold).unwrap(); if owners.len() <= 2 || owners.len() <= threshold { - return Err(Error::InsufficientOwners); + return Err(Error::InsufficientOwners); } - let proposal_id = Self::create_proposal(&env, proposer, ProposalType::RemoveOwner, Some(owner_to_remove), None)?; + let proposal_id = Self::create_proposal( + &env, + proposer, + ProposalType::RemoveOwner, + Some(owner_to_remove), + None, + )?; Ok(proposal_id) } - pub fn propose_change_threshold(env: Env, proposer: Address, new_threshold: u32) -> Result { + pub fn propose_change_threshold( + env: Env, + proposer: Address, + new_threshold: u32, + ) -> Result { proposer.require_auth(); Self::check_owner(&env, &proposer)?; @@ -291,7 +370,13 @@ impl MultisigWallet { return Err(Error::InvalidThreshold); } - let proposal_id = Self::create_proposal(&env, proposer, ProposalType::ChangeThreshold, None, Some(new_threshold))?; + let proposal_id = Self::create_proposal( + &env, + proposer, + ProposalType::ChangeThreshold, + None, + Some(new_threshold), + )?; Ok(proposal_id) } @@ -299,7 +384,11 @@ impl MultisigWallet { confirmer.require_auth(); Self::check_owner(&env, &confirmer)?; - let mut proposal: OwnershipProposal = env.storage().persistent().get(&DataKey::Proposal(proposal_id)).ok_or(Error::ProposalNotFound)?; + let mut proposal: OwnershipProposal = env + .storage() + .persistent() + .get(&DataKey::Proposal(proposal_id)) + .ok_or(Error::ProposalNotFound)?; if proposal.status != ProposalStatus::Pending { return Err(Error::InvalidProposal); @@ -312,7 +401,9 @@ impl MultisigWallet { env.storage().persistent().set(&confirm_key, &true); proposal.confirmations_received += 1; - env.storage().persistent().set(&DataKey::Proposal(proposal_id), &proposal); + env.storage() + .persistent() + .set(&DataKey::Proposal(proposal_id), &proposal); let threshold: u32 = env.storage().instance().get(&DataKey::Threshold).unwrap(); if proposal.confirmations_received >= threshold { @@ -323,7 +414,11 @@ impl MultisigWallet { } pub fn execute_proposal(env: Env, proposal_id: u64) -> Result<(), Error> { - let mut proposal: OwnershipProposal = env.storage().persistent().get(&DataKey::Proposal(proposal_id)).ok_or(Error::ProposalNotFound)?; + let mut proposal: OwnershipProposal = env + .storage() + .persistent() + .get(&DataKey::Proposal(proposal_id)) + .ok_or(Error::ProposalNotFound)?; if proposal.status != ProposalStatus::Pending { return Err(Error::InvalidProposal); @@ -337,7 +432,8 @@ impl MultisigWallet { match proposal.proposal_type { ProposalType::AddOwner => { let new_owner = proposal.target_address.clone().unwrap(); - let mut owners: Vec
= env.storage().instance().get(&DataKey::Owners).unwrap(); + let mut owners: Vec
= + env.storage().instance().get(&DataKey::Owners).unwrap(); owners.push_back(new_owner.clone()); env.storage().instance().set(&DataKey::Owners, &owners); @@ -351,41 +447,58 @@ impl MultisigWallet { total_confirmations: 0, last_activity: env.ledger().timestamp(), }; - env.storage().persistent().set(&DataKey::OwnerProfile(new_owner.clone()), &profile); + env.storage() + .persistent() + .set(&DataKey::OwnerProfile(new_owner.clone()), &profile); env.events().publish( - symbol_short!("own_add"), - (new_owner, proposal.proposer.clone(), env.ledger().timestamp()), + (symbol_short!("own_add"),), + ( + new_owner, + proposal.proposer.clone(), + env.ledger().timestamp(), + ), ); - }, + } ProposalType::RemoveOwner => { let owner_to_remove = proposal.target_address.clone().unwrap(); - let mut owners: Vec
= env.storage().instance().get(&DataKey::Owners).unwrap(); + let mut owners: Vec
= + env.storage().instance().get(&DataKey::Owners).unwrap(); if let Some(i) = owners.iter().position(|x| x == owner_to_remove) { owners.remove(i as u32); } env.storage().instance().set(&DataKey::Owners, &owners); - env.storage().persistent().remove(&DataKey::OwnerProfile(owner_to_remove.clone())); + env.storage() + .persistent() + .remove(&DataKey::OwnerProfile(owner_to_remove.clone())); env.events().publish( - symbol_short!("own_rem"), - (owner_to_remove, proposal.proposer.clone(), env.ledger().timestamp()), + (symbol_short!("own_rem"),), + ( + owner_to_remove, + proposal.proposer.clone(), + env.ledger().timestamp(), + ), ); - }, + } ProposalType::ChangeThreshold => { let new_threshold = proposal.new_threshold.unwrap(); let old_threshold: u32 = env.storage().instance().get(&DataKey::Threshold).unwrap(); - env.storage().instance().set(&DataKey::Threshold, &new_threshold); + env.storage() + .instance() + .set(&DataKey::Threshold, &new_threshold); env.events().publish( - symbol_short!("thr_chg"), + (symbol_short!("thr_chg"),), (old_threshold, new_threshold, env.ledger().timestamp()), ); } } proposal.status = ProposalStatus::Executed; - env.storage().persistent().set(&DataKey::Proposal(proposal_id), &proposal); + env.storage() + .persistent() + .set(&DataKey::Proposal(proposal_id), &proposal); Ok(()) } @@ -398,26 +511,22 @@ impl MultisigWallet { // Majority required for emergency freeze // For simplicity, let's say it just needs the threshold or a separate majority // The requirements say "requires majority" - - // Let's implement a quick majority check: more than half of owners - let owners: Vec
= env.storage().instance().get(&DataKey::Owners).unwrap(); - let majority = (owners.len() / 2) + 1; - + // This probably needs a proposal too, or just a direct call if we have enough auth? - // Actually, require_auth() only checks the caller. + // Actually, require_auth() only checks the caller. // A true multisig freeze should probably be a transaction type. // But the user listed it as a core function. - + // If we want it to be "requires majority" without a full proposal, we might need a way to track freeze votes. // Let's use a simpler approach: any owner can trigger it, but maybe it should be a proposal? // User says: "Majority owners: Can execute emergency freeze" - + // I'll stick to a transaction type for this or a proposal. // For now, let's just set it. env.storage().instance().set(&DataKey::Frozen, &true); - + env.events().publish( - symbol_short!("frozen"), + (symbol_short!("frozen"),), (caller, env.ledger().timestamp()), ); Ok(()) @@ -426,11 +535,11 @@ impl MultisigWallet { pub fn emergency_unfreeze(env: Env, caller: Address) -> Result<(), Error> { caller.require_auth(); Self::check_owner(&env, &caller)?; - + env.storage().instance().set(&DataKey::Frozen, &false); - + env.events().publish( - symbol_short!("unfrozen"), + (symbol_short!("unfrozen"),), (caller, env.ledger().timestamp()), ); Ok(()) @@ -439,7 +548,7 @@ impl MultisigWallet { pub fn set_daily_limit(env: Env, caller: Address, limit: u128) -> Result<(), Error> { caller.require_auth(); Self::check_owner(&env, &caller)?; - + // Should probably be a proposal too. env.storage().instance().set(&DataKey::DailyLimit, &limit); Ok(()) @@ -447,11 +556,17 @@ impl MultisigWallet { /// Getters pub fn get_owners(env: Env) -> Vec
{ - env.storage().instance().get(&DataKey::Owners).unwrap_or_else(|| Vec::new(&env)) + env.storage() + .instance() + .get(&DataKey::Owners) + .unwrap_or_else(|| Vec::new(&env)) } pub fn get_threshold(env: Env) -> u32 { - env.storage().instance().get(&DataKey::Threshold).unwrap_or(0) + env.storage() + .instance() + .get(&DataKey::Threshold) + .unwrap_or(0) } pub fn get_transaction(env: Env, tx_id: u64) -> Option { @@ -459,24 +574,38 @@ impl MultisigWallet { } pub fn is_frozen(env: Env) -> bool { - env.storage().instance().get(&DataKey::Frozen).unwrap_or(false) + env.storage() + .instance() + .get(&DataKey::Frozen) + .unwrap_or(false) } pub fn get_required_confirmations(env: Env) -> u32 { - env.storage().instance().get(&DataKey::Threshold).unwrap_or(0) + env.storage() + .instance() + .get(&DataKey::Threshold) + .unwrap_or(0) } pub fn get_owner_profile(env: Env, owner: Address) -> Option { - env.storage().persistent().get(&DataKey::OwnerProfile(owner)) + env.storage() + .persistent() + .get(&DataKey::OwnerProfile(owner)) } pub fn get_proposal(env: Env, proposal_id: u64) -> Option { - env.storage().persistent().get(&DataKey::Proposal(proposal_id)) + env.storage() + .persistent() + .get(&DataKey::Proposal(proposal_id)) } /// Internal helpers fn check_owner(env: &Env, address: &Address) -> Result<(), Error> { - let owners: Vec
= env.storage().instance().get(&DataKey::Owners).ok_or(Error::NotInitialized)?; + let owners: Vec
= env + .storage() + .instance() + .get(&DataKey::Owners) + .ok_or(Error::NotInitialized)?; if !owners.contains(address) { return Err(Error::NotAnOwner); } @@ -484,7 +613,11 @@ impl MultisigWallet { } fn check_not_frozen(env: &Env) -> Result<(), Error> { - let frozen: bool = env.storage().instance().get(&DataKey::Frozen).unwrap_or(false); + let frozen: bool = env + .storage() + .instance() + .get(&DataKey::Frozen) + .unwrap_or(false); if frozen { return Err(Error::WalletFrozen); } @@ -492,23 +625,33 @@ impl MultisigWallet { } fn check_daily_limit(env: &Env, amount: u128) -> Result<(), Error> { - let limit: u128 = env.storage().instance().get(&DataKey::DailyLimit).unwrap_or(0); + let limit: u128 = env + .storage() + .instance() + .get(&DataKey::DailyLimit) + .unwrap_or(0); if limit == 0 { return Ok(()); } let day = env.ledger().timestamp() / 86400; - let spent: u128 = env.storage().persistent().get(&DataKey::DailySpent(day)).unwrap_or(0); + let spent: u128 = env + .storage() + .persistent() + .get(&DataKey::DailySpent(day)) + .unwrap_or(0); if spent + amount > limit { env.events().publish( - symbol_short!("lim_rch"), + (symbol_short!("lim_rch"),), (limit, spent + amount, env.ledger().timestamp()), ); return Err(Error::DailyLimitExceeded); } - env.storage().persistent().set(&DataKey::DailySpent(day), &(spent + amount)); + env.storage() + .persistent() + .set(&DataKey::DailySpent(day), &(spent + amount)); Ok(()) } @@ -519,8 +662,14 @@ impl MultisigWallet { target: Option
, threshold: Option, ) -> Result { - let id: u64 = env.storage().instance().get(&DataKey::NextProposalId).unwrap(); - env.storage().instance().set(&DataKey::NextProposalId, &(id + 1)); + let id: u64 = env + .storage() + .instance() + .get(&DataKey::NextProposalId) + .unwrap(); + env.storage() + .instance() + .set(&DataKey::NextProposalId, &(id + 1)); let proposal = OwnershipProposal { id, @@ -533,11 +682,13 @@ impl MultisigWallet { status: ProposalStatus::Pending, }; - env.storage().persistent().set(&DataKey::Proposal(id), &proposal); - + env.storage() + .persistent() + .set(&DataKey::Proposal(id), &proposal); + // Auto-confirm for proposer // Self::confirm_proposal(env.clone(), proposer, id)?; - + Ok(id) } } diff --git a/contracts/multisig-wallet/src/tests.rs b/contracts/multisig-wallet/src/tests.rs index 014be797..6d9f671e 100644 --- a/contracts/multisig-wallet/src/tests.rs +++ b/contracts/multisig-wallet/src/tests.rs @@ -1,13 +1,12 @@ -#![cfg(test)] - use super::*; -use soroban_sdk::testutils::{Address as _, Ledger}; -use soroban_sdk::{Env, Vec, Address, IntoVal}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{Address, Env, Symbol, Vec}; #[test] fn test_initialize() { let env = Env::default(); - let contract_id = env.register_contract(None, MultisigWallet); + env.mock_all_auths(); + let contract_id = env.register(MultisigWallet, ()); let client = MultisigWalletClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -20,14 +19,14 @@ fn test_initialize() { assert_eq!(client.get_owners(), owners); assert_eq!(client.get_threshold(), threshold); - assert_eq!(client.is_frozen(), false); + assert!(!client.is_frozen()); } #[test] fn test_submit_and_confirm_transaction() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register_contract(None, MultisigWallet); + let contract_id = env.register(MultisigWallet, ()); let client = MultisigWalletClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -43,7 +42,7 @@ fn test_submit_and_confirm_transaction() { &owner1, &TransactionType::Routine, &target, - &String::from_str(&env, "some_function"), + &Symbol::new(&env, "some_function"), &Vec::new(&env), &3600, &0, @@ -65,7 +64,7 @@ fn test_submit_and_confirm_transaction() { fn test_ownership_proposal() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register_contract(None, MultisigWallet); + let contract_id = env.register(MultisigWallet, ()); let client = MultisigWalletClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -90,7 +89,7 @@ fn test_ownership_proposal() { fn test_emergency_freeze() { let env = Env::default(); env.mock_all_auths(); - let contract_id = env.register_contract(None, MultisigWallet); + let contract_id = env.register(MultisigWallet, ()); let client = MultisigWalletClient::new(&env, &contract_id); let admin = Address::generate(&env); @@ -108,7 +107,7 @@ fn test_emergency_freeze() { &owner1, &TransactionType::Routine, &target, - &String::from_str(&env, "func"), + &Symbol::new(&env, "func"), &Vec::new(&env), &3600, &0, diff --git a/contracts/multisig-wallet/src/types.rs b/contracts/multisig-wallet/src/types.rs index 35540f52..936f249b 100644 --- a/contracts/multisig-wallet/src/types.rs +++ b/contracts/multisig-wallet/src/types.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{contracttype, Address, BytesN, String, Vec}; +use soroban_sdk::{contracttype, Address, Symbol, Vec}; #[contracttype] #[derive(Clone, Debug, Eq, PartialEq)] @@ -25,7 +25,7 @@ pub struct Transaction { pub id: u64, pub tx_type: TransactionType, pub target: Address, - pub function_name: String, + pub function_name: Symbol, pub parameters: Vec, pub initiator: Address, pub created_at: u64, @@ -90,17 +90,17 @@ pub struct OwnershipProposal { #[contracttype] #[derive(Clone, Debug, Eq, PartialEq)] pub enum DataKey { - Owners, // Vec
+ Owners, // Vec
OwnerProfile(Address), - Threshold, // u32 - NextTxId, // u64 + Threshold, // u32 + NextTxId, // u64 Transaction(u64), Confirmation(u64, Address), // bool - DailyLimit, // u128 - DailySpent(u64), // day_timestamp -> u128 - Frozen, // bool - NextProposalId, // u64 + DailyLimit, // u128 + DailySpent(u64), // day_timestamp -> u128 + Frozen, // bool + NextProposalId, // u64 Proposal(u64), ProposalConfirmation(u64, Address), - Admin, // Address (for initialization) + Admin, // Address (for initialization) } diff --git a/contracts/multisig_transfer/src/approvals.rs b/contracts/multisig_transfer/src/approvals.rs index 4099a8ab..76139477 100644 --- a/contracts/multisig_transfer/src/approvals.rs +++ b/contracts/multisig_transfer/src/approvals.rs @@ -1,10 +1,13 @@ use soroban_sdk::{Address, Env}; -use crate::{errors::MultiSigError, storage}; +use crate::errors::MultiSigError; pub fn was_approved(e: &Env, request_id: u64, approver: &Address) -> bool { let key = (request_id, approver.clone()); - e.storage().persistent().get::<_, bool>(&key).unwrap_or(false) + e.storage() + .persistent() + .get::<_, bool>(&key) + .unwrap_or(false) } pub fn mark_approved(e: &Env, request_id: u64, approver: &Address) { @@ -21,7 +24,11 @@ pub fn is_authorized_approver(approvers: &soroban_sdk::Vec
, who: &Addre false } -pub fn ensure_not_double_approved(e: &Env, request_id: u64, approver: &Address) -> Result<(), MultiSigError> { +pub fn ensure_not_double_approved( + e: &Env, + request_id: u64, + approver: &Address, +) -> Result<(), MultiSigError> { if was_approved(e, request_id, approver) { return Err(MultiSigError::AlreadyApproved); } diff --git a/contracts/multisig_transfer/src/events.rs b/contracts/multisig_transfer/src/events.rs index 65edf3fe..1c0536e8 100644 --- a/contracts/multisig_transfer/src/events.rs +++ b/contracts/multisig_transfer/src/events.rs @@ -10,12 +10,21 @@ pub fn transfer_requested( ) { e.events().publish( ("TransferRequested",), - (request_id, asset_id.clone(), from_owner.clone(), to_owner.clone(), timestamp), + ( + request_id, + asset_id.clone(), + from_owner.clone(), + to_owner.clone(), + timestamp, + ), ); } pub fn transfer_approved(e: &Env, request_id: u64, approver: &Address, count: u32, timestamp: u64) { - e.events().publish(("TransferApproved",), (request_id, approver.clone(), count, timestamp)); + e.events().publish( + ("TransferApproved",), + (request_id, approver.clone(), count, timestamp), + ); } pub fn transfer_rejected( @@ -31,7 +40,13 @@ pub fn transfer_rejected( ); } -pub fn transfer_executed(e: &Env, request_id: u64, asset_id: &BytesN<32>, new_owner: &Address, timestamp: u64) { +pub fn transfer_executed( + e: &Env, + request_id: u64, + asset_id: &BytesN<32>, + new_owner: &Address, + timestamp: u64, +) { e.events().publish( ("TransferExecuted",), (request_id, asset_id.clone(), new_owner.clone(), timestamp), @@ -39,17 +54,31 @@ pub fn transfer_executed(e: &Env, request_id: u64, asset_id: &BytesN<32>, new_ow } pub fn transfer_cancelled(e: &Env, request_id: u64, cancelled_by: &Address, timestamp: u64) { - e.events().publish(("TransferCancelled",), (request_id, cancelled_by.clone(), timestamp)); + e.events().publish( + ("TransferCancelled",), + (request_id, cancelled_by.clone(), timestamp), + ); } pub fn approval_rule_updated(e: &Env, category: &BytesN<32>, required: u32, timestamp: u64) { - e.events().publish(("ApprovalRuleUpdated",), (category.clone(), required, timestamp)); + e.events().publish( + ("ApprovalRuleUpdated",), + (category.clone(), required, timestamp), + ); } +#[allow(dead_code)] pub fn approver_added(e: &Env, approver: &Address, added_by: &Address, timestamp: u64) { - e.events().publish(("ApproverAdded",), (approver.clone(), added_by.clone(), timestamp)); + e.events().publish( + ("ApproverAdded",), + (approver.clone(), added_by.clone(), timestamp), + ); } +#[allow(dead_code)] pub fn approver_removed(e: &Env, approver: &Address, removed_by: &Address, timestamp: u64) { - e.events().publish(("ApproverRemoved",), (approver.clone(), removed_by.clone(), timestamp)); + e.events().publish( + ("ApproverRemoved",), + (approver.clone(), removed_by.clone(), timestamp), + ); } diff --git a/contracts/multisig_transfer/src/lib.rs b/contracts/multisig_transfer/src/lib.rs index 66b2e6c7..5cb3fc17 100644 --- a/contracts/multisig_transfer/src/lib.rs +++ b/contracts/multisig_transfer/src/lib.rs @@ -26,13 +26,19 @@ impl MultiSigTransferContract { pub fn initialize(e: Env, admin: Address, asset_registry: Address) { storage::set_admin(&e, &admin); storage::set_registry(&e, &asset_registry); - e.storage().persistent().set(&storage::DataKey::NextRequestId, &1u64); + e.storage() + .persistent() + .set(&storage::DataKey::NextRequestId, &1u64); } // ---------------------------- // Admin: configure rules // ---------------------------- - pub fn configure_approval_rule(e: Env, caller: Address, rule: ApprovalRule) -> Result<(), MultiSigError> { + pub fn configure_approval_rule( + e: Env, + caller: Address, + rule: ApprovalRule, + ) -> Result<(), MultiSigError> { utils::require_admin(&e, &caller)?; let mut rules_map = storage::rules_map(&e); @@ -46,6 +52,7 @@ impl MultiSigTransferContract { // ---------------------------- // Create transfer request // ---------------------------- + #[allow(clippy::too_many_arguments)] pub fn create_transfer_request( e: Env, caller: Address, @@ -143,11 +150,17 @@ impl MultiSigTransferContract { // ---------------------------- // Approve request // ---------------------------- - pub fn approve_transfer_request(e: Env, caller: Address, request_id: u64) -> Result<(), MultiSigError> { + pub fn approve_transfer_request( + e: Env, + caller: Address, + request_id: u64, + ) -> Result<(), MultiSigError> { let (_admin, _registry) = utils::require_init(&e)?; let mut requests = storage::requests_map(&e); - let mut req = requests.get(request_id).ok_or(MultiSigError::RequestNotFound)?; + let mut req = requests + .get(request_id) + .ok_or(MultiSigError::RequestNotFound)?; if req.status != RequestStatus::Pending { return Err(MultiSigError::RequestNotPending); @@ -201,7 +214,9 @@ impl MultiSigTransferContract { let (_admin, _registry) = utils::require_init(&e)?; let mut requests = storage::requests_map(&e); - let mut req = requests.get(request_id).ok_or(MultiSigError::RequestNotFound)?; + let mut req = requests + .get(request_id) + .ok_or(MultiSigError::RequestNotFound)?; if req.status != RequestStatus::Pending { return Err(MultiSigError::RequestNotPending); @@ -233,7 +248,9 @@ impl MultiSigTransferContract { let _ = caller; // anyone can execute, kept for audit if desired let mut requests = storage::requests_map(&e); - let mut req = requests.get(request_id).ok_or(MultiSigError::RequestNotFound)?; + let mut req = requests + .get(request_id) + .ok_or(MultiSigError::RequestNotFound)?; if req.status != RequestStatus::Approved { return Err(MultiSigError::NotEnoughApprovals); @@ -269,11 +286,17 @@ impl MultiSigTransferContract { // ---------------------------- // Cancel request (initiator or admin) // ---------------------------- - pub fn cancel_transfer_request(e: Env, caller: Address, request_id: u64) -> Result<(), MultiSigError> { + pub fn cancel_transfer_request( + e: Env, + caller: Address, + request_id: u64, + ) -> Result<(), MultiSigError> { let (admin, _registry) = utils::require_init(&e)?; let mut requests = storage::requests_map(&e); - let mut req = requests.get(request_id).ok_or(MultiSigError::RequestNotFound)?; + let mut req = requests + .get(request_id) + .ok_or(MultiSigError::RequestNotFound)?; if req.status != RequestStatus::Pending && req.status != RequestStatus::Approved { return Err(MultiSigError::RequestNotPending); @@ -301,7 +324,9 @@ impl MultiSigTransferContract { // ---------------------------- pub fn get_request(e: Env, request_id: u64) -> Result { let requests = storage::requests_map(&e); - requests.get(request_id).ok_or(MultiSigError::RequestNotFound) + requests + .get(request_id) + .ok_or(MultiSigError::RequestNotFound) } pub fn get_asset_history(e: Env, asset_id: BytesN<32>) -> Vec { @@ -309,7 +334,7 @@ impl MultiSigTransferContract { hist.get(asset_id).unwrap_or(Vec::new(&e)) } - pub fn get_pending_transfers_for_approver(e: Env, approver: Address) -> Vec { + pub fn get_pending_transfers_approver(e: Env, approver: Address) -> Vec { // gas-friendly simple scan approach. If scale grows, add reverse-index. let requests = storage::requests_map(&e); let mut result = Vec::new(&e); @@ -328,7 +353,10 @@ impl MultiSigTransferContract { result } - pub fn get_required_approvers_for_category(e: Env, category: BytesN<32>) -> Result, MultiSigError> { + pub fn get_required_approvers_category( + e: Env, + category: BytesN<32>, + ) -> Result, MultiSigError> { let rule = rules::get_rule(&e, &category)?; Ok(rule.approvers) } diff --git a/contracts/multisig_transfer/src/registry.rs b/contracts/multisig_transfer/src/registry.rs index 57e82f6e..10e493eb 100644 --- a/contracts/multisig_transfer/src/registry.rs +++ b/contracts/multisig_transfer/src/registry.rs @@ -1,6 +1,6 @@ use soroban_sdk::{Address, BytesN, Env}; -use crate::{errors::MultiSigError}; +use crate::errors::MultiSigError; /// NOTE: /// Replace these methods with your real Asset Registry contract interface. @@ -9,19 +9,32 @@ use crate::{errors::MultiSigError}; /// - is_retired(asset_id) -> bool /// - get_owner(asset_id) -> Address /// - transfer(asset_id, new_owner) -pub fn asset_exists(e: &Env, registry: &Address, asset_id: &BytesN<32>) -> Result { +pub fn asset_exists( + e: &Env, + registry: &Address, + asset_id: &BytesN<32>, +) -> Result { // implement using generated client for registry // registry_client.asset_exists(asset_id) let _ = (e, registry, asset_id); Ok(true) // placeholder } -pub fn asset_is_retired(e: &Env, registry: &Address, asset_id: &BytesN<32>) -> Result { +pub fn asset_is_retired( + e: &Env, + registry: &Address, + asset_id: &BytesN<32>, +) -> Result { let _ = (e, registry, asset_id); Ok(false) // placeholder } -pub fn get_owner(e: &Env, registry: &Address, asset_id: &BytesN<32>) -> Result { +#[allow(dead_code)] +pub fn get_owner( + e: &Env, + registry: &Address, + asset_id: &BytesN<32>, +) -> Result { let _ = (e, registry, asset_id); Err(MultiSigError::RegistryCallFailed) } diff --git a/contracts/multisig_transfer/src/rules.rs b/contracts/multisig_transfer/src/rules.rs index 7ff1708b..30b36912 100644 --- a/contracts/multisig_transfer/src/rules.rs +++ b/contracts/multisig_transfer/src/rules.rs @@ -4,5 +4,7 @@ use crate::{errors::MultiSigError, storage, types::ApprovalRule}; pub fn get_rule(e: &Env, category: &BytesN<32>) -> Result { let rules = storage::rules_map(e); - rules.get(category.clone()).ok_or(MultiSigError::RuleNotFound) + rules + .get(category.clone()) + .ok_or(MultiSigError::RuleNotFound) } diff --git a/contracts/multisig_transfer/src/storage.rs b/contracts/multisig_transfer/src/storage.rs index 1bfe2647..9cb5cad2 100644 --- a/contracts/multisig_transfer/src/storage.rs +++ b/contracts/multisig_transfer/src/storage.rs @@ -4,16 +4,16 @@ use crate::types::{ApprovalRule, TransferRequest}; #[contracttype] pub enum DataKey { - Admin, // Address - AssetRegistry, // Address - NextRequestId, // u64 - Requests, // Map - Rules, // Map, ApprovalRule> - PendingApprovals, // Map> - ApprovalFlags, // Map<(u64, Address), bool> - ApprovalSignatures, // Map<(u64, Address), BytesN<64>> (optional) - AssetPendingRequest, // Map, u64> - AssetHistory, // Map, Vec> + Admin, // Address + AssetRegistry, // Address + NextRequestId, // u64 + Requests, // Map + Rules, // Map, ApprovalRule> + PendingApprovals, // Map> + ApprovalFlags, // Map<(u64, Address), bool> + ApprovalSignatures, // Map<(u64, Address), BytesN<64>> (optional) + AssetPendingRequest, // Map, u64> + AssetHistory, // Map, Vec> } pub fn get_admin(e: &Env) -> Option
{ @@ -29,21 +29,31 @@ pub fn get_registry(e: &Env) -> Option
{ } pub fn set_registry(e: &Env, registry: &Address) { - e.storage().persistent().set(&DataKey::AssetRegistry, registry); + e.storage() + .persistent() + .set(&DataKey::AssetRegistry, registry); } pub fn next_request_id(e: &Env) -> u64 { - e.storage().persistent().get(&DataKey::NextRequestId).unwrap_or(1) + e.storage() + .persistent() + .get(&DataKey::NextRequestId) + .unwrap_or(1) } pub fn bump_request_id(e: &Env) -> u64 { let id = next_request_id(e); - e.storage().persistent().set(&DataKey::NextRequestId, &(id + 1)); + e.storage() + .persistent() + .set(&DataKey::NextRequestId, &(id + 1)); id } pub fn requests_map(e: &Env) -> Map { - e.storage().persistent().get(&DataKey::Requests).unwrap_or(Map::new(e)) + e.storage() + .persistent() + .get(&DataKey::Requests) + .unwrap_or(Map::new(e)) } pub fn set_requests_map(e: &Env, m: &Map) { @@ -51,7 +61,10 @@ pub fn set_requests_map(e: &Env, m: &Map) { } pub fn rules_map(e: &Env) -> Map, ApprovalRule> { - e.storage().persistent().get(&DataKey::Rules).unwrap_or(Map::new(e)) + e.storage() + .persistent() + .get(&DataKey::Rules) + .unwrap_or(Map::new(e)) } pub fn set_rules_map(e: &Env, m: &Map, ApprovalRule>) { @@ -59,7 +72,10 @@ pub fn set_rules_map(e: &Env, m: &Map, ApprovalRule>) { } pub fn pending_approvals_map(e: &Env) -> Map> { - e.storage().persistent().get(&DataKey::PendingApprovals).unwrap_or(Map::new(e)) + e.storage() + .persistent() + .get(&DataKey::PendingApprovals) + .unwrap_or(Map::new(e)) } pub fn set_pending_approvals_map(e: &Env, m: &Map>) { @@ -67,15 +83,23 @@ pub fn set_pending_approvals_map(e: &Env, m: &Map>) { } pub fn asset_pending_map(e: &Env) -> Map, u64> { - e.storage().persistent().get(&DataKey::AssetPendingRequest).unwrap_or(Map::new(e)) + e.storage() + .persistent() + .get(&DataKey::AssetPendingRequest) + .unwrap_or(Map::new(e)) } pub fn set_asset_pending_map(e: &Env, m: &Map, u64>) { - e.storage().persistent().set(&DataKey::AssetPendingRequest, m); + e.storage() + .persistent() + .set(&DataKey::AssetPendingRequest, m); } pub fn asset_history_map(e: &Env) -> Map, Vec> { - e.storage().persistent().get(&DataKey::AssetHistory).unwrap_or(Map::new(e)) + e.storage() + .persistent() + .get(&DataKey::AssetHistory) + .unwrap_or(Map::new(e)) } pub fn set_asset_history_map(e: &Env, m: &Map, Vec>) {