@layerzerolabs/protocol-stellar-v2 0.2.8 → 0.2.9

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
@@ -2,20 +2,20 @@ use crate::tests::endpoint_setup::setup;
2
2
  use soroban_sdk::{testutils::Address as _, Address};
3
3
  use utils::{
4
4
  errors::TtlError,
5
- ttl::{TtlConfig, TtlConfigData},
5
+ ttl::{TtlConfig, TtlConfigStorage},
6
6
  };
7
7
 
8
8
  fn ttl_defaults(env: &soroban_sdk::Env, contract: &Address) -> (TtlConfig, TtlConfig) {
9
9
  env.as_contract(contract, || {
10
10
  (
11
- TtlConfigData::instance(env).expect("instance config should exist"),
12
- TtlConfigData::persistent(env).expect("persistent config should exist"),
11
+ TtlConfigStorage::instance(env).expect("instance config should exist"),
12
+ TtlConfigStorage::persistent(env).expect("persistent config should exist"),
13
13
  )
14
14
  })
15
15
  }
16
16
 
17
17
  #[test]
18
- fn test_set_ttl_config_success() {
18
+ fn test_set_ttl_configs_success() {
19
19
  let context = setup();
20
20
  let env = &context.env;
21
21
  let endpoint = &context.endpoint_client;
@@ -30,8 +30,8 @@ fn test_set_ttl_config_success() {
30
30
  let instance_config = Some(TtlConfig::new(instance_threshold, instance_extend_to));
31
31
  let persistent_config = Some(TtlConfig::new(persistent_threshold, persistent_extend_to));
32
32
 
33
- context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
34
- endpoint.set_ttl_config(&instance_config, &persistent_config, &None);
33
+ context.mock_owner_auth("set_ttl_configs", (&instance_config, &persistent_config));
34
+ endpoint.set_ttl_configs(&instance_config, &persistent_config);
35
35
 
36
36
  let (stored_instance, stored_persistent) = ttl_defaults(env, &context.endpoint_client.address);
37
37
 
@@ -41,7 +41,7 @@ fn test_set_ttl_config_success() {
41
41
 
42
42
  #[test]
43
43
  #[should_panic(expected = "Error(Auth, InvalidAction)")]
44
- fn test_set_ttl_config_requires_owner() {
44
+ fn test_set_ttl_configs_requires_owner() {
45
45
  let context = setup();
46
46
  let env = &context.env;
47
47
  let endpoint = &context.endpoint_client;
@@ -50,13 +50,13 @@ fn test_set_ttl_config_requires_owner() {
50
50
  let instance_config = Some(TtlConfig::new(1, 2));
51
51
  let persistent_config = Some(TtlConfig::new(1, 2));
52
52
 
53
- context.mock_auth(&attacker, "set_ttl_config", (&instance_config, &persistent_config));
53
+ context.mock_auth(&attacker, "set_ttl_configs", (&instance_config, &persistent_config));
54
54
 
55
- endpoint.set_ttl_config(&instance_config, &persistent_config, &None);
55
+ endpoint.set_ttl_configs(&instance_config, &persistent_config);
56
56
  }
57
57
 
58
58
  #[test]
59
- fn test_panic_set_ttl_config_invalid_instance_range() {
59
+ fn test_panic_set_ttl_configs_invalid_instance_range() {
60
60
  let context = setup();
61
61
  let env = &context.env;
62
62
  let endpoint = &context.endpoint_client;
@@ -68,16 +68,16 @@ fn test_panic_set_ttl_config_invalid_instance_range() {
68
68
  let instance_config = Some(TtlConfig::new(instance_threshold, instance_extend_to));
69
69
  let persistent_config = Some(TtlConfig::new(1, 2));
70
70
 
71
- context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
71
+ context.mock_owner_auth("set_ttl_configs", (&instance_config, &persistent_config));
72
72
 
73
73
  assert_eq!(
74
- endpoint.try_set_ttl_config(&instance_config, &persistent_config, &None).unwrap_err().unwrap(),
74
+ endpoint.try_set_ttl_configs(&instance_config, &persistent_config).unwrap_err().unwrap(),
75
75
  TtlError::InvalidTtlConfig.into()
76
76
  );
77
77
  }
78
78
 
79
79
  #[test]
80
- fn test_panic_set_ttl_config_exceeds_max_ttl() {
80
+ fn test_panic_set_ttl_configs_exceeds_max_ttl() {
81
81
  let context = setup();
82
82
  let env = &context.env;
83
83
  let endpoint = &context.endpoint_client;
@@ -88,10 +88,10 @@ fn test_panic_set_ttl_config_exceeds_max_ttl() {
88
88
  let instance_config = Some(TtlConfig::new(1, instance_extend_to)); // Invalid: extend_to > max_ttl
89
89
  let persistent_config = Some(TtlConfig::new(1, 2));
90
90
 
91
- context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
91
+ context.mock_owner_auth("set_ttl_configs", (&instance_config, &persistent_config));
92
92
 
93
93
  assert_eq!(
94
- endpoint.try_set_ttl_config(&instance_config, &persistent_config, &None).unwrap_err().unwrap(),
94
+ endpoint.try_set_ttl_configs(&instance_config, &persistent_config).unwrap_err().unwrap(),
95
95
  TtlError::InvalidTtlConfig.into()
96
96
  );
97
97
  }
@@ -101,102 +101,102 @@ fn test_panic_set_ttl_config_exceeds_max_ttl() {
101
101
  // ============================================================================
102
102
 
103
103
  #[test]
104
- fn test_is_ttl_config_frozen_default_false() {
104
+ fn test_is_ttl_configs_frozen_default_false() {
105
105
  let context = setup();
106
106
  let endpoint = &context.endpoint_client;
107
107
 
108
- assert!(!endpoint.is_ttl_config_frozen());
108
+ assert!(!endpoint.is_ttl_configs_frozen());
109
109
  }
110
110
 
111
111
  #[test]
112
- fn test_freeze_ttl_config_success() {
112
+ fn test_freeze_ttl_configs_success() {
113
113
  let context = setup();
114
114
  let endpoint = &context.endpoint_client;
115
115
 
116
- assert!(!endpoint.is_ttl_config_frozen());
116
+ assert!(!endpoint.is_ttl_configs_frozen());
117
117
 
118
- context.mock_owner_auth("freeze_ttl_config", ());
119
- endpoint.freeze_ttl_config();
118
+ context.mock_owner_auth("freeze_ttl_configs", ());
119
+ endpoint.freeze_ttl_configs();
120
120
 
121
- assert!(endpoint.is_ttl_config_frozen());
121
+ assert!(endpoint.is_ttl_configs_frozen());
122
122
  }
123
123
 
124
124
  #[test]
125
125
  #[should_panic(expected = "Error(Auth, InvalidAction)")]
126
- fn test_freeze_ttl_config_requires_owner() {
126
+ fn test_freeze_ttl_configs_requires_owner() {
127
127
  let context = setup();
128
128
  let env = &context.env;
129
129
  let endpoint = &context.endpoint_client;
130
130
  let attacker = Address::generate(env);
131
131
 
132
- context.mock_auth(&attacker, "freeze_ttl_config", ());
133
- endpoint.freeze_ttl_config();
132
+ context.mock_auth(&attacker, "freeze_ttl_configs", ());
133
+ endpoint.freeze_ttl_configs();
134
134
  }
135
135
 
136
136
  #[test]
137
- fn test_freeze_ttl_config_already_frozen() {
137
+ fn test_freeze_ttl_configs_already_frozen() {
138
138
  let context = setup();
139
139
  let endpoint = &context.endpoint_client;
140
140
 
141
141
  // First freeze
142
- context.mock_owner_auth("freeze_ttl_config", ());
143
- endpoint.freeze_ttl_config();
142
+ context.mock_owner_auth("freeze_ttl_configs", ());
143
+ endpoint.freeze_ttl_configs();
144
144
 
145
145
  // Try to freeze again
146
- context.mock_owner_auth("freeze_ttl_config", ());
147
- assert_eq!(endpoint.try_freeze_ttl_config().unwrap_err().unwrap(), TtlError::TtlConfigAlreadyFrozen.into());
146
+ context.mock_owner_auth("freeze_ttl_configs", ());
147
+ assert_eq!(endpoint.try_freeze_ttl_configs().unwrap_err().unwrap(), TtlError::TtlConfigAlreadyFrozen.into());
148
148
  }
149
149
 
150
150
  #[test]
151
- fn test_set_ttl_config_fails_when_frozen() {
151
+ fn test_set_ttl_configs_fails_when_frozen() {
152
152
  let context = setup();
153
153
  let endpoint = &context.endpoint_client;
154
154
 
155
155
  // Freeze first
156
- context.mock_owner_auth("freeze_ttl_config", ());
157
- endpoint.freeze_ttl_config();
156
+ context.mock_owner_auth("freeze_ttl_configs", ());
157
+ endpoint.freeze_ttl_configs();
158
158
 
159
- // Try to set TTL config after freeze
159
+ // Try to set TTL configs after freeze
160
160
  let instance_config = Some(TtlConfig::new(1, 2));
161
161
  let persistent_config = Some(TtlConfig::new(1, 2));
162
162
 
163
- context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
163
+ context.mock_owner_auth("set_ttl_configs", (&instance_config, &persistent_config));
164
164
  assert_eq!(
165
- endpoint.try_set_ttl_config(&instance_config, &persistent_config, &None).unwrap_err().unwrap(),
165
+ endpoint.try_set_ttl_configs(&instance_config, &persistent_config).unwrap_err().unwrap(),
166
166
  TtlError::TtlConfigFrozen.into()
167
167
  );
168
168
  }
169
169
 
170
170
  #[test]
171
- fn test_set_ttl_config_then_freeze() {
171
+ fn test_set_ttl_configs_then_freeze() {
172
172
  let context = setup();
173
173
  let env = &context.env;
174
174
  let endpoint = &context.endpoint_client;
175
175
 
176
- // Set custom TTL config
176
+ // Set custom TTL configs
177
177
  let instance_config = Some(TtlConfig::new(100, 200));
178
178
  let persistent_config = Some(TtlConfig::new(300, 400));
179
179
 
180
- context.mock_owner_auth("set_ttl_config", (&instance_config, &persistent_config, &None::<TtlConfig>));
181
- endpoint.set_ttl_config(&instance_config, &persistent_config, &None);
180
+ context.mock_owner_auth("set_ttl_configs", (&instance_config, &persistent_config));
181
+ endpoint.set_ttl_configs(&instance_config, &persistent_config);
182
182
 
183
183
  // Freeze
184
- context.mock_owner_auth("freeze_ttl_config", ());
185
- endpoint.freeze_ttl_config();
184
+ context.mock_owner_auth("freeze_ttl_configs", ());
185
+ endpoint.freeze_ttl_configs();
186
186
 
187
- // Verify config is preserved after freeze
187
+ // Verify configs are preserved after freeze
188
188
  let (stored_instance, stored_persistent) = ttl_defaults(env, &context.endpoint_client.address);
189
189
  assert_eq!(stored_instance, TtlConfig::new(100, 200));
190
190
  assert_eq!(stored_persistent, TtlConfig::new(300, 400));
191
191
 
192
192
  // Verify frozen
193
- assert!(endpoint.is_ttl_config_frozen());
193
+ assert!(endpoint.is_ttl_configs_frozen());
194
194
 
195
195
  // Verify cannot modify after freeze
196
196
  let new_instance_config = Some(TtlConfig::new(500, 600));
197
- context.mock_owner_auth("set_ttl_config", (&new_instance_config, &persistent_config, &None::<TtlConfig>));
197
+ context.mock_owner_auth("set_ttl_configs", (&new_instance_config, &persistent_config));
198
198
  assert_eq!(
199
- endpoint.try_set_ttl_config(&new_instance_config, &persistent_config, &None).unwrap_err().unwrap(),
199
+ endpoint.try_set_ttl_configs(&new_instance_config, &persistent_config).unwrap_err().unwrap(),
200
200
  TtlError::TtlConfigFrozen.into()
201
201
  );
202
202
  }
@@ -95,12 +95,12 @@ impl MockSendLib {
95
95
 
96
96
  let mut native_fee_recipients = Vec::new(&env);
97
97
  if native_fee > 0 {
98
- native_fee_recipients.push_back(FeeRecipient { amount: native_fee, address: fee_recipient.clone() });
98
+ native_fee_recipients.push_back(FeeRecipient { amount: native_fee, to: fee_recipient.clone() });
99
99
  }
100
100
 
101
101
  let mut zro_fee_recipients = Vec::new(&env);
102
102
  if zro_fee > 0 {
103
- zro_fee_recipients.push_back(FeeRecipient { amount: zro_fee, address: fee_recipient });
103
+ zro_fee_recipients.push_back(FeeRecipient { amount: zro_fee, to: fee_recipient });
104
104
  }
105
105
 
106
106
  // Create a simple encoded payload (just the message for simplicity)
@@ -21,8 +21,14 @@ pub fn compute_guid(
21
21
  receiver: &BytesN<32>,
22
22
  ) -> BytesN<32> {
23
23
  let mut writer = BufferWriter::new(env);
24
- writer.write_u64(nonce).write_u32(src_eid).write_address_payload(sender).write_u32(dst_eid).write_bytes_n(receiver);
25
- keccak256(env, &writer.to_bytes())
24
+ let payload = writer
25
+ .write_u64(nonce)
26
+ .write_u32(src_eid)
27
+ .write_address_payload(sender)
28
+ .write_u32(dst_eid)
29
+ .write_bytes_n(receiver)
30
+ .to_bytes();
31
+ keccak256(env, &payload)
26
32
  }
27
33
 
28
34
  /// Builds a payload from a GUID and message.
@@ -13,6 +13,7 @@ doctest = false
13
13
  soroban-sdk = { workspace = true }
14
14
  # workspace dependencies
15
15
  endpoint-v2 = { workspace = true, features = ["library"] }
16
+ utils = { workspace = true }
16
17
  common-macros = { workspace = true }
17
18
 
18
19
  [dev-dependencies]
@@ -12,12 +12,12 @@
12
12
 
13
13
  #![no_std]
14
14
 
15
- use common_macros::contract_error;
15
+ use common_macros::{contract_error, contract_impl};
16
16
  use endpoint_v2::{
17
17
  FeesAndPacket, IMessageLib, ISendLib, MessageLibType, MessageLibVersion, MessagingFee, OutboundPacket,
18
18
  SetConfigParam,
19
19
  };
20
- use soroban_sdk::{contract, contractimpl, panic_with_error, Address, Bytes, Env, Vec};
20
+ use soroban_sdk::{contract, panic_with_error, Address, Bytes, Env, Vec};
21
21
 
22
22
  #[contract_error]
23
23
  enum BlockMessageLibError {
@@ -26,9 +26,9 @@ enum BlockMessageLibError {
26
26
 
27
27
  /// Block Message Library contract that rejects all messaging operations.
28
28
  #[contract]
29
- pub struct BlockMessageLib;
29
+ pub struct BlockMessageLib; // TODO: rename to BlockedMessageLib
30
30
 
31
- #[contractimpl]
31
+ #[contract_impl]
32
32
  impl IMessageLib for BlockMessageLib {
33
33
  /// Always panics - config retrieval is not supported.
34
34
  fn get_config(env: &Env, _eid: u32, _oapp: &Address, _config_type: u32) -> Bytes {
@@ -56,7 +56,7 @@ impl IMessageLib for BlockMessageLib {
56
56
  }
57
57
  }
58
58
 
59
- #[contractimpl]
59
+ #[contract_impl]
60
60
  impl ISendLib for BlockMessageLib {
61
61
  /// Always panics - quoting is blocked.
62
62
  fn quote(env: &Env, _packet: &OutboundPacket, _options: &Bytes, _pay_in_zro: bool) -> MessagingFee {
@@ -2,19 +2,19 @@ use common_macros::contract_error;
2
2
 
3
3
  #[contract_error]
4
4
  pub enum PacketCodecV1Error {
5
- InvalidPacketVersion = 11001,
6
- InvalidPacketHeader,
5
+ InvalidPacketHeader = 1001,
6
+ InvalidPacketVersion,
7
7
  }
8
8
 
9
9
  #[contract_error]
10
10
  pub enum WorkerOptionsError {
11
- InvalidOptions = 11101,
12
- InvalidWorkerId,
11
+ InvalidBytesLength = 1101,
13
12
  InvalidLegacyOptionsType1,
14
- LegacyOptionsType1GasOverflow,
15
13
  InvalidLegacyOptionsType2,
16
- LegacyOptionsType2GasOverflow,
17
- LegacyOptionsType2AmountOverflow,
18
14
  InvalidOptionType,
19
- InvalidBytesLength,
15
+ InvalidOptions,
16
+ InvalidWorkerId,
17
+ LegacyOptionsType1GasOverflow,
18
+ LegacyOptionsType2AmountOverflow,
19
+ LegacyOptionsType2GasOverflow,
20
20
  }
@@ -2,7 +2,6 @@ use endpoint_v2::FeeRecipient;
2
2
  use soroban_sdk::{contractclient, Address, Bytes, BytesN, Env};
3
3
 
4
4
  /// Interface for Decentralized Verifier Networks (DVNs) that verify cross-chain messages.
5
- #[allow(clippy::upper_case_acronyms)]
6
5
  #[contractclient(name = "LayerZeroDVNClient")]
7
6
  pub trait ILayerZeroDVN {
8
7
  /// Quotes the fee for verifying a message.
@@ -1,6 +1,6 @@
1
- pub mod dvn;
2
- pub mod executor;
3
- pub mod treasury;
1
+ mod dvn;
2
+ mod executor;
3
+ mod treasury;
4
4
 
5
5
  pub use dvn::*;
6
6
  pub use executor::*;
@@ -5,8 +5,6 @@ pub mod interfaces;
5
5
  pub mod packet_codec_v1;
6
6
  pub mod worker_options;
7
7
 
8
- pub use interfaces::*;
9
-
10
8
  #[cfg(test)]
11
9
  mod tests;
12
10
 
@@ -30,10 +30,8 @@ pub struct PacketHeader {
30
30
  /// # Returns
31
31
  /// Encoded packet bytes ready for cross-chain transmission
32
32
  pub fn encode_packet(env: &Env, packet: &OutboundPacket) -> Bytes {
33
- let mut result = encode_packet_header(env, packet);
34
- result.extend_from_array(&packet.guid.to_array());
35
- result.append(&packet.message);
36
- result
33
+ let mut writer = BufferWriter::from_bytes(encode_packet_header(env, packet));
34
+ writer.write_bytes_n(&packet.guid).write_bytes(&packet.message).to_bytes()
37
35
  }
38
36
 
39
37
  /// Encodes only the packet header from an outbound packet.
@@ -59,8 +57,8 @@ pub fn encode_packet_header(env: &Env, packet: &OutboundPacket) -> Bytes {
59
57
  .write_u32(packet.src_eid)
60
58
  .write_address_payload(&packet.sender)
61
59
  .write_u32(packet.dst_eid)
62
- .write_bytes_n(&packet.receiver);
63
- writer.to_bytes()
60
+ .write_bytes_n(&packet.receiver)
61
+ .to_bytes()
64
62
  }
65
63
 
66
64
  /// Decodes a byte vector into a packet header and validates the format.
@@ -61,7 +61,7 @@ fn test_payload_functions() {
61
61
  }
62
62
 
63
63
  #[test]
64
- #[should_panic(expected = "Error(Contract, #11002)")] // PacketCodecV1Error::InvalidPacketHeader
64
+ #[should_panic(expected = "Error(Contract, #1001)")] // PacketCodecV1Error::InvalidPacketHeader
65
65
  fn test_invalid_header_length() {
66
66
  let env = Env::default();
67
67
  // Create a header with wrong length (too short) - only 3 bytes instead of 81
@@ -70,7 +70,7 @@ fn test_invalid_header_length() {
70
70
  }
71
71
 
72
72
  #[test]
73
- #[should_panic(expected = "Error(Contract, #11001)")] // PacketCodecV1Error::InvalidPacketVersion
73
+ #[should_panic(expected = "Error(Contract, #1002)")] // PacketCodecV1Error::InvalidPacketVersion
74
74
  fn test_invalid_packet_version() {
75
75
  let env = Env::default();
76
76
  // Create a header with correct length but wrong version
@@ -91,7 +91,7 @@ fn test_decode_legacy_options_type_1() {
91
91
  assert_eq!(reader.read_u16(), 17);
92
92
  assert_eq!(reader.read_u8(), EXECUTOR_OPTION_TYPE_LZRECEIVE);
93
93
  assert_eq!(reader.read_u128(), 200000);
94
- assert_eq!(reader.remaining(), 0);
94
+ assert_eq!(reader.remaining_len(), 0);
95
95
  }
96
96
 
97
97
  #[test]
@@ -218,7 +218,7 @@ fn test_get_matching_options() {
218
218
  // ============ Error tests ============
219
219
 
220
220
  #[test]
221
- #[should_panic(expected = "Error(Contract, #11101)")] // WorkerOptionsError::InvalidOptions
221
+ #[should_panic(expected = "Error(Contract, #1105)")] // WorkerOptionsError::InvalidOptions
222
222
  fn test_decode_invalid_options_too_short() {
223
223
  let env = Env::default();
224
224
  let mut options = Bytes::new(&env);
@@ -227,7 +227,7 @@ fn test_decode_invalid_options_too_short() {
227
227
  }
228
228
 
229
229
  #[test]
230
- #[should_panic(expected = "Error(Contract, #11102)")] // WorkerOptionsError::InvalidWorkerId
230
+ #[should_panic(expected = "Error(Contract, #1106)")] // WorkerOptionsError::InvalidWorkerId
231
231
  fn test_decode_invalid_worker_id() {
232
232
  let env = Env::default();
233
233
  let mut options = Bytes::new(&env);
@@ -237,7 +237,7 @@ fn test_decode_invalid_worker_id() {
237
237
  }
238
238
 
239
239
  #[test]
240
- #[should_panic(expected = "Error(Contract, #11104)")] // WorkerOptionsError::LegacyOptionsType1GasOverflow
240
+ #[should_panic(expected = "Error(Contract, #1107)")] // WorkerOptionsError::LegacyOptionsType1GasOverflow
241
241
  fn test_legacy_type1_gas_overflow() {
242
242
  let env = Env::default();
243
243
  let mut options = Bytes::new(&env);
@@ -247,7 +247,7 @@ fn test_legacy_type1_gas_overflow() {
247
247
  }
248
248
 
249
249
  #[test]
250
- #[should_panic(expected = "Error(Contract, #11106)")] // WorkerOptionsError::LegacyOptionsType2GasOverflow
250
+ #[should_panic(expected = "Error(Contract, #1109)")] // WorkerOptionsError::LegacyOptionsType2GasOverflow
251
251
  fn test_legacy_type2_gas_overflow() {
252
252
  let env = Env::default();
253
253
  let mut options = Bytes::new(&env);
@@ -257,7 +257,7 @@ fn test_legacy_type2_gas_overflow() {
257
257
  }
258
258
 
259
259
  #[test]
260
- #[should_panic(expected = "Error(Contract, #11107)")] // WorkerOptionsError::LegacyOptionsType2AmountOverflow
260
+ #[should_panic(expected = "Error(Contract, #1108)")] // WorkerOptionsError::LegacyOptionsType2AmountOverflow
261
261
  fn test_legacy_type2_amount_overflow() {
262
262
  let env = Env::default();
263
263
  let mut options = Bytes::new(&env);
@@ -267,7 +267,7 @@ fn test_legacy_type2_amount_overflow() {
267
267
  }
268
268
 
269
269
  #[test]
270
- #[should_panic(expected = "Error(Contract, #11103)")] // WorkerOptionsError::InvalidLegacyOptionsType1
270
+ #[should_panic(expected = "Error(Contract, #1102)")] // WorkerOptionsError::InvalidLegacyOptionsType1
271
271
  fn test_legacy_type1_invalid_size_too_short() {
272
272
  let env = Env::default();
273
273
  let mut options = Bytes::new(&env);
@@ -277,7 +277,7 @@ fn test_legacy_type1_invalid_size_too_short() {
277
277
  }
278
278
 
279
279
  #[test]
280
- #[should_panic(expected = "Error(Contract, #11103)")] // WorkerOptionsError::InvalidLegacyOptionsType1
280
+ #[should_panic(expected = "Error(Contract, #1102)")] // WorkerOptionsError::InvalidLegacyOptionsType1
281
281
  fn test_legacy_type1_invalid_size_too_long() {
282
282
  let env = Env::default();
283
283
  let mut options = Bytes::new(&env);
@@ -289,7 +289,7 @@ fn test_legacy_type1_invalid_size_too_long() {
289
289
  }
290
290
 
291
291
  #[test]
292
- #[should_panic(expected = "Error(Contract, #11105)")] // WorkerOptionsError::InvalidLegacyOptionsType2
292
+ #[should_panic(expected = "Error(Contract, #1103)")] // WorkerOptionsError::InvalidLegacyOptionsType2
293
293
  fn test_legacy_type2_invalid_size_too_short() {
294
294
  let env = Env::default();
295
295
  let mut options = Bytes::new(&env);
@@ -299,7 +299,7 @@ fn test_legacy_type2_invalid_size_too_short() {
299
299
  }
300
300
 
301
301
  #[test]
302
- #[should_panic(expected = "Error(Contract, #11105)")] // WorkerOptionsError::InvalidLegacyOptionsType2
302
+ #[should_panic(expected = "Error(Contract, #1103)")] // WorkerOptionsError::InvalidLegacyOptionsType2
303
303
  fn test_legacy_type2_invalid_size_too_long() {
304
304
  let env = Env::default();
305
305
  let mut options = Bytes::new(&env);
@@ -309,7 +309,7 @@ fn test_legacy_type2_invalid_size_too_long() {
309
309
  }
310
310
 
311
311
  #[test]
312
- #[should_panic(expected = "Error(Contract, #11108)")] // WorkerOptionsError::InvalidOptionType
312
+ #[should_panic(expected = "Error(Contract, #1104)")] // WorkerOptionsError::InvalidOptionType
313
313
  fn test_unsupported_option_type() {
314
314
  let env = Env::default();
315
315
  let mut options = Bytes::new(&env);
@@ -67,8 +67,7 @@ pub fn split_worker_options(env: &Env, options: &Bytes) -> (Bytes, Map<u32, Byte
67
67
  pub fn extract_type_3_options(env: &Env, options_reader: &mut BufferReader) -> (Bytes, Map<u32, Bytes>) {
68
68
  let mut executor_options = bytes!(env);
69
69
  let mut dvn_options = map![env];
70
-
71
- while options_reader.remaining() > 0 {
70
+ while options_reader.remaining_len() > 0 {
72
71
  let worker_id = options_reader.read_u8();
73
72
  let option_size = options_reader.read_u16() as u32;
74
73
 
@@ -78,11 +77,10 @@ pub fn extract_type_3_options(env: &Env, options_reader: &mut BufferReader) -> (
78
77
 
79
78
  match worker_id {
80
79
  EXECUTOR_WORKER_ID => executor_options.append(&current_option),
81
- DVN_WORKER_ID => append_dvn_option(&mut dvn_options, current_option),
80
+ DVN_WORKER_ID => append_dvn_option(env, &mut dvn_options, current_option),
82
81
  _ => panic_with_error!(env, WorkerOptionsError::InvalidWorkerId),
83
82
  }
84
83
  }
85
-
86
84
  (executor_options, dvn_options)
87
85
  }
88
86
 
@@ -105,7 +103,7 @@ pub fn extract_type_3_options(env: &Env, options_reader: &mut BufferReader) -> (
105
103
  /// Executor options in Type 3 format
106
104
  pub fn convert_legacy_options(env: &Env, options: &mut BufferReader, option_type: u16) -> Bytes {
107
105
  let mut executor_options = BufferWriter::new(env);
108
- let options_size = options.remaining();
106
+ let options_size = options.remaining_len();
109
107
 
110
108
  match option_type {
111
109
  LEGACY_OPTIONS_TYPE_1 => {
@@ -113,7 +111,6 @@ pub fn convert_legacy_options(env: &Env, options: &mut BufferReader, option_type
113
111
  // Execution gas (u256 -> u128)
114
112
  let execution_gas =
115
113
  options.read_u256().to_u128().unwrap_or_panic(env, WorkerOptionsError::LegacyOptionsType1GasOverflow);
116
-
117
114
  append_lz_receive_option(&mut executor_options, execution_gas);
118
115
  }
119
116
  LEGACY_OPTIONS_TYPE_2 => {
@@ -129,7 +126,6 @@ pub fn convert_legacy_options(env: &Env, options: &mut BufferReader, option_type
129
126
  .read_u256()
130
127
  .to_u128()
131
128
  .unwrap_or_panic(env, WorkerOptionsError::LegacyOptionsType2AmountOverflow);
132
-
133
129
  let receiver = left_pad_to_bytes32(env, &options.read_bytes_until_end());
134
130
 
135
131
  append_lz_receive_option(&mut executor_options, execution_gas);
@@ -139,7 +135,7 @@ pub fn convert_legacy_options(env: &Env, options: &mut BufferReader, option_type
139
135
  }
140
136
 
141
137
  // Ensure all bytes were consumed
142
- assert_with_error!(env, options.remaining() == 0, WorkerOptionsError::InvalidOptions);
138
+ assert_with_error!(env, options.remaining_len() == 0, WorkerOptionsError::InvalidOptions);
143
139
  executor_options.to_bytes()
144
140
  }
145
141
 
@@ -151,15 +147,11 @@ pub fn convert_legacy_options(env: &Env, options: &mut BufferReader, option_type
151
147
  ///
152
148
  /// Searches for existing DVN options with the same index and concatenates them,
153
149
  /// or creates a new entry if this is the first option for this DVN index.
154
- fn append_dvn_option(dvn_options: &mut Map<u32, Bytes>, option_bytes: Bytes) {
150
+ fn append_dvn_option(env: &Env, dvn_options: &mut Map<u32, Bytes>, option_bytes: Bytes) {
155
151
  let dvn_idx = option_bytes.get(DVN_IDX_OFFSET).unwrap() as u32;
156
- if dvn_options.contains_key(dvn_idx) {
157
- let mut existing = dvn_options.get(dvn_idx).unwrap();
158
- existing.append(&option_bytes);
159
- dvn_options.set(dvn_idx, existing);
160
- } else {
161
- dvn_options.set(dvn_idx, option_bytes);
162
- }
152
+ let mut existing = dvn_options.get(dvn_idx).unwrap_or(bytes!(env));
153
+ existing.append(&option_bytes);
154
+ dvn_options.set(dvn_idx, existing);
163
155
  }
164
156
 
165
157
  /// Appends a LzReceive option to the executor options bytes.
@@ -188,3 +180,5 @@ fn left_pad_to_bytes32(env: &Env, bytes: &Bytes) -> BytesN<32> {
188
180
  bytes.copy_into_slice(&mut buf[32 - bytes.len() as usize..]);
189
181
  BytesN::from_array(env, &buf)
190
182
  }
183
+
184
+ // TODO (ethan): add more negative test cases for worker options
@@ -3,9 +3,5 @@ use common_macros::contract_error;
3
3
  #[contract_error]
4
4
  pub enum SimpleMessageLibError {
5
5
  NotImplemented,
6
- NativeFeeNotSet,
7
- ZROFeeNotSet,
8
- ZROTokenNotSet,
9
6
  OnlyWhitelistedCaller,
10
- UnableToConvertAddress,
11
7
  }