@@ -44,7 +44,7 @@ public extension Web3 {
44
44
/// - current: Current block
45
45
/// - Returns: True or false if block is EIP-1559 or not
46
46
static func isEip1559Block( parent: Block , current: Block ) -> Bool {
47
- let parentGasLimit = parent. chainVersion >= . London ? parent. gasLimit : parent. gasLimit * Web3. ElasticityMultiplier
47
+ let parentGasLimit = parent. mainChainVersion >= . London ? parent. gasLimit : parent. gasLimit * Web3. ElasticityMultiplier
48
48
49
49
guard verifyGasLimit ( parentGasLimit: parentGasLimit, currentGasLimit: current. gasLimit) else { return false }
50
50
@@ -60,39 +60,41 @@ public extension Web3 {
60
60
///
61
61
/// Calculation for current `Block` based on parents block object only
62
62
///
63
- /// If passed block isn't `ChainVersion.London` one will return
63
+ /// If passed block isn't `ChainVersion.London` nil will return
64
64
///
65
65
/// - Parameter parent: Parent `Block`
66
66
/// - Returns: Amount of expected base fee for current `Block`
67
- static func calcBaseFee( _ parent: Block ) -> BigUInt {
67
+ static func calcBaseFee( _ parent: Block ) -> BigUInt ? {
68
+ guard let parentBaseFee = parent. baseFeePerGas else { return nil }
69
+
68
70
// If given blocks ChainVersion is lower than London — always returns InitialBaseFee
69
- guard parent. chainVersion >= . London else { return Web3 . InitialBaseFee }
71
+ guard parent. mainChainVersion >= . London else { return Web3 . InitialBaseFee }
70
72
71
73
let parentGasTarget = parent. gasLimit / Web3. ElasticityMultiplier
72
74
73
75
if parent. gasUsed > parentGasTarget {
74
76
// If the parent block used more gas than its target, the baseFee should increase.
75
77
let gasUsedDelta = parent. gasUsed - parentGasTarget
76
- let baseFeePerGasDelta = max ( parent . baseFeePerGas * gasUsedDelta / parentGasTarget / Web3. BaseFeeChangeDenominator, 1 )
77
- let expectedBaseFeePerGas = parent . baseFeePerGas + baseFeePerGasDelta
78
+ let baseFeePerGasDelta = max ( parentBaseFee * gasUsedDelta / parentGasTarget / Web3. BaseFeeChangeDenominator, 1 )
79
+ let expectedBaseFeePerGas = parentBaseFee + baseFeePerGasDelta
78
80
79
81
return expectedBaseFeePerGas
80
82
} else if parent. gasUsed < parentGasTarget {
81
83
// Otherwise if the parent block used less gas than its target, the baseFee should decrease.
82
84
let gasUsedDelta = parentGasTarget - parent. gasUsed
83
- let baseFeePerGasDelta = parent . baseFeePerGas * gasUsedDelta / parentGasTarget / Web3. BaseFeeChangeDenominator
84
- let expectedBaseFeePerGas = parent . baseFeePerGas - baseFeePerGasDelta
85
+ let baseFeePerGasDelta = parentBaseFee * gasUsedDelta / parentGasTarget / Web3. BaseFeeChangeDenominator
86
+ let expectedBaseFeePerGas = parentBaseFee - baseFeePerGasDelta
85
87
86
88
return expectedBaseFeePerGas
87
89
} else {
88
90
// If the parent gasUsed is the same as the target, the baseFee remains unchanged.
89
- return parent . baseFeePerGas
91
+ return parentBaseFee
90
92
}
91
93
}
92
94
}
93
95
94
96
public extension Web3 {
95
- enum ChainVersion : BigUInt {
97
+ enum MainChainVersion : BigUInt {
96
98
/// Byzantium switch block
97
99
///
98
100
/// Date: 16.10.2017
@@ -149,29 +151,29 @@ public extension Web3 {
149
151
}
150
152
}
151
153
152
- static func getChainVersion( of block: BigUInt ) -> ChainVersion {
154
+ static func getChainVersion( of block: BigUInt ) -> MainChainVersion {
153
155
// Iterate given block number over each ChainVersion block numbers
154
156
// to get the block's ChainVersion.
155
- if block < ChainVersion . Constantinople. mainNetFisrtBlockNumber {
157
+ if block < MainChainVersion . Constantinople. mainNetFisrtBlockNumber {
156
158
return . Byzantium
157
159
// ~= means included in a given range
158
- } else if ChainVersion . Constantinople. mainNetFisrtBlockNumber..< ChainVersion . Istanbul. mainNetFisrtBlockNumber ~= block {
160
+ } else if MainChainVersion . Constantinople. mainNetFisrtBlockNumber..< MainChainVersion . Istanbul. mainNetFisrtBlockNumber ~= block {
159
161
return . Constantinople
160
- } else if ChainVersion . Istanbul. mainNetFisrtBlockNumber..< ChainVersion . MuirGlacier. mainNetFisrtBlockNumber ~= block {
162
+ } else if MainChainVersion . Istanbul. mainNetFisrtBlockNumber..< MainChainVersion . MuirGlacier. mainNetFisrtBlockNumber ~= block {
161
163
return . Istanbul
162
- } else if ChainVersion . MuirGlacier. mainNetFisrtBlockNumber..< ChainVersion . Berlin. mainNetFisrtBlockNumber ~= block {
164
+ } else if MainChainVersion . MuirGlacier. mainNetFisrtBlockNumber..< MainChainVersion . Berlin. mainNetFisrtBlockNumber ~= block {
163
165
return . MuirGlacier
164
- } else if ChainVersion . Berlin. mainNetFisrtBlockNumber..< ChainVersion . London. mainNetFisrtBlockNumber ~= block {
166
+ } else if MainChainVersion . Berlin. mainNetFisrtBlockNumber..< MainChainVersion . London. mainNetFisrtBlockNumber ~= block {
165
167
return . Berlin
166
- } else if ChainVersion . London. mainNetFisrtBlockNumber..< ChainVersion . ArrowGlacier. mainNetFisrtBlockNumber ~= block {
168
+ } else if MainChainVersion . London. mainNetFisrtBlockNumber..< MainChainVersion . ArrowGlacier. mainNetFisrtBlockNumber ~= block {
167
169
return . London
168
- } else if block >= ChainVersion . ArrowGlacier. mainNetFisrtBlockNumber {
170
+ } else if block >= MainChainVersion . ArrowGlacier. mainNetFisrtBlockNumber {
169
171
// Pass to the default return.
170
172
}
171
173
return . ArrowGlacier
172
174
}
173
175
}
174
176
175
- extension Web3 . ChainVersion : Comparable {
176
- public static func < ( lhs: Web3 . ChainVersion , rhs: Web3 . ChainVersion ) -> Bool { return lhs. mainNetFisrtBlockNumber < rhs. mainNetFisrtBlockNumber }
177
+ extension Web3 . MainChainVersion : Comparable {
178
+ public static func < ( lhs: Web3 . MainChainVersion , rhs: Web3 . MainChainVersion ) -> Bool { return lhs. mainNetFisrtBlockNumber < rhs. mainNetFisrtBlockNumber }
177
179
}
0 commit comments