@layerzerolabs/protocol-stellar-v2 0.2.33 → 0.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +377 -392
- package/.turbo/turbo-lint.log +209 -207
- package/.turbo/turbo-test.log +1687 -1753
- package/contracts/oapps/oft/integration-tests/extensions/test_oft_fee.rs +5 -11
- package/contracts/oapps/oft/integration-tests/extensions/test_pausable.rs +7 -14
- package/contracts/oapps/oft/integration-tests/extensions/test_rate_limiter.rs +11 -22
- package/contracts/oapps/oft/integration-tests/setup.rs +59 -7
- package/contracts/oapps/oft/integration-tests/utils.rs +28 -2
- package/contracts/oapps/oft/src/interfaces/mintable.rs +14 -0
- package/contracts/oapps/oft/src/interfaces/mod.rs +2 -2
- package/contracts/oapps/oft/src/oft.rs +3 -3
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +8 -8
- package/contracts/oapps/oft/src/oft_types/mod.rs +3 -4
- package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +7 -5
- package/contracts/oapps/sac-manager/src/errors.rs +14 -0
- package/contracts/{sac-manager → oapps/sac-manager}/src/lib.rs +0 -4
- package/contracts/oapps/sac-manager/src/sac_manager.rs +115 -0
- package/contracts/oapps/sac-manager/src/storage.rs +20 -0
- package/contracts/{sac-manager → oapps/sac-manager}/src/tests/mod.rs +0 -4
- package/contracts/oapps/sac-manager/src/tests/sac_manager/clawback.rs +86 -0
- package/contracts/oapps/sac-manager/src/tests/sac_manager/mint.rs +58 -0
- package/contracts/{sac-manager → oapps/sac-manager}/src/tests/sac_manager/mod.rs +1 -3
- package/contracts/oapps/sac-manager/src/tests/sac_manager/set_minter.rs +69 -0
- package/contracts/oapps/sac-manager/src/tests/sac_manager/test_helper.rs +18 -0
- package/contracts/oapps/sac-manager/src/tests/sac_manager/view_functions.rs +28 -0
- package/contracts/{sac-manager → oapps/sac-manager}/src/tests/test_helper.rs +16 -59
- package/package.json +8 -3
- package/sdk/.turbo/turbo-test.log +373 -374
- package/sdk/dist/generated/oft.d.ts +3 -3
- package/sdk/dist/generated/oft.js +4 -4
- package/sdk/dist/generated/sac_manager.d.ts +26 -318
- package/sdk/dist/generated/sac_manager.js +23 -129
- package/sdk/package.json +6 -1
- package/sdk/test/oft-sml.test.ts +72 -36
- package/sdk/test/sac-manager-redistribution.test.ts +38 -182
- package/contracts/oapps/oft/src/interfaces/mint_burnable.rs +0 -18
- package/contracts/sac-manager/src/errors.rs +0 -18
- package/contracts/sac-manager/src/extensions/mod.rs +0 -6
- package/contracts/sac-manager/src/extensions/redistribution.rs +0 -109
- package/contracts/sac-manager/src/extensions/supply_control/mod.rs +0 -488
- package/contracts/sac-manager/src/extensions/supply_control/rate_limit.rs +0 -126
- package/contracts/sac-manager/src/interfaces/mod.rs +0 -3
- package/contracts/sac-manager/src/interfaces/sac_manager.rs +0 -52
- package/contracts/sac-manager/src/sac_manager.rs +0 -193
- package/contracts/sac-manager/src/storage.rs +0 -20
- package/contracts/sac-manager/src/tests/redistribution/mod.rs +0 -1
- package/contracts/sac-manager/src/tests/redistribution/redistribute_funds.rs +0 -82
- package/contracts/sac-manager/src/tests/sac_manager/admin_mint.rs +0 -206
- package/contracts/sac-manager/src/tests/sac_manager/burn.rs +0 -215
- package/contracts/sac-manager/src/tests/sac_manager/clawback.rs +0 -209
- package/contracts/sac-manager/src/tests/sac_manager/mint.rs +0 -252
- package/contracts/sac-manager/src/tests/sac_manager/set_oft_address.rs +0 -47
- package/contracts/sac-manager/src/tests/sac_manager/test_helper.rs +0 -75
- package/contracts/sac-manager/src/tests/sac_manager/view_functions.rs +0 -60
- package/contracts/sac-manager/src/tests/supply_control/enumerable_set.rs +0 -256
- package/contracts/sac-manager/src/tests/supply_control/mod.rs +0 -8
- package/contracts/sac-manager/src/tests/supply_control/refill.rs +0 -90
- package/contracts/sac-manager/src/tests/supply_control/set_mint_whitelist.rs +0 -245
- package/contracts/sac-manager/src/tests/supply_control/set_supply_controller.rs +0 -267
- package/contracts/sac-manager/src/tests/supply_control/set_supply_controller_manager.rs +0 -122
- package/contracts/sac-manager/src/tests/supply_control/test_helper.rs +0 -38
- package/contracts/sac-manager/src/tests/supply_control/update_allow_any_mint_burn.rs +0 -114
- package/contracts/sac-manager/src/tests/supply_control/update_limit_config.rs +0 -257
- /package/contracts/{sac-manager → oapps/sac-manager}/Cargo.toml +0 -0
- /package/contracts/{sac-manager → oapps/sac-manager}/src/tests/sac_manager/set_admin.rs +0 -0
- /package/contracts/{sac-manager → oapps/sac-manager}/src/tests/sac_manager/set_authorized.rs +0 -0
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
//! refill() Unit Tests
|
|
2
|
-
//!
|
|
3
|
-
//! Unit tests for the pure `refill` helper in the supply control extension.
|
|
4
|
-
//! These tests do not require deploying the SacManager contract.
|
|
5
|
-
|
|
6
|
-
use crate::extensions::supply_control::rate_limit::{test::refill_for_test, LimitConfig, RateLimitState};
|
|
7
|
-
use crate::extensions::supply_control::SupplyControlError;
|
|
8
|
-
|
|
9
|
-
#[test]
|
|
10
|
-
fn test_refill_no_time_elapsed() {
|
|
11
|
-
let limit_config = LimitConfig { limit_capacity: 1000, refill_per_second: 10 };
|
|
12
|
-
let state = RateLimitState { remaining_amount: 500, last_refill_time: 100 };
|
|
13
|
-
|
|
14
|
-
// No time elapsed
|
|
15
|
-
let result = refill_for_test(&limit_config, &state, 100).unwrap();
|
|
16
|
-
assert_eq!(result, 500);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
#[test]
|
|
20
|
-
fn test_refill_partial_refill() {
|
|
21
|
-
let limit_config = LimitConfig { limit_capacity: 1000, refill_per_second: 10 };
|
|
22
|
-
let state = RateLimitState { remaining_amount: 500, last_refill_time: 100 };
|
|
23
|
-
|
|
24
|
-
// 10 seconds elapsed = 100 tokens refilled
|
|
25
|
-
let result = refill_for_test(&limit_config, &state, 110).unwrap();
|
|
26
|
-
assert_eq!(result, 600);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
#[test]
|
|
30
|
-
fn test_refill_capped_at_capacity() {
|
|
31
|
-
let limit_config = LimitConfig { limit_capacity: 1000, refill_per_second: 10 };
|
|
32
|
-
let state = RateLimitState { remaining_amount: 950, last_refill_time: 100 };
|
|
33
|
-
|
|
34
|
-
// 100 seconds elapsed = 1000 tokens, but capped at capacity
|
|
35
|
-
let result = refill_for_test(&limit_config, &state, 200).unwrap();
|
|
36
|
-
assert_eq!(result, 1000);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
#[test]
|
|
40
|
-
fn test_refill_from_zero() {
|
|
41
|
-
let limit_config = LimitConfig { limit_capacity: 1000, refill_per_second: 100 };
|
|
42
|
-
let state = RateLimitState { remaining_amount: 0, last_refill_time: 0 };
|
|
43
|
-
|
|
44
|
-
// 5 seconds elapsed = 500 tokens
|
|
45
|
-
let result = refill_for_test(&limit_config, &state, 5).unwrap();
|
|
46
|
-
assert_eq!(result, 500);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
#[test]
|
|
50
|
-
fn test_refill_with_zero_refill_rate() {
|
|
51
|
-
// Note: In practice, refill_per_second=0 means unlimited (checked elsewhere)
|
|
52
|
-
// but the refill function itself just does the math
|
|
53
|
-
let limit_config = LimitConfig { limit_capacity: 1000, refill_per_second: 0 };
|
|
54
|
-
let state = RateLimitState { remaining_amount: 500, last_refill_time: 100 };
|
|
55
|
-
|
|
56
|
-
// Any time elapsed, but no refill since rate is 0
|
|
57
|
-
let result = refill_for_test(&limit_config, &state, 200).unwrap();
|
|
58
|
-
assert_eq!(result, 500);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
#[test]
|
|
62
|
-
fn test_refill_returns_capacity_on_overflow() {
|
|
63
|
-
// On arithmetic overflow, returns limit_capacity (aligned with EVM RateLimiter)
|
|
64
|
-
let limit_config = LimitConfig { limit_capacity: 5_000, refill_per_second: i128::MAX / 2 };
|
|
65
|
-
let state = RateLimitState { remaining_amount: i128::MAX / 2, last_refill_time: 0 };
|
|
66
|
-
|
|
67
|
-
// Multiplication overflows → returns limit_capacity
|
|
68
|
-
let result = refill_for_test(&limit_config, &state, 1000).unwrap();
|
|
69
|
-
assert_eq!(result, 5_000);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
#[test]
|
|
73
|
-
fn test_refill_returns_capacity_on_add_overflow() {
|
|
74
|
-
// Addition overflows → returns limit_capacity
|
|
75
|
-
let limit_config = LimitConfig { limit_capacity: 10_000, refill_per_second: 1 };
|
|
76
|
-
let state = RateLimitState { remaining_amount: i128::MAX, last_refill_time: 0 };
|
|
77
|
-
|
|
78
|
-
let result = refill_for_test(&limit_config, &state, 10).unwrap();
|
|
79
|
-
assert_eq!(result, 10_000);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
#[test]
|
|
83
|
-
fn test_refill_errors_on_old_timestamp() {
|
|
84
|
-
let limit_config = LimitConfig { limit_capacity: 1000, refill_per_second: 10 };
|
|
85
|
-
let state = RateLimitState { remaining_amount: 500, last_refill_time: 200 };
|
|
86
|
-
|
|
87
|
-
// timestamp (100) < last_refill_time (200) → should return Err
|
|
88
|
-
let result = refill_for_test(&limit_config, &state, 100);
|
|
89
|
-
assert_eq!(result.err().unwrap(), SupplyControlError::OldTimestamp.into());
|
|
90
|
-
}
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
//! set_mint_whitelist Integration Tests
|
|
2
|
-
|
|
3
|
-
use super::test_helper::{mock_set_mint_whitelist_auth, mock_set_supply_controller_auth};
|
|
4
|
-
use crate::extensions::supply_control::SupplyControlClient;
|
|
5
|
-
use crate::extensions::supply_control::{LimitConfig, MintWhitelistSet, SupplyControlError, SupplyControllerConfig};
|
|
6
|
-
use crate::tests::test_helper::TestSetup;
|
|
7
|
-
use soroban_sdk::Vec;
|
|
8
|
-
use utils::testing_utils::assert_eq_event;
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn test_set_mint_whitelist_add() {
|
|
12
|
-
let setup = TestSetup::new().build();
|
|
13
|
-
let controller = setup.generate_address();
|
|
14
|
-
let mint_addr = setup.generate_address();
|
|
15
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
16
|
-
|
|
17
|
-
let config = SupplyControllerConfig {
|
|
18
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
19
|
-
allow_any_mint_burn: false,
|
|
20
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
21
|
-
};
|
|
22
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
23
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
24
|
-
|
|
25
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
26
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
27
|
-
|
|
28
|
-
// Verify event
|
|
29
|
-
let expected =
|
|
30
|
-
MintWhitelistSet { supply_controller: controller.clone(), mint_address: mint_addr.clone(), active: true };
|
|
31
|
-
assert_eq_event(&setup.env, &setup.sac_manager, expected);
|
|
32
|
-
|
|
33
|
-
// Verify whitelist updated
|
|
34
|
-
assert!(sc_client.is_address_whitelisted(&controller, &mint_addr));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
#[test]
|
|
38
|
-
fn test_set_mint_whitelist_add_fails_if_duplicate() {
|
|
39
|
-
let setup = TestSetup::new().build();
|
|
40
|
-
let controller = setup.generate_address();
|
|
41
|
-
let mint_addr = setup.generate_address();
|
|
42
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
43
|
-
|
|
44
|
-
let config = SupplyControllerConfig {
|
|
45
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
46
|
-
allow_any_mint_burn: false,
|
|
47
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
48
|
-
};
|
|
49
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
50
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
51
|
-
|
|
52
|
-
// Pre-populate the whitelist with mint_addr
|
|
53
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
54
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
55
|
-
|
|
56
|
-
// Attempt to add the same address again — should fail
|
|
57
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
58
|
-
let result = sc_client.try_set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
59
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::AlreadyExists.into());
|
|
60
|
-
|
|
61
|
-
// Verify whitelist remains unchanged after failed update.
|
|
62
|
-
assert!(sc_client.is_address_whitelisted(&controller, &mint_addr));
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
#[test]
|
|
66
|
-
fn test_set_mint_whitelist_add_by_non_manager_fails() {
|
|
67
|
-
let setup = TestSetup::new().build();
|
|
68
|
-
let non_manager = setup.generate_address();
|
|
69
|
-
let controller = setup.generate_address();
|
|
70
|
-
let mint_addr = setup.generate_address();
|
|
71
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
72
|
-
|
|
73
|
-
let config = SupplyControllerConfig {
|
|
74
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
75
|
-
allow_any_mint_burn: false,
|
|
76
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
77
|
-
};
|
|
78
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
79
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config));
|
|
80
|
-
|
|
81
|
-
mock_set_mint_whitelist_auth(&setup, &non_manager, &controller, &mint_addr, true);
|
|
82
|
-
let result = sc_client.try_set_mint_whitelist(&non_manager, &controller, &mint_addr, &true);
|
|
83
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::Unauthorized.into());
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
#[test]
|
|
87
|
-
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
88
|
-
fn test_set_mint_whitelist_add_without_auth() {
|
|
89
|
-
let setup = TestSetup::new().build();
|
|
90
|
-
let controller = setup.generate_address();
|
|
91
|
-
let mint_addr = setup.generate_address();
|
|
92
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
93
|
-
|
|
94
|
-
let config = SupplyControllerConfig {
|
|
95
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
96
|
-
allow_any_mint_burn: false,
|
|
97
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
98
|
-
};
|
|
99
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
100
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
101
|
-
|
|
102
|
-
// sc_manager's auth is not mocked — sender.require_auth() fails
|
|
103
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
#[test]
|
|
107
|
-
fn test_set_mint_whitelist_remove() {
|
|
108
|
-
let setup = TestSetup::new().build();
|
|
109
|
-
let controller = setup.generate_address();
|
|
110
|
-
let mint_addr = setup.generate_address();
|
|
111
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
112
|
-
|
|
113
|
-
let config = SupplyControllerConfig {
|
|
114
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
115
|
-
allow_any_mint_burn: false,
|
|
116
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
117
|
-
};
|
|
118
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
119
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
120
|
-
|
|
121
|
-
// Pre-populate the whitelist with mint_addr
|
|
122
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
123
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
124
|
-
|
|
125
|
-
// Now remove it
|
|
126
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, false);
|
|
127
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &false);
|
|
128
|
-
|
|
129
|
-
// Verify event
|
|
130
|
-
let expected =
|
|
131
|
-
MintWhitelistSet { supply_controller: controller.clone(), mint_address: mint_addr.clone(), active: false };
|
|
132
|
-
assert_eq_event(&setup.env, &setup.sac_manager, expected);
|
|
133
|
-
|
|
134
|
-
// Verify whitelist updated
|
|
135
|
-
assert!(!sc_client.is_address_whitelisted(&controller, &mint_addr));
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
#[test]
|
|
139
|
-
fn test_set_mint_whitelist_remove_fails_if_not_in_whitelist() {
|
|
140
|
-
let setup = TestSetup::new().build();
|
|
141
|
-
let controller = setup.generate_address();
|
|
142
|
-
let not_whitelisted = setup.generate_address();
|
|
143
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
144
|
-
|
|
145
|
-
let config = SupplyControllerConfig {
|
|
146
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
147
|
-
allow_any_mint_burn: false,
|
|
148
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
149
|
-
};
|
|
150
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
151
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
152
|
-
|
|
153
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, ¬_whitelisted, false);
|
|
154
|
-
let result = sc_client.try_set_mint_whitelist(&setup.sc_manager, &controller, ¬_whitelisted, &false);
|
|
155
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::NotFound.into());
|
|
156
|
-
|
|
157
|
-
// Verify whitelist remains unchanged after failed update.
|
|
158
|
-
assert!(!sc_client.is_address_whitelisted(&controller, ¬_whitelisted));
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
#[test]
|
|
162
|
-
fn test_set_mint_whitelist_remove_by_non_manager_fails() {
|
|
163
|
-
let setup = TestSetup::new().build();
|
|
164
|
-
let non_manager = setup.generate_address();
|
|
165
|
-
let controller = setup.generate_address();
|
|
166
|
-
let mint_addr = setup.generate_address();
|
|
167
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
168
|
-
|
|
169
|
-
let config = SupplyControllerConfig {
|
|
170
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
171
|
-
allow_any_mint_burn: false,
|
|
172
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
173
|
-
};
|
|
174
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
175
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config));
|
|
176
|
-
|
|
177
|
-
// Pre-populate the whitelist with mint_addr
|
|
178
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
179
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
180
|
-
|
|
181
|
-
// Non-manager tries to remove — should fail
|
|
182
|
-
mock_set_mint_whitelist_auth(&setup, &non_manager, &controller, &mint_addr, false);
|
|
183
|
-
let result = sc_client.try_set_mint_whitelist(&non_manager, &controller, &mint_addr, &false);
|
|
184
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::Unauthorized.into());
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
#[test]
|
|
188
|
-
fn test_set_mint_whitelist_fails_if_supply_controller_not_found() {
|
|
189
|
-
let setup = TestSetup::new().build();
|
|
190
|
-
let non_controller = setup.generate_address();
|
|
191
|
-
let mint_addr = setup.generate_address();
|
|
192
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
193
|
-
|
|
194
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &non_controller, &mint_addr, true);
|
|
195
|
-
let result = sc_client.try_set_mint_whitelist(&setup.sc_manager, &non_controller, &mint_addr, &true);
|
|
196
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::NotFound.into());
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
#[test]
|
|
200
|
-
fn test_set_mint_whitelist_preserves_limit_and_allow_any() {
|
|
201
|
-
let setup = TestSetup::new().build();
|
|
202
|
-
let controller = setup.generate_address();
|
|
203
|
-
let mint_addr = setup.generate_address();
|
|
204
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
205
|
-
|
|
206
|
-
let config = SupplyControllerConfig {
|
|
207
|
-
limit_config: LimitConfig { limit_capacity: 2_000, refill_per_second: 20 },
|
|
208
|
-
allow_any_mint_burn: true,
|
|
209
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
210
|
-
};
|
|
211
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
212
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
213
|
-
|
|
214
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
215
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
216
|
-
|
|
217
|
-
let stored = sc_client.get_supply_controller_config(&controller).unwrap();
|
|
218
|
-
assert_eq!(stored.limit_config, config.limit_config);
|
|
219
|
-
assert_eq!(stored.allow_any_mint_burn, config.allow_any_mint_burn);
|
|
220
|
-
assert!(sc_client.is_address_whitelisted(&controller, &mint_addr));
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
#[test]
|
|
224
|
-
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
225
|
-
fn test_set_mint_whitelist_remove_without_auth() {
|
|
226
|
-
let setup = TestSetup::new().build();
|
|
227
|
-
let controller = setup.generate_address();
|
|
228
|
-
let mint_addr = setup.generate_address();
|
|
229
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
230
|
-
|
|
231
|
-
let config = SupplyControllerConfig {
|
|
232
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 0 },
|
|
233
|
-
allow_any_mint_burn: false,
|
|
234
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
235
|
-
};
|
|
236
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
237
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
238
|
-
|
|
239
|
-
// Pre-populate the whitelist with mint_addr
|
|
240
|
-
mock_set_mint_whitelist_auth(&setup, &setup.sc_manager, &controller, &mint_addr, true);
|
|
241
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &true);
|
|
242
|
-
|
|
243
|
-
// sc_manager's auth is not mocked — sender.require_auth() fails
|
|
244
|
-
sc_client.set_mint_whitelist(&setup.sc_manager, &controller, &mint_addr, &false);
|
|
245
|
-
}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
//! set_supply_controller Integration Tests
|
|
2
|
-
|
|
3
|
-
use super::test_helper::mock_set_supply_controller_auth;
|
|
4
|
-
use crate::extensions::supply_control::SupplyControlClient;
|
|
5
|
-
use crate::extensions::supply_control::{
|
|
6
|
-
LimitConfig, SupplyControlError, SupplyControllerAdded, SupplyControllerConfig, SupplyControllerRemoved,
|
|
7
|
-
};
|
|
8
|
-
use crate::tests::test_helper::TestSetup;
|
|
9
|
-
use soroban_sdk::Vec;
|
|
10
|
-
use utils::testing_utils::assert_eq_event;
|
|
11
|
-
|
|
12
|
-
// =========================================================================
|
|
13
|
-
// set_supply_controller Tests (add)
|
|
14
|
-
// =========================================================================
|
|
15
|
-
|
|
16
|
-
#[test]
|
|
17
|
-
fn test_set_supply_controller() {
|
|
18
|
-
let setup = TestSetup::new().with_manager_as_sac_admin().build();
|
|
19
|
-
let controller = setup.generate_address();
|
|
20
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
21
|
-
|
|
22
|
-
let config = SupplyControllerConfig {
|
|
23
|
-
limit_config: LimitConfig { limit_capacity: 1_000_000, refill_per_second: 100 },
|
|
24
|
-
allow_any_mint_burn: true,
|
|
25
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
29
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
30
|
-
|
|
31
|
-
// Verify SupplyControllerAdded event
|
|
32
|
-
let expected = SupplyControllerAdded { supply_controller: controller.clone(), config: config.clone() };
|
|
33
|
-
assert_eq_event(&setup.env, &setup.sac_manager, expected);
|
|
34
|
-
|
|
35
|
-
// Verify controller exists
|
|
36
|
-
let stored_config = sc_client.get_supply_controller_config(&controller);
|
|
37
|
-
assert!(stored_config.is_some());
|
|
38
|
-
assert_eq!(stored_config.unwrap().limit_config.limit_capacity, 1_000_000);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
#[test]
|
|
42
|
-
fn test_set_supply_controller_fails_if_already_exists() {
|
|
43
|
-
let setup = TestSetup::new().with_manager_as_sac_admin().build();
|
|
44
|
-
let controller = setup.generate_address();
|
|
45
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
46
|
-
|
|
47
|
-
let config = SupplyControllerConfig {
|
|
48
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
49
|
-
allow_any_mint_burn: true,
|
|
50
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// Add supply controller first time - should succeed
|
|
54
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
55
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
56
|
-
|
|
57
|
-
// Try to add the same supply controller again - should fail
|
|
58
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
59
|
-
let result = sc_client.try_set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
60
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::AlreadyExists.into());
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
#[test]
|
|
64
|
-
fn test_set_supply_controller_fails_with_invalid_config() {
|
|
65
|
-
let setup = TestSetup::new().with_manager_as_sac_admin().build();
|
|
66
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
67
|
-
|
|
68
|
-
// Should fail due to negative capacity
|
|
69
|
-
let controller1 = setup.generate_address();
|
|
70
|
-
let invalid_config = SupplyControllerConfig {
|
|
71
|
-
limit_config: LimitConfig { limit_capacity: -100, refill_per_second: 10 },
|
|
72
|
-
allow_any_mint_burn: true,
|
|
73
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
74
|
-
};
|
|
75
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller1, &Some(invalid_config.clone()));
|
|
76
|
-
let result = sc_client.try_set_supply_controller(&setup.sc_manager, &controller1, &Some(invalid_config.clone()));
|
|
77
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::InvalidConfig.into());
|
|
78
|
-
|
|
79
|
-
// Should fail due to negative refill rate
|
|
80
|
-
let controller2 = setup.generate_address();
|
|
81
|
-
let invalid_config = SupplyControllerConfig {
|
|
82
|
-
limit_config: LimitConfig { limit_capacity: 1000, refill_per_second: -10 },
|
|
83
|
-
allow_any_mint_burn: true,
|
|
84
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
85
|
-
};
|
|
86
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller2, &Some(invalid_config.clone()));
|
|
87
|
-
let result = sc_client.try_set_supply_controller(&setup.sc_manager, &controller2, &Some(invalid_config.clone()));
|
|
88
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::InvalidConfig.into());
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
#[test]
|
|
92
|
-
fn test_set_supply_controller_by_non_manager_fails() {
|
|
93
|
-
let setup = TestSetup::new().build();
|
|
94
|
-
let non_manager = setup.generate_address();
|
|
95
|
-
let controller = setup.generate_address();
|
|
96
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
97
|
-
|
|
98
|
-
let config = SupplyControllerConfig {
|
|
99
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
100
|
-
allow_any_mint_burn: true,
|
|
101
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
// non_manager is NOT a supply controller manager — should fail
|
|
105
|
-
mock_set_supply_controller_auth(&setup, &non_manager, &controller, &Some(config.clone()));
|
|
106
|
-
let result = sc_client.try_set_supply_controller(&non_manager, &controller, &Some(config.clone()));
|
|
107
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::Unauthorized.into());
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
#[test]
|
|
111
|
-
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
112
|
-
fn test_set_supply_controller_without_auth() {
|
|
113
|
-
let setup = TestSetup::new().with_manager_as_sac_admin().build();
|
|
114
|
-
let controller = setup.generate_address();
|
|
115
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
116
|
-
|
|
117
|
-
let config = SupplyControllerConfig {
|
|
118
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
119
|
-
allow_any_mint_burn: true,
|
|
120
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
// sc_manager's auth is not mocked — sender.require_auth() fails
|
|
124
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// =========================================================================
|
|
128
|
-
// set_supply_controller Tests (remove)
|
|
129
|
-
// =========================================================================
|
|
130
|
-
|
|
131
|
-
#[test]
|
|
132
|
-
fn test_set_supply_controller_remove() {
|
|
133
|
-
let setup = TestSetup::new().build();
|
|
134
|
-
let controller = setup.generate_address();
|
|
135
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
136
|
-
|
|
137
|
-
let config = SupplyControllerConfig {
|
|
138
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
139
|
-
allow_any_mint_burn: true,
|
|
140
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
144
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
145
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &None);
|
|
146
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &None);
|
|
147
|
-
|
|
148
|
-
// Verify SupplyControllerRemoved event
|
|
149
|
-
let expected = SupplyControllerRemoved { supply_controller: controller.clone() };
|
|
150
|
-
assert_eq_event(&setup.env, &setup.sac_manager, expected);
|
|
151
|
-
|
|
152
|
-
// Verify controller config is removed
|
|
153
|
-
assert!(sc_client.get_supply_controller_config(&controller).is_none());
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
#[test]
|
|
157
|
-
fn test_set_supply_controller_remove_fails_if_not_exists() {
|
|
158
|
-
let setup = TestSetup::new().build();
|
|
159
|
-
let non_controller = setup.generate_address();
|
|
160
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
161
|
-
|
|
162
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &non_controller, &None);
|
|
163
|
-
let result = sc_client.try_set_supply_controller(&setup.sc_manager, &non_controller, &None);
|
|
164
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::NotFound.into());
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
#[test]
|
|
168
|
-
fn test_get_supply_controllers() {
|
|
169
|
-
let setup = TestSetup::new().with_manager_as_sac_admin().build();
|
|
170
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
171
|
-
|
|
172
|
-
// Initially no supply controllers
|
|
173
|
-
let controllers = sc_client.get_supply_controllers();
|
|
174
|
-
assert_eq!(controllers.len(), 0);
|
|
175
|
-
|
|
176
|
-
let controller1 = setup.generate_address();
|
|
177
|
-
let controller2 = setup.generate_address();
|
|
178
|
-
|
|
179
|
-
let config = SupplyControllerConfig {
|
|
180
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
181
|
-
allow_any_mint_burn: true,
|
|
182
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
// Add two supply controllers
|
|
186
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller1, &Some(config.clone()));
|
|
187
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller1, &Some(config.clone()));
|
|
188
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller2, &Some(config.clone()));
|
|
189
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller2, &Some(config.clone()));
|
|
190
|
-
|
|
191
|
-
// Should return both controllers
|
|
192
|
-
let controllers = sc_client.get_supply_controllers();
|
|
193
|
-
assert_eq!(controllers.len(), 2);
|
|
194
|
-
assert!(controllers.contains(&controller1));
|
|
195
|
-
assert!(controllers.contains(&controller2));
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
#[test]
|
|
199
|
-
fn test_get_supply_controllers_after_remove() {
|
|
200
|
-
let setup = TestSetup::new().build();
|
|
201
|
-
let controller1 = setup.generate_address();
|
|
202
|
-
let controller2 = setup.generate_address();
|
|
203
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
204
|
-
|
|
205
|
-
let config = SupplyControllerConfig {
|
|
206
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
207
|
-
allow_any_mint_burn: true,
|
|
208
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
// Add two supply controllers
|
|
212
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller1, &Some(config.clone()));
|
|
213
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller1, &Some(config.clone()));
|
|
214
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller2, &Some(config.clone()));
|
|
215
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller2, &Some(config.clone()));
|
|
216
|
-
|
|
217
|
-
// Remove one
|
|
218
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller1, &None);
|
|
219
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller1, &None);
|
|
220
|
-
|
|
221
|
-
// Should return only one controller
|
|
222
|
-
let controllers = sc_client.get_supply_controllers();
|
|
223
|
-
assert_eq!(controllers.len(), 1);
|
|
224
|
-
assert!(!controllers.contains(&controller1));
|
|
225
|
-
assert!(controllers.contains(&controller2));
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
#[test]
|
|
229
|
-
fn test_set_supply_controller_remove_by_non_manager_fails() {
|
|
230
|
-
let setup = TestSetup::new().build();
|
|
231
|
-
let non_manager = setup.generate_address();
|
|
232
|
-
let controller = setup.generate_address();
|
|
233
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
234
|
-
|
|
235
|
-
let config = SupplyControllerConfig {
|
|
236
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
237
|
-
allow_any_mint_burn: true,
|
|
238
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
239
|
-
};
|
|
240
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
241
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
242
|
-
|
|
243
|
-
// non_manager tries to remove — should fail
|
|
244
|
-
mock_set_supply_controller_auth(&setup, &non_manager, &controller, &None);
|
|
245
|
-
let result = sc_client.try_set_supply_controller(&non_manager, &controller, &None);
|
|
246
|
-
assert_eq!(result.err().unwrap().unwrap(), SupplyControlError::Unauthorized.into());
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
#[test]
|
|
250
|
-
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
251
|
-
fn test_set_supply_controller_remove_without_auth() {
|
|
252
|
-
let setup = TestSetup::new().build();
|
|
253
|
-
let controller = setup.generate_address();
|
|
254
|
-
let sc_client = SupplyControlClient::new(&setup.env, &setup.sac_manager);
|
|
255
|
-
|
|
256
|
-
let config = SupplyControllerConfig {
|
|
257
|
-
limit_config: LimitConfig { limit_capacity: 1_000, refill_per_second: 10 },
|
|
258
|
-
allow_any_mint_burn: true,
|
|
259
|
-
whitelist_addresses: Vec::new(&setup.env),
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
mock_set_supply_controller_auth(&setup, &setup.sc_manager, &controller, &Some(config.clone()));
|
|
263
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &Some(config.clone()));
|
|
264
|
-
|
|
265
|
-
// sc_manager's auth is not mocked for the remove call — should panic
|
|
266
|
-
sc_client.set_supply_controller(&setup.sc_manager, &controller, &None);
|
|
267
|
-
}
|