Skip to content

Commit 3f3d9f0

Browse files
feat[contracts]: Update Lib_AddressManager.AddressSet event to speed up data transport layer (#820)
* feat: update and improve AddressSet event * chore: add changeset * Update Lib_AddressManager.sol
1 parent 7b14146 commit 3f3d9f0

File tree

4 files changed

+25
-23
lines changed

4 files changed

+25
-23
lines changed

.changeset/flat-bananas-perform.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@eth-optimism/contracts': minor
3+
'@eth-optimism/data-transport-layer': minor
4+
---
5+
6+
Update AddressSet event to speed search up a bit. Breaks AddressSet API.

packages/contracts/contracts/optimistic-ethereum/libraries/resolver/Lib_AddressManager.sol

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ contract Lib_AddressManager is Ownable {
1414
**********/
1515

1616
event AddressSet(
17-
string _name,
18-
address _newAddress
17+
string indexed _name,
18+
address _newAddress,
19+
address _oldAddress
1920
);
2021

2122

@@ -42,11 +43,14 @@ contract Lib_AddressManager is Ownable {
4243
external
4344
onlyOwner
4445
{
45-
addresses[_getNameHash(_name)] = _address;
46+
bytes32 nameHash = _getNameHash(_name);
47+
address oldAddress = addresses[nameHash];
48+
addresses[nameHash] = _address;
4649

4750
emit AddressSet(
4851
_name,
49-
_address
52+
_address,
53+
oldAddress
5054
);
5155
}
5256

packages/core-utils/src/events.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { ethers } from 'ethers'
33
export interface EventArgsAddressSet {
44
_name: string
55
_newAddress: string
6+
_oldAddress: string
67
}
78

89
export interface EventArgsTransactionEnqueued {

packages/data-transport-layer/src/services/l1-ingestion/service.ts

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,11 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
236236
// We need to figure out how to make this work without Infura. Mark and I think that infura is
237237
// doing some indexing of events beyond Geth's native capabilities, meaning some event logic
238238
// will only work on Infura and not on a local geth instance. Not great.
239-
const addressSetEvents = ((await this.state.contracts.Lib_AddressManager.queryFilter(
240-
this.state.contracts.Lib_AddressManager.filters.AddressSet(),
239+
const addressSetEvents = await this.state.contracts.Lib_AddressManager.queryFilter(
240+
this.state.contracts.Lib_AddressManager.filters.AddressSet(contractName),
241241
fromL1Block,
242242
toL1Block
243-
)) as TypedEthersEvent<EventArgsAddressSet>[]).filter((event) => {
244-
return event.args._name === contractName
245-
})
243+
)
246244

247245
// We're going to parse things out in ranges because the address of a given contract may have
248246
// changed in the range provided by the user.
@@ -320,21 +318,14 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
320318
contractName: string,
321319
blockNumber: number
322320
): Promise<string> {
323-
// TODO: Should be much easier than this. Need to change the params of this event.
324-
const relevantAddressSetEvents = (
325-
await this.state.contracts.Lib_AddressManager.queryFilter(
326-
this.state.contracts.Lib_AddressManager.filters.AddressSet(),
327-
this.state.startingL1BlockNumber
328-
)
329-
).filter((event) => {
330-
return (
331-
event.args._name === contractName && event.blockNumber < blockNumber
332-
)
333-
})
321+
const events = await this.state.contracts.Lib_AddressManager.queryFilter(
322+
this.state.contracts.Lib_AddressManager.filters.AddressSet(contractName),
323+
this.state.startingL1BlockNumber,
324+
blockNumber
325+
)
334326

335-
if (relevantAddressSetEvents.length > 0) {
336-
return relevantAddressSetEvents[relevantAddressSetEvents.length - 1].args
337-
._newAddress
327+
if (events.length > 0) {
328+
return events[events.length - 1].args._newAddress
338329
} else {
339330
// Address wasn't set before this.
340331
return constants.AddressZero

0 commit comments

Comments
 (0)