Skip to content

Commit f565cb2

Browse files
bertllllBert
andauthored
GH-638: Proper gas price management for both payable modes (#659)
* GH-638: ploughed all over, but the main structure has been planted; now let's get rid of 50 c. errors * GH-638: interim commit; nice progress though * GH-638: lots done; but the computations will be hrder to test * GH-638: little rearrangement in the project tree before I bring in more files * GH-638: transmission log repair * GH-638: transmission log repair and some other tests * GH-638: tests for gas price ceiling confrontations written * GH-638: single test fixed * GH-638: tests full - all and fixed * GH-638: lint and formatting * GH-638: self-review * mend * GH-638: added warning * GH-638: another comment res * GH-638: ref tests with a lot of created accounts * GH-638: fixed chain records with more constants * GH-638: review two addressed --------- Co-authored-by: Bert <Bert@Bert.com>
1 parent c3aed7a commit f565cb2

File tree

24 files changed

+1676
-747
lines changed

24 files changed

+1676
-747
lines changed

masq_lib/src/blockchains/blockchain_records.rs

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,63 +2,75 @@
22

33
use crate::blockchains::chains::Chain;
44
use crate::constants::{
5-
BASE_MAINNET_CONTRACT_CREATION_BLOCK, BASE_MAINNET_FULL_IDENTIFIER,
6-
BASE_SEPOLIA_CONTRACT_CREATION_BLOCK, BASE_SEPOLIA_FULL_IDENTIFIER, DEV_CHAIN_FULL_IDENTIFIER,
7-
ETH_MAINNET_CONTRACT_CREATION_BLOCK, ETH_MAINNET_FULL_IDENTIFIER,
5+
BASE_GAS_PRICE_CEILING_WEI, BASE_MAINNET_CHAIN_ID, BASE_MAINNET_CONTRACT_CREATION_BLOCK,
6+
BASE_MAINNET_FULL_IDENTIFIER, BASE_SEPOLIA_CHAIN_ID, BASE_SEPOLIA_CONTRACT_CREATION_BLOCK,
7+
BASE_SEPOLIA_FULL_IDENTIFIER, DEV_CHAIN_FULL_IDENTIFIER, DEV_CHAIN_ID,
8+
DEV_GAS_PRICE_CEILING_WEI, ETH_GAS_PRICE_CEILING_WEI, ETH_MAINNET_CHAIN_ID,
9+
ETH_MAINNET_CONTRACT_CREATION_BLOCK, ETH_MAINNET_FULL_IDENTIFIER, ETH_ROPSTEN_CHAIN_ID,
810
ETH_ROPSTEN_CONTRACT_CREATION_BLOCK, ETH_ROPSTEN_FULL_IDENTIFIER,
9-
MULTINODE_TESTNET_CONTRACT_CREATION_BLOCK, POLYGON_AMOY_CONTRACT_CREATION_BLOCK,
10-
POLYGON_AMOY_FULL_IDENTIFIER, POLYGON_MAINNET_CONTRACT_CREATION_BLOCK,
11-
POLYGON_MAINNET_FULL_IDENTIFIER,
11+
MULTINODE_TESTNET_CONTRACT_CREATION_BLOCK, POLYGON_AMOY_CHAIN_ID,
12+
POLYGON_AMOY_CONTRACT_CREATION_BLOCK, POLYGON_AMOY_FULL_IDENTIFIER,
13+
POLYGON_GAS_PRICE_CEILING_WEI, POLYGON_MAINNET_CHAIN_ID,
14+
POLYGON_MAINNET_CONTRACT_CREATION_BLOCK, POLYGON_MAINNET_FULL_IDENTIFIER,
1215
};
1316
use ethereum_types::{Address, H160};
1417

18+
// TODO these should probably be a static (it's a shame that we construct the data every time anew
19+
// when we ask for the chain specs), and dynamic initialization should be allowed as well
1520
pub const CHAINS: [BlockchainRecord; 7] = [
1621
BlockchainRecord {
1722
self_id: Chain::PolyMainnet,
18-
num_chain_id: 137,
23+
num_chain_id: POLYGON_MAINNET_CHAIN_ID,
1924
literal_identifier: POLYGON_MAINNET_FULL_IDENTIFIER,
25+
gas_price_safe_ceiling_minor: POLYGON_GAS_PRICE_CEILING_WEI,
2026
contract: POLYGON_MAINNET_CONTRACT_ADDRESS,
2127
contract_creation_block: POLYGON_MAINNET_CONTRACT_CREATION_BLOCK,
2228
},
2329
BlockchainRecord {
2430
self_id: Chain::EthMainnet,
25-
num_chain_id: 1,
31+
num_chain_id: ETH_MAINNET_CHAIN_ID,
2632
literal_identifier: ETH_MAINNET_FULL_IDENTIFIER,
33+
gas_price_safe_ceiling_minor: ETH_GAS_PRICE_CEILING_WEI,
2734
contract: ETH_MAINNET_CONTRACT_ADDRESS,
2835
contract_creation_block: ETH_MAINNET_CONTRACT_CREATION_BLOCK,
2936
},
3037
BlockchainRecord {
3138
self_id: Chain::BaseMainnet,
32-
num_chain_id: 8453,
39+
num_chain_id: BASE_MAINNET_CHAIN_ID,
3340
literal_identifier: BASE_MAINNET_FULL_IDENTIFIER,
41+
gas_price_safe_ceiling_minor: BASE_GAS_PRICE_CEILING_WEI,
3442
contract: BASE_MAINNET_CONTRACT_ADDRESS,
3543
contract_creation_block: BASE_MAINNET_CONTRACT_CREATION_BLOCK,
3644
},
3745
BlockchainRecord {
3846
self_id: Chain::BaseSepolia,
39-
num_chain_id: 84532,
47+
num_chain_id: BASE_SEPOLIA_CHAIN_ID,
4048
literal_identifier: BASE_SEPOLIA_FULL_IDENTIFIER,
49+
gas_price_safe_ceiling_minor: BASE_GAS_PRICE_CEILING_WEI,
4150
contract: BASE_SEPOLIA_TESTNET_CONTRACT_ADDRESS,
4251
contract_creation_block: BASE_SEPOLIA_CONTRACT_CREATION_BLOCK,
4352
},
4453
BlockchainRecord {
4554
self_id: Chain::PolyAmoy,
46-
num_chain_id: 80002,
55+
num_chain_id: POLYGON_AMOY_CHAIN_ID,
4756
literal_identifier: POLYGON_AMOY_FULL_IDENTIFIER,
57+
gas_price_safe_ceiling_minor: POLYGON_GAS_PRICE_CEILING_WEI,
4858
contract: POLYGON_AMOY_TESTNET_CONTRACT_ADDRESS,
4959
contract_creation_block: POLYGON_AMOY_CONTRACT_CREATION_BLOCK,
5060
},
5161
BlockchainRecord {
5262
self_id: Chain::EthRopsten,
53-
num_chain_id: 3,
63+
num_chain_id: ETH_ROPSTEN_CHAIN_ID,
5464
literal_identifier: ETH_ROPSTEN_FULL_IDENTIFIER,
65+
gas_price_safe_ceiling_minor: ETH_GAS_PRICE_CEILING_WEI,
5566
contract: ETH_ROPSTEN_TESTNET_CONTRACT_ADDRESS,
5667
contract_creation_block: ETH_ROPSTEN_CONTRACT_CREATION_BLOCK,
5768
},
5869
BlockchainRecord {
5970
self_id: Chain::Dev,
60-
num_chain_id: 2,
71+
num_chain_id: DEV_CHAIN_ID,
6172
literal_identifier: DEV_CHAIN_FULL_IDENTIFIER,
73+
gas_price_safe_ceiling_minor: DEV_GAS_PRICE_CEILING_WEI,
6274
contract: MULTINODE_TESTNET_CONTRACT_ADDRESS,
6375
contract_creation_block: MULTINODE_TESTNET_CONTRACT_CREATION_BLOCK,
6476
},
@@ -69,6 +81,7 @@ pub struct BlockchainRecord {
6981
pub self_id: Chain,
7082
pub num_chain_id: u64,
7183
pub literal_identifier: &'static str,
84+
pub gas_price_safe_ceiling_minor: u128,
7285
pub contract: Address,
7386
pub contract_creation_block: u64,
7487
}
@@ -115,7 +128,7 @@ const POLYGON_MAINNET_CONTRACT_ADDRESS: Address = H160([
115128
mod tests {
116129
use super::*;
117130
use crate::blockchains::chains::chain_from_chain_identifier_opt;
118-
use crate::constants::BASE_MAINNET_CONTRACT_CREATION_BLOCK;
131+
use crate::constants::{BASE_MAINNET_CONTRACT_CREATION_BLOCK, WEIS_IN_GWEI};
119132
use std::collections::HashSet;
120133
use std::iter::FromIterator;
121134

@@ -195,6 +208,7 @@ mod tests {
195208
num_chain_id: 1,
196209
self_id: examined_chain,
197210
literal_identifier: "eth-mainnet",
211+
gas_price_safe_ceiling_minor: 100 * WEIS_IN_GWEI as u128,
198212
contract: ETH_MAINNET_CONTRACT_ADDRESS,
199213
contract_creation_block: ETH_MAINNET_CONTRACT_CREATION_BLOCK,
200214
}
@@ -211,6 +225,7 @@ mod tests {
211225
num_chain_id: 3,
212226
self_id: examined_chain,
213227
literal_identifier: "eth-ropsten",
228+
gas_price_safe_ceiling_minor: 100 * WEIS_IN_GWEI as u128,
214229
contract: ETH_ROPSTEN_TESTNET_CONTRACT_ADDRESS,
215230
contract_creation_block: ETH_ROPSTEN_CONTRACT_CREATION_BLOCK,
216231
}
@@ -227,6 +242,7 @@ mod tests {
227242
num_chain_id: 137,
228243
self_id: examined_chain,
229244
literal_identifier: "polygon-mainnet",
245+
gas_price_safe_ceiling_minor: 200 * WEIS_IN_GWEI as u128,
230246
contract: POLYGON_MAINNET_CONTRACT_ADDRESS,
231247
contract_creation_block: POLYGON_MAINNET_CONTRACT_CREATION_BLOCK,
232248
}
@@ -243,6 +259,7 @@ mod tests {
243259
num_chain_id: 80002,
244260
self_id: examined_chain,
245261
literal_identifier: "polygon-amoy",
262+
gas_price_safe_ceiling_minor: 200 * WEIS_IN_GWEI as u128,
246263
contract: POLYGON_AMOY_TESTNET_CONTRACT_ADDRESS,
247264
contract_creation_block: POLYGON_AMOY_CONTRACT_CREATION_BLOCK,
248265
}
@@ -259,6 +276,7 @@ mod tests {
259276
num_chain_id: 8453,
260277
self_id: examined_chain,
261278
literal_identifier: "base-mainnet",
279+
gas_price_safe_ceiling_minor: 50 * WEIS_IN_GWEI as u128,
262280
contract: BASE_MAINNET_CONTRACT_ADDRESS,
263281
contract_creation_block: BASE_MAINNET_CONTRACT_CREATION_BLOCK,
264282
}
@@ -275,6 +293,7 @@ mod tests {
275293
num_chain_id: 84532,
276294
self_id: examined_chain,
277295
literal_identifier: "base-sepolia",
296+
gas_price_safe_ceiling_minor: 50 * WEIS_IN_GWEI as u128,
278297
contract: BASE_SEPOLIA_TESTNET_CONTRACT_ADDRESS,
279298
contract_creation_block: BASE_SEPOLIA_CONTRACT_CREATION_BLOCK,
280299
}
@@ -291,6 +310,7 @@ mod tests {
291310
num_chain_id: 2,
292311
self_id: examined_chain,
293312
literal_identifier: "dev",
313+
gas_price_safe_ceiling_minor: 200 * WEIS_IN_GWEI as u128,
294314
contract: MULTINODE_TESTNET_CONTRACT_ADDRESS,
295315
contract_creation_block: MULTINODE_TESTNET_CONTRACT_CREATION_BLOCK,
296316
}

masq_lib/src/blockchains/chains.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ mod tests {
141141
num_chain_id: 0,
142142
self_id: Chain::PolyMainnet,
143143
literal_identifier: "",
144+
gas_price_safe_ceiling_minor: 0,
144145
contract: Default::default(),
145146
contract_creation_block: 0,
146147
}

masq_lib/src/constants.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub const CURRENT_LOGFILE_NAME: &str = "MASQNode_rCURRENT.log";
1919
pub const MASQ_PROMPT: &str = "masq> ";
2020

2121
pub const DEFAULT_GAS_PRICE: u64 = 1; //TODO ?? Really
22+
pub const DEFAULT_GAS_PRICE_MARGIN: u64 = 30;
2223

2324
pub const WALLET_ADDRESS_LENGTH: usize = 42;
2425
pub const MASQ_TOTAL_SUPPLY: u64 = 37_500_000;
@@ -94,6 +95,13 @@ pub const CENTRAL_DELIMITER: char = '@';
9495
pub const CHAIN_IDENTIFIER_DELIMITER: char = ':';
9596

9697
//chains
98+
pub const POLYGON_MAINNET_CHAIN_ID: u64 = 137;
99+
pub const POLYGON_AMOY_CHAIN_ID: u64 = 80002;
100+
pub const BASE_MAINNET_CHAIN_ID: u64 = 8453;
101+
pub const BASE_SEPOLIA_CHAIN_ID: u64 = 84532;
102+
pub const ETH_MAINNET_CHAIN_ID: u64 = 1;
103+
pub const ETH_ROPSTEN_CHAIN_ID: u64 = 3;
104+
pub const DEV_CHAIN_ID: u64 = 2;
97105
const POLYGON_FAMILY: &str = "polygon";
98106
const ETH_FAMILY: &str = "eth";
99107
const BASE_FAMILY: &str = "base";
@@ -106,6 +114,10 @@ pub const ETH_ROPSTEN_FULL_IDENTIFIER: &str = concatcp!(ETH_FAMILY, LINK, "ropst
106114
pub const BASE_MAINNET_FULL_IDENTIFIER: &str = concatcp!(BASE_FAMILY, LINK, MAINNET);
107115
pub const BASE_SEPOLIA_FULL_IDENTIFIER: &str = concatcp!(BASE_FAMILY, LINK, "sepolia");
108116
pub const DEV_CHAIN_FULL_IDENTIFIER: &str = "dev";
117+
pub const POLYGON_GAS_PRICE_CEILING_WEI: u128 = 200_000_000_000;
118+
pub const ETH_GAS_PRICE_CEILING_WEI: u128 = 100_000_000_000;
119+
pub const BASE_GAS_PRICE_CEILING_WEI: u128 = 50_000_000_000;
120+
pub const DEV_GAS_PRICE_CEILING_WEI: u128 = 200_000_000_000;
109121

110122
#[cfg(test)]
111123
mod tests {
@@ -124,6 +136,7 @@ mod tests {
124136
assert_eq!(CURRENT_LOGFILE_NAME, "MASQNode_rCURRENT.log");
125137
assert_eq!(MASQ_PROMPT, "masq> ");
126138
assert_eq!(DEFAULT_GAS_PRICE, 1);
139+
assert_eq!(DEFAULT_GAS_PRICE_MARGIN, 30);
127140
assert_eq!(WALLET_ADDRESS_LENGTH, 42);
128141
assert_eq!(MASQ_TOTAL_SUPPLY, 37_500_000);
129142
assert_eq!(WEIS_IN_GWEI, 1_000_000_000);
@@ -169,6 +182,13 @@ mod tests {
169182
assert_eq!(VALUE_EXCEEDS_ALLOWED_LIMIT, ACCOUNTANT_PREFIX | 3);
170183
assert_eq!(CENTRAL_DELIMITER, '@');
171184
assert_eq!(CHAIN_IDENTIFIER_DELIMITER, ':');
185+
assert_eq!(POLYGON_MAINNET_CHAIN_ID, 137);
186+
assert_eq!(POLYGON_AMOY_CHAIN_ID, 80002);
187+
assert_eq!(BASE_MAINNET_CHAIN_ID, 8453);
188+
assert_eq!(BASE_SEPOLIA_CHAIN_ID, 84532);
189+
assert_eq!(ETH_MAINNET_CHAIN_ID, 1);
190+
assert_eq!(ETH_ROPSTEN_CHAIN_ID, 3);
191+
assert_eq!(DEV_CHAIN_ID, 2);
172192
assert_eq!(POLYGON_FAMILY, "polygon");
173193
assert_eq!(ETH_FAMILY, "eth");
174194
assert_eq!(BASE_FAMILY, "base");
@@ -180,6 +200,10 @@ mod tests {
180200
assert_eq!(ETH_ROPSTEN_FULL_IDENTIFIER, "eth-ropsten");
181201
assert_eq!(BASE_SEPOLIA_FULL_IDENTIFIER, "base-sepolia");
182202
assert_eq!(DEV_CHAIN_FULL_IDENTIFIER, "dev");
203+
assert_eq!(POLYGON_GAS_PRICE_CEILING_WEI, 200_000_000_000);
204+
assert_eq!(ETH_GAS_PRICE_CEILING_WEI, 100_000_000_000);
205+
assert_eq!(BASE_GAS_PRICE_CEILING_WEI, 50_000_000_000);
206+
assert_eq!(DEV_GAS_PRICE_CEILING_WEI, 200_000_000_000);
183207
assert_eq!(
184208
CLIENT_REQUEST_PAYLOAD_CURRENT_VERSION,
185209
DataVersion { major: 0, minor: 1 }

masq_lib/src/test_utils/mock_blockchain_client_server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ impl MockBlockchainClientServer {
220220
Err(e) if e.kind() == ErrorKind::TimedOut => (),
221221
Err(e) => panic!("MBCS accept() failed: {:?}", e),
222222
};
223-
thread::sleep(Duration::from_millis(100));
223+
thread::sleep(Duration::from_millis(50));
224224
};
225225
drop(listener);
226226
conn.set_nonblocking(true).unwrap();

0 commit comments

Comments
 (0)