@@ -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