Skip to content

Commit 3579738

Browse files
authored
feat: generate full predicate abigen code in wasm (#1182)
1 parent a4d656f commit 3579738

File tree

2 files changed

+79
-18
lines changed
  • packages

2 files changed

+79
-18
lines changed

packages/fuels-code-gen/src/program_bindings/abigen/bindings/predicate.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ pub(crate) fn predicate_bindings(
1919
abi: FullProgramABI,
2020
no_std: bool,
2121
) -> Result<GeneratedCode> {
22-
if no_std {
23-
return Ok(GeneratedCode::default());
24-
}
25-
2622
let encode_function = expand_fn(&abi)?;
2723
let encoder_struct_name = ident(&format!("{name}Encoder"));
2824

packages/wasm-tests/src/lib.rs

Lines changed: 79 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@ mod tests {
66

77
use fuels::{
88
accounts::predicate::Predicate,
9-
core::{codec::ABIEncoder, traits::Tokenizable, Configurables},
9+
core::{codec::ABIEncoder, traits::Tokenizable},
1010
macros::wasm_abigen,
1111
types::{bech32::Bech32Address, errors::Result},
1212
};
1313
use wasm_bindgen_test::wasm_bindgen_test;
1414

15-
wasm_abigen!(Contract(
16-
name = "no_name",
17-
abi = r#"
15+
#[wasm_bindgen_test]
16+
fn decoding_and_encoding() -> Result<()> {
17+
wasm_abigen!(Contract(
18+
name = "no_name",
19+
abi = r#"
1820
{
1921
"types": [
2022
{
@@ -106,10 +108,8 @@ mod tests {
106108
"messagesTypes": [],
107109
"configurables": []
108110
}"#
109-
));
111+
));
110112

111-
#[wasm_bindgen_test]
112-
fn decoding_and_encoding() -> Result<()> {
113113
let original = SomeEnum::V2(SomeStruct { a: 123, b: false });
114114

115115
let bytes = ABIEncoder::encode(&[original.clone().into_token()])?.resolve(0);
@@ -122,19 +122,84 @@ mod tests {
122122
}
123123

124124
#[wasm_bindgen_test]
125-
fn predicate_from_code_with_configurables() -> Result<()> {
126-
let code = vec![0, 1, 2, 3];
127-
let chain_id = 0;
128-
let configurables = Configurables::new(vec![(1, vec![5, 6])]);
125+
fn predicate_abigen() -> Result<()> {
126+
wasm_abigen!(Predicate(
127+
name = "MyPredicate",
128+
abi = r#"
129+
{
130+
"types": [
131+
{
132+
"typeId": 0,
133+
"type": "bool",
134+
"components": null,
135+
"typeParameters": null
136+
},
137+
{
138+
"typeId": 1,
139+
"type": "u64",
140+
"components": null,
141+
"typeParameters": null
142+
}
143+
],
144+
"functions": [
145+
{
146+
"inputs": [
147+
{
148+
"name": "arg",
149+
"type": 1,
150+
"typeArguments": null
151+
}
152+
],
153+
"name": "main",
154+
"output": {
155+
"name": "",
156+
"type": 0,
157+
"typeArguments": null
158+
},
159+
"attributes": null
160+
}
161+
],
162+
"loggedTypes": [],
163+
"messagesTypes": [],
164+
"configurables": [
165+
{
166+
"name": "U64",
167+
"configurableType": {
168+
"name": "",
169+
"type": 1,
170+
"typeArguments": null
171+
},
172+
"offset": 100
173+
}
174+
]
175+
}"#
176+
));
177+
178+
let code = vec![
179+
116, 0, 0, 3, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 93, 252, 192, 1, 16, 255, 243, 0,
180+
26, 236, 80, 0, 145, 0, 0, 0, 113, 68, 0, 3, 97, 73, 17, 1, 118, 72, 0, 2, 97, 65, 17,
181+
13, 116, 0, 0, 7, 114, 76, 0, 2, 19, 73, 36, 192, 90, 73, 32, 1, 118, 72, 0, 2, 97, 65,
182+
17, 31, 116, 0, 0, 1, 36, 0, 0, 0, 93, 65, 0, 0, 93, 71, 240, 0, 19, 65, 4, 64, 36, 64,
183+
0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,
184+
];
185+
let value = 128;
186+
187+
let predicate_data = MyPredicateEncoder::encode_data(value);
188+
let configurables = MyPredicateConfigurables::new().with_U64(value);
129189

130-
let predicate = Predicate::from_code(code, chain_id).with_configurables(configurables);
190+
let predicate: Predicate = Predicate::from_code(code.clone(), 0)
191+
.with_data(predicate_data)
192+
.with_configurables(configurables);
193+
194+
let mut expected_code = code.clone();
195+
*expected_code.last_mut().unwrap() = value as u8;
131196

132-
let expected_code = vec![0u8, 5, 6, 3];
133197
assert_eq!(*predicate.code(), expected_code);
134198

135199
let expected_address = Bech32Address::from_str(
136-
"fuel1cc9jrur8n535cnh205qdjd8jpxzhy8efpxr9zfjm8lyzjspa262scpm0ww",
200+
"fuel1z62vtmg8a3p5nlpmfkjundcd9aus2kpwaapuez0tf9yyq0a8kvsqtdesqq",
137201
)?;
202+
138203
assert_eq!(*predicate.address(), expected_address);
139204

140205
Ok(())

0 commit comments

Comments
 (0)