@@ -13,7 +13,7 @@ use std::sync::Arc;
13
13
use wasmer:: Universal ;
14
14
use wasmer_middlewares:: metering:: { get_remaining_points, MeteringPoints } ;
15
15
16
- use pwasm_utils:: { self , rules } ;
16
+ use pwasm_utils:: { self } ;
17
17
18
18
use wasmer:: Singlepass ;
19
19
@@ -79,11 +79,11 @@ fn inject_stack_height(module: Module) -> Result<Module, Error> {
79
79
. map_err ( |_| Error :: StackHeightInjectionError )
80
80
}
81
81
82
- fn inject_gas ( module : Module ) -> Result < Module , Error > {
83
- // Simple gas rule. Every opcode and memory growth costs 1 gas.
84
- let gas_rules = rules:: Set :: new ( 1 , Default :: default ( ) ) . with_grow_cost ( 1 ) ;
85
- pwasm_utils:: inject_gas_counter ( module, & gas_rules) . map_err ( |_| Error :: GasCounterInjectionError )
86
- }
82
+ // fn inject_gas(module: Module) -> Result<Module, Error> {
83
+ // // Simple gas rule. Every opcode and memory growth costs 1 gas.
84
+ // let gas_rules = rules::Set::new(1, Default::default()).with_grow_cost(1);
85
+ // pwasm_utils::inject_gas_counter(module, &gas_rules).map_err(|_| Error::GasCounterInjectionError)
86
+ // }
87
87
88
88
fn check_wasm_exports ( module : & Module ) -> Result < ( ) , Error > {
89
89
let available_exports: Vec < & str > = module. export_section ( ) . map_or ( vec ! [ ] , |export_section| {
@@ -122,22 +122,6 @@ pub fn compile(code: &[u8]) -> Result<Vec<u8>, Error> {
122
122
// Check that the given Wasm code is indeed a valid Wasm.
123
123
wasmparser:: validate ( code) . map_err ( |_| Error :: ValidationError ) ?;
124
124
125
- // Start the compiling chains.
126
- let module = elements:: deserialize_buffer ( code) . map_err ( |_| Error :: DeserializationError ) ?;
127
- check_wasm_exports ( & module) ?;
128
- check_wasm_imports ( & module) ?;
129
- let module = inject_memory ( module) ?;
130
- let module = inject_gas ( module) ?;
131
- let module = inject_stack_height ( module) ?;
132
-
133
- // Serialize the final Wasm code back to bytes.
134
- elements:: serialize ( module) . map_err ( |_| Error :: SerializationError )
135
- }
136
-
137
- pub fn new_compile ( code : & [ u8 ] ) -> Result < Vec < u8 > , Error > {
138
- // Check that the given Wasm code is indeed a valid Wasm.
139
- wasmparser:: validate ( code) . map_err ( |_| Error :: ValidationError ) ?;
140
-
141
125
// Start the compiling chains.
142
126
let module = elements:: deserialize_buffer ( code) . map_err ( |_| Error :: DeserializationError ) ?;
143
127
check_wasm_exports ( & module) ?;
@@ -177,7 +161,7 @@ pub fn run<E>(
177
161
where
178
162
E : vm:: Env + ' static ,
179
163
{
180
- let owasm_env = Environment :: new ( env, gas ) ;
164
+ let owasm_env = Environment :: new ( env) ;
181
165
182
166
let mut compiler = Singlepass :: new ( ) ;
183
167
let metering = Arc :: new ( Metering :: new ( 0 , cost) ) ;
@@ -187,10 +171,7 @@ where
187
171
188
172
let import_object = imports ! {
189
173
"env" => {
190
- "gas" => Function :: new_native_with_env( & store, owasm_env. clone( ) , |env: & Environment <E >, gas: u32 | {
191
- env. with_mut_vm( |vm| {
192
- vm. consume_gas( gas)
193
- } )
174
+ "gas" => Function :: new_native_with_env( & store, owasm_env. clone( ) , |_env: & Environment <E >, _gas: u32 | {
194
175
} ) ,
195
176
"get_span_size" => Function :: new_native_with_env( & store, owasm_env. clone( ) , |env: & Environment <E >| {
196
177
env. with_vm( |vm| {
@@ -201,7 +182,6 @@ where
201
182
env. with_mut_vm( |vm| -> Result <i64 , Error >{
202
183
let span_size = vm. env. get_span_size( ) ;
203
184
// consume gas equal size of span when read calldata
204
- vm. consume_gas( span_size as u32 ) ?;
205
185
env. decrease_gas_left( span_size as u32 ) ?;
206
186
207
187
let memory = env. memory( ) ?;
@@ -225,7 +205,6 @@ where
225
205
}
226
206
227
207
// consume gas equal size of span when save data to memory
228
- vm. consume_gas( span_size as u32 ) ?;
229
208
env. decrease_gas_left( span_size as u32 ) ?;
230
209
231
210
let memory = env. memory( ) ?;
@@ -288,7 +267,6 @@ where
288
267
env. with_mut_vm( |vm| -> Result <i64 , Error >{
289
268
let span_size = vm. env. get_span_size( ) ;
290
269
// consume gas equal size of span when read data from report
291
- vm. consume_gas( span_size as u32 ) ?;
292
270
env. decrease_gas_left( span_size as u32 ) ?;
293
271
294
272
let memory = env. memory( ) ?;
@@ -368,7 +346,6 @@ mod test {
368
346
use parity_wasm:: elements;
369
347
use std:: io:: { Read , Write } ;
370
348
use std:: process:: Command ;
371
- use std:: time:: Instant ;
372
349
use tempfile:: NamedTempFile ;
373
350
374
351
pub struct MockEnv { }
@@ -469,19 +446,13 @@ mod test {
469
446
r#"(module
470
447
(type (;0;) (func (param i64 i64 i32 i64) (result i64)))
471
448
(type (;1;) (func))
472
- (type (;2;) (func (param i32)))
473
449
(import "env" "ask_external_data" (func (;0;) (type 0)))
474
- (import "env" "gas" (func (;1;) (type 2)))
475
- (func (;2;) (type 1)
450
+ (func (;1;) (type 1)
476
451
(local i32)
477
- i32.const 4
478
- call 1
479
452
i32.const 0
480
453
local.set 0
481
454
block ;; label = @1
482
455
loop ;; label = @2
483
- i32.const 8
484
- call 1
485
456
local.get 0
486
457
i32.const 1
487
458
i32.add
@@ -492,8 +463,8 @@ mod test {
492
463
br_if 0 (;@2;)
493
464
end
494
465
end)
495
- (func (;3 ;) (type 1))
496
- (func (;4 ;) (type 1)
466
+ (func (;2 ;) (type 1))
467
+ (func (;3 ;) (type 1)
497
468
global.get 0
498
469
i32.const 3
499
470
i32.add
@@ -504,15 +475,15 @@ mod test {
504
475
if ;; label = @1
505
476
unreachable
506
477
end
507
- call 2
478
+ call 1
508
479
global.get 0
509
480
i32.const 3
510
481
i32.sub
511
482
global.set 0)
512
483
(memory (;0;) 17 512)
513
484
(global (;0;) (mut i32) (i32.const 0))
514
485
(export "prepare" (func 0))
515
- (export "execute" (func 4 ))
486
+ (export "execute" (func 3 ))
516
487
(data (;0;) (i32.const 1048576) "beeb"))"# ,
517
488
) ;
518
489
assert_eq ! ( code, expected) ;
@@ -545,7 +516,7 @@ mod test {
545
516
let mut cache = Cache :: new ( CacheOptions { cache_size : 10000 } ) ;
546
517
let env = MockEnv { } ;
547
518
let gas_used = run ( & mut cache, & code, 4294967290 , true , env) . unwrap ( ) ;
548
- assert_eq ! ( gas_used, 1000015 as u64 ) ;
519
+ assert_eq ! ( gas_used, 800013 as u64 ) ;
549
520
}
550
521
551
522
// #[test]
@@ -584,46 +555,6 @@ mod test {
584
555
// assert_eq!(gas_used, 1000015 as u32);
585
556
// }
586
557
587
- #[ test]
588
- fn test_run_time ( ) {
589
- let wasm = wat2wasm (
590
- r#"(module
591
- (type (func (param i64 i64 i64 i64) (result)))
592
- (func
593
- (local $idx i32)
594
- (local.set $idx (i32.const 0))
595
- (block
596
- (loop
597
- (local.set $idx (local.get $idx) (i32.const 1) (i32.add) )
598
- (br_if 0 (i32.lt_u (local.get $idx) (i32.const 1000000)))
599
- )
600
- )
601
- )
602
- (func (;"execute": Resolves with result "beeb";)
603
- )
604
- (memory 17)
605
- (data (i32.const 1048576) "beeb") (;str = "beeb";)
606
- (export "prepare" (func 0))
607
- (export "execute" (func 1)))
608
- "# ,
609
- ) ;
610
- let code = compile ( & wasm) . unwrap ( ) ;
611
- let new_code = new_compile ( & wasm) . unwrap ( ) ;
612
- let mut cache = Cache :: new ( CacheOptions { cache_size : 10000 } ) ;
613
- let env = MockEnv { } ;
614
-
615
- let now = Instant :: now ( ) ;
616
- let _gas_used = run ( & mut cache, & code, 4294967290 , true , env) . unwrap ( ) ;
617
- let elapsed_time = now. elapsed ( ) ;
618
-
619
- let env = MockEnv { } ;
620
-
621
- let now = Instant :: now ( ) ;
622
- let _gas_used = run ( & mut cache, & new_code, 4294967290 , true , env) . unwrap ( ) ;
623
- let elapsed_time_2 = now. elapsed ( ) ;
624
- assert_eq ! ( true , elapsed_time. as_micros( ) > elapsed_time_2. as_micros( ) ) ;
625
- }
626
-
627
558
#[ test]
628
559
fn test_inject_memory_no_memory ( ) {
629
560
let wasm = wat2wasm ( "(module)" ) ;
0 commit comments