@@ -189,9 +189,9 @@ where
189
189
let import_object = imports ! {
190
190
"env" => {
191
191
"gas" => Function :: new_native_with_env( & store, owasm_env. clone( ) , |env: & Environment <E >, gas: u32 | {
192
- // env.with_mut_vm(|vm| {
193
- // vm.consume_gas(gas)
194
- // })
192
+ env. with_mut_vm( |vm| {
193
+ vm. consume_gas( gas)
194
+ } )
195
195
} ) ,
196
196
"get_span_size" => Function :: new_native_with_env( & store, owasm_env. clone( ) , |env: & Environment <E >| {
197
197
env. with_vm( |vm| {
@@ -203,6 +203,7 @@ where
203
203
let span_size = vm. env. get_span_size( ) ;
204
204
// consume gas equal size of span when read calldata
205
205
vm. consume_gas( span_size as u32 ) ?;
206
+ env. decrease_gas_left( span_size as u32 ) ?;
206
207
207
208
let memory = env. memory( ) ?;
208
209
require_mem_range( memory. size( ) . bytes( ) . 0 , ( ptr + span_size) as usize ) ?;
@@ -226,6 +227,7 @@ where
226
227
227
228
// consume gas equal size of span when save data to memory
228
229
vm. consume_gas( span_size as u32 ) ?;
230
+ env. decrease_gas_left( span_size as u32 ) ?;
229
231
230
232
let memory = env. memory( ) ?;
231
233
require_mem_range( memory. size( ) . bytes( ) . 0 , ( ptr + span_size) as usize ) ?;
@@ -269,6 +271,7 @@ where
269
271
270
272
// consume gas equal size of span when write calldata for raw request
271
273
vm. consume_gas( span_size as u32 ) ?;
274
+ env. decrease_gas_left( span_size as u32 ) ?;
272
275
273
276
let memory = env. memory( ) ?;
274
277
require_mem_range( memory. size( ) . bytes( ) . 0 , ( ptr + span_size) as usize ) ?;
@@ -287,6 +290,7 @@ where
287
290
let span_size = vm. env. get_span_size( ) ;
288
291
// consume gas equal size of span when read data from report
289
292
vm. consume_gas( span_size as u32 ) ?;
293
+ env. decrease_gas_left( span_size as u32 ) ?;
290
294
291
295
let memory = env. memory( ) ?;
292
296
require_mem_range( memory. size( ) . bytes( ) . 0 , ( ptr + span_size) as usize ) ?;
@@ -304,6 +308,7 @@ where
304
308
env. with_mut_vm( |vm| -> Result <u32 , Error >{
305
309
// consume gas relatively to the function running time (~12ms)
306
310
vm. consume_gas( 500000 ) ?;
311
+ env. decrease_gas_left( 500000 ) ?;
307
312
308
313
let y: Vec <u8 > = get_from_mem( env, y_ptr, y_len) ?;
309
314
let pi: Vec <u8 >= get_from_mem( env, pi_ptr, pi_len) ?;
@@ -361,7 +366,7 @@ mod test {
361
366
362
367
impl vm:: Env for MockEnv {
363
368
fn get_span_size ( & self ) -> i64 {
364
- 100_000
369
+ 30000
365
370
}
366
371
fn get_calldata ( & self ) -> Result < Vec < u8 > , Error > {
367
372
Ok ( vec ! [ 1 ] )
@@ -505,7 +510,7 @@ mod test {
505
510
}
506
511
507
512
#[ test]
508
- fn test_gas_used ( ) {
513
+ fn test_simple_gas_used ( ) {
509
514
let wasm = wat2wasm (
510
515
r#"(module
511
516
(type (func (param i64 i64 i64 i64) (result)))
@@ -534,6 +539,42 @@ mod test {
534
539
assert_eq ! ( gas_used, 1000015 as u32 ) ;
535
540
}
536
541
542
+ // #[test]
543
+ // fn test_ask_count_gas_used() {
544
+ // let wasm = wat2wasm(
545
+ // r#"(module
546
+ // (type (func (param i64 i64 i64 i64)))
547
+ // (import "env" "ask_external_data" (func $ask_external_data (type 0)))
548
+ // (func
549
+ // (local $idx i32)
550
+ // (i64.const 1)
551
+ // (i64.const 1)
552
+ // (i64.const 1048576)
553
+ // (i64.const 4)
554
+ // call 0
555
+ // (local.set $idx (i32.const 0))
556
+ // (block
557
+ // (loop
558
+ // (local.set $idx (local.get $idx) (i32.const 1) (i32.add) )
559
+ // (br_if 0 (i32.lt_u (local.get $idx) (i32.const 100000)))
560
+ // )
561
+ // )
562
+ // )
563
+ // (func (;"execute": Resolves with result "beeb";)
564
+ // )
565
+ // (memory 17)
566
+ // (data (i32.const 1048576) "beeb") (;str = "beeb";)
567
+ // (export "prepare" (func 1))
568
+ // (export "execute" (func 2)))
569
+ // "#,
570
+ // );
571
+ // let code = compile(&wasm).unwrap();
572
+ // let mut cache = Cache::new(CacheOptions { cache_size: 10000 });
573
+ // let env = MockEnv {};
574
+ // let gas_used = run(&mut cache, &code, 4294967290, true, env).unwrap();
575
+ // assert_eq!(gas_used, 1000015 as u32);
576
+ // }
577
+
537
578
#[ test]
538
579
fn test_run_time ( ) {
539
580
let wasm = wat2wasm (
@@ -571,8 +612,7 @@ mod test {
571
612
let now = Instant :: now ( ) ;
572
613
let _gas_used = run ( & mut cache, & new_code, 4294967290 , true , env) . unwrap ( ) ;
573
614
let elapsed_time_2 = now. elapsed ( ) ;
574
-
575
- assert_eq ! ( elapsed_time. as_micros( ) , elapsed_time_2. as_micros( ) ) ;
615
+ assert_eq ! ( true , elapsed_time. as_micros( ) > elapsed_time_2. as_micros( ) ) ;
576
616
}
577
617
578
618
#[ test]
0 commit comments