Skip to content

Commit 2d9cdd8

Browse files
authored
Fix parsing balance in generateCanonicalGenesis (#589)
1 parent 7c24795 commit 2d9cdd8

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/state/stateManager.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,11 @@ export default class StateManager {
526526
addresses,
527527
(address: string, done: any) => {
528528
const account = new Account()
529-
account.balance = new BN(initState[address]).toArrayLike(Buffer)
529+
if (initState[address].slice(0, 2) === '0x') {
530+
account.balance = new BN(initState[address].slice(2), 16).toArrayLike(Buffer)
531+
} else {
532+
account.balance = new BN(initState[address]).toArrayLike(Buffer)
533+
}
530534
const addressBuffer = utils.toBuffer(address)
531535
this._trie.put(addressBuffer, account.serialize(), done)
532536
},

tests/api/state/stateManager.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,25 @@ tape('StateManager', (t) => {
138138
st.end()
139139
})
140140

141+
t.test('should generate correct genesis state root for all chains', async (st) => {
142+
const chains = ['mainnet', 'ropsten', 'rinkeby', 'kovan', 'goerli']
143+
for (const chain of chains) {
144+
const common = new Common(chain, 'petersburg')
145+
const expectedStateRoot = Buffer.from(common.genesis().stateRoot.slice(2), 'hex')
146+
const stateManager = new StateManager({ common: common })
147+
148+
const generateCanonicalGenesis = promisify((...args) => stateManager.generateCanonicalGenesis(...args))
149+
const getStateRoot = promisify((...args) => stateManager.getStateRoot(...args))
150+
151+
await generateCanonicalGenesis()
152+
let stateRoot = await getStateRoot()
153+
154+
st.true(stateRoot.equals(expectedStateRoot), `generateCanonicalGenesis should produce correct state root for ${chain}`)
155+
}
156+
157+
st.end()
158+
})
159+
141160
t.test('should dump storage', async st => {
142161
const stateManager = new StateManager()
143162
const addressBuffer = Buffer.from('a94f5374fce5edbc8e2a8697c15331677e6ebf0b', 'hex')

0 commit comments

Comments
 (0)