UNPKG

ethereumjs-common

Version:

Resources common to all Ethereum implementations

98 lines (77 loc) 4.35 kB
const tape = require('tape') const Common = require('../index.js') tape('[Common]: Hardfork logic', function (t) { t.test('Hardfork access', function (st) { let supportedHardforks = [ 'chainstart', 'homestead', 'dao', 'tangerineWhistle', 'spuriousDragon', 'byzantium', 'constantinople', 'hybridCasper' ] let c for (let hardfork of supportedHardforks) { c = new Common('mainnet', hardfork) st.equal(c.hardfork(), hardfork, hardfork) } st.end() }) t.test('isHardforkBlock()', function (st) { let c = new Common('ropsten') st.equal(c.isHardforkBlock('byzantium', 1700000), true, 'should return true for HF change block') st.equal(c.isHardforkBlock('byzantium', 1700001), false, 'should return false for another block') st.end() }) t.test('hardforkBlock()', function (st) { let c = new Common('ropsten') st.equal(c.hardforkBlock('byzantium'), 1700000, 'should return the correct HF change block') st.end() }) t.test('activeHardforks()', function (st) { let c = new Common('ropsten') st.equal(c.activeHardforks().length, 5, 'should return 5 active hardforks for Ropsten') st.equal(c.activeHardforks()[3]['name'], 'spuriousDragon', 'should return the correct HF data for Ropsten') st.equal(c.activeHardforks(9).length, 3, 'should return 3 active hardforks for Ropsten up to block 9') st.equal(c.activeHardforks(10).length, 4, 'should return 4 active hardforks for Ropsten up to block 10') c = new Common('ropsten', null, ['spuriousDragon', 'byzantium', 'constantinople']) st.equal(c.activeHardforks(null, { onlySupported: true }).length, 2, 'should return 2 active HFs when restricted to supported HFs') st.end() }) t.test('activeHardfork()', function (st) { let c = new Common('ropsten') st.equal(c.activeHardfork(), 'byzantium', 'should return byzantium as latest active HF for Ropsten') st.equal(c.activeHardfork(10), 'spuriousDragon', 'should return spuriousDragon as latest active HF for Ropsten for block 10') c = new Common('ropsten', null, ['tangerineWhistle', 'spuriousDragon']) st.equal(c.activeHardfork(null, { onlySupported: true }), 'spuriousDragon', 'should return spuriousDragon as latest active HF for Ropsten with limited supported hardforks') st.end() }) t.test('hardforkIsActiveOnChain()', function (st) { let c = new Common('ropsten') st.equal(c.hardforkIsActiveOnChain('byzantium'), true, 'should return true for byzantium on Ropsten') st.equal(c.hardforkIsActiveOnChain('dao'), false, 'should return false for dao on Ropsten') st.equal(c.hardforkIsActiveOnChain('hybridCasper'), false, 'should return false for hybridCasper on Ropsten') st.equal(c.hardforkIsActiveOnChain('notexistinghardfork'), false, 'should return false for a non-existing HF on Ropsten') st.doesNotThrow(function () { c.hardforkIsActiveOnChain('spuriousDragon', { onlySupported: true }) }, /unsupported hardfork$/, 'should not throw with unsupported Hf and onlySupported set to false') // eslint-disable-line no-new c = new Common('ropsten', null, ['byzantium', 'constantinople']) st.throws(function () { c.hardforkIsActiveOnChain('spuriousDragon', { onlySupported: true }) }, /unsupported hardfork$/, 'should throw with unsupported Hf and onlySupported set to true') // eslint-disable-line no-new st.end() }) t.test('hardforkIsActiveOnBlock()', function (st) { let c = new Common('ropsten') st.equal(c.hardforkIsActiveOnBlock('byzantium', 1700000), true, 'Ropsten, byzantium, 1700000 -> true') st.equal(c.hardforkIsActiveOnBlock('byzantium', 1700005), true, 'Ropsten, byzantium, 1700005 -> true') st.equal(c.hardforkIsActiveOnBlock('byzantium', 1699999), false, 'Ropsten, byzantium, 1699999 -> false') st.end() }) t.test('consensus()/finality()', function (st) { let c = new Common('mainnet') st.equal(c.consensus('byzantium'), 'pow', 'should return pow for byzantium consensus') st.equal(c.consensus('hybridCasper'), 'pow', 'should return pow for hybridCasper consensus') st.equal(c.finality('byzantium'), null, 'should return null for byzantium finality') st.equal(c.finality('hybridCasper'), 'pos', 'should return pos for hybridCasper finality') st.end() }) })