Skip to content

Commit

Permalink
Merge pull request #1125 from ethereumjs/common-active-eip-check-method
Browse files Browse the repository at this point in the history
Common: Add new isActivatedEIP() method
  • Loading branch information
holgerd77 authored Feb 22, 2021
2 parents ad9def9 + 4163dc7 commit e0fd561
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/common/src/eips/2315.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"comment": "Simple subroutines for the EVM",
"url": "https://eips.ethereum.org/EIPS/eip-2315",
"status": "Draft",
"minimumHardfork": "berlin",
"minimumHardfork": "istanbul",
"gasConfig": {},
"gasPrices": {
"beginsub": {
Expand Down
24 changes: 24 additions & 0 deletions packages/common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,30 @@ export default class Common extends EventEmitter {
return this.paramByHardfork(topic, name, hardfork)
}

/**
* Checks if an EIP is activated by either being included in the EIPs
* manually passed in with the `eips` constructor option or in a
* hardfork currently being active
*
* Note: this method only works for EIPs being supported
* by the `eips` constructor option
* @param eip
*/
isActivatedEIP(eip: number): boolean {
if (this.eips().includes(eip)) {
return true
}
for (const hfChanges of HARDFORK_CHANGES) {
const hf = hfChanges[1]
if (this.gteHardfork(hf['name']) && 'eips' in hf) {
if (hf['eips'].includes(eip)) {
return true
}
}
}
return false
}

/**
* Checks if set or provided hardfork is active on block number
* @param hardfork Hardfork name or null (for HF set)
Expand Down
12 changes: 12 additions & 0 deletions packages/common/tests/eips.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,16 @@ tape('[Common]: Initialization / Chain params', function (t: tape.Test) {

st.end()
})

t.test('isActivatedEIP()', function (st) {
let c = new Common({ chain: 'rinkeby', hardfork: 'istanbul' })
st.equal(c.isActivatedEIP(2315), false, 'istanbul, eips: [] -> false (EIP-2315)')
c = new Common({ chain: 'rinkeby', hardfork: 'istanbul', eips: [2315] })
st.equal(c.isActivatedEIP(2315), true, 'istanbul, eips: [2315] -> true (EIP-2315)')
c = new Common({ chain: 'rinkeby', hardfork: 'berlin' })
st.equal(c.isActivatedEIP(2315), true, 'berlin, eips: [] -> true (EIP-2315)')
st.equal(c.isActivatedEIP(2537), false, 'berlin, eips: [] -> false (EIP-2537)')

st.end()
})
})

0 comments on commit e0fd561

Please sign in to comment.