Skip to content

Commit cfcf97d

Browse files
committed
10x read/write exec budget to fit runtime contraints
1 parent b572d52 commit cfcf97d

File tree

2 files changed

+49
-15
lines changed

2 files changed

+49
-15
lines changed

ex/native/rdb/src/consensus/bic/protocol.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ pub const COST_PER_DB_READ_BYTE: i128 = 50;
2020
pub const COST_PER_DB_WRITE_BASE: i128 = 25_000;
2121
pub const COST_PER_DB_WRITE_BYTE: i128 = 250;
2222

23-
/*
24-
pub const COST_PER_DB_READ_BASE: i128 = 5_000 * 10;
25-
pub const COST_PER_DB_READ_BYTE: i128 = 50 * 10;
26-
pub const COST_PER_DB_WRITE_BASE: i128 = 25_000 * 10;
27-
pub const COST_PER_DB_WRITE_BYTE: i128 = 250 * 10;
28-
*/
23+
pub const COST_PER_DB_READ_BASE2: i128 = 5_000 * 10;
24+
pub const COST_PER_DB_READ_BYTE2: i128 = 50 * 10;
25+
pub const COST_PER_DB_WRITE_BASE2: i128 = 25_000 * 10;
26+
pub const COST_PER_DB_WRITE_BYTE2: i128 = 250 * 10;
2927

3028
pub const COST_PER_DEPLOY: i128 = AMA_1_CENT; //cost to deploy contract
3129
pub const COST_PER_SOL: i128 = AMA_1_CENT; //cost to submit_sol

ex/native/rdb/src/consensus/consensus_kv.rs

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ pub fn kv_put(env: &mut ApplyEnv, key: &[u8], value: &[u8]) {
6161
}
6262

6363
exec_kv_size(key, Some(value));
64-
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len() + value.len()) as i128);
64+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
65+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE2 + protocol::COST_PER_DB_WRITE_BYTE2 * (key.len() + value.len()) as i128);
66+
} else {
67+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len() + value.len()) as i128);
68+
}
6569

6670
let old_value = env.txn.get_cf(&env.cf, key).unwrap();
6771
match old_value {
@@ -99,7 +103,11 @@ pub fn kv_increment(env: &mut ApplyEnv, key: &[u8], value: i128) -> i128 {
99103
}
100104

101105
let value_str = value.to_string().into_bytes();
102-
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len() + value_str.len()) as i128);
106+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
107+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE2 + protocol::COST_PER_DB_WRITE_BYTE2 * (key.len() + value_str.len()) as i128);
108+
} else {
109+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len() + value_str.len()) as i128);
110+
}
103111

104112
match env.txn.get_cf(&env.cf, key).unwrap() {
105113
None => {
@@ -139,7 +147,11 @@ pub fn kv_delete(env: &mut ApplyEnv, key: &[u8]) {
139147
panic!("exec_cannot_write_during_view");
140148
}
141149

142-
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len()) as i128);
150+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
151+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE2 + protocol::COST_PER_DB_WRITE_BYTE2 * (key.len()) as i128);
152+
} else {
153+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len()) as i128);
154+
}
143155

144156
match env.txn.get_cf(&env.cf, key).unwrap() {
145157
None => (),
@@ -156,7 +168,11 @@ pub fn kv_set_bit(env: &mut ApplyEnv, key: &[u8], bit_idx: u64) -> bool {
156168
panic!("exec_cannot_write_during_view");
157169
}
158170

159-
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len()) as i128);
171+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
172+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE2 + protocol::COST_PER_DB_WRITE_BYTE2 * (key.len()) as i128);
173+
} else {
174+
exec_budget_decr(env, protocol::COST_PER_DB_WRITE_BASE + protocol::COST_PER_DB_WRITE_BYTE * (key.len()) as i128);
175+
}
160176

161177
let (mut old, exists) = match env.txn.get_cf(&env.cf, key).unwrap() {
162178
None => (vec![0u8; crate::consensus::bic::sol_bloom::PAGE_SIZE as usize], false),
@@ -182,7 +198,11 @@ pub fn kv_set_bit(env: &mut ApplyEnv, key: &[u8], bit_idx: u64) -> bool {
182198
}
183199

184200
pub fn kv_exists(env: &mut ApplyEnv, key: &[u8]) -> bool {
185-
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (key.len()) as i128);
201+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
202+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE2 + protocol::COST_PER_DB_READ_BYTE2 * (key.len()) as i128);
203+
} else {
204+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (key.len()) as i128);
205+
}
186206

187207
match env.txn.get_cf(&env.cf, key).unwrap() {
188208
None => false,
@@ -191,13 +211,21 @@ pub fn kv_exists(env: &mut ApplyEnv, key: &[u8]) -> bool {
191211
}
192212

193213
pub fn kv_get(env: &mut ApplyEnv, key: &[u8]) -> Option<Vec<u8>> {
194-
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (key.len()) as i128);
214+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
215+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE2 + protocol::COST_PER_DB_READ_BYTE2 * (key.len()) as i128);
216+
} else {
217+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (key.len()) as i128);
218+
}
195219

196220
env.txn.get_cf(&env.cf, key).unwrap()
197221
}
198222

199223
pub fn kv_get_next(env: &mut ApplyEnv, prefix: &[u8], key: &[u8]) -> Option<(Vec<u8>, Vec<u8>)> {
200-
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (prefix.len() + key.len()) as i128);
224+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
225+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE2 + protocol::COST_PER_DB_READ_BYTE2 * (prefix.len() + key.len()) as i128);
226+
} else {
227+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (prefix.len() + key.len()) as i128);
228+
}
201229

202230
let seek = [prefix, key].concat();
203231

@@ -221,7 +249,11 @@ pub fn kv_get_next(env: &mut ApplyEnv, prefix: &[u8], key: &[u8]) -> Option<(Vec
221249
}
222250

223251
pub fn kv_get_prev(env: &mut ApplyEnv, prefix: &[u8], key: &[u8]) -> Option<(Vec<u8>, Vec<u8>)> {
224-
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (prefix.len() + key.len()) as i128);
252+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
253+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE2 + protocol::COST_PER_DB_READ_BYTE2 * (prefix.len() + key.len()) as i128);
254+
} else {
255+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (prefix.len() + key.len()) as i128);
256+
}
225257

226258
let seek = [prefix, key].concat();
227259

@@ -245,7 +277,11 @@ pub fn kv_get_prev(env: &mut ApplyEnv, prefix: &[u8], key: &[u8]) -> Option<(Vec
245277
}
246278

247279
pub fn kv_get_prev_or_first(env: &mut ApplyEnv, prefix: &[u8], key: &[u8]) -> Option<(Vec<u8>, Vec<u8>)> {
248-
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (prefix.len() + key.len()) as i128);
280+
if env.caller_env.entry_height >= protocol::FORKHEIGHT {
281+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE2 + protocol::COST_PER_DB_READ_BYTE2 * (prefix.len() + key.len()) as i128);
282+
} else {
283+
exec_budget_decr(env, protocol::COST_PER_DB_READ_BASE + protocol::COST_PER_DB_READ_BYTE * (prefix.len() + key.len()) as i128);
284+
}
249285

250286
let seek = [prefix, key].concat();
251287

0 commit comments

Comments
 (0)