@layerzerolabs/protocol-stellar-v2 0.2.8 → 0.2.10

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.
Files changed (239) hide show
  1. package/.turbo/turbo-build.log +443 -302
  2. package/.turbo/turbo-lint.log +118 -96
  3. package/.turbo/turbo-test.log +853 -731
  4. package/Cargo.lock +120 -37
  5. package/Cargo.toml +8 -5
  6. package/contracts/common-macros/src/contract_impl.rs +44 -0
  7. package/contracts/common-macros/src/lib.rs +86 -40
  8. package/contracts/common-macros/src/ownable.rs +24 -32
  9. package/contracts/common-macros/src/storage.rs +95 -120
  10. package/contracts/common-macros/src/tests/contract_impl.rs +289 -0
  11. package/contracts/common-macros/src/tests/mod.rs +9 -0
  12. package/contracts/common-macros/src/tests/ownable.rs +151 -0
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +85 -0
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +30 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap +9 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +1072 -0
  17. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +45 -0
  18. package/contracts/common-macros/src/tests/storage.rs +485 -0
  19. package/contracts/common-macros/src/tests/test_helpers.rs +93 -0
  20. package/contracts/common-macros/src/tests/ttl_configurable.rs +34 -0
  21. package/contracts/common-macros/src/ttl_configurable.rs +31 -14
  22. package/contracts/common-macros/src/utils.rs +27 -0
  23. package/contracts/endpoint-v2/ARCHITECTURE.md +4 -4
  24. package/contracts/endpoint-v2/src/endpoint_v2.rs +18 -15
  25. package/contracts/endpoint-v2/src/interfaces/message_lib.rs +2 -3
  26. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +5 -3
  27. package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +2 -2
  28. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
  29. package/contracts/endpoint-v2/src/interfaces/send_lib.rs +4 -4
  30. package/contracts/endpoint-v2/src/lib.rs +6 -5
  31. package/contracts/endpoint-v2/src/message_lib_manager.rs +14 -6
  32. package/contracts/endpoint-v2/src/messaging_channel.rs +6 -2
  33. package/contracts/endpoint-v2/src/messaging_composer.rs +6 -2
  34. package/contracts/endpoint-v2/src/storage.rs +10 -7
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +16 -16
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +46 -46
  37. package/contracts/endpoint-v2/src/tests/mock.rs +2 -2
  38. package/contracts/endpoint-v2/src/util.rs +8 -2
  39. package/contracts/message-libs/block-message-lib/Cargo.toml +1 -0
  40. package/contracts/message-libs/block-message-lib/src/lib.rs +5 -5
  41. package/contracts/message-libs/message-lib-common/src/errors.rs +8 -8
  42. package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +0 -1
  43. package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +3 -3
  44. package/contracts/message-libs/message-lib-common/src/lib.rs +0 -2
  45. package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +4 -6
  46. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +2 -2
  47. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +11 -11
  48. package/contracts/message-libs/message-lib-common/src/worker_options.rs +10 -16
  49. package/contracts/message-libs/simple-message-lib/src/errors.rs +0 -4
  50. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +49 -34
  51. package/contracts/message-libs/simple-message-lib/src/storage.rs +3 -7
  52. package/contracts/message-libs/simple-message-lib/src/test.rs +3 -3
  53. package/contracts/message-libs/treasury/src/storage.rs +1 -2
  54. package/contracts/message-libs/treasury/src/tests/setup.rs +3 -2
  55. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +0 -13
  56. package/contracts/message-libs/treasury/src/treasury.rs +18 -21
  57. package/contracts/message-libs/uln-302/Cargo.toml +1 -0
  58. package/contracts/message-libs/uln-302/src/interfaces/mod.rs +4 -4
  59. package/contracts/message-libs/uln-302/src/interfaces/{receive.rs → receive_uln.rs} +3 -3
  60. package/contracts/message-libs/uln-302/src/interfaces/{send.rs → send_uln.rs} +8 -80
  61. package/contracts/message-libs/uln-302/src/lib.rs +5 -4
  62. package/contracts/message-libs/uln-302/src/{receive.rs → receive_uln.rs} +20 -12
  63. package/contracts/message-libs/uln-302/src/{send.rs → send_uln.rs} +19 -13
  64. package/contracts/message-libs/uln-302/src/storage.rs +1 -2
  65. package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +3 -2
  66. package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +30 -30
  67. package/contracts/message-libs/uln-302/src/tests/setup.rs +12 -11
  68. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +1 -1
  69. package/contracts/message-libs/uln-302/src/{config_validation.rs → types.rs} +79 -11
  70. package/contracts/message-libs/uln-302/src/uln302.rs +15 -10
  71. package/contracts/oapp-macros/Cargo.toml +2 -8
  72. package/contracts/oapp-macros/src/lib.rs +57 -311
  73. package/contracts/oapp-macros/src/oapp_core.rs +23 -32
  74. package/contracts/oapp-macros/src/oapp_full.rs +8 -2
  75. package/contracts/oapp-macros/src/oapp_options_type3.rs +21 -36
  76. package/contracts/oapp-macros/src/oapp_receiver.rs +38 -57
  77. package/contracts/oapp-macros/src/oapp_sender.rs +12 -14
  78. package/contracts/oapp-macros/src/util.rs +14 -10
  79. package/contracts/oapps/counter/Cargo.toml +2 -1
  80. package/contracts/oapps/counter/integration_tests/utils.rs +4 -4
  81. package/contracts/oapps/counter/src/codec.rs +8 -9
  82. package/contracts/oapps/counter/src/counter.rs +156 -147
  83. package/contracts/oapps/counter/src/storage.rs +1 -2
  84. package/contracts/oapps/counter/src/tests/test_codec.rs +5 -5
  85. package/contracts/oapps/counter/src/tests/test_counter.rs +11 -13
  86. package/contracts/oapps/oapp/Cargo.toml +1 -0
  87. package/contracts/oapps/oapp/src/errors.rs +1 -1
  88. package/contracts/oapps/oapp/src/lib.rs +3 -0
  89. package/contracts/oapps/oapp/src/macro_tests/mod.rs +1 -0
  90. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +312 -0
  91. package/contracts/oapps/oapp/src/oapp_core.rs +52 -53
  92. package/contracts/oapps/oapp/src/oapp_options_type3.rs +18 -28
  93. package/contracts/oapps/oapp/src/oapp_receiver.rs +82 -31
  94. package/contracts/oapps/oapp/src/oapp_sender.rs +55 -13
  95. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +16 -3
  96. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +33 -8
  97. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +6 -9
  98. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +28 -15
  99. package/contracts/oapps/oft/Cargo.toml +27 -0
  100. package/contracts/oapps/oft/integration-tests/mod.rs +3 -0
  101. package/contracts/oapps/oft/integration-tests/setup.rs +320 -0
  102. package/contracts/oapps/oft/integration-tests/test_with_sml.rs +155 -0
  103. package/contracts/oapps/oft/integration-tests/utils.rs +201 -0
  104. package/contracts/oapps/oft/src/codec/mod.rs +2 -0
  105. package/contracts/oapps/oft/src/codec/oft_compose_msg_codec.rs +55 -0
  106. package/contracts/oapps/oft/src/codec/oft_msg_codec.rs +62 -0
  107. package/contracts/oapps/oft/src/constants.rs +5 -0
  108. package/contracts/oapps/oft/src/errors.rs +8 -0
  109. package/contracts/oapps/oft/src/events.rs +19 -0
  110. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +23 -0
  111. package/contracts/oapps/oft/src/interfaces/mod.rs +3 -0
  112. package/contracts/oapps/oft/src/lib.rs +22 -0
  113. package/contracts/oapps/oft/src/macro_tests/mod.rs +2 -0
  114. package/contracts/oapps/oft/src/macro_tests/test_all_default.rs +41 -0
  115. package/contracts/oapps/oft/src/macro_tests/test_override.rs +83 -0
  116. package/contracts/oapps/oft/src/oft.rs +320 -0
  117. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +50 -0
  118. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +50 -0
  119. package/contracts/oapps/oft/src/oft_types/mod.rs +10 -0
  120. package/contracts/oapps/oft/src/storage.rs +11 -0
  121. package/contracts/oapps/oft/src/tests/mod.rs +13 -0
  122. package/contracts/oapps/oft/src/tests/test_decimals.rs +89 -0
  123. package/contracts/oapps/oft/src/tests/test_lz_receive.rs +282 -0
  124. package/contracts/oapps/oft/src/tests/test_oft_compose_msg_codec.rs +68 -0
  125. package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +136 -0
  126. package/contracts/oapps/oft/src/tests/test_oft_version.rs +13 -0
  127. package/contracts/oapps/oft/src/tests/test_quote_oft.rs +159 -0
  128. package/contracts/oapps/oft/src/tests/test_quote_send.rs +195 -0
  129. package/contracts/oapps/oft/src/tests/test_resolve_address.rs +37 -0
  130. package/contracts/oapps/oft/src/tests/test_send.rs +915 -0
  131. package/contracts/oapps/oft/src/tests/test_token.rs +47 -0
  132. package/contracts/oapps/oft/src/tests/test_utils.rs +789 -0
  133. package/contracts/oapps/oft/src/types.rs +38 -0
  134. package/contracts/oapps/oft/src/utils.rs +67 -0
  135. package/contracts/oapps/oft-mint-burn/Cargo.toml +26 -0
  136. package/contracts/oapps/oft-mint-burn/src/lib.rs +3 -0
  137. package/contracts/oapps/oft-mint-burn/src/oft.rs +28 -0
  138. package/contracts/oapps/oft-mint-burn/src/tests/mod.rs +1 -0
  139. package/contracts/utils/src/buffer_reader.rs +8 -9
  140. package/contracts/utils/src/buffer_writer.rs +11 -5
  141. package/contracts/utils/src/errors.rs +5 -5
  142. package/contracts/utils/src/ownable.rs +14 -6
  143. package/contracts/utils/src/testing_utils.rs +11 -1
  144. package/contracts/utils/src/tests/buffer_reader.rs +491 -730
  145. package/contracts/utils/src/tests/buffer_writer.rs +336 -148
  146. package/contracts/utils/src/tests/bytes_ext.rs +125 -40
  147. package/contracts/utils/src/tests/mod.rs +3 -0
  148. package/contracts/utils/src/tests/ownable.rs +379 -27
  149. package/contracts/utils/src/tests/test_helper.rs +47 -0
  150. package/contracts/utils/src/tests/testing_utils.rs +555 -0
  151. package/contracts/utils/src/tests/ttl.rs +421 -0
  152. package/contracts/utils/src/ttl.rs +29 -89
  153. package/contracts/workers/dvn/Cargo.toml +31 -0
  154. package/contracts/workers/dvn/src/auth.rs +66 -0
  155. package/contracts/workers/dvn/src/dvn.rs +143 -0
  156. package/contracts/workers/dvn/src/errors.rs +21 -0
  157. package/contracts/workers/dvn/src/events.rs +19 -0
  158. package/contracts/workers/dvn/src/interfaces/dvn.rs +12 -0
  159. package/contracts/workers/dvn/src/interfaces/mod.rs +5 -0
  160. package/contracts/workers/dvn/src/interfaces/multisig.rs +15 -0
  161. package/contracts/workers/dvn/src/lib.rs +24 -0
  162. package/contracts/workers/dvn/src/multisig.rs +127 -0
  163. package/contracts/workers/dvn/src/storage.rs +35 -0
  164. package/contracts/workers/dvn/src/tests/auth.rs +237 -0
  165. package/contracts/workers/dvn/src/tests/dvn.rs +349 -0
  166. package/contracts/workers/dvn/src/tests/key_pair.rs +66 -0
  167. package/contracts/workers/dvn/src/tests/mod.rs +5 -0
  168. package/contracts/workers/dvn/src/tests/multisig/mod.rs +3 -0
  169. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +133 -0
  170. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +108 -0
  171. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +109 -0
  172. package/contracts/workers/dvn/src/tests/setup.rs +109 -0
  173. package/contracts/workers/dvn/src/types.rs +26 -0
  174. package/contracts/workers/dvn-fee-lib/Cargo.toml +24 -0
  175. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +113 -0
  176. package/contracts/workers/dvn-fee-lib/src/errors.rs +8 -0
  177. package/contracts/workers/dvn-fee-lib/src/lib.rs +17 -0
  178. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +282 -0
  179. package/contracts/workers/dvn-fee-lib/src/tests/mod.rs +1 -0
  180. package/contracts/workers/executor/Cargo.toml +10 -7
  181. package/contracts/workers/executor/src/errors.rs +8 -0
  182. package/contracts/workers/executor/src/events.rs +4 -7
  183. package/contracts/workers/executor/src/interfaces/executor.rs +72 -22
  184. package/contracts/workers/executor/src/interfaces/mod.rs +0 -2
  185. package/contracts/workers/executor/src/lib.rs +16 -7
  186. package/contracts/workers/executor/src/lz_executor.rs +308 -0
  187. package/contracts/workers/executor/src/storage.rs +24 -16
  188. package/contracts/workers/executor-fee-lib/Cargo.toml +22 -0
  189. package/contracts/workers/executor-fee-lib/src/errors.rs +15 -0
  190. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +215 -0
  191. package/contracts/workers/executor-fee-lib/src/executor_option.rs +203 -0
  192. package/contracts/workers/executor-fee-lib/src/lib.rs +7 -0
  193. package/contracts/workers/executor-helper/Cargo.toml +29 -0
  194. package/contracts/workers/executor-helper/src/executor_helper.rs +161 -0
  195. package/contracts/workers/executor-helper/src/lib.rs +11 -0
  196. package/contracts/workers/{worker-common → worker}/Cargo.toml +1 -4
  197. package/contracts/workers/worker/src/errors.rs +24 -0
  198. package/contracts/workers/worker/src/events.rs +62 -0
  199. package/contracts/workers/worker/src/interfaces/dvn_fee_lib.rs +75 -0
  200. package/contracts/workers/worker/src/interfaces/executor_fee_lib.rs +84 -0
  201. package/contracts/workers/{worker-common → worker}/src/interfaces/mod.rs +2 -2
  202. package/contracts/workers/worker/src/interfaces/price_feed.rs +85 -0
  203. package/contracts/workers/worker/src/lib.rs +14 -0
  204. package/contracts/workers/worker/src/storage.rs +63 -0
  205. package/contracts/workers/worker/src/worker.rs +459 -0
  206. package/package.json +3 -3
  207. package/sdk/dist/generated/bml.d.ts +88 -17
  208. package/sdk/dist/generated/bml.js +62 -16
  209. package/sdk/dist/generated/counter.d.ts +281 -102
  210. package/sdk/dist/generated/counter.js +93 -41
  211. package/sdk/dist/generated/endpoint.d.ts +128 -105
  212. package/sdk/dist/generated/endpoint.js +47 -45
  213. package/sdk/dist/generated/sml.d.ts +212 -69
  214. package/sdk/dist/generated/sml.js +103 -53
  215. package/sdk/dist/generated/uln302.d.ts +270 -173
  216. package/sdk/dist/generated/uln302.js +112 -64
  217. package/sdk/package.json +11 -11
  218. package/sdk/test/index.test.ts +147 -42
  219. package/sdk/test/suites/constants.ts +7 -3
  220. package/sdk/test/suites/deploy.ts +65 -42
  221. package/sdk/test/suites/localnet.ts +2 -2
  222. package/sdk/test/suites/scan.ts +28 -25
  223. package/sdk/test/utils.ts +199 -0
  224. package/sdk/tsconfig.json +93 -95
  225. package/tools/ts-bindings-gen/src/main.rs +2 -0
  226. package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +0 -310
  227. package/contracts/common-macros/src/tests.rs +0 -287
  228. package/contracts/oapp-macros/tests/test_macros.rs +0 -522
  229. package/contracts/workers/executor/src/executor.rs +0 -347
  230. package/contracts/workers/executor/src/interfaces/types.rs +0 -51
  231. package/contracts/workers/worker-common/src/constants.rs +0 -17
  232. package/contracts/workers/worker-common/src/errors.rs +0 -6
  233. package/contracts/workers/worker-common/src/events.rs +0 -34
  234. package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +0 -35
  235. package/contracts/workers/worker-common/src/interfaces/price_feed.rs +0 -40
  236. package/contracts/workers/worker-common/src/interfaces/worker.rs +0 -60
  237. package/contracts/workers/worker-common/src/lib.rs +0 -19
  238. package/contracts/workers/worker-common/src/storage.rs +0 -32
  239. package/contracts/workers/worker-common/src/worker_common.rs +0 -166
@@ -1,310 +0,0 @@
1
- ---
2
- source: contracts/common-macros/src/tests.rs
3
- assertion_line: 285
4
- expression: formatted
5
- ---
6
- use utils::ttl::TtlConfigProvider as _;
7
- #[soroban_sdk::contracttype]
8
- pub enum StorageKeys {
9
- Counter,
10
- Message(Address),
11
- Flag(String),
12
- Data(u64, String),
13
- Owner,
14
- OptionalData(BytesN<32>),
15
- }
16
- impl StorageKeys {
17
- pub fn counter(env: &soroban_sdk::Env) -> u32 {
18
- let key = StorageKeys::Counter;
19
- let value = env.storage().instance().get::<_, u32>(&key);
20
- if value.is_some() {
21
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::instance::<
22
- TtlProvider,
23
- >(env);
24
- env.storage().instance().extend_ttl(threshold, extend_to);
25
- }
26
- value.unwrap_or(0)
27
- }
28
- pub fn set_counter(env: &soroban_sdk::Env, value: &u32) {
29
- let key = StorageKeys::Counter;
30
- env.storage().instance().set(&key, value);
31
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::instance::<
32
- TtlProvider,
33
- >(env);
34
- env.storage().instance().extend_ttl(threshold, extend_to);
35
- }
36
- pub fn remove_counter(env: &soroban_sdk::Env) {
37
- let key = StorageKeys::Counter;
38
- env.storage().instance().remove(&key);
39
- }
40
- pub fn set_or_remove_counter(env: &soroban_sdk::Env, value: &Option<u32>) {
41
- match value.as_ref() {
42
- Some(v) => Self::set_counter(env, v),
43
- None => Self::remove_counter(env),
44
- }
45
- }
46
- pub fn has_counter(env: &soroban_sdk::Env) -> bool {
47
- let key = StorageKeys::Counter;
48
- let exists = env.storage().instance().has(&key);
49
- if exists {
50
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::instance::<
51
- TtlProvider,
52
- >(env);
53
- env.storage().instance().extend_ttl(threshold, extend_to);
54
- }
55
- exists
56
- }
57
- pub fn extend_ttl_counter(env: &soroban_sdk::Env, threshold: u32, extend_to: u32) {
58
- let key = StorageKeys::Counter;
59
- env.storage().instance().extend_ttl(threshold, extend_to);
60
- }
61
- pub fn message(env: &soroban_sdk::Env, sender: &Address) -> String {
62
- let key = StorageKeys::Message(sender.clone());
63
- let value = env.storage().persistent().get::<_, String>(&key);
64
- if value.is_some() {
65
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
66
- TtlProvider,
67
- >(env);
68
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
69
- }
70
- value.unwrap_or("hello".to_string())
71
- }
72
- pub fn set_message(env: &soroban_sdk::Env, sender: &Address, value: &String) {
73
- let key = StorageKeys::Message(sender.clone());
74
- env.storage().persistent().set(&key, value);
75
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
76
- TtlProvider,
77
- >(env);
78
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
79
- }
80
- pub fn remove_message(env: &soroban_sdk::Env, sender: &Address) {
81
- let key = StorageKeys::Message(sender.clone());
82
- env.storage().persistent().remove(&key);
83
- }
84
- pub fn set_or_remove_message(
85
- env: &soroban_sdk::Env,
86
- sender: &Address,
87
- value: &Option<String>,
88
- ) {
89
- match value.as_ref() {
90
- Some(v) => Self::set_message(env, sender, v),
91
- None => Self::remove_message(env, sender),
92
- }
93
- }
94
- pub fn has_message(env: &soroban_sdk::Env, sender: &Address) -> bool {
95
- let key = StorageKeys::Message(sender.clone());
96
- let exists = env.storage().persistent().has(&key);
97
- if exists {
98
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
99
- TtlProvider,
100
- >(env);
101
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
102
- }
103
- exists
104
- }
105
- pub fn extend_ttl_message(
106
- env: &soroban_sdk::Env,
107
- sender: &Address,
108
- threshold: u32,
109
- extend_to: u32,
110
- ) {
111
- let key = StorageKeys::Message(sender.clone());
112
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
113
- }
114
- pub fn flag(env: &soroban_sdk::Env, key: &String) -> Option<bool> {
115
- let key = StorageKeys::Flag(key.clone());
116
- env.storage().temporary().get::<_, bool>(&key)
117
- }
118
- pub fn set_flag(env: &soroban_sdk::Env, key: &String, value: &bool) {
119
- let key = StorageKeys::Flag(key.clone());
120
- env.storage().temporary().set(&key, value);
121
- }
122
- pub fn remove_flag(env: &soroban_sdk::Env, key: &String) {
123
- let key = StorageKeys::Flag(key.clone());
124
- env.storage().temporary().remove(&key);
125
- }
126
- pub fn set_or_remove_flag(
127
- env: &soroban_sdk::Env,
128
- key: &String,
129
- value: &Option<bool>,
130
- ) {
131
- match value.as_ref() {
132
- Some(v) => Self::set_flag(env, key, v),
133
- None => Self::remove_flag(env, key),
134
- }
135
- }
136
- pub fn has_flag(env: &soroban_sdk::Env, key: &String) -> bool {
137
- let key = StorageKeys::Flag(key.clone());
138
- let exists = env.storage().temporary().has(&key);
139
- if exists {}
140
- exists
141
- }
142
- pub fn extend_ttl_flag(
143
- env: &soroban_sdk::Env,
144
- key: &String,
145
- threshold: u32,
146
- extend_to: u32,
147
- ) {
148
- let key = StorageKeys::Flag(key.clone());
149
- env.storage().temporary().extend_ttl(&key, threshold, extend_to);
150
- }
151
- pub fn data(env: &soroban_sdk::Env, id: u64, name: &String) -> Option<Vec<u8>> {
152
- let key = StorageKeys::Data(id, name.clone());
153
- let value = env.storage().persistent().get::<_, Vec<u8>>(&key);
154
- if value.is_some() {
155
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
156
- TtlProvider,
157
- >(env);
158
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
159
- }
160
- value
161
- }
162
- pub fn set_data(env: &soroban_sdk::Env, id: u64, name: &String, value: &Vec<u8>) {
163
- let key = StorageKeys::Data(id, name.clone());
164
- env.storage().persistent().set(&key, value);
165
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
166
- TtlProvider,
167
- >(env);
168
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
169
- }
170
- pub fn remove_data(env: &soroban_sdk::Env, id: u64, name: &String) {
171
- let key = StorageKeys::Data(id, name.clone());
172
- env.storage().persistent().remove(&key);
173
- }
174
- pub fn set_or_remove_data(
175
- env: &soroban_sdk::Env,
176
- id: u64,
177
- name: &String,
178
- value: &Option<Vec<u8>>,
179
- ) {
180
- match value.as_ref() {
181
- Some(v) => Self::set_data(env, id, name, v),
182
- None => Self::remove_data(env, id, name),
183
- }
184
- }
185
- pub fn has_data(env: &soroban_sdk::Env, id: u64, name: &String) -> bool {
186
- let key = StorageKeys::Data(id, name.clone());
187
- let exists = env.storage().persistent().has(&key);
188
- if exists {
189
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
190
- TtlProvider,
191
- >(env);
192
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
193
- }
194
- exists
195
- }
196
- pub fn extend_ttl_data(
197
- env: &soroban_sdk::Env,
198
- id: u64,
199
- name: &String,
200
- threshold: u32,
201
- extend_to: u32,
202
- ) {
203
- let key = StorageKeys::Data(id, name.clone());
204
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
205
- }
206
- pub fn owner(env: &soroban_sdk::Env) -> Option<Address> {
207
- let key = StorageKeys::Owner;
208
- let value = env.storage().persistent().get::<_, Address>(&key);
209
- if value.is_some() {
210
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
211
- TtlProvider,
212
- >(env);
213
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
214
- }
215
- value
216
- }
217
- pub fn set_owner(env: &soroban_sdk::Env, value: &Address) {
218
- let key = StorageKeys::Owner;
219
- env.storage().persistent().set(&key, value);
220
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
221
- TtlProvider,
222
- >(env);
223
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
224
- }
225
- pub fn remove_owner(env: &soroban_sdk::Env) {
226
- let key = StorageKeys::Owner;
227
- env.storage().persistent().remove(&key);
228
- }
229
- pub fn set_or_remove_owner(env: &soroban_sdk::Env, value: &Option<Address>) {
230
- match value.as_ref() {
231
- Some(v) => Self::set_owner(env, v),
232
- None => Self::remove_owner(env),
233
- }
234
- }
235
- pub fn has_owner(env: &soroban_sdk::Env) -> bool {
236
- let key = StorageKeys::Owner;
237
- let exists = env.storage().persistent().has(&key);
238
- if exists {
239
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
240
- TtlProvider,
241
- >(env);
242
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
243
- }
244
- exists
245
- }
246
- pub fn extend_ttl_owner(env: &soroban_sdk::Env, threshold: u32, extend_to: u32) {
247
- let key = StorageKeys::Owner;
248
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
249
- }
250
- pub fn optional_data(
251
- env: &soroban_sdk::Env,
252
- key: &BytesN<32>,
253
- ) -> Option<Option<Address>> {
254
- let key = StorageKeys::OptionalData(key.clone());
255
- let value = env.storage().persistent().get::<_, Option<Address>>(&key);
256
- if value.is_some() {
257
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
258
- TtlProvider,
259
- >(env);
260
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
261
- }
262
- value
263
- }
264
- pub fn set_optional_data(
265
- env: &soroban_sdk::Env,
266
- key: &BytesN<32>,
267
- value: &Option<Address>,
268
- ) {
269
- let key = StorageKeys::OptionalData(key.clone());
270
- env.storage().persistent().set(&key, value);
271
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
272
- TtlProvider,
273
- >(env);
274
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
275
- }
276
- pub fn remove_optional_data(env: &soroban_sdk::Env, key: &BytesN<32>) {
277
- let key = StorageKeys::OptionalData(key.clone());
278
- env.storage().persistent().remove(&key);
279
- }
280
- pub fn set_or_remove_optional_data(
281
- env: &soroban_sdk::Env,
282
- key: &BytesN<32>,
283
- value: &Option<Option<Address>>,
284
- ) {
285
- match value.as_ref() {
286
- Some(v) => Self::set_optional_data(env, key, v),
287
- None => Self::remove_optional_data(env, key),
288
- }
289
- }
290
- pub fn has_optional_data(env: &soroban_sdk::Env, key: &BytesN<32>) -> bool {
291
- let key = StorageKeys::OptionalData(key.clone());
292
- let exists = env.storage().persistent().has(&key);
293
- if exists {
294
- let utils::ttl::TtlConfig { threshold, extend_to } = utils::ttl::ttl_config::persistent::<
295
- TtlProvider,
296
- >(env);
297
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
298
- }
299
- exists
300
- }
301
- pub fn extend_ttl_optional_data(
302
- env: &soroban_sdk::Env,
303
- key: &BytesN<32>,
304
- threshold: u32,
305
- extend_to: u32,
306
- ) {
307
- let key = StorageKeys::OptionalData(key.clone());
308
- env.storage().persistent().extend_ttl(&key, threshold, extend_to);
309
- }
310
- }
@@ -1,287 +0,0 @@
1
- // TODO: split this into multiple tests files
2
- #[cfg(test)]
3
- mod tests {
4
- use quote::{quote, ToTokens};
5
-
6
- // ========================================
7
- // Storage Type Attribute Tests
8
- // ========================================
9
-
10
- #[test]
11
- #[should_panic(expected = "storage type must be specified exactly once")]
12
- fn missing_storage_type_attribute_fails() {
13
- let input: syn::ItemEnum = syn::parse_quote! {
14
- enum InvalidEnum {
15
- Counter,
16
- }
17
- };
18
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
19
- }
20
-
21
- #[test]
22
- #[should_panic(expected = "storage type must be specified exactly once")]
23
- fn multiple_storage_type_attributes_fails() {
24
- let input: syn::DeriveInput = syn::parse_quote! {
25
- enum InvalidEnum {
26
- #[instance(u32)]
27
- #[persistent(u32)]
28
- Counter,
29
- }
30
- };
31
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
32
- }
33
-
34
- #[test]
35
- #[should_panic(expected = "failed to parse storage variant for Counter")]
36
- fn storage_type_without_type_parameter_fails() {
37
- let input: syn::ItemEnum = syn::parse_quote! {
38
- enum InvalidEnum {
39
- #[instance]
40
- Counter,
41
- }
42
- };
43
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
44
- }
45
-
46
- #[test]
47
- #[should_panic(expected = "failed to parse storage variant for")]
48
- fn invalid_storage_type_parameter_fails() {
49
- let input: syn::ItemEnum = syn::parse_quote! {
50
- enum InvalidEnum {
51
- #[persistent(!@#$)]
52
- Counter,
53
- }
54
- };
55
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
56
- }
57
-
58
- // ========================================
59
- // Variant Type Tests
60
- // ========================================
61
-
62
- #[test]
63
- #[should_panic(expected = "failed to parse enum")]
64
- fn non_enum_struct_fails() {
65
- let input: syn::DeriveInput = syn::parse_quote! {
66
- struct NotAnEnum {
67
- field: u32,
68
- }
69
- };
70
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
71
- }
72
-
73
- #[test]
74
- #[should_panic(expected = "only unit variants or named fields are supported in storage enums")]
75
- fn tuple_variant_fails() {
76
- let input: syn::DeriveInput = syn::parse_quote! {
77
- enum InvalidEnum {
78
- #[instance(u32)]
79
- TupleVariant(String, u32),
80
- }
81
- };
82
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
83
- }
84
-
85
- // ========================================
86
- // Default Value Tests
87
- // ========================================
88
-
89
- #[test]
90
- #[should_panic(expected = "multiple default values specified")]
91
- fn multiple_default_attributes_fails() {
92
- let input: syn::DeriveInput = syn::parse_quote! {
93
- enum InvalidEnum {
94
- #[persistent(u32)]
95
- #[default(0)]
96
- #[default(1)]
97
- Counter,
98
- }
99
- };
100
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
101
- }
102
-
103
- #[test]
104
- #[should_panic(expected = "failed to parse default value")]
105
- fn invalid_default_value_fails() {
106
- let input: syn::DeriveInput = syn::parse_quote! {
107
- enum InvalidEnum {
108
- #[persistent(u32)]
109
- #[default(!@#$%)]
110
- Counter,
111
- }
112
- };
113
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
114
- }
115
-
116
- // ========================================
117
- // no_auto_ttl_extension Tests
118
- // ========================================
119
-
120
- #[test]
121
- #[should_panic(expected = "no_auto_ttl_extension does not accept arguments")]
122
- fn no_auto_ttl_with_arguments_fails() {
123
- let input: syn::DeriveInput = syn::parse_quote! {
124
- enum InvalidEnum {
125
- #[persistent(u32)]
126
- #[no_auto_ttl_extension(true)]
127
- Counter,
128
- }
129
- };
130
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
131
- }
132
-
133
- #[test]
134
- #[should_panic(expected = "multiple no_auto_ttl_extension attributes specified")]
135
- fn multiple_no_auto_ttl_attributes_fails() {
136
- let input: syn::DeriveInput = syn::parse_quote! {
137
- enum InvalidEnum {
138
- #[persistent(u32)]
139
- #[no_auto_ttl_extension]
140
- #[no_auto_ttl_extension]
141
- Counter,
142
- }
143
- };
144
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
145
- }
146
-
147
- // ========================================
148
- // Storage Config Tests
149
- // ========================================
150
-
151
- #[test]
152
- #[should_panic(expected = "failed to parse attribute")]
153
- fn invalid_ttl_provider_format_fails() {
154
- let input: syn::DeriveInput = syn::parse_quote! {
155
- enum TestEnum {
156
- #[instance(u32)]
157
- Counter,
158
- }
159
- };
160
- crate::storage::generate_storage(quote! { unknown_option = SomeType }.into(), input.to_token_stream().into());
161
- }
162
-
163
- // ========================================
164
- // Combined Attribute Tests
165
- // ========================================
166
-
167
- #[test]
168
- #[should_panic(expected = "only unit variants or named fields are supported in storage enums")]
169
- fn mixed_valid_and_invalid_variants_fails() {
170
- let input: syn::ItemEnum = syn::parse_quote! {
171
- enum InvalidEnum {
172
- #[instance(u32)]
173
- ValidCounter,
174
- #[persistent(String)]
175
- InvalidTuple(u32),
176
- }
177
- };
178
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
179
- }
180
-
181
- // ========================================
182
- // Unknown Attribute Tests
183
- // ========================================
184
-
185
- #[test]
186
- #[should_panic(expected = "unknown attribute")]
187
- fn unknown_variant_attribute_fails() {
188
- let input: syn::DeriveInput = syn::parse_quote! {
189
- enum InvalidEnum {
190
- #[persistent(u32)]
191
- #[unknown_attr]
192
- Counter,
193
- }
194
- };
195
- crate::storage::generate_storage(quote! {}.into(), input.to_token_stream().into());
196
- }
197
-
198
- // ========================================
199
- // Edge Cases
200
- // ========================================
201
-
202
- #[test]
203
- #[should_panic(expected = "failed to parse storage variant for Counter")]
204
- fn storage_type_with_empty_parens_fails() {
205
- let input: syn::ItemEnum = syn::parse_quote! {
206
- enum InvalidEnum {
207
- #[instance()]
208
- Counter,
209
- }
210
- };
211
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
212
- }
213
-
214
- #[test]
215
- #[should_panic(expected = "failed to parse storage variant for Counter")]
216
- fn storage_type_with_multiple_types_fails() {
217
- let input: syn::ItemEnum = syn::parse_quote! {
218
- enum InvalidEnum {
219
- #[persistent(u32, String)]
220
- Counter,
221
- }
222
- };
223
- crate::storage::generate_storage(quote! {}, input.to_token_stream());
224
- }
225
-
226
- #[test]
227
- fn valid_complex_enum_succeeds() {
228
- let input: syn::DeriveInput = syn::parse_quote! {
229
- enum ValidEnum {
230
- #[instance(u32)]
231
- Counter,
232
- #[persistent(String)]
233
- #[default("hello".to_string())]
234
- Message { sender: Address },
235
- #[temporary(bool)]
236
- #[no_auto_ttl_extension]
237
- Flag { key: String },
238
- }
239
- };
240
-
241
- let result = crate::storage::generate_storage(quote! { TtlProvider }, input.to_token_stream());
242
- // Should not panic - this is a valid configuration
243
- assert!(!result.is_empty());
244
- }
245
-
246
- // ========================================
247
- // Snapshot Tests
248
- // ========================================
249
- #[test]
250
- fn snapshot_generated_storage_code() {
251
- let input: syn::ItemEnum = syn::parse_quote! {
252
- pub enum StorageKeys {
253
- /// Instance storage with default value
254
- #[instance(u32)]
255
- #[default(0)]
256
- Counter,
257
-
258
- /// Persistent storage with named field and default
259
- #[persistent(String)]
260
- #[default("hello".to_string())]
261
- Message { sender: Address },
262
-
263
- /// Temporary storage with no auto TTL extension
264
- #[temporary(bool)]
265
- #[no_auto_ttl_extension]
266
- Flag { key: String },
267
-
268
- /// Persistent storage with multiple fields (no default)
269
- #[persistent(Vec<u8>)]
270
- Data { id: u64, name: String },
271
-
272
- /// Persistent storage without fields or default
273
- #[persistent(Address)]
274
- Owner,
275
-
276
- #[persistent(Option<Address>)]
277
- OptionalData{ key: BytesN<32> }
278
- }
279
- };
280
-
281
- let result = crate::storage::generate_storage(quote! { TtlProvider }, input.to_token_stream());
282
- let formatted =
283
- prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
284
-
285
- insta::assert_snapshot!(formatted);
286
- }
287
- }