Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions packages/message-relayer/src/exec/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,12 @@ const main = async () => {
parseInt(env.RESUBMISSION_TIMEOUT, 10) || 60
)

// enable filter for message relayer
const ENABLE_RELAYER_FILTER = config.bool(
'enable-relayer-filter',
env.ENABLE_RELAYER_FILTER === 'true'
)

if (!L1_NODE_WEB3_URL) {
throw new Error('Must pass L1_NODE_WEB3_URL')
}
Expand Down Expand Up @@ -163,6 +169,7 @@ const main = async () => {
multiRelayLimit: MULTI_RELAY_LIMIT,
resubmissionTimeout: RESUBMISSION_TIMEOUT * 1000,
isFastRelayer: FAST_RELAYER,
enableRelayerFilter: ENABLE_RELAYER_FILTER,
})

await service.start()
Expand Down
37 changes: 30 additions & 7 deletions packages/message-relayer/src/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ interface MessageRelayerOptions {
maxWaitTxTimeS: number

isFastRelayer: boolean

enableRelayerFilter: boolean
}

export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
Expand Down Expand Up @@ -120,7 +122,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
messenger: CrossChainMessenger
highestCheckedL2Tx: number
//filter
filter: Array<any>
relayerFilter: Array<any>
fastRelayerFilter: Array<any>
lastFilterPollingTimestamp: number
//batch system
timeOfLastRelayS: number
Expand Down Expand Up @@ -153,7 +156,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
this.state.highestCheckedL2Tx = this.options.fromL2TransactionIndex || 1

// filter
this.state.filter = []
this.state.relayerFilter = []
this.state.fastRelayerFilter = []
this.state.lastFilterPollingTimestamp = 0

//batch system
Expand Down Expand Up @@ -448,13 +452,21 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
// each message to L1.
for (const message of messages) {
// filter out messages not meant for this relayer
const isFastRelayerMessage =
this.state.fastRelayerFilter.includes(message.target)
const isRelayerMessage = this.state.relayerFilter.includes(
message.target
)
if (this.options.isFastRelayer) {
if (!this.state.filter.includes(message.target)) {
if (!isFastRelayerMessage) {
this.logger.info('Message not intended for target, skipping.')
continue
}
} else {
if (this.state.filter.includes(message.target)) {
if (
(this.options.enableRelayerFilter && !isRelayerMessage) ||
isFastRelayerMessage
) {
this.logger.info('Message not intended for target, skipping.')
continue
}
Expand Down Expand Up @@ -517,11 +529,22 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
// export L1LIQPOOL=$(echo $ADDRESSES | jq -r '.L1LiquidityPool')
// export L1M=$(echo $ADDRESSES | jq -r '.L1Message')
// echo '["'$L1LIQPOOL'", "'$L1M'"]' > dist/dumps/whitelist.json
const filterSelect = [filter.Proxy__L1LiquidityPool, filter.L1Message]
const fastRelayerFilterSelect = [
filter.Proxy__L1LiquidityPool,
filter.L1Message,
]
const relayerFilterSelect = [
filter.Proxy__L1StandardBridge,
filter.Proxy__L1NFTBridge,
]

this.state.lastFilterPollingTimestamp = new Date().getTime()
this.state.filter = filterSelect
this.logger.info('Found the filter', { filterSelect })
this.state.fastRelayerFilter = fastRelayerFilterSelect
this.state.relayerFilter = relayerFilterSelect
this.logger.info('Found the two filter', {
relayerFilterSelect,
fastRelayerFilterSelect,
})
}
}
} catch {
Expand Down