Commit 1293825c authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

backwards compatible dtl syncing (#986)

* kovan: fix attempt

* kovan: db fix

* kovan: types are strings from db

* l2geth: parse things as strings

* chore: add changeset

* dtl: also stringify the range query

* geth: dereference

* geth: assign err

* dtl: handle null

* dtl: fix unit tests
parent 86708bb5
---
'@eth-optimism/l2geth': patch
'@eth-optimism/data-transport-layer': patch
---
Fix gasLimit overflow
...@@ -69,7 +69,7 @@ type transaction struct { ...@@ -69,7 +69,7 @@ type transaction struct {
BlockNumber uint64 `json:"blockNumber"` BlockNumber uint64 `json:"blockNumber"`
Timestamp uint64 `json:"timestamp"` Timestamp uint64 `json:"timestamp"`
Value hexutil.Uint64 `json:"value"` Value hexutil.Uint64 `json:"value"`
GasLimit uint64 `json:"gasLimit"` GasLimit uint64 `json:"gasLimit,string"`
Target common.Address `json:"target"` Target common.Address `json:"target"`
Origin *common.Address `json:"origin"` Origin *common.Address `json:"origin"`
Data hexutil.Bytes `json:"data"` Data hexutil.Bytes `json:"data"`
...@@ -84,7 +84,7 @@ type Enqueue struct { ...@@ -84,7 +84,7 @@ type Enqueue struct {
Index *uint64 `json:"ctcIndex"` Index *uint64 `json:"ctcIndex"`
Target *common.Address `json:"target"` Target *common.Address `json:"target"`
Data *hexutil.Bytes `json:"data"` Data *hexutil.Bytes `json:"data"`
GasLimit *uint64 `json:"gasLimit"` GasLimit *uint64 `json:"gasLimit,string"`
Origin *common.Address `json:"origin"` Origin *common.Address `json:"origin"`
BlockNumber *uint64 `json:"blockNumber"` BlockNumber *uint64 `json:"blockNumber"`
Timestamp *uint64 `json:"timestamp"` Timestamp *uint64 `json:"timestamp"`
......
...@@ -379,8 +379,9 @@ export class TransportDB { ...@@ -379,8 +379,9 @@ export class TransportDB {
if (index === null) { if (index === null) {
return null return null
} }
let entry = await this.db.get<TEntry>(`${key}:index`, index)
return this.db.get<TEntry>(`${key}:index`, index) entry = stringify(entry)
return entry
} }
private async _getEntries<TEntry extends Indexed>( private async _getEntries<TEntry extends Indexed>(
...@@ -388,6 +389,28 @@ export class TransportDB { ...@@ -388,6 +389,28 @@ export class TransportDB {
startIndex: number, startIndex: number,
endIndex: number endIndex: number
): Promise<TEntry[] | []> { ): Promise<TEntry[] | []> {
return this.db.range<TEntry>(`${key}:index`, startIndex, endIndex) const entries = await this.db.range<TEntry>(
`${key}:index`,
startIndex,
endIndex
)
const results = []
for (const entry of entries) {
results.push(stringify(entry))
}
return results
}
}
function stringify(entry) {
if (entry === null || entry === undefined) {
return entry
}
if (entry.gasLimit) {
entry.gasLimit = BigNumber.from(entry.gasLimit).toString()
}
if (entry.decoded) {
entry.decoded.gasLimit = BigNumber.from(entry.decoded.gasLimit).toString()
} }
return entry
} }
...@@ -69,7 +69,7 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet< ...@@ -69,7 +69,7 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet<
submitter: l1Transaction.from, submitter: l1Transaction.from,
l1TransactionHash: l1Transaction.hash, l1TransactionHash: l1Transaction.hash,
l1TransactionData: l1Transaction.data, l1TransactionData: l1Transaction.data,
gasLimit: SEQUENCER_GAS_LIMIT, gasLimit: `${SEQUENCER_GAS_LIMIT}`,
prevTotalElements: batchSubmissionEvent.args._prevTotalElements, prevTotalElements: batchSubmissionEvent.args._prevTotalElements,
batchIndex: batchSubmissionEvent.args._batchIndex, batchIndex: batchSubmissionEvent.args._batchIndex,
...@@ -115,7 +115,7 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet< ...@@ -115,7 +115,7 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet<
batchIndex: extraData.batchIndex.toNumber(), batchIndex: extraData.batchIndex.toNumber(),
blockNumber: BigNumber.from(context.blockNumber).toNumber(), blockNumber: BigNumber.from(context.blockNumber).toNumber(),
timestamp: BigNumber.from(context.timestamp).toNumber(), timestamp: BigNumber.from(context.timestamp).toNumber(),
gasLimit: BigNumber.from(extraData.gasLimit).toNumber(), gasLimit: BigNumber.from(extraData.gasLimit).toString(),
target: SEQUENCER_ENTRYPOINT_ADDRESS, target: SEQUENCER_ENTRYPOINT_ADDRESS,
origin: null, origin: null,
data: toHexString(sequencerTransaction), data: toHexString(sequencerTransaction),
...@@ -147,7 +147,7 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet< ...@@ -147,7 +147,7 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet<
batchIndex: extraData.batchIndex.toNumber(), batchIndex: extraData.batchIndex.toNumber(),
blockNumber: BigNumber.from(0).toNumber(), blockNumber: BigNumber.from(0).toNumber(),
timestamp: BigNumber.from(0).toNumber(), timestamp: BigNumber.from(0).toNumber(),
gasLimit: BigNumber.from(0).toNumber(), gasLimit: BigNumber.from(0).toString(),
target: constants.AddressZero, target: constants.AddressZero,
origin: constants.AddressZero, origin: constants.AddressZero,
data: '0x', data: '0x',
......
...@@ -17,7 +17,7 @@ export const handleEventsTransactionEnqueued: EventHandlerSet< ...@@ -17,7 +17,7 @@ export const handleEventsTransactionEnqueued: EventHandlerSet<
index: event.args._queueIndex.toNumber(), index: event.args._queueIndex.toNumber(),
target: event.args._target, target: event.args._target,
data: event.args._data, data: event.args._data,
gasLimit: event.args._gasLimit.toNumber(), gasLimit: event.args._gasLimit.toString(),
origin: event.args._l1TxOrigin, origin: event.args._l1TxOrigin,
blockNumber: BigNumber.from(event.blockNumber).toNumber(), blockNumber: BigNumber.from(event.blockNumber).toNumber(),
timestamp: event.args._timestamp.toNumber(), timestamp: event.args._timestamp.toNumber(),
......
...@@ -57,7 +57,7 @@ export const handleSequencerBlock = { ...@@ -57,7 +57,7 @@ export const handleSequencerBlock = {
transactionEntry = { transactionEntry = {
...transactionEntry, ...transactionEntry,
gasLimit: SEQUENCER_GAS_LIMIT, // ? gasLimit: `${SEQUENCER_GAS_LIMIT}`, // ?
target: SEQUENCER_ENTRYPOINT_ADDRESS, target: SEQUENCER_ENTRYPOINT_ADDRESS,
origin: null, origin: null,
data: serialize( data: serialize(
...@@ -82,7 +82,7 @@ export const handleSequencerBlock = { ...@@ -82,7 +82,7 @@ export const handleSequencerBlock = {
} else { } else {
transactionEntry = { transactionEntry = {
...transactionEntry, ...transactionEntry,
gasLimit: BigNumber.from(transaction.gas).toNumber(), gasLimit: BigNumber.from(transaction.gas).toString(),
target: ethers.utils.getAddress(transaction.to), target: ethers.utils.getAddress(transaction.to),
origin: ethers.utils.getAddress(transaction.l1TxOrigin), origin: ethers.utils.getAddress(transaction.l1TxOrigin),
data: transaction.input, data: transaction.input,
......
...@@ -16,7 +16,7 @@ export interface EnqueueEntry { ...@@ -16,7 +16,7 @@ export interface EnqueueEntry {
index: number index: number
target: string target: string
data: string data: string
gasLimit: number gasLimit: string
origin: string origin: string
blockNumber: number blockNumber: number
timestamp: number timestamp: number
...@@ -28,7 +28,7 @@ export interface TransactionEntry { ...@@ -28,7 +28,7 @@ export interface TransactionEntry {
data: string data: string
blockNumber: number blockNumber: number
timestamp: number timestamp: number
gasLimit: number gasLimit: string
target: string target: string
origin: string origin: string
value: string value: string
......
...@@ -40,7 +40,7 @@ export interface SequencerBatchAppendedExtraData { ...@@ -40,7 +40,7 @@ export interface SequencerBatchAppendedExtraData {
submitter: string submitter: string
l1TransactionData: string l1TransactionData: string
l1TransactionHash: string l1TransactionHash: string
gasLimit: number gasLimit: string
// Stuff from TransactionBatchAppended. // Stuff from TransactionBatchAppended.
prevTotalElements: BigNumber prevTotalElements: BigNumber
......
...@@ -18,7 +18,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.SequencerBatchAppended', ...@@ -18,7 +18,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.SequencerBatchAppended',
submitter: '0xfd7d4de366850c08ee2cba32d851385a3071ec8d', submitter: '0xfd7d4de366850c08ee2cba32d851385a3071ec8d',
l1TransactionHash: l1TransactionHash:
'0x6effe006836b841205ace4d99d7ae1b74ee96aac499a3f358b97fccd32ee9af2', '0x6effe006836b841205ace4d99d7ae1b74ee96aac499a3f358b97fccd32ee9af2',
gasLimit: 548976, gasLimit: '548976',
prevTotalElements: BigNumber.from(73677), prevTotalElements: BigNumber.from(73677),
batchIndex: BigNumber.from(743), batchIndex: BigNumber.from(743),
batchSize: BigNumber.from(101), batchSize: BigNumber.from(101),
......
...@@ -93,7 +93,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.TransactionEnqueued', () ...@@ -93,7 +93,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.TransactionEnqueued', ()
} }
}) })
it('should have a gasLimit equal to the integer value of the _gasLimit argument', () => { it('should have a gasLimit equal to the string value of the _gasLimit argument', () => {
for ( for (
let i = 0; let i = 0;
i < Number.MAX_SAFE_INTEGER; i < Number.MAX_SAFE_INTEGER;
...@@ -113,7 +113,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.TransactionEnqueued', () ...@@ -113,7 +113,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.TransactionEnqueued', ()
const output1 = handleEventsTransactionEnqueued.parseEvent(...input1) const output1 = handleEventsTransactionEnqueued.parseEvent(...input1)
const expected1 = BigNumber.from(i).toNumber() const expected1 = BigNumber.from(i).toString()
expect(output1).to.have.property('gasLimit', expected1) expect(output1).to.have.property('gasLimit', expected1)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment