Commit 2e72fd90 authored by smartcontracts's avatar smartcontracts Committed by Kelvin Fichter

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
parent db0dbfb2
---
'@eth-optimism/contracts': minor
'@eth-optimism/data-transport-layer': minor
---
Update AddressSet event to speed search up a bit. Breaks AddressSet API.
...@@ -14,8 +14,9 @@ contract Lib_AddressManager is Ownable { ...@@ -14,8 +14,9 @@ contract Lib_AddressManager is Ownable {
**********/ **********/
event AddressSet( event AddressSet(
string _name, string indexed _name,
address _newAddress address _newAddress,
address _oldAddress
); );
...@@ -42,11 +43,14 @@ contract Lib_AddressManager is Ownable { ...@@ -42,11 +43,14 @@ contract Lib_AddressManager is Ownable {
external external
onlyOwner onlyOwner
{ {
addresses[_getNameHash(_name)] = _address; bytes32 nameHash = _getNameHash(_name);
address oldAddress = addresses[nameHash];
addresses[nameHash] = _address;
emit AddressSet( emit AddressSet(
_name, _name,
_address _address,
oldAddress
); );
} }
......
...@@ -3,6 +3,7 @@ import { ethers } from 'ethers' ...@@ -3,6 +3,7 @@ import { ethers } from 'ethers'
export interface EventArgsAddressSet { export interface EventArgsAddressSet {
_name: string _name: string
_newAddress: string _newAddress: string
_oldAddress: string
} }
export interface EventArgsTransactionEnqueued { export interface EventArgsTransactionEnqueued {
......
...@@ -236,13 +236,11 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> { ...@@ -236,13 +236,11 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
// We need to figure out how to make this work without Infura. Mark and I think that infura is // We need to figure out how to make this work without Infura. Mark and I think that infura is
// doing some indexing of events beyond Geth's native capabilities, meaning some event logic // doing some indexing of events beyond Geth's native capabilities, meaning some event logic
// will only work on Infura and not on a local geth instance. Not great. // will only work on Infura and not on a local geth instance. Not great.
const addressSetEvents = ((await this.state.contracts.Lib_AddressManager.queryFilter( const addressSetEvents = await this.state.contracts.Lib_AddressManager.queryFilter(
this.state.contracts.Lib_AddressManager.filters.AddressSet(), this.state.contracts.Lib_AddressManager.filters.AddressSet(contractName),
fromL1Block, fromL1Block,
toL1Block toL1Block
)) as TypedEthersEvent<EventArgsAddressSet>[]).filter((event) => { )
return event.args._name === contractName
})
// We're going to parse things out in ranges because the address of a given contract may have // We're going to parse things out in ranges because the address of a given contract may have
// changed in the range provided by the user. // changed in the range provided by the user.
...@@ -320,21 +318,14 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> { ...@@ -320,21 +318,14 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
contractName: string, contractName: string,
blockNumber: number blockNumber: number
): Promise<string> { ): Promise<string> {
// TODO: Should be much easier than this. Need to change the params of this event. const events = await this.state.contracts.Lib_AddressManager.queryFilter(
const relevantAddressSetEvents = ( this.state.contracts.Lib_AddressManager.filters.AddressSet(contractName),
await this.state.contracts.Lib_AddressManager.queryFilter( this.state.startingL1BlockNumber,
this.state.contracts.Lib_AddressManager.filters.AddressSet(), blockNumber
this.state.startingL1BlockNumber )
)
).filter((event) => {
return (
event.args._name === contractName && event.blockNumber < blockNumber
)
})
if (relevantAddressSetEvents.length > 0) { if (events.length > 0) {
return relevantAddressSetEvents[relevantAddressSetEvents.length - 1].args return events[events.length - 1].args._newAddress
._newAddress
} else { } else {
// Address wasn't set before this. // Address wasn't set before this.
return constants.AddressZero return constants.AddressZero
......
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