From b97058144278db91228c62720f3d4d2892b3ed56 Mon Sep 17 00:00:00 2001 From: razeprasine Date: Tue, 2 Jun 2026 11:48:05 +0100 Subject: [PATCH 1/2] fixes issue 274 --- creator-keys/tests/key_supply.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/creator-keys/tests/key_supply.rs b/creator-keys/tests/key_supply.rs index 07306c7..d83b111 100644 --- a/creator-keys/tests/key_supply.rs +++ b/creator-keys/tests/key_supply.rs @@ -55,6 +55,30 @@ fn test_get_total_key_supply_increments_after_buy() { assert_eq!(client.get_total_key_supply(&creator), 2); } +#[test] +fn test_get_total_key_supply_increments_after_three_sequential_buys() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _) = setup(&env); + + let creator = Address::generate(&env); + let buyer1 = Address::generate(&env); + let buyer2 = Address::generate(&env); + let buyer3 = Address::generate(&env); + client.register_creator(&creator, &String::from_str(&env, "alice")); + + assert_eq!(client.get_total_key_supply(&creator), 0); + + client.buy_key(&creator, &buyer1, &100_i128); + assert_eq!(client.get_total_key_supply(&creator), 1); + + client.buy_key(&creator, &buyer2, &100_i128); + assert_eq!(client.get_total_key_supply(&creator), 2); + + client.buy_key(&creator, &buyer3, &100_i128); + assert_eq!(client.get_total_key_supply(&creator), 3); +} + #[test] fn test_get_total_key_supply_is_read_only() { let env = Env::default(); From e9f0a983b19c35ed29fbaede213bd87ed06570b8 Mon Sep 17 00:00:00 2001 From: razeprasine Date: Mon, 29 Jun 2026 03:08:55 +0100 Subject: [PATCH 2/2] Compile Issue fix --- creator-keys/src/lib.rs | 65 ----- ..._buy_key_unregistered_creator_fails.1.json | 161 +++++++++++- ...upply_three_buyers_sum_equals_total.1.json | 248 +++++++++--------- creator-keys/tests/creator_supply.rs | 20 ++ creator-keys/tests/key_supply.rs | 8 +- ...peer_to_peer_transfer_supply_regression.rs | 2 +- 6 files changed, 309 insertions(+), 195 deletions(-) diff --git a/creator-keys/src/lib.rs b/creator-keys/src/lib.rs index 90cd751..648b9b6 100644 --- a/creator-keys/src/lib.rs +++ b/creator-keys/src/lib.rs @@ -1210,71 +1210,6 @@ impl CreatorKeysContract { Ok(profile.supply) } - /// Transfers creator keys between two wallets without changing total supply. - pub fn transfer_keys( - env: Env, - from: Address, - to: Address, - creator: Address, - amount: u32, - ) -> Result<(), ContractError> { - from.require_auth(); - assert_not_paused(&env)?; - - if amount == 0 { - return Err(ContractError::NotPositiveAmount); - } - if from == to { - return Err(ContractError::ZeroAddress); - } - - let mut profile = read_registered_creator_profile(&env, &creator)?; - let from_key = constants::storage::key_balance(&creator, &from); - let to_key = constants::storage::key_balance(&creator, &to); - - let from_balance: u32 = env.storage().persistent().get(&from_key).unwrap_or(0); - if from_balance < amount { - return Err(ContractError::InsufficientBalance); - } - - let to_balance: u32 = env.storage().persistent().get(&to_key).unwrap_or(0); - - settle_holder_dividends(&env, &creator, &from, from_balance)?; - settle_holder_dividends(&env, &creator, &to, to_balance)?; - - let new_from_balance = from_balance - .checked_sub(amount) - .ok_or(ContractError::SellUnderflow)?; - let new_to_balance = to_balance - .checked_add(amount) - .ok_or(ContractError::Overflow)?; - - if new_from_balance == 0 { - profile.holder_count = profile - .holder_count - .checked_sub(1) - .ok_or(ContractError::SellUnderflow)?; - } - if to_balance == 0 { - profile.holder_count = profile - .holder_count - .checked_add(1) - .ok_or(ContractError::Overflow)?; - } - - let profile_key = constants::storage::creator(&creator); - env.storage().persistent().set(&profile_key, &profile); - env.storage().persistent().set(&from_key, &new_from_balance); - env.storage().persistent().set(&to_key, &new_to_balance); - - env.events() - .publish(events::transfer_event_topics(&creator, &from), (to, amount)); - - extend_creator_ttl(&env, &creator); - - Ok(()) - } - /// Creator-only buyback that burns keys from the creator's own held balance. /// /// The creator pays the current gross buyback cost plus protocol fee, while the diff --git a/creator-keys/test_snapshots/test_buy_key_unregistered_creator_fails.1.json b/creator-keys/test_snapshots/test_buy_key_unregistered_creator_fails.1.json index 15c453a..504c99b 100644 --- a/creator-keys/test_snapshots/test_buy_key_unregistered_creator_fails.1.json +++ b/creator-keys/test_snapshots/test_buy_key_unregistered_creator_fails.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 4, + "address": 5, "nonce": 0 }, "auth": [ @@ -30,6 +30,37 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_fee_config", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 9000 + }, + { + "u32": 1000 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [], + [], + [], [] ], "ledger": { @@ -42,6 +73,62 @@ "min_temp_entry_ttl": 16, "max_entry_ttl": 6312000, "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FeeConfig" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "FeeConfig" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "creator_bps" + }, + "val": { + "u32": 9000 + } + }, + { + "key": { + "symbol": "protocol_bps" + }, + "val": { + "u32": 1000 + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], [ { "contract_data": { @@ -84,6 +171,45 @@ 4095 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ProtocolStateVersion" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ProtocolStateVersion" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 2 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], [ { "contract_data": { @@ -149,6 +275,39 @@ 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": { diff --git a/creator-keys/test_snapshots/test_supply_three_buyers_sum_equals_total.1.json b/creator-keys/test_snapshots/test_supply_three_buyers_sum_equals_total.1.json index 69bd085..2cf17ea 100644 --- a/creator-keys/test_snapshots/test_supply_three_buyers_sum_equals_total.1.json +++ b/creator-keys/test_snapshots/test_supply_three_buyers_sum_equals_total.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 6, + "address": 3, "nonce": 0 }, "auth": [ @@ -56,7 +56,7 @@ ], [ [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ", { "function": { "contract_fn": { @@ -67,7 +67,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" }, { "i128": { @@ -85,7 +85,7 @@ ], [ [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL", { "function": { "contract_fn": { @@ -96,7 +96,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" }, { "i128": { @@ -114,7 +114,7 @@ ], [ [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM", { "function": { "contract_fn": { @@ -125,7 +125,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" }, { "i128": { @@ -156,6 +156,105 @@ "min_temp_entry_ttl": 16, "max_entry_ttl": 6312000, "ledger_entries": [ + [ + { + "contract_data": { + "contract": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -263,7 +362,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" } ] }, @@ -286,7 +385,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" } ] }, @@ -317,7 +416,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" } ] }, @@ -340,7 +439,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" } ] }, @@ -371,7 +470,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" } ] }, @@ -394,7 +493,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" } ] }, @@ -425,7 +524,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" } ] }, @@ -448,7 +547,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" } ] }, @@ -479,7 +578,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" } ] }, @@ -502,7 +601,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" } ] }, @@ -533,7 +632,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" } ] }, @@ -556,7 +655,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" } ] }, @@ -587,7 +686,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" } ] }, @@ -610,7 +709,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "GARHLJ522ZQPQ3AKXY3XDEFA4TX44RHYIWQUN5ML7ZC7NXYDPNR3ADMM" } ] }, @@ -638,7 +737,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" } ] }, @@ -661,7 +760,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "GCELBYPGRABPAIAZ23PE2C3VUPDRHERUUJZOZHSTNJ7TVH377HCXW2UJ" } ] }, @@ -689,7 +788,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" } ] }, @@ -712,7 +811,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "GCVAHVWNJAU46DQ5IMJTHPIF5NFEAQWONYSR6GERCIGOK2MR2MBB7OEL" } ] }, @@ -867,105 +966,6 @@ 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": { diff --git a/creator-keys/tests/creator_supply.rs b/creator-keys/tests/creator_supply.rs index 4f69d4c..f86d75e 100644 --- a/creator-keys/tests/creator_supply.rs +++ b/creator-keys/tests/creator_supply.rs @@ -57,3 +57,23 @@ fn test_get_creator_supply_fails_for_unregistered_creator() { let result = client.try_get_creator_supply(&creator); assert_eq!(result, Err(Ok(ContractError::NotRegistered))); } + +#[test] +fn test_creator_supply_accumulates_across_sequential_buys() { + let env = Env::default(); + env.mock_all_auths(); + + let (client, _admin, creator) = setup(&env); + let buyer = Address::generate(&env); + + client.buy_key(&creator, &buyer, &100_i128, &None); + assert_eq!(client.get_creator_supply(&creator), 1); + + client.buy_key(&creator, &buyer, &100_i128, &None); + assert_eq!(client.get_creator_supply(&creator), 2); + + client.buy_key(&creator, &buyer, &100_i128, &None); + assert_eq!(client.get_creator_supply(&creator), 3); + + assert_eq!(client.get_creator_supply(&creator), 1 + 1 + 1); +} diff --git a/creator-keys/tests/key_supply.rs b/creator-keys/tests/key_supply.rs index d83b111..d2cd3c4 100644 --- a/creator-keys/tests/key_supply.rs +++ b/creator-keys/tests/key_supply.rs @@ -65,17 +65,17 @@ fn test_get_total_key_supply_increments_after_three_sequential_buys() { let buyer1 = Address::generate(&env); let buyer2 = Address::generate(&env); let buyer3 = Address::generate(&env); - client.register_creator(&creator, &String::from_str(&env, "alice")); + client.register_creator(&creator, &String::from_str(&env, "alice"), &None, &None); assert_eq!(client.get_total_key_supply(&creator), 0); - client.buy_key(&creator, &buyer1, &100_i128); + client.buy_key(&creator, &buyer1, &100_i128, &None); assert_eq!(client.get_total_key_supply(&creator), 1); - client.buy_key(&creator, &buyer2, &100_i128); + client.buy_key(&creator, &buyer2, &100_i128, &None); assert_eq!(client.get_total_key_supply(&creator), 2); - client.buy_key(&creator, &buyer3, &100_i128); + client.buy_key(&creator, &buyer3, &100_i128, &None); assert_eq!(client.get_total_key_supply(&creator), 3); } diff --git a/creator-keys/tests/peer_to_peer_transfer_supply_regression.rs b/creator-keys/tests/peer_to_peer_transfer_supply_regression.rs index 0b6351d..0aadab8 100644 --- a/creator-keys/tests/peer_to_peer_transfer_supply_regression.rs +++ b/creator-keys/tests/peer_to_peer_transfer_supply_regression.rs @@ -25,7 +25,7 @@ fn test_transfer_keys_keeps_supply_and_same_level_quotes_unchanged() { let buy_quote_before = client.get_buy_quote(&creator); let sell_quote_before = client.get_sell_quote(&creator, &sender); - client.transfer_keys(&sender, &recipient, &creator, &1); + client.transfer_keys(&creator, &sender, &recipient, &1); assert_eq!( client.get_total_key_supply(&creator),