Skip to content
This repository was archived by the owner on Apr 8, 2026. It is now read-only.

Commit 2ca440e

Browse files
committed
moar aliases
1 parent d6feeef commit 2ca440e

3 files changed

Lines changed: 63 additions & 60 deletions

File tree

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

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
//! Have a look at evmc-declare to declare an EVMC compatible VM.
99
//! This crate documents how to use certain data types.
1010
11-
#![feature(type_alias_enum_variants)]
11+
//#![feature(type_alias_enum_variants)]
1212

1313
mod container;
1414
mod types;
@@ -24,7 +24,7 @@ pub trait EvmcVm {
2424
/// This is called for every incoming message.
2525
fn execute<'a>(
2626
&self,
27-
revision: ffi::evmc_revision,
27+
revision: Revision,
2828
code: &'a [u8],
2929
message: &'a ExecutionMessage,
3030
context: Option<&'a mut ExecutionContext<'a>>,
@@ -34,7 +34,7 @@ pub trait EvmcVm {
3434
/// EVMC result structure.
3535
#[derive(Debug)]
3636
pub struct ExecutionResult {
37-
status_code: ffi::evmc_status_code,
37+
status_code: StatusCode,
3838
gas_left: i64,
3939
output: Option<Vec<u8>>,
4040
create_address: Option<Address>,
@@ -43,7 +43,7 @@ pub struct ExecutionResult {
4343
/// EVMC execution message structure.
4444
#[derive(Debug)]
4545
pub struct ExecutionMessage {
46-
kind: ffi::evmc_call_kind,
46+
kind: MessageKind,
4747
flags: u32,
4848
depth: i32,
4949
gas: i64,
@@ -68,7 +68,7 @@ pub struct ExecutionContext<'a> {
6868
impl ExecutionResult {
6969
/// Manually create a result.
7070
pub fn new(
71-
_status_code: ffi::evmc_status_code,
71+
_status_code: StatusCode,
7272
_gas_left: i64,
7373
_output: Option<&[u8]>,
7474
) -> Self {
@@ -86,21 +86,21 @@ impl ExecutionResult {
8686

8787
/// Create failure result.
8888
pub fn failure() -> Self {
89-
ExecutionResult::new(ffi::evmc_status_code::EVMC_FAILURE, 0, None)
89+
ExecutionResult::new(StatusCode::EVMC_FAILURE, 0, None)
9090
}
9191

9292
/// Create a revert result.
9393
pub fn revert(_gas_left: i64, _output: Option<&[u8]>) -> Self {
94-
ExecutionResult::new(ffi::evmc_status_code::EVMC_REVERT, _gas_left, _output)
94+
ExecutionResult::new(StatusCode::EVMC_REVERT, _gas_left, _output)
9595
}
9696

9797
/// Create a successful result.
9898
pub fn success(_gas_left: i64, _output: Option<&[u8]>) -> Self {
99-
ExecutionResult::new(ffi::evmc_status_code::EVMC_SUCCESS, _gas_left, _output)
99+
ExecutionResult::new(StatusCode::EVMC_SUCCESS, _gas_left, _output)
100100
}
101101

102102
/// Read the status code.
103-
pub fn status_code(&self) -> ffi::evmc_status_code {
103+
pub fn status_code(&self) -> StatusCode {
104104
self.status_code
105105
}
106106

@@ -123,7 +123,7 @@ impl ExecutionResult {
123123

124124
impl ExecutionMessage {
125125
pub fn new(
126-
kind: ffi::evmc_call_kind,
126+
kind: MessageKind,
127127
flags: u32,
128128
depth: i32,
129129
gas: i64,
@@ -151,7 +151,7 @@ impl ExecutionMessage {
151151
}
152152

153153
/// Read the message kind.
154-
pub fn kind(&self) -> ffi::evmc_call_kind {
154+
pub fn kind(&self) -> MessageKind {
155155
self.kind
156156
}
157157

@@ -241,7 +241,7 @@ impl<'a> ExecutionContext<'a> {
241241
address: &Address,
242242
key: &Bytes32,
243243
value: &Bytes32,
244-
) -> ffi::evmc_storage_status {
244+
) -> StorageStatus {
245245
unsafe {
246246
assert!((*self.host).set_storage.is_some());
247247
(*self.host).set_storage.unwrap()(
@@ -503,9 +503,9 @@ mod tests {
503503

504504
#[test]
505505
fn result_new() {
506-
let r = ExecutionResult::new(ffi::evmc_status_code::EVMC_FAILURE, 420, None);
506+
let r = ExecutionResult::new(StatusCode::EVMC_FAILURE, 420, None);
507507

508-
assert!(r.status_code() == ffi::evmc_status_code::EVMC_FAILURE);
508+
assert!(r.status_code() == StatusCode::EVMC_FAILURE);
509509
assert!(r.gas_left() == 420);
510510
assert!(r.output().is_none());
511511
assert!(r.create_address().is_none());
@@ -528,7 +528,7 @@ mod tests {
528528
#[test]
529529
fn result_from_ffi() {
530530
let f = ffi::evmc_result {
531-
status_code: ffi::evmc_status_code::EVMC_SUCCESS,
531+
status_code: StatusCode::EVMC_SUCCESS,
532532
gas_left: 1337,
533533
output_data: Box::into_raw(Box::new([0xde, 0xad, 0xbe, 0xef])) as *const u8,
534534
output_size: 4,
@@ -539,7 +539,7 @@ mod tests {
539539

540540
let r: ExecutionResult = f.into();
541541

542-
assert!(r.status_code() == ffi::evmc_status_code::EVMC_SUCCESS);
542+
assert!(r.status_code() == StatusCode::EVMC_SUCCESS);
543543
assert!(r.gas_left() == 1337);
544544
assert!(r.output().is_some());
545545
assert!(r.output().unwrap().len() == 4);
@@ -549,15 +549,15 @@ mod tests {
549549
#[test]
550550
fn result_into_heap_ffi() {
551551
let r = ExecutionResult::new(
552-
ffi::evmc_status_code::EVMC_FAILURE,
552+
StatusCode::EVMC_FAILURE,
553553
420,
554554
Some(&[0xc0, 0xff, 0xee, 0x71, 0x75]),
555555
);
556556

557557
let f: *const ffi::evmc_result = r.into();
558558
assert!(!f.is_null());
559559
unsafe {
560-
assert!((*f).status_code == ffi::evmc_status_code::EVMC_FAILURE);
560+
assert!((*f).status_code == StatusCode::EVMC_FAILURE);
561561
assert!((*f).gas_left == 420);
562562
assert!(!(*f).output_data.is_null());
563563
assert!((*f).output_size == 5);
@@ -574,12 +574,12 @@ mod tests {
574574

575575
#[test]
576576
fn result_into_heap_ffi_empty_data() {
577-
let r = ExecutionResult::new(ffi::evmc_status_code::EVMC_FAILURE, 420, None);
577+
let r = ExecutionResult::new(StatusCode::EVMC_FAILURE, 420, None);
578578

579579
let f: *const ffi::evmc_result = r.into();
580580
assert!(!f.is_null());
581581
unsafe {
582-
assert!((*f).status_code == ffi::evmc_status_code::EVMC_FAILURE);
582+
assert!((*f).status_code == StatusCode::EVMC_FAILURE);
583583
assert!((*f).gas_left == 420);
584584
assert!((*f).output_data.is_null());
585585
assert!((*f).output_size == 0);
@@ -593,14 +593,14 @@ mod tests {
593593
#[test]
594594
fn result_into_stack_ffi() {
595595
let r = ExecutionResult::new(
596-
ffi::evmc_status_code::EVMC_FAILURE,
596+
StatusCode::EVMC_FAILURE,
597597
420,
598598
Some(&[0xc0, 0xff, 0xee, 0x71, 0x75]),
599599
);
600600

601601
let f: ffi::evmc_result = r.into();
602602
unsafe {
603-
assert!(f.status_code == ffi::evmc_status_code::EVMC_FAILURE);
603+
assert!(f.status_code == StatusCode::EVMC_FAILURE);
604604
assert!(f.gas_left == 420);
605605
assert!(!f.output_data.is_null());
606606
assert!(f.output_size == 5);
@@ -617,11 +617,11 @@ mod tests {
617617

618618
#[test]
619619
fn result_into_stack_ffi_empty_data() {
620-
let r = ExecutionResult::new(ffi::evmc_status_code::EVMC_FAILURE, 420, None);
620+
let r = ExecutionResult::new(StatusCode::EVMC_FAILURE, 420, None);
621621

622622
let f: ffi::evmc_result = r.into();
623623
unsafe {
624-
assert!(f.status_code == ffi::evmc_status_code::EVMC_FAILURE);
624+
assert!(f.status_code == StatusCode::EVMC_FAILURE);
625625
assert!(f.gas_left == 420);
626626
assert!(f.output_data.is_null());
627627
assert!(f.output_size == 0);
@@ -641,7 +641,7 @@ mod tests {
641641
let create2_salt = Bytes32 { bytes: [255u8; 32] };
642642

643643
let ret = ExecutionMessage::new(
644-
ffi::evmc_call_kind::EVMC_CALL,
644+
MessageKind::EVMC_CALL,
645645
44,
646646
66,
647647
4466,
@@ -652,7 +652,7 @@ mod tests {
652652
create2_salt,
653653
);
654654

655-
assert_eq!(ret.kind(), ffi::evmc_call_kind::EVMC_CALL);
655+
assert_eq!(ret.kind(), MessageKind::EVMC_CALL);
656656
assert_eq!(ret.flags(), 44);
657657
assert_eq!(ret.depth(), 66);
658658
assert_eq!(ret.gas(), 4466);
@@ -672,7 +672,7 @@ mod tests {
672672
let create2_salt = Bytes32 { bytes: [255u8; 32] };
673673

674674
let msg = ffi::evmc_message {
675-
kind: ffi::evmc_call_kind::EVMC_CALL,
675+
kind: MessageKind::EVMC_CALL,
676676
flags: 44,
677677
depth: 66,
678678
gas: 4466,
@@ -706,7 +706,7 @@ mod tests {
706706
let create2_salt = Bytes32 { bytes: [255u8; 32] };
707707

708708
let msg = ffi::evmc_message {
709-
kind: ffi::evmc_call_kind::EVMC_CALL,
709+
kind: MessageKind::EVMC_CALL,
710710
flags: 44,
711711
depth: 66,
712712
gas: 4466,
@@ -770,16 +770,16 @@ mod tests {
770770

771771
ffi::evmc_result {
772772
status_code: if success {
773-
ffi::evmc_status_code::EVMC_SUCCESS
773+
StatusCode::EVMC_SUCCESS
774774
} else {
775-
ffi::evmc_status_code::EVMC_INTERNAL_ERROR
775+
StatusCode::EVMC_INTERNAL_ERROR
776776
},
777777
gas_left: 2,
778778
// NOTE: we are passing the input pointer here, but for testing the lifetime is ok
779779
output_data: msg.input_data,
780780
output_size: msg.input_size,
781781
release: None,
782-
create_address: ffi::evmc_address::default(),
782+
create_address: Address::default(),
783783
padding: [0u8; 4],
784784
}
785785
}
@@ -834,61 +834,62 @@ mod tests {
834834
#[test]
835835
fn test_call_empty_data() {
836836
// This address is useless. Just a dummy parameter for the interface function.
837-
let test_addr = ffi::evmc_address { bytes: [0u8; 20] };
837+
let test_addr = Address::default();
838838
let host = get_dummy_host_interface();
839839
let host_context = std::ptr::null_mut();
840840
let mut exe_context = ExecutionContext::new(&host, host_context);
841841

842842
let message = ExecutionMessage::new(
843-
ffi::evmc_call_kind::EVMC_CALL,
843+
MessageKind::EVMC_CALL,
844844
0,
845845
0,
846846
6566,
847847
test_addr,
848848
test_addr,
849849
None,
850-
ffi::evmc_uint256be::default(),
851-
ffi::evmc_bytes32::default(),
850+
Uint256::default(),
851+
Bytes32::default(),
852852
);
853853

854854
let b = exe_context.call(&message);
855855

856-
assert_eq!(b.status_code(), ffi::evmc_status_code::EVMC_SUCCESS);
856+
assert_eq!(b.status_code(), StatusCode::EVMC_SUCCESS);
857857
assert_eq!(b.gas_left(), 2);
858858
assert!(b.output().is_none());
859859
assert!(b.create_address().is_some());
860-
assert_eq!(b.create_address().unwrap(), &ffi::evmc_address::default());
860+
assert_eq!(b.create_address().unwrap(), &Address::default());
861+
861862
}
862863

863864
#[test]
864865
fn test_call_with_data() {
865866
// This address is useless. Just a dummy parameter for the interface function.
866-
let test_addr = ffi::evmc_address { bytes: [0u8; 20] };
867+
let test_addr = Address::default();
867868
let host = get_dummy_host_interface();
868869
let host_context = std::ptr::null_mut();
869870
let mut exe_context = ExecutionContext::new(&host, host_context);
870871

871872
let data = vec![0xc0, 0xff, 0xfe];
872873

873874
let message = ExecutionMessage::new(
874-
ffi::evmc_call_kind::EVMC_CALL,
875+
MessageKind::EVMC_CALL,
875876
0,
876877
0,
877878
6566,
878879
test_addr,
879880
test_addr,
880881
Some(&data),
881-
ffi::evmc_uint256be::default(),
882-
ffi::evmc_bytes32::default(),
882+
Uint256::default(),
883+
Bytes32::default(),
883884
);
884885

885886
let b = exe_context.call(&message);
886887

887-
assert_eq!(b.status_code(), ffi::evmc_status_code::EVMC_SUCCESS);
888+
assert_eq!(b.status_code(), StatusCode::EVMC_SUCCESS);
888889
assert_eq!(b.gas_left(), 2);
889890
assert!(b.output().is_some());
890891
assert_eq!(b.output().unwrap(), &data);
891892
assert!(b.create_address().is_some());
892-
assert_eq!(b.create_address().unwrap(), &ffi::evmc_address::default());
893+
assert_eq!(b.create_address().unwrap(), &Address::default());
893894
}
894895
}

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub type Uint256 = ffi::evmc_uint256be;
1111

1212
/// EVMC message (call) kind.
1313
#[derive(Debug, PartialEq)]
14-
pub enum MessageKind {
14+
pub enum xMessageKind {
1515
Call,
1616
CallCode,
1717
DelegateCall,
@@ -30,13 +30,15 @@ pub type StorageStatus = ffi::evmc_storage_status;
3030
/// EVMC VM revision.
3131
pub type Revision = ffi::evmc_revision;
3232

33-
impl From<ffi::evmc_call_kind> for MessageKind {
34-
fn from(kind: ffi::evmc_call_kind) -> Self {
35-
match kind {
36-
EVM_CALL => MessageKind::Call,
37-
}
38-
}
39-
}
33+
pub type MessageKind = ffi::evmc_call_kind;
34+
35+
//impl From<ffi::evmc_call_kind> for MessageKind {
36+
// fn from(kind: ffi::evmc_call_kind) -> Self {
37+
// match kind {
38+
// EVM_CALL => MessageKind::Call,
39+
// }
40+
// }
41+
//}
4042

4143
#[cfg(test)]
4244
mod tests {
@@ -66,13 +68,13 @@ mod tests {
6668

6769
#[test]
6870
fn message_kind() {
69-
assert_eq!(MessageKind::Call, ffi::evmc_call_kind::EVMC_CALL);
70-
assert_eq!(MessageKind::CallCode, ffi::evmc_call_kind::EVMC_CALLCODE);
71-
assert_eq!(
72-
MessageKind::DelegateCall,
73-
ffi::evmc_call_kind::EVMC_DELEGATECALL
74-
);
75-
assert_eq!(MessageKind::Create, ffi::evmc_call_kind::EVMC_CREATE);
71+
// assert_eq!(MessageKind::Call, ffi::evmc_call_kind::EVMC_CALL);
72+
// assert_eq!(MessageKind::CallCode, ffi::evmc_call_kind::EVMC_CALLCODE);
73+
// assert_eq!(
74+
// MessageKind::DelegateCall,
75+
// ffi::evmc_call_kind::EVMC_DELEGATECALL
76+
// );
77+
// assert_eq!(MessageKind::Create, ffi::evmc_call_kind::EVMC_CREATE);
7678
}
7779

7880
#[test]

examples/example-rust-vm/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl EvmcVm for ExampleRustVM {
1616

1717
fn execute<'a>(
1818
&self,
19-
_revision: evmc_sys::evmc_revision,
19+
_revision: Revision,
2020
_code: &'a [u8],
2121
message: &'a ExecutionMessage,
2222
_context: Option<&'a mut ExecutionContext<'a>>,
@@ -26,7 +26,7 @@ impl EvmcVm for ExampleRustVM {
2626
}
2727
let _context = _context.unwrap();
2828

29-
if message.kind() != evmc_sys::evmc_call_kind::EVMC_CALL {
29+
if message.kind() != MessageKind::EVMC_CALL {
3030
return ExecutionResult::failure();
3131
}
3232

0 commit comments

Comments
 (0)