@@ -12,20 +12,22 @@ fn require_mem_range(max_range: usize, require_range: usize) -> Result<(), Error
12
12
Ok ( ( ) )
13
13
}
14
14
15
- fn do_gas < A , Q > ( _env : & Environment < A , Q > , _gas : u32 ) -> Result < ( ) , Error >
15
+ fn do_gas < A , Q > ( env : & Environment < A , Q > , _gas : u32 ) -> Result < ( ) , Error >
16
16
where
17
17
A : BackendApi + ' static ,
18
18
Q : Querier + ' static ,
19
19
{
20
+ env. decrease_gas_left ( 750_000_000 ) ?;
20
21
Ok ( ( ) )
21
22
}
22
23
23
- fn do_get_span_size < A , Q > ( env : & Environment < A , Q > ) -> i64
24
+ fn do_get_span_size < A , Q > ( env : & Environment < A , Q > ) -> Result < i64 , Error >
24
25
where
25
26
A : BackendApi + ' static ,
26
27
Q : Querier + ' static ,
27
28
{
28
- env. with_querier_from_context ( |querier| querier. get_span_size ( ) )
29
+ env. decrease_gas_left ( 750_000_000 ) ?;
30
+ Ok ( env. with_querier_from_context ( |querier| querier. get_span_size ( ) ) )
29
31
}
30
32
31
33
fn do_read_calldata < A , Q > ( env : & Environment < A , Q > , ptr : i64 ) -> Result < i64 , Error >
40
42
require_mem_range ( memory. size ( ) . bytes ( ) . 0 , ( ptr + span_size) as usize ) ?;
41
43
42
44
let data = querier. get_calldata ( ) ?;
45
+ env. decrease_gas_left ( 3_000_000_000 + ( data. len ( ) as u64 ) * 30_000_000 ) ?;
43
46
44
47
for ( idx, byte) in data. iter ( ) . enumerate ( ) {
45
48
memory. view ( ) [ ptr as usize + idx] . set ( * byte) ;
60
63
if len > span_size {
61
64
return Err ( Error :: SpanTooSmallError ) ;
62
65
}
66
+ env. decrease_gas_left ( 1_500_000_000 + ( len as u64 ) * 50_000_000 ) ?;
63
67
64
68
let memory = env. memory ( ) ?;
65
69
require_mem_range ( memory. size ( ) . bytes ( ) . 0 , ( ptr + span_size) as usize ) ?;
@@ -72,35 +76,39 @@ where
72
76
} )
73
77
}
74
78
75
- fn do_get_ask_count < A , Q > ( env : & Environment < A , Q > ) -> i64
79
+ fn do_get_ask_count < A , Q > ( env : & Environment < A , Q > ) -> Result < i64 , Error >
76
80
where
77
81
A : BackendApi + ' static ,
78
82
Q : Querier + ' static ,
79
83
{
80
- env. with_querier_from_context ( |querier| querier. get_ask_count ( ) )
84
+ env. decrease_gas_left ( 750_000_000 ) ?;
85
+ Ok ( env. with_querier_from_context ( |querier| querier. get_ask_count ( ) ) )
81
86
}
82
87
83
- fn do_get_min_count < A , Q > ( env : & Environment < A , Q > ) -> i64
88
+ fn do_get_min_count < A , Q > ( env : & Environment < A , Q > ) -> Result < i64 , Error >
84
89
where
85
90
A : BackendApi + ' static ,
86
91
Q : Querier + ' static ,
87
92
{
88
- env. with_querier_from_context ( |querier| querier. get_min_count ( ) )
93
+ env. decrease_gas_left ( 750_000_000 ) ?;
94
+ Ok ( env. with_querier_from_context ( |querier| querier. get_min_count ( ) ) )
89
95
}
90
96
91
- fn do_get_prepare_time < A , Q > ( env : & Environment < A , Q > ) -> i64
97
+ fn do_get_prepare_time < A , Q > ( env : & Environment < A , Q > ) -> Result < i64 , Error >
92
98
where
93
99
A : BackendApi + ' static ,
94
100
Q : Querier + ' static ,
95
101
{
96
- env. with_querier_from_context ( |querier| querier. get_prepare_time ( ) )
102
+ env. decrease_gas_left ( 750_000_000 ) ?;
103
+ Ok ( env. with_querier_from_context ( |querier| querier. get_prepare_time ( ) ) )
97
104
}
98
105
99
106
fn do_get_execute_time < A , Q > ( env : & Environment < A , Q > ) -> Result < i64 , Error >
100
107
where
101
108
A : BackendApi + ' static ,
102
109
Q : Querier + ' static ,
103
110
{
111
+ env. decrease_gas_left ( 750_000_000 ) ?;
104
112
env. with_querier_from_context ( |querier| querier. get_execute_time ( ) )
105
113
}
106
114
@@ -109,6 +117,7 @@ where
109
117
A : BackendApi + ' static ,
110
118
Q : Querier + ' static ,
111
119
{
120
+ env. decrease_gas_left ( 750_000_000 ) ?;
112
121
env. with_querier_from_context ( |querier| querier. get_ans_count ( ) )
113
122
}
114
123
@@ -129,6 +138,7 @@ where
129
138
if len > span_size {
130
139
return Err ( Error :: SpanTooSmallError ) ;
131
140
}
141
+ env. decrease_gas_left ( 1_500_000_000 + ( len as u64 ) * 50_000_000 ) ?;
132
142
133
143
let memory = env. memory ( ) ?;
134
144
require_mem_range ( memory. size ( ) . bytes ( ) . 0 , ( ptr + span_size) as usize ) ?;
@@ -150,6 +160,7 @@ where
150
160
A : BackendApi + ' static ,
151
161
Q : Querier + ' static ,
152
162
{
163
+ env. decrease_gas_left ( 750_000_000 ) ?;
153
164
env. with_querier_from_context ( |querier| querier. get_external_data_status ( eid, vid) )
154
165
}
155
166
@@ -170,6 +181,7 @@ where
170
181
require_mem_range ( memory. size ( ) . bytes ( ) . 0 , ( ptr + span_size) as usize ) ?;
171
182
172
183
let data = querier. get_external_data ( eid, vid) ?;
184
+ env. decrease_gas_left ( 3_000_000_000 + ( data. len ( ) as u64 ) * 60_000_000 ) ?;
173
185
174
186
for ( idx, byte) in data. iter ( ) . enumerate ( ) {
175
187
memory. view ( ) [ ptr as usize + idx] . set ( * byte) ;
@@ -203,7 +215,7 @@ where
203
215
Q : Querier + ' static ,
204
216
{
205
217
// consume gas relatively to the function running time (~12ms)
206
- env. decrease_gas_left ( 3_500_000_000_000 ) ?;
218
+ env. decrease_gas_left ( 7_500_000_000_000 ) ?;
207
219
let y: Vec < u8 > = get_from_mem ( env, y_ptr, y_len) ?;
208
220
let pi: Vec < u8 > = get_from_mem ( env, pi_ptr, pi_len) ?;
209
221
let alpha: Vec < u8 > = get_from_mem ( env, alpha_ptr, alpha_len) ?;
@@ -470,7 +482,7 @@ mod test {
470
482
owasm_env. set_wasmer_instance ( Some ( instance_ptr) ) ;
471
483
owasm_env. set_gas_left ( gas_limit) ;
472
484
473
- assert_eq ! ( 300 , do_get_span_size( & owasm_env) ) ;
485
+ assert_eq ! ( 300 , do_get_span_size( & owasm_env) . unwrap ( ) ) ;
474
486
}
475
487
476
488
#[ test]
@@ -503,7 +515,7 @@ mod test {
503
515
owasm_env. set_wasmer_instance ( Some ( instance_ptr) ) ;
504
516
owasm_env. set_gas_left ( gas_limit) ;
505
517
506
- assert_eq ! ( 10 , do_get_ask_count( & owasm_env) ) ;
518
+ assert_eq ! ( 10 , do_get_ask_count( & owasm_env) . unwrap ( ) ) ;
507
519
}
508
520
509
521
#[ test]
@@ -514,7 +526,7 @@ mod test {
514
526
owasm_env. set_wasmer_instance ( Some ( instance_ptr) ) ;
515
527
owasm_env. set_gas_left ( gas_limit) ;
516
528
517
- assert_eq ! ( 8 , do_get_min_count( & owasm_env) ) ;
529
+ assert_eq ! ( 8 , do_get_min_count( & owasm_env) . unwrap ( ) ) ;
518
530
}
519
531
520
532
#[ test]
@@ -525,7 +537,7 @@ mod test {
525
537
owasm_env. set_wasmer_instance ( Some ( instance_ptr) ) ;
526
538
owasm_env. set_gas_left ( gas_limit) ;
527
539
528
- assert_eq ! ( 100_000 , do_get_prepare_time( & owasm_env) ) ;
540
+ assert_eq ! ( 100_000 , do_get_prepare_time( & owasm_env) . unwrap ( ) ) ;
529
541
}
530
542
531
543
#[ test]
0 commit comments