foundry_test_utils/
macros.rs1#[macro_export]
35macro_rules! forgetest {
36 ($(#[$attr:meta])* $test:ident, |$prj:ident, $cmd:ident| $e:expr) => {
37 $crate::forgetest!($(#[$attr])* $test, $crate::foundry_compilers::PathStyle::Dapptools, |$prj, $cmd| $e);
38 };
39 ($(#[$attr:meta])* $test:ident, $style:expr, |$prj:ident, $cmd:ident| $e:expr) => {
40 #[expect(clippy::disallowed_macros)]
41 #[test]
42 $(#[$attr])*
43 fn $test() {
44 let (mut $prj, mut $cmd) = $crate::util::setup_forge(stringify!($test), $style);
45 $e
46 }
47 };
48}
49
50#[macro_export]
51macro_rules! forgetest_serial {
52 ($(#[$attr:meta])* $test:ident, |$prj:ident, $cmd:ident| $e:expr) => {
53 $crate::forgetest_serial!($(#[$attr])* $test, $crate::foundry_compilers::PathStyle::Dapptools, |$prj, $cmd| $e);
54 };
55 ($(#[$attr:meta])* $test:ident, $style:expr, |$prj:ident, $cmd:ident| $e:expr) => {
56 #[expect(clippy::disallowed_macros)]
57 #[serial]
58 #[test]
59 $(#[$attr])*
60 fn $test() {
61 let (mut $prj, mut $cmd) = $crate::util::setup_forge(stringify!($test), $style);
62 $e
63 }
64 };
65}
66
67#[macro_export]
68macro_rules! forgetest_async {
69 ($(#[$attr:meta])* $test:ident, |$prj:ident, $cmd:ident| $e:expr) => {
70 $crate::forgetest_async!($(#[$attr])* $test, $crate::foundry_compilers::PathStyle::Dapptools, |$prj, $cmd| $e);
71 };
72 ($(#[$attr:meta])* $test:ident, $style:expr, |$prj:ident, $cmd:ident| $e:expr) => {
73 #[expect(clippy::disallowed_macros)]
74 #[tokio::test(flavor = "multi_thread")]
75 $(#[$attr])*
76 async fn $test() {
77 let (mut $prj, mut $cmd) = $crate::util::setup_forge(stringify!($test), $style);
78 $e
79 }
80 };
81}
82
83#[macro_export]
84macro_rules! casttest {
85 ($(#[$attr:meta])* $test:ident, $($async:ident)? |$prj:ident, $cmd:ident| $e:expr) => {
86 $crate::casttest!($(#[$attr])* $test, $crate::foundry_compilers::PathStyle::Dapptools, $($async)? |$prj, $cmd| $e);
87 };
88 ($(#[$attr:meta])* $test:ident, $style:expr, |$prj:ident, $cmd:ident| $e:expr) => {
89 #[expect(clippy::disallowed_macros)]
90 #[test]
91 $(#[$attr])*
92 fn $test() {
93 let (mut $prj, mut $cmd) = $crate::util::setup_cast(stringify!($test), $style);
94 $e
95 }
96 };
97 ($(#[$attr:meta])* $test:ident, $style:expr, async |$prj:ident, $cmd:ident| $e:expr) => {
98 #[expect(clippy::disallowed_macros)]
99 #[tokio::test(flavor = "multi_thread")]
100 $(#[$attr])*
101 async fn $test() {
102 let (mut $prj, mut $cmd) = $crate::util::setup_cast(stringify!($test), $style);
103 $e
104 }
105 };
106}
107
108#[macro_export]
110macro_rules! forgetest_init {
111 ($(#[$attr:meta])* $test:ident, |$prj:ident, $cmd:ident| $e:expr) => {
112 $crate::forgetest_init!($(#[$attr])* $test, $crate::foundry_compilers::PathStyle::Dapptools, |$prj, $cmd| $e);
113 };
114 ($(#[$attr:meta])* $test:ident, $style:expr, |$prj:ident, $cmd:ident| $e:expr) => {
115 #[test]
116 $(#[$attr])*
117 fn $test() {
118 let (mut $prj, mut $cmd) = $crate::util::setup_forge(stringify!($test), $style);
119 $crate::util::initialize($prj.root());
120 $e
121 }
122 };
123}
124
125#[macro_export]
127macro_rules! forgesoldeer {
128 ($(#[$attr:meta])* $test:ident, |$prj:ident, $cmd:ident| $e:expr) => {
129 $crate::forgesoldeer!($(#[$attr])* $test, $crate::foundry_compilers::PathStyle::Dapptools, |$prj, $cmd| $e);
130 };
131 ($(#[$attr:meta])* $test:ident, $style:expr, |$prj:ident, $cmd:ident| $e:expr) => {
132 #[expect(clippy::disallowed_macros)]
133 #[test]
134 $(#[$attr])*
135 fn $test() {
136 let (mut $prj, mut $cmd) = $crate::util::setup_forge(stringify!($test), $style);
137 $crate::util::initialize($prj.root());
138 $e
139 }
140 };
141}
142
143#[macro_export]
144macro_rules! casttest_serial{
145 ($test:ident, $($async:ident)? |$prj:ident, $cmd:ident| $e:expr) => {
146 casttest!(#[serial_test::serial] $test, $($async)? |$prj, $cmd| $e);
147 };
148}
149
150#[macro_export]
151macro_rules! deploy_contract {
152 ($cmd:expr) => {{
153 let url = PolkadotNode::http_endpoint();
154 let deployer_pk = PolkadotNode::dev_accounts().next().unwrap().1.to_string();
155
156 let output = $cmd
157 .cast_fuse()
158 .args([
159 "send",
160 "--rpc-url",
161 url,
162 "--private-key",
163 &deployer_pk,
164 "--create",
165 "0x50564d00007d15000000000000010700c13000c0008004808f08000000000e0000001c0000002a0000003500000040000000520000005d00000063616c6c5f646174615f636f707963616c6c5f646174615f6c6f616463616c6c5f646174615f73697a656765745f73746f726167657365616c5f72657475726e7365745f696d6d757461626c655f646174617365745f73746f7261676576616c75655f7472616e736665727265640511028fd80463616c6c8fe0066465706c6f790694be680291b32b00730141029702e802ed021d035903b303be03e703f00303040f0435046b0470047a04ad04b204ba04bf04c104c604dc04ff04c105db0518066206b606bb06c0067407a807f0072b087c08000987099d09e909ee09f009f609130a170a210a2c0a310a3a0a3f0a500a550aa80ab70a2f0b650b8e0b480cc90cd20ce40cea0cf10c0f0d150d200d2c0d320d3b0d410d4e0d6c0d720d740d8f0dab0dad0db30dca0dee0d7e0e840e860e910e970e9d0ea30ea90ebb0ed80e9d0fa30fae0fb40fba0fc00fc60fe00fe90fef0ff90ffe0f39080800025108f503330730000383770a0528e8039511f07b10087b1564896475330820649750100273027c78017c797c7a027c7b03978808d4980897aa1097bb18d4ba0ad4a8087c79057c7a047c7b067c7c07979908d4a90997bb1097cc18d4cb0bd4b909979920d489027c79097c7a087c7b0a7c7c0b979908d4a90997bb1097cc18d4cb0bd4b9097c7a0d7c7b0c7c7c0e7c780f97aa08d4ba0a97cc10978818d4c808d4a808978820d498037c78117c7a107c7b127c7c13978808d4a80897bb1097cc18d4cb0bd4b8087c7a157c7b147c7c167c791797aa08d4ba0a97cc10979918d4c909d4a909979920d4890a7c78197c79187c7b1a7c7c1b978808d4980897bb1097cc18d4cb0bd4b8087c791d7c7b1c7c7c1e7c771f979908d4b90997cc10977718d4c707d49707977720d487076f776fa86f396f2a7b5a187b59107b58087b57821008821595111032009511d87b10207b15187b161082897b19088289087b198285108286183308205010042b016f686f59821a6faa821b086fbb787b18787a10787908787898bc38787c1f98bc30787c1e98bc28787c1d98bc20787c1c98bc18787c1b98bc10787c1a98bb08787b1998ab38787b1798ab30787b1698ab28787b1598ab20787b1498ab18787b1398ab10787b1298aa08787a11989a38787a0f989a30787a0e989a28787a0d989a20787a0c989a18787a0b989a10787a0a98990878790998893878790798893078790698892878790598892078790498891878790398891078790298880878780182102082151882161095112832006f776f996faa6f887b18187b1a107b19087b17491138491130491128491120481140208318831a20831b403309ff33070a03821738821830821928821a206f776f886f996faa7b6a187b69107b68087b675012089d0e32008b7910520931c8780883881f8488e05638000001253309040002390a040002ae8a093d080400020133081000028377c887073200009511f07b10087b158475010a02013d0700000251050750100a0950100c2701951140ff7b10b8007b15b0007b16a8009515c0008411e0491178491170491160800033074095186049116850100e37fe49219800492190004921880049218000831780000a0701821790008218980082198800821a8000d49808d4a707d48707520795009517405010105404821840821748821950821a587b1a387b19307b17289517207b18203300129511b07b10487b15409515508411f08279827808827a108277184911384911304911284911207b17187b1a107b180895172064187b1933005228ff04641733001433022828080d8217188218108219088216d49707d48609d47909989920d48707977720d49707510709005010166c0964673308501018aefe8377330833090a2809fc6467330850101a9bfe83783307330933001c0a04019511a07b10587b15509515608411e049111849111049018000330740641849110850101e1ffd39070000025317043183172033080a010181173c51472c947da831330883adc5f5aa871a330866b9345bab870c33002033025828270d501022e3083300243302800028180d3300269511a0fe7b1058017b1550017b164801951560018411e049213801492130014921280149212001831720010a07283506501228160c33084050102a60fb50122c5e0b32005010308efc491118491110490141330704641849110850103278fc390804000256183f0b20030400024001330810000283883307013309243300340a04019511b07b10487b15407b16389515508411f064728289827408828c088273959a1fd89a00c80c0984aae07b1308c8a303d8a30bc8490ac8ba0ad39a06d89a07da6b07822b18d8c90c828610822210828818da000cc86c0cd86c06c82c09c89707d8c90cd89709c8b808c86808c8c808c8980c8ec88e79dbc809d4c7088ea6db8906520652821808d88308d34a09d84a06da9806d82708d3bc09d8bc0bda980bd32708d49808da860b520b2b7b13107b1a187b17203307409518107b1c2850103693fb9551b0821048821540821638951150320033003833022e28880a951140ff7b10b8007b15b0007b16a8009515c0008411f082897b19388289087b19308289107b19288288187b182064769517800033003a33022828ae0a821980007b19821788007b1718821a90007b1a10821b98007b1b088218207b18588218287b18508218307b18488218387b18407b1b787b1a707b17689517609518407b196050103ca2fe8217087b67188217107b67108217187b670882177b67955140ff8210b8008215b0008216a8009511c0003200828910828a18828b088288d4ba0ad4980bd4ab0b98bb20d4a909979920d4b90952091450123e120a5010405ff95012425d09320000951150ff7b10a8007b15a0007b1698009515b0008411f0828410828308829608828c7b1c10829b829210d3360a7b1a28d8360ad8cb0c821028da0c0a64308288187b18208298187b1818c94209c9a9087b1828d8a9087b1408d8420a821420821310821918c94909c9a909c98909c90606c9c608c93b0a8e8c88aa2085aa01db8c0a8f968218288e8cdb960cd49808db8c0a510a4e64767b13507b10588217087b17609517709518507b14685010441fff8217800082188800821970821a787b67107b68187b697b6a08955150ff8210a8008215a000821698009511b0003200501046ab05951110ff7b10e8007b15e0007b16d8009515f0008411f039080000027b17207b18289787209879204921a8004921a000492198009517b000951890007b19187b199000501048f0fd8218c8008219c0008217b8008216b0007b17107b18d48707d49608d478089888207b1908d49707977720d4870752079100646782182850104a73fa837782182833090a821718c86707d86708821c10c88c03d8c30ada880a821b08c8ba0ad8ba088219c889027b17307b19687b1b607b1c587b16507b13387b1a409517709518509519307b124850104c4cfe8217800082188800821970821a78821b207bb7107bb8187bb97bba08955110ff8210e8008215e0008216d8009511f000320000951160ff7b1098007b1590007b1688009515a0008411e082897b19188289087b19108289107b1908828618827818827910827a0882777b18587b19507b1a487b174095172095184033004e3302062842077b16788217087b17708217107b17688217187b17609517409518603300509511a07b10587b15509515608411e08272827a08827b108277188283828908828c108288186f746fbb6faa6f276f826fcc6f996f387b17187b1a107b1b087b147b18387b19307b1c287b12208318831a203309ff330b2033070a069551a08210588215509511603200955160ff8210980082159000821688009511a00032009551b08210488215409511503200827218828318827b10827c088289088274828a828810d3c907d8c909d84a0adb790ac9b807d8a707d8b808c92309c98909c9790957090532005010546a035012561706320033005a0a0701821770821878821968821a60d49808d4a707d4870752072a50125cfb0650105e983300603302aa002844076417330062330228289a0650126414075108090050106619035010685ff883783307330933006a0a0433026c28b30550126cb0053200828a10828b18828c088289d4cb0bd4a908d4b808988820d4ba0a97aa20d4a80852083f9511d07b10287b15209515308411f0827a18827810827b0882777b177b1b087b181064187b1a18649750106eacf69551d08210288215209511303200008218108217087b87088217187b877b861082177b8718955180821078821570821668951180003200821730018218380182192801821a2001d49808d4a707d487075207cc0138070000024921f8004921f0004921e8007b17e00049211801492110014921000104951700019518e0004921080150107281fe9517c0003300749511a07b10587b15507b16489515608411f06476491118491110491108951720641849013300b6003302980028dd048217c0007b17388217c8007b17308217d0007b17288217d8007b17209517a0003300763302282838058217b8007b17188216b0008218a8007b1810821aa0007b1a088219207b19588219287b19508219307b19488219387b19407b17787b16707b1868951780009518609519407b1a603300789511807b10787b15707b1668951580008411f07b171082878292828b08829308957a207b1a18d87a06c86b0a7b1a08d8ba0cda660c828a10828818829410829918c8ca06d8a60cc88c0c7b1c7b18387b1a307b1b287b17207b19587b14507b13489517409518207b12403300702812fe821918821b10821008d49b07d46008d47808988820d46707977720d4870752075d646482178800821898007b183882138000821a9000d3b706d8b70cd80308da680cc94a06c9c602d8c606d84a0a821c38c99c0cc9ac0cc96c0cc9b707c98707c90306d4c707d42608d47808d42707988820977720d487075107090050107a8a006407646850107cccf583788369330733007e0a043302800028ae0450228000ab04330082000a0701821770821878821968821a60d49808d4a707d48707520730502284000004502086009cfc330088003302bc00284504641733008a00330228289a0350228c0014045108090050208e0018502090005ef5837833073309330092000a04019511f87b10330810000283883307013309330094000a043302960028970250229600940232007b17387b19307b1a287b1820641795182033009a0033020628b3028217108218188219821a087b67107b68187b697b6a0850229c008a0332005020a000a2f349111849111049011133070464184911085020a2008bf3390804000256183f0b20030400024001330810000283883307013309243300a4000a04019511f07b15087b16828318829c188282828408829a08829b828810829510c84a09c8b202d8b20bc8b904d3a409d8a40ada9b0ac85808c8a80bd88b09c83c06d85808c86808c89808d85b09d3c806d9c80cda690cd3b505d46505da5a0c98393f94c9893a85aa01d2ca0ad4a9095209187b727b74087b7b107b7818821508821695111032003300a60033029e0028e5015022a800820132003300ac003302980028b1015022ae00fb015020b00057ff5022b2003e025020b4000cfa955110ff8210e8008215e0009511f0003200821730821838821920821a287b67107b68187b697b6a085022b8005d0232009511d87b10207b15187b16108294187b14828a187b1a08829010829608828b0882938285828a10d36b08d86b09d83502da8209d80a08821c08c94c0cc98c04c90a08d8980cc9c400c99804c96b09c92902c93503d3b209d8b208d85306db9806d82b08d8350bdb980bd8a408821c08d3c009d9c005da9805d90c08d84a0cda9c08d3a40ad4a909db9506db980b821998983f93688999e09b09d4980852081c7b737b72087b74107b701882102082151882161095112832003300ba0033029e0028c6005022bc00c5013300be00330298002894005022c000de005020c20026ff5022c40021015020c600eff8955110ff8210e8008215e0009511f000320033075020c800f4f23307015020ca00ebf25022cc00da003300ce0033022828cd005022d0001f3200828918828a10828b0882887b79187b7a107b7b087b7832028217108218188219821a087b67107b68187b697b6a089551c082103882153082162895114032029511a07b10587b15507b16489515608411e06476828718828910828a08828832029511b07b10487b15409515508411f0491130491128491120140700000000717b484e9518207b173833073202821ac0008217c8008218d0008219d800491158491150491148330b017b1b407b19787b18707b1768951780009518609519407b1a6032029511c07b10387b15307b16289515408411f0647664173202821780008218880082199000821a98007b1a187b19107b18087b174911384911304911289517206418491120320238070000024911384911304911287b17204911584911504911400495174095182049114832029551a08210588215508216489511603202821818821910821a088217d4a808d4970ad48a0a98aa20d49808978820d4a8083202951110ff7b10e8007b15e0009515f0008411f04921b8004921b0004921a8009517c0009518a0004921a0003202951160ff7b1098007b1590009515a0008411e04911784911704911684911608317603202214225a952484992244992244992244992244992244992244992244992244992244992244992542529a524292949a84a494a92244992244992244992244992244992244992244992aa92942451924a92aa248592244108094369521a122122229284242122221a11912412922449922449499224492a294992922449860ad554a8d22449122921446a0241822409892422221211112524844292941022184ad224492a29499224499224499224492a2949922449922449129224258988889424498a245124124992244992242449521111519292244942088d888824292549929224499224499294a494242549921091242522220a1111919024111191081111294992244a284d9224494a92244992109124291111d1888848499224294992244992244992a42425a9aa4a529294a492a4888828494a92549224499214426992244988444a1232842a25a12425499224499254520a49d224292549a2888824112222224244844892242549452412894422492422912449922491244912492549922449929424499224499224498a48449224499224499224192a5429124493244982202245126408aa680aa5281294242592a42425284892128408869268525252922449922449922449254949528a48504482200822224a92a40425494a92549224499224499224499224499252494a92244524884810044144440509824842494a5249494a92a424494a524992240124151191244912494a92a48a884852929442922491a42449494a92244544242222a2888824490200000000000000000000000000000000000000000000000000000000000000002a",
166 "--json"
167 ])
168 .assert_success()
169 .get_output()
170 .stdout_lossy();
171
172 let receipt: alloy_rpc_types::TransactionReceipt = serde_json::from_str(&output)
173 .expect("Failed to parse transaction receipt");
174
175 let contract_address = receipt.contract_address
176 .expect("Contract address should be present for contract deployment")
177 .to_string();
178
179 let tx_hash = receipt.transaction_hash.to_string();
180
181 (url, deployer_pk, contract_address, tx_hash)
182 }};
183}