Skip to content
This repository was archived by the owner on Nov 17, 2025. It is now read-only.

Commit ba8a74e

Browse files
committed
rust: use type aliases
1 parent 6057374 commit ba8a74e

File tree

1 file changed

+55
-69
lines changed
  • bindings/rust/evmc-vm/src

1 file changed

+55
-69
lines changed

bindings/rust/evmc-vm/src/lib.rs

Lines changed: 55 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub struct ExecutionResult {
2525
status_code: ffi::evmc_status_code,
2626
gas_left: i64,
2727
output: Option<Vec<u8>>,
28-
create_address: Option<ffi::evmc_address>,
28+
create_address: Option<Address>,
2929
}
3030

3131
/// EVMC execution message structure.
@@ -34,11 +34,11 @@ pub struct ExecutionMessage {
3434
flags: u32,
3535
depth: i32,
3636
gas: i64,
37-
destination: ffi::evmc_address,
38-
sender: ffi::evmc_address,
37+
destination: Address,
38+
sender: Address,
3939
input: Option<Vec<u8>>,
40-
value: ffi::evmc_uint256be,
41-
create2_salt: ffi::evmc_bytes32,
40+
value: Uint256be,
41+
create2_salt: Bytes32,
4242
}
4343

4444
/// EVMC context structure. Exposes the EVMC host functions, message data, and transaction context
@@ -87,7 +87,7 @@ impl ExecutionResult {
8787
self.output.as_ref()
8888
}
8989

90-
pub fn get_create_address(&self) -> Option<&ffi::evmc_address> {
90+
pub fn get_create_address(&self) -> Option<&Address> {
9191
self.create_address.as_ref()
9292
}
9393
}
@@ -109,23 +109,23 @@ impl ExecutionMessage {
109109
self.gas
110110
}
111111

112-
pub fn destination(&self) -> &ffi::evmc_address {
112+
pub fn destination(&self) -> &Address {
113113
&self.destination
114114
}
115115

116-
pub fn sender(&self) -> &ffi::evmc_address {
116+
pub fn sender(&self) -> &Address {
117117
&self.sender
118118
}
119119

120120
pub fn input(&self) -> Option<&Vec<u8>> {
121121
self.input.as_ref()
122122
}
123123

124-
pub fn value(&self) -> &ffi::evmc_uint256be {
124+
pub fn value(&self) -> &Uint256be {
125125
&self.value
126126
}
127127

128-
pub fn create2_salt(&self) -> &ffi::evmc_bytes32 {
128+
pub fn create2_salt(&self) -> &Bytes32 {
129129
&self.create2_salt
130130
}
131131
}
@@ -152,89 +152,80 @@ impl<'a> ExecutionContext<'a> {
152152
&self.tx_context
153153
}
154154

155-
pub fn account_exists(&mut self, address: &ffi::evmc_address) -> bool {
155+
pub fn account_exists(&mut self, address: &Address) -> bool {
156156
unsafe {
157157
assert!((*self.context.host).account_exists.is_some());
158158
(*self.context.host).account_exists.unwrap()(
159159
self.context as *mut ffi::evmc_context,
160-
address as *const ffi::evmc_address,
160+
address as *const Address,
161161
)
162162
}
163163
}
164164

165-
pub fn get_storage(
166-
&mut self,
167-
address: &ffi::evmc_address,
168-
key: &ffi::evmc_bytes32,
169-
) -> ffi::evmc_bytes32 {
165+
pub fn get_storage(&mut self, address: &Address, key: &Bytes32) -> Bytes32 {
170166
unsafe {
171167
assert!((*self.context.host).get_storage.is_some());
172168
(*self.context.host).get_storage.unwrap()(
173169
self.context as *mut ffi::evmc_context,
174-
address as *const ffi::evmc_address,
175-
key as *const ffi::evmc_bytes32,
170+
address as *const Address,
171+
key as *const Bytes32,
176172
)
177173
}
178174
}
179175

180176
pub fn set_storage(
181177
&mut self,
182-
address: &ffi::evmc_address,
183-
key: &ffi::evmc_bytes32,
184-
value: &ffi::evmc_bytes32,
178+
address: &Address,
179+
key: &Bytes32,
180+
value: &Bytes32,
185181
) -> ffi::evmc_storage_status {
186182
unsafe {
187183
assert!((*self.context.host).set_storage.is_some());
188184
(*self.context.host).set_storage.unwrap()(
189185
self.context as *mut ffi::evmc_context,
190-
address as *const ffi::evmc_address,
191-
key as *const ffi::evmc_bytes32,
192-
value as *const ffi::evmc_bytes32,
186+
address as *const Address,
187+
key as *const Bytes32,
188+
value as *const Bytes32,
193189
)
194190
}
195191
}
196192

197-
pub fn get_balance(&mut self, address: &ffi::evmc_address) -> ffi::evmc_bytes32 {
193+
pub fn get_balance(&mut self, address: &Address) -> Bytes32 {
198194
unsafe {
199195
assert!((*self.context.host).get_balance.is_some());
200196
(*self.context.host).get_balance.unwrap()(
201197
self.context as *mut ffi::evmc_context,
202-
address as *const ffi::evmc_address,
198+
address as *const Address,
203199
)
204200
}
205201
}
206202

207-
pub fn get_code_size(&mut self, address: &ffi::evmc_address) -> usize {
203+
pub fn get_code_size(&mut self, address: &Address) -> usize {
208204
unsafe {
209205
assert!((*self.context.host).get_code_size.is_some());
210206
(*self.context.host).get_code_size.unwrap()(
211207
self.context as *mut ffi::evmc_context,
212-
address as *const ffi::evmc_address,
208+
address as *const Address,
213209
)
214210
}
215211
}
216212

217-
pub fn get_code_hash(&mut self, address: &ffi::evmc_address) -> ffi::evmc_bytes32 {
213+
pub fn get_code_hash(&mut self, address: &Address) -> Bytes32 {
218214
unsafe {
219215
assert!((*self.context.host).get_code_size.is_some());
220216
(*self.context.host).get_code_hash.unwrap()(
221217
self.context as *mut ffi::evmc_context,
222-
address as *const ffi::evmc_address,
218+
address as *const Address,
223219
)
224220
}
225221
}
226222

227-
pub fn copy_code(
228-
&mut self,
229-
address: &ffi::evmc_address,
230-
code_offset: usize,
231-
buffer: &mut [u8],
232-
) -> usize {
223+
pub fn copy_code(&mut self, address: &Address, code_offset: usize, buffer: &mut [u8]) -> usize {
233224
unsafe {
234225
assert!((*self.context.host).copy_code.is_some());
235226
(*self.context.host).copy_code.unwrap()(
236227
self.context as *mut ffi::evmc_context,
237-
address as *const ffi::evmc_address,
228+
address as *const Address,
238229
code_offset,
239230
// FIXME: ensure that alignment of the array elements is OK
240231
buffer.as_mut_ptr(),
@@ -243,13 +234,13 @@ impl<'a> ExecutionContext<'a> {
243234
}
244235
}
245236

246-
pub fn selfdestruct(&mut self, address: &ffi::evmc_address, beneficiary: &ffi::evmc_address) {
237+
pub fn selfdestruct(&mut self, address: &Address, beneficiary: &Address) {
247238
unsafe {
248239
assert!((*self.context.host).selfdestruct.is_some());
249240
(*self.context.host).selfdestruct.unwrap()(
250241
self.context as *mut ffi::evmc_context,
251-
address as *const ffi::evmc_address,
252-
beneficiary as *const ffi::evmc_address,
242+
address as *const Address,
243+
beneficiary as *const Address,
253244
)
254245
}
255246
}
@@ -265,7 +256,7 @@ impl<'a> ExecutionContext<'a> {
265256
}
266257
}
267258

268-
pub fn get_block_hash(&mut self, num: i64) -> ffi::evmc_bytes32 {
259+
pub fn get_block_hash(&mut self, num: i64) -> Bytes32 {
269260
unsafe {
270261
assert!((*self.context.host).get_block_hash.is_some());
271262
(*self.context.host).get_block_hash.unwrap()(
@@ -275,17 +266,12 @@ impl<'a> ExecutionContext<'a> {
275266
}
276267
}
277268

278-
pub fn emit_log(
279-
&mut self,
280-
address: &ffi::evmc_address,
281-
data: &[u8],
282-
topics: &[ffi::evmc_bytes32],
283-
) {
269+
pub fn emit_log(&mut self, address: &Address, data: &[u8], topics: &[Bytes32]) {
284270
unsafe {
285271
assert!((*self.context.host).emit_log.is_some());
286272
(*self.context.host).emit_log.unwrap()(
287273
self.context as *mut ffi::evmc_context,
288-
address as *const ffi::evmc_address,
274+
address as *const Address,
289275
// FIXME: ensure that alignment of the array elements is OK
290276
data.as_ptr(),
291277
data.len(),
@@ -386,7 +372,7 @@ impl Into<ffi::evmc_result> for ExecutionResult {
386372
create_address: if self.create_address.is_some() {
387373
self.create_address.unwrap()
388374
} else {
389-
ffi::evmc_address { bytes: [0u8; 20] }
375+
Address { bytes: [0u8; 20] }
390376
},
391377
padding: [0u8; 4],
392378
}
@@ -470,7 +456,7 @@ mod tests {
470456
output_data: Box::into_raw(Box::new([0xde, 0xad, 0xbe, 0xef])) as *const u8,
471457
output_size: 4,
472458
release: Some(test_result_dispose),
473-
create_address: ffi::evmc_address { bytes: [0u8; 20] },
459+
create_address: Address { bytes: [0u8; 20] },
474460
padding: [0u8; 4],
475461
};
476462

@@ -571,10 +557,10 @@ mod tests {
571557

572558
#[test]
573559
fn message_from_ffi() {
574-
let destination = ffi::evmc_address { bytes: [32u8; 20] };
575-
let sender = ffi::evmc_address { bytes: [128u8; 20] };
576-
let value = ffi::evmc_uint256be { bytes: [0u8; 32] };
577-
let create2_salt = ffi::evmc_bytes32 { bytes: [255u8; 32] };
560+
let destination = Address { bytes: [32u8; 20] };
561+
let sender = Address { bytes: [128u8; 20] };
562+
let value = Uint256be { bytes: [0u8; 32] };
563+
let create2_salt = Bytes32 { bytes: [255u8; 32] };
578564

579565
let msg = ffi::evmc_message {
580566
kind: ffi::evmc_call_kind::EVMC_CALL,
@@ -605,10 +591,10 @@ mod tests {
605591
#[test]
606592
fn message_from_ffi_with_input() {
607593
let input = vec![0xc0, 0xff, 0xee];
608-
let destination = ffi::evmc_address { bytes: [32u8; 20] };
609-
let sender = ffi::evmc_address { bytes: [128u8; 20] };
610-
let value = ffi::evmc_uint256be { bytes: [0u8; 32] };
611-
let create2_salt = ffi::evmc_bytes32 { bytes: [255u8; 32] };
594+
let destination = Address { bytes: [32u8; 20] };
595+
let sender = Address { bytes: [128u8; 20] };
596+
let value = Uint256be { bytes: [0u8; 32] };
597+
let create2_salt = Bytes32 { bytes: [255u8; 32] };
612598

613599
let msg = ffi::evmc_message {
614600
kind: ffi::evmc_call_kind::EVMC_CALL,
@@ -641,19 +627,19 @@ mod tests {
641627
_context: *mut ffi::evmc_context,
642628
) -> ffi::evmc_tx_context {
643629
ffi::evmc_tx_context {
644-
tx_gas_price: ffi::evmc_uint256be { bytes: [0u8; 32] },
645-
tx_origin: ffi::evmc_address { bytes: [0u8; 20] },
646-
block_coinbase: ffi::evmc_address { bytes: [0u8; 20] },
630+
tx_gas_price: Uint256be { bytes: [0u8; 32] },
631+
tx_origin: Address { bytes: [0u8; 20] },
632+
block_coinbase: Address { bytes: [0u8; 20] },
647633
block_number: 42,
648634
block_timestamp: 235117,
649635
block_gas_limit: 105023,
650-
block_difficulty: ffi::evmc_uint256be { bytes: [0xaa; 32] },
636+
block_difficulty: Uint256be { bytes: [0xaa; 32] },
651637
}
652638
}
653639

654640
unsafe extern "C" fn get_dummy_code_size(
655641
_context: *mut ffi::evmc_context,
656-
_addr: *const ffi::evmc_address,
642+
_addr: *const Address,
657643
) -> usize {
658644
105023 as usize
659645
}
@@ -692,12 +678,12 @@ mod tests {
692678
flags: 0,
693679
depth: 123,
694680
gas: 105023,
695-
destination: ffi::evmc_address { bytes: [0u8; 20] },
696-
sender: ffi::evmc_address { bytes: [0u8; 20] },
681+
destination: Address { bytes: [0u8; 20] },
682+
sender: Address { bytes: [0u8; 20] },
697683
input_data: std::ptr::null() as *const u8,
698684
input_size: 0,
699-
value: ffi::evmc_uint256be { bytes: [0u8; 32] },
700-
create2_salt: ffi::evmc_uint256be { bytes: [0u8; 32] },
685+
value: Uint256be { bytes: [0u8; 32] },
686+
create2_salt: Uint256be { bytes: [0u8; 32] },
701687
}
702688
}
703689

@@ -740,7 +726,7 @@ mod tests {
740726
let msg = get_dummy_message();
741727

742728
// This address is useless. Just a dummy parameter for the interface function.
743-
let test_addr = ffi::evmc_address { bytes: [0u8; 20] };
729+
let test_addr = Address { bytes: [0u8; 20] };
744730
let mut context_raw = get_dummy_context();
745731
let mut exe_context = ExecutionContext::new(&msg, &mut context_raw);
746732

0 commit comments

Comments
 (0)