Commit 529778e5 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge branch 'develop' into aj/capture-tx-trace

parents f6256997 be6668ec
...@@ -170,7 +170,7 @@ require ( ...@@ -170,7 +170,7 @@ require (
github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/status-im/keycard-go v0.2.0 // indirect github.com/status-im/keycard-go v0.2.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect github.com/stretchr/objx v0.5.0 // indirect
github.com/supranational/blst v0.3.11-0.20230406105308-e9dfc5ee724b // indirect github.com/supranational/blst v0.3.11 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect
github.com/tklauser/numcpus v0.5.0 // indirect github.com/tklauser/numcpus v0.5.0 // indirect
......
...@@ -764,8 +764,8 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F ...@@ -764,8 +764,8 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/supranational/blst v0.3.11-0.20230406105308-e9dfc5ee724b h1:u49mjRnygnB34h8OKbnNJFVUtWSKIKb1KukdV8bILUM= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4=
github.com/supranational/blst v0.3.11-0.20230406105308-e9dfc5ee724b/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI=
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48=
......
...@@ -23,17 +23,17 @@ type BlockHeader struct { ...@@ -23,17 +23,17 @@ type BlockHeader struct {
Number U256 Number U256
Timestamp uint64 Timestamp uint64
GethHeader *GethHeader `gorm:"serializer:rlp;column:rlp_bytes"` RLPHeader *RLPHeader `gorm:"serializer:rlp;column:rlp_bytes"`
} }
func BlockHeaderFromGethHeader(header *types.Header) BlockHeader { func BlockHeaderFromHeader(header *types.Header) BlockHeader {
return BlockHeader{ return BlockHeader{
Hash: header.Hash(), Hash: header.Hash(),
ParentHash: header.ParentHash, ParentHash: header.ParentHash,
Number: U256{Int: header.Number}, Number: U256{Int: header.Number},
Timestamp: header.Time, Timestamp: header.Time,
GethHeader: (*GethHeader)(header), RLPHeader: (*RLPHeader)(header),
} }
} }
......
...@@ -2,6 +2,7 @@ package database ...@@ -2,6 +2,7 @@ package database
import ( import (
"errors" "errors"
"math/big"
"gorm.io/gorm" "gorm.io/gorm"
...@@ -17,18 +18,22 @@ import ( ...@@ -17,18 +18,22 @@ import (
type ContractEvent struct { type ContractEvent struct {
GUID uuid.UUID `gorm:"primaryKey"` GUID uuid.UUID `gorm:"primaryKey"`
// Some useful derived fields
BlockHash common.Hash `gorm:"serializer:json"` BlockHash common.Hash `gorm:"serializer:json"`
ContractAddress common.Address `gorm:"serializer:json"` ContractAddress common.Address `gorm:"serializer:json"`
TransactionHash common.Hash `gorm:"serializer:json"` TransactionHash common.Hash `gorm:"serializer:json"`
LogIndex uint64
EventSignature common.Hash `gorm:"serializer:json"` EventSignature common.Hash `gorm:"serializer:json"`
LogIndex uint64
Timestamp uint64 Timestamp uint64
GethLog *types.Log `gorm:"serializer:rlp;column:rlp_bytes"` // NOTE: NOT ALL THE DERIVED FIELDS ON `types.Log` ARE
// AVAILABLE. FIELDS LISTED ABOVE ARE FILLED IN
RLPLog *types.Log `gorm:"serializer:rlp;column:rlp_bytes"`
} }
func ContractEventFromGethLog(log *types.Log, timestamp uint64) ContractEvent { func ContractEventFromLog(log *types.Log, timestamp uint64) ContractEvent {
eventSig := common.Hash{} eventSig := common.Hash{}
if len(log.Topics) > 0 { if len(log.Topics) > 0 {
eventSig = log.Topics[0] eventSig = log.Topics[0]
...@@ -38,18 +43,27 @@ func ContractEventFromGethLog(log *types.Log, timestamp uint64) ContractEvent { ...@@ -38,18 +43,27 @@ func ContractEventFromGethLog(log *types.Log, timestamp uint64) ContractEvent {
GUID: uuid.New(), GUID: uuid.New(),
BlockHash: log.BlockHash, BlockHash: log.BlockHash,
ContractAddress: log.Address,
TransactionHash: log.TxHash, TransactionHash: log.TxHash,
ContractAddress: log.Address,
EventSignature: eventSig, EventSignature: eventSig,
LogIndex: uint64(log.Index), LogIndex: uint64(log.Index),
Timestamp: timestamp, Timestamp: timestamp,
GethLog: log, RLPLog: log,
} }
} }
func (c *ContractEvent) AfterFind(tx *gorm.DB) error {
// Fill in some of the derived fields that are not
// populated when decoding the RLPLog from RLP
c.RLPLog.BlockHash = c.BlockHash
c.RLPLog.TxHash = c.TransactionHash
c.RLPLog.Index = uint(c.LogIndex)
return nil
}
type L1ContractEvent struct { type L1ContractEvent struct {
ContractEvent `gorm:"embedded"` ContractEvent `gorm:"embedded"`
} }
...@@ -61,9 +75,11 @@ type L2ContractEvent struct { ...@@ -61,9 +75,11 @@ type L2ContractEvent struct {
type ContractEventsView interface { type ContractEventsView interface {
L1ContractEvent(uuid.UUID) (*L1ContractEvent, error) L1ContractEvent(uuid.UUID) (*L1ContractEvent, error)
L1ContractEventByTxLogIndex(common.Hash, uint64) (*L1ContractEvent, error) L1ContractEventByTxLogIndex(common.Hash, uint64) (*L1ContractEvent, error)
L1ContractEventsWithFilter(ContractEvent, *big.Int, *big.Int) ([]L1ContractEvent, error)
L2ContractEvent(uuid.UUID) (*L2ContractEvent, error) L2ContractEvent(uuid.UUID) (*L2ContractEvent, error)
L2ContractEventByTxLogIndex(common.Hash, uint64) (*L2ContractEvent, error) L2ContractEventByTxLogIndex(common.Hash, uint64) (*L2ContractEvent, error)
L2ContractEventsWithFilter(ContractEvent, *big.Int, *big.Int) ([]L2ContractEvent, error)
} }
type ContractEventsDB interface { type ContractEventsDB interface {
...@@ -120,6 +136,30 @@ func (db *contractEventsDB) L1ContractEventByTxLogIndex(txHash common.Hash, logI ...@@ -120,6 +136,30 @@ func (db *contractEventsDB) L1ContractEventByTxLogIndex(txHash common.Hash, logI
return &l1ContractEvent, nil return &l1ContractEvent, nil
} }
func (db *contractEventsDB) L1ContractEventsWithFilter(filter ContractEvent, fromHeight, toHeight *big.Int) ([]L1ContractEvent, error) {
if fromHeight == nil {
fromHeight = big.NewInt(0)
}
query := db.gorm.Table("l1_contract_events").Where(&filter)
query = query.Joins("INNER JOIN l1_block_headers ON l1_contract_events.block_hash = l1_block_headers.hash")
query = query.Where("l1_block_headers.number >= ? AND l1_block_headers.number <= ?", fromHeight, toHeight)
query = query.Order("l1_block_headers.number ASC").Select("l1_contract_events.*")
// NOTE: We use `Find` here instead of `Scan` since `Scan` doesn't not support
// model hooks like `ContractEvent#AfterFind`. Functionally they are the same
var events []L1ContractEvent
result := query.Find(&events)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, result.Error
}
return events, nil
}
// L2 // L2
func (db *contractEventsDB) StoreL2ContractEvents(events []*L2ContractEvent) error { func (db *contractEventsDB) StoreL2ContractEvents(events []*L2ContractEvent) error {
...@@ -154,3 +194,27 @@ func (db *contractEventsDB) L2ContractEventByTxLogIndex(txHash common.Hash, logI ...@@ -154,3 +194,27 @@ func (db *contractEventsDB) L2ContractEventByTxLogIndex(txHash common.Hash, logI
return &l2ContractEvent, nil return &l2ContractEvent, nil
} }
func (db *contractEventsDB) L2ContractEventsWithFilter(filter ContractEvent, fromHeight, toHeight *big.Int) ([]L2ContractEvent, error) {
if fromHeight == nil {
fromHeight = big.NewInt(0)
}
query := db.gorm.Table("l2_contract_events").Where(&filter)
query = query.Joins("INNER JOIN l2_block_headers ON l2_contract_events.block_hash = l2_block_headers.hash")
query = query.Where("l2_block_headers.number >= ? AND l2_block_headers.number <= ?", fromHeight, toHeight)
query = query.Order("l2_block_headers.number ASC").Select("l2_contract_events.*")
// NOTE: We use `Find` here instead of `Scan` since `Scan` doesn't not support
// model hooks like `ContractEvent#AfterFind`. Functionally they are the same
var events []L2ContractEvent
result := query.Find(&events)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, result.Error
}
return events, nil
}
...@@ -68,13 +68,13 @@ func (u256 U256) Value() (driver.Value, error) { ...@@ -68,13 +68,13 @@ func (u256 U256) Value() (driver.Value, error) {
return numeric.Value() return numeric.Value()
} }
type GethHeader types.Header type RLPHeader types.Header
func (h *GethHeader) EncodeRLP(w io.Writer) error { func (h *RLPHeader) EncodeRLP(w io.Writer) error {
return types.NewBlockWithHeader((*types.Header)(h)).EncodeRLP(w) return types.NewBlockWithHeader((*types.Header)(h)).EncodeRLP(w)
} }
func (h *GethHeader) DecodeRLP(s *rlp.Stream) error { func (h *RLPHeader) DecodeRLP(s *rlp.Stream) error {
block := new(types.Block) block := new(types.Block)
err := block.DecodeRLP(s) err := block.DecodeRLP(s)
if err != nil { if err != nil {
...@@ -82,14 +82,14 @@ func (h *GethHeader) DecodeRLP(s *rlp.Stream) error { ...@@ -82,14 +82,14 @@ func (h *GethHeader) DecodeRLP(s *rlp.Stream) error {
} }
header := block.Header() header := block.Header()
*h = (GethHeader)(*header) *h = (RLPHeader)(*header)
return nil return nil
} }
func (h *GethHeader) Header() *types.Header { func (h *RLPHeader) Header() *types.Header {
return (*types.Header)(h) return (*types.Header)(h)
} }
func (h *GethHeader) Hash() common.Hash { func (h *RLPHeader) Hash() common.Hash {
return h.Header().Hash() return h.Header().Hash()
} }
...@@ -64,7 +64,7 @@ func TestE2EBlockHeaders(t *testing.T) { ...@@ -64,7 +64,7 @@ func TestE2EBlockHeaders(t *testing.T) {
require.Equal(t, header.Time, indexedHeader.Timestamp) require.Equal(t, header.Time, indexedHeader.Timestamp)
// ensure the right rlp encoding is stored. checking the hashes sufficies // ensure the right rlp encoding is stored. checking the hashes sufficies
require.Equal(t, header.Hash(), indexedHeader.GethHeader.Hash()) require.Equal(t, header.Hash(), indexedHeader.RLPHeader.Hash())
} }
}) })
...@@ -126,7 +126,7 @@ func TestE2EBlockHeaders(t *testing.T) { ...@@ -126,7 +126,7 @@ func TestE2EBlockHeaders(t *testing.T) {
// ensure the right rlp encoding of the contract log is stored // ensure the right rlp encoding of the contract log is stored
logRlp, err := rlp.EncodeToBytes(&log) logRlp, err := rlp.EncodeToBytes(&log)
require.NoError(t, err) require.NoError(t, err)
contractEventRlp, err := rlp.EncodeToBytes(contractEvent.GethLog) contractEventRlp, err := rlp.EncodeToBytes(contractEvent.RLPLog)
require.NoError(t, err) require.NoError(t, err)
require.ElementsMatch(t, logRlp, contractEventRlp) require.ElementsMatch(t, logRlp, contractEventRlp)
...@@ -145,7 +145,7 @@ func TestE2EBlockHeaders(t *testing.T) { ...@@ -145,7 +145,7 @@ func TestE2EBlockHeaders(t *testing.T) {
// ensure the right rlp encoding is stored. checking the hashes // ensure the right rlp encoding is stored. checking the hashes
// suffices as it is based on the rlp bytes of the header // suffices as it is based on the rlp bytes of the header
require.Equal(t, block.Hash(), l1BlockHeader.GethHeader.Hash()) require.Equal(t, block.Hash(), l1BlockHeader.RLPHeader.Hash())
} }
}) })
} }
...@@ -31,16 +31,16 @@ func NewProcessedContractEvents() *ProcessedContractEvents { ...@@ -31,16 +31,16 @@ func NewProcessedContractEvents() *ProcessedContractEvents {
} }
func (p *ProcessedContractEvents) AddLog(log *types.Log, time uint64) *database.ContractEvent { func (p *ProcessedContractEvents) AddLog(log *types.Log, time uint64) *database.ContractEvent {
contractEvent := database.ContractEventFromGethLog(log, time) event := database.ContractEventFromLog(log, time)
emptyHash := common.Hash{} emptyHash := common.Hash{}
p.events = append(p.events, &contractEvent) p.events = append(p.events, &event)
p.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index}] = &contractEvent p.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index}] = &event
if contractEvent.EventSignature != emptyHash { // ignore anon events if event.EventSignature != emptyHash {
p.eventsBySignature[contractEvent.EventSignature] = append(p.eventsBySignature[contractEvent.EventSignature], &contractEvent) p.eventsBySignature[event.EventSignature] = append(p.eventsBySignature[event.EventSignature], &event)
} }
return &contractEvent return &event
} }
func UnpackLog(out interface{}, log *types.Log, name string, contractAbi *abi.ABI) error { func UnpackLog(out interface{}, log *types.Log, name string, contractAbi *abi.ABI) error {
......
...@@ -40,12 +40,12 @@ type CrossDomainMessengerSentMessageEvent struct { ...@@ -40,12 +40,12 @@ type CrossDomainMessengerSentMessageEvent struct {
Value *big.Int Value *big.Int
MessageHash common.Hash MessageHash common.Hash
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
type CrossDomainMessengerRelayedMessageEvent struct { type CrossDomainMessengerRelayedMessageEvent struct {
*bindings.CrossDomainMessengerRelayedMessage *bindings.CrossDomainMessengerRelayedMessage
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]CrossDomainMessengerSentMessageEvent, error) { func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]CrossDomainMessengerSentMessageEvent, error) {
...@@ -60,7 +60,7 @@ func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]C ...@@ -60,7 +60,7 @@ func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]C
processedSentMessageEvents := events.eventsBySignature[sentMessageEventAbi.ID] processedSentMessageEvents := events.eventsBySignature[sentMessageEventAbi.ID]
crossDomainMessageEvents := make([]CrossDomainMessengerSentMessageEvent, len(processedSentMessageEvents)) crossDomainMessageEvents := make([]CrossDomainMessengerSentMessageEvent, len(processedSentMessageEvents))
for i, sentMessageEvent := range processedSentMessageEvents { for i, sentMessageEvent := range processedSentMessageEvents {
log := sentMessageEvent.GethLog log := sentMessageEvent.RLPLog
var sentMsgData bindings.CrossDomainMessengerSentMessage var sentMsgData bindings.CrossDomainMessengerSentMessage
sentMsgData.Raw = *log sentMsgData.Raw = *log
...@@ -70,7 +70,7 @@ func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]C ...@@ -70,7 +70,7 @@ func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]C
} }
var sentMsgExtensionData bindings.CrossDomainMessengerSentMessageExtension1 var sentMsgExtensionData bindings.CrossDomainMessengerSentMessageExtension1
extensionLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].GethLog extensionLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].RLPLog
sentMsgExtensionData.Raw = *extensionLog sentMsgExtensionData.Raw = *extensionLog
err = UnpackLog(&sentMsgExtensionData, extensionLog, sentMessageEventExtensionAbi.Name, crossDomainMessengerABI) err = UnpackLog(&sentMsgExtensionData, extensionLog, sentMessageEventExtensionAbi.Name, crossDomainMessengerABI)
if err != nil { if err != nil {
...@@ -86,7 +86,7 @@ func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]C ...@@ -86,7 +86,7 @@ func CrossDomainMessengerSentMessageEvents(events *ProcessedContractEvents) ([]C
CrossDomainMessengerSentMessage: &sentMsgData, CrossDomainMessengerSentMessage: &sentMsgData,
Value: sentMsgExtensionData.Value, Value: sentMsgExtensionData.Value,
MessageHash: msgHash, MessageHash: msgHash,
RawEvent: sentMessageEvent, Event: sentMessageEvent,
} }
} }
...@@ -103,7 +103,7 @@ func CrossDomainMessengerRelayedMessageEvents(events *ProcessedContractEvents) ( ...@@ -103,7 +103,7 @@ func CrossDomainMessengerRelayedMessageEvents(events *ProcessedContractEvents) (
processedRelayedMessageEvents := events.eventsBySignature[relayedMessageEventAbi.ID] processedRelayedMessageEvents := events.eventsBySignature[relayedMessageEventAbi.ID]
crossDomainMessageEvents := make([]CrossDomainMessengerRelayedMessageEvent, len(processedRelayedMessageEvents)) crossDomainMessageEvents := make([]CrossDomainMessengerRelayedMessageEvent, len(processedRelayedMessageEvents))
for i, relayedMessageEvent := range processedRelayedMessageEvents { for i, relayedMessageEvent := range processedRelayedMessageEvents {
log := relayedMessageEvent.GethLog log := relayedMessageEvent.RLPLog
var relayedMsgData bindings.CrossDomainMessengerRelayedMessage var relayedMsgData bindings.CrossDomainMessengerRelayedMessage
relayedMsgData.Raw = *log relayedMsgData.Raw = *log
...@@ -114,7 +114,7 @@ func CrossDomainMessengerRelayedMessageEvents(events *ProcessedContractEvents) ( ...@@ -114,7 +114,7 @@ func CrossDomainMessengerRelayedMessageEvents(events *ProcessedContractEvents) (
crossDomainMessageEvents[i] = CrossDomainMessengerRelayedMessageEvent{ crossDomainMessageEvents[i] = CrossDomainMessengerRelayedMessageEvent{
CrossDomainMessengerRelayedMessage: &relayedMsgData, CrossDomainMessengerRelayedMessage: &relayedMsgData,
RawEvent: relayedMessageEvent, Event: relayedMessageEvent,
} }
} }
......
...@@ -197,7 +197,7 @@ func l1ProcessFn(processLog log.Logger, ethClient node.EthClient, l1Contracts L1 ...@@ -197,7 +197,7 @@ func l1ProcessFn(processLog log.Logger, ethClient node.EthClient, l1Contracts L1
continue continue
} }
indexedL1Headers = append(indexedL1Headers, &database.L1BlockHeader{BlockHeader: database.BlockHeaderFromGethHeader(header)}) indexedL1Headers = append(indexedL1Headers, &database.L1BlockHeader{BlockHeader: database.BlockHeaderFromHeader(header)})
} }
/** Update Database **/ /** Update Database **/
...@@ -275,7 +275,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -275,7 +275,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
transactionDeposits[i] = &database.L1TransactionDeposit{ transactionDeposits[i] = &database.L1TransactionDeposit{
SourceHash: depositTx.SourceHash, SourceHash: depositTx.SourceHash,
L2TransactionHash: types.NewTx(depositTx).Hash(), L2TransactionHash: types.NewTx(depositTx).Hash(),
InitiatedL1EventGUID: depositEvent.RawEvent.GUID, InitiatedL1EventGUID: depositEvent.Event.GUID,
Version: database.U256{Int: depositEvent.Version}, Version: database.U256{Int: depositEvent.Version},
OpaqueData: depositEvent.OpaqueData, OpaqueData: depositEvent.OpaqueData,
GasLimit: database.U256{Int: new(big.Int).SetUint64(depositTx.Gas)}, GasLimit: database.U256{Int: new(big.Int).SetUint64(depositTx.Gas)},
...@@ -284,7 +284,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -284,7 +284,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
ToAddress: depositTx.From, ToAddress: depositTx.From,
Amount: database.U256{Int: depositTx.Value}, Amount: database.U256{Int: depositTx.Value},
Data: depositTx.Data, Data: depositTx.Data,
Timestamp: depositEvent.RawEvent.Timestamp, Timestamp: depositEvent.Event.Timestamp,
}, },
} }
...@@ -340,7 +340,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -340,7 +340,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
if withdrawal == nil { if withdrawal == nil {
// We need to ensure we are in a caught up state before claiming a missing event. Since L2 timestamps // We need to ensure we are in a caught up state before claiming a missing event. Since L2 timestamps
// are derived from L1, we can simply compare the timestamp of this event with the latest L2 header. // are derived from L1, we can simply compare the timestamp of this event with the latest L2 header.
if provenWithdrawal.RawEvent.Timestamp > latestL2Header.Timestamp { if provenWithdrawal.Event.Timestamp > latestL2Header.Timestamp {
processLog.Warn("behind on indexed L2 withdrawals") processLog.Warn("behind on indexed L2 withdrawals")
return errors.New("waiting for L2Processor to catch up") return errors.New("waiting for L2Processor to catch up")
} else { } else {
...@@ -349,7 +349,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -349,7 +349,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
} }
} }
err = db.BridgeTransactions.MarkL2TransactionWithdrawalProvenEvent(withdrawalHash, provenWithdrawal.RawEvent.GUID) err = db.BridgeTransactions.MarkL2TransactionWithdrawalProvenEvent(withdrawalHash, provenWithdrawal.Event.GUID)
if err != nil { if err != nil {
return err return err
} }
...@@ -376,7 +376,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -376,7 +376,7 @@ func l1ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
return errors.New("withdrawal missing!") return errors.New("withdrawal missing!")
} }
err = db.BridgeTransactions.MarkL2TransactionWithdrawalFinalizedEvent(withdrawalHash, finalizedWithdrawal.RawEvent.GUID, finalizedWithdrawal.Success) err = db.BridgeTransactions.MarkL2TransactionWithdrawalFinalizedEvent(withdrawalHash, finalizedWithdrawal.Event.GUID, finalizedWithdrawal.Success)
if err != nil { if err != nil {
return err return err
} }
...@@ -399,10 +399,10 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -399,10 +399,10 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
sentMessages := make([]*database.L1BridgeMessage, len(sentMessageEvents)) sentMessages := make([]*database.L1BridgeMessage, len(sentMessageEvents))
for i, sentMessageEvent := range sentMessageEvents { for i, sentMessageEvent := range sentMessageEvents {
log := sentMessageEvent.RawEvent.GethLog log := sentMessageEvent.Event.RLPLog
// extract the deposit hash from the previous TransactionDepositedEvent // extract the deposit hash from the previous TransactionDepositedEvent
transactionDepositedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index - 1}].GethLog transactionDepositedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index - 1}].RLPLog
depositTx, err := derive.UnmarshalDepositLogEvent(transactionDepositedLog) depositTx, err := derive.UnmarshalDepositLogEvent(transactionDepositedLog)
if err != nil { if err != nil {
return err return err
...@@ -413,14 +413,14 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -413,14 +413,14 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
BridgeMessage: database.BridgeMessage{ BridgeMessage: database.BridgeMessage{
Nonce: database.U256{Int: sentMessageEvent.MessageNonce}, Nonce: database.U256{Int: sentMessageEvent.MessageNonce},
MessageHash: sentMessageEvent.MessageHash, MessageHash: sentMessageEvent.MessageHash,
SentMessageEventGUID: sentMessageEvent.RawEvent.GUID, SentMessageEventGUID: sentMessageEvent.Event.GUID,
GasLimit: database.U256{Int: sentMessageEvent.GasLimit}, GasLimit: database.U256{Int: sentMessageEvent.GasLimit},
Tx: database.Transaction{ Tx: database.Transaction{
FromAddress: sentMessageEvent.Sender, FromAddress: sentMessageEvent.Sender,
ToAddress: sentMessageEvent.Target, ToAddress: sentMessageEvent.Target,
Amount: database.U256{Int: sentMessageEvent.Value}, Amount: database.U256{Int: sentMessageEvent.Value},
Data: sentMessageEvent.Message, Data: sentMessageEvent.Message,
Timestamp: sentMessageEvent.RawEvent.Timestamp, Timestamp: sentMessageEvent.Event.Timestamp,
}, },
}, },
} }
...@@ -454,7 +454,7 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -454,7 +454,7 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
return fmt.Errorf("missing indexed L2CrossDomainMessager mesesage: 0x%x", relayedMessage.MsgHash) return fmt.Errorf("missing indexed L2CrossDomainMessager mesesage: 0x%x", relayedMessage.MsgHash)
} }
err = db.BridgeMessages.MarkRelayedL2BridgeMessage(relayedMessage.MsgHash, relayedMessage.RawEvent.GUID) err = db.BridgeMessages.MarkRelayedL2BridgeMessage(relayedMessage.MsgHash, relayedMessage.Event.GUID)
if err != nil { if err != nil {
return err return err
} }
...@@ -479,11 +479,12 @@ func l1ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D ...@@ -479,11 +479,12 @@ func l1ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D
deposits := make([]*database.L1BridgeDeposit, len(initiatedDepositEvents)) deposits := make([]*database.L1BridgeDeposit, len(initiatedDepositEvents))
for i, initiatedBridgeEvent := range initiatedDepositEvents { for i, initiatedBridgeEvent := range initiatedDepositEvents {
log := initiatedBridgeEvent.RawEvent.GethLog log := initiatedBridgeEvent.Event.RLPLog
// extract the deposit hash from the following TransactionDeposited event // extract the deposit hash from the following TransactionDeposited event. The `BlockHash` and `LogIndex`
transactionDepositedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].GethLog // fields are filled in for `RLPLog` which is required for `DepositTx#SourceHash` to be computed correctly
depositTx, err := derive.UnmarshalDepositLogEvent(transactionDepositedLog) transactionDepositedRLPLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].RLPLog
depositTx, err := derive.UnmarshalDepositLogEvent(transactionDepositedRLPLog)
if err != nil { if err != nil {
return err return err
} }
...@@ -497,7 +498,7 @@ func l1ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D ...@@ -497,7 +498,7 @@ func l1ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D
ToAddress: initiatedBridgeEvent.To, ToAddress: initiatedBridgeEvent.To,
Amount: database.U256{Int: initiatedBridgeEvent.Amount}, Amount: database.U256{Int: initiatedBridgeEvent.Amount},
Data: initiatedBridgeEvent.ExtraData, Data: initiatedBridgeEvent.ExtraData,
Timestamp: initiatedBridgeEvent.RawEvent.Timestamp, Timestamp: initiatedBridgeEvent.Event.Timestamp,
}, },
} }
} }
......
...@@ -106,7 +106,7 @@ func l2ProcessFn(processLog log.Logger, ethClient node.EthClient, l2Contracts L2 ...@@ -106,7 +106,7 @@ func l2ProcessFn(processLog log.Logger, ethClient node.EthClient, l2Contracts L2
l2Headers := make([]*database.L2BlockHeader, len(headers)) l2Headers := make([]*database.L2BlockHeader, len(headers))
l2HeaderMap := make(map[common.Hash]*types.Header) l2HeaderMap := make(map[common.Hash]*types.Header)
for i, header := range headers { for i, header := range headers {
l2Headers[i] = &database.L2BlockHeader{BlockHeader: database.BlockHeaderFromGethHeader(header)} l2Headers[i] = &database.L2BlockHeader{BlockHeader: database.BlockHeaderFromHeader(header)}
l2HeaderMap[l2Headers[i].Hash] = header l2HeaderMap[l2Headers[i].Hash] = header
} }
...@@ -183,7 +183,7 @@ func l2ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -183,7 +183,7 @@ func l2ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
for i, withdrawalEvent := range messagesPassed { for i, withdrawalEvent := range messagesPassed {
transactionWithdrawals[i] = &database.L2TransactionWithdrawal{ transactionWithdrawals[i] = &database.L2TransactionWithdrawal{
WithdrawalHash: withdrawalEvent.WithdrawalHash, WithdrawalHash: withdrawalEvent.WithdrawalHash,
InitiatedL2EventGUID: withdrawalEvent.RawEvent.GUID, InitiatedL2EventGUID: withdrawalEvent.Event.GUID,
Nonce: database.U256{Int: withdrawalEvent.Nonce}, Nonce: database.U256{Int: withdrawalEvent.Nonce},
GasLimit: database.U256{Int: withdrawalEvent.GasLimit}, GasLimit: database.U256{Int: withdrawalEvent.GasLimit},
Tx: database.Transaction{ Tx: database.Transaction{
...@@ -191,7 +191,7 @@ func l2ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa ...@@ -191,7 +191,7 @@ func l2ProcessContractEventsBridgeTransactions(processLog log.Logger, db *databa
ToAddress: withdrawalEvent.Target, ToAddress: withdrawalEvent.Target,
Amount: database.U256{Int: withdrawalEvent.Value}, Amount: database.U256{Int: withdrawalEvent.Value},
Data: withdrawalEvent.Data, Data: withdrawalEvent.Data,
Timestamp: withdrawalEvent.RawEvent.Timestamp, Timestamp: withdrawalEvent.Event.Timestamp,
}, },
} }
...@@ -246,10 +246,10 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -246,10 +246,10 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
sentMessages := make([]*database.L2BridgeMessage, len(sentMessageEvents)) sentMessages := make([]*database.L2BridgeMessage, len(sentMessageEvents))
for i, sentMessageEvent := range sentMessageEvents { for i, sentMessageEvent := range sentMessageEvents {
log := sentMessageEvent.RawEvent.GethLog log := sentMessageEvent.Event.RLPLog
// extract the withdrawal hash from the previous MessagePassed event // extract the withdrawal hash from the previous MessagePassed event
msgPassedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index - 1}].GethLog msgPassedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index - 1}].RLPLog
msgPassedEvent, err := l2ToL1MessagePasserABI.ParseMessagePassed(*msgPassedLog) msgPassedEvent, err := l2ToL1MessagePasserABI.ParseMessagePassed(*msgPassedLog)
if err != nil { if err != nil {
return err return err
...@@ -260,14 +260,14 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -260,14 +260,14 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
BridgeMessage: database.BridgeMessage{ BridgeMessage: database.BridgeMessage{
Nonce: database.U256{Int: sentMessageEvent.MessageNonce}, Nonce: database.U256{Int: sentMessageEvent.MessageNonce},
MessageHash: sentMessageEvent.MessageHash, MessageHash: sentMessageEvent.MessageHash,
SentMessageEventGUID: sentMessageEvent.RawEvent.GUID, SentMessageEventGUID: sentMessageEvent.Event.GUID,
GasLimit: database.U256{Int: sentMessageEvent.GasLimit}, GasLimit: database.U256{Int: sentMessageEvent.GasLimit},
Tx: database.Transaction{ Tx: database.Transaction{
FromAddress: sentMessageEvent.Sender, FromAddress: sentMessageEvent.Sender,
ToAddress: sentMessageEvent.Target, ToAddress: sentMessageEvent.Target,
Amount: database.U256{Int: sentMessageEvent.Value}, Amount: database.U256{Int: sentMessageEvent.Value},
Data: sentMessageEvent.Message, Data: sentMessageEvent.Message,
Timestamp: sentMessageEvent.RawEvent.Timestamp, Timestamp: sentMessageEvent.Event.Timestamp,
}, },
}, },
} }
...@@ -307,7 +307,7 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -307,7 +307,7 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
// Since the transaction processor running prior does not ensure the deposit inclusion, we need to // Since the transaction processor running prior does not ensure the deposit inclusion, we need to
// ensure we are in a caught up state before claiming a missing event. Since L2 timestamps are derived // ensure we are in a caught up state before claiming a missing event. Since L2 timestamps are derived
// from L1, we can simply compare the timestamp of this event with the latest L1 header. // from L1, we can simply compare the timestamp of this event with the latest L1 header.
if latestL1Header == nil || relayedMessage.RawEvent.Timestamp > latestL1Header.Timestamp { if latestL1Header == nil || relayedMessage.Event.Timestamp > latestL1Header.Timestamp {
processLog.Warn("waiting for L1Processor to catch up on L1CrossDomainMessages") processLog.Warn("waiting for L1Processor to catch up on L1CrossDomainMessages")
return errors.New("waiting for L1Processor to catch up") return errors.New("waiting for L1Processor to catch up")
} else { } else {
...@@ -316,7 +316,7 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db ...@@ -316,7 +316,7 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
} }
} }
err = db.BridgeMessages.MarkRelayedL1BridgeMessage(relayedMessage.MsgHash, relayedMessage.RawEvent.GUID) err = db.BridgeMessages.MarkRelayedL1BridgeMessage(relayedMessage.MsgHash, relayedMessage.Event.GUID)
if err != nil { if err != nil {
return err return err
} }
...@@ -346,10 +346,10 @@ func l2ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D ...@@ -346,10 +346,10 @@ func l2ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D
withdrawals := make([]*database.L2BridgeWithdrawal, len(initiatedWithdrawalEvents)) withdrawals := make([]*database.L2BridgeWithdrawal, len(initiatedWithdrawalEvents))
for i, initiatedBridgeEvent := range initiatedWithdrawalEvents { for i, initiatedBridgeEvent := range initiatedWithdrawalEvents {
log := initiatedBridgeEvent.RawEvent.GethLog log := initiatedBridgeEvent.Event.RLPLog
// extract the withdrawal hash from the following MessagePassed event // extract the withdrawal hash from the following MessagePassed event
msgPassedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].GethLog msgPassedLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].RLPLog
msgPassedEvent, err := l2ToL1MessagePasserABI.ParseMessagePassed(*msgPassedLog) msgPassedEvent, err := l2ToL1MessagePasserABI.ParseMessagePassed(*msgPassedLog)
if err != nil { if err != nil {
return err return err
...@@ -364,7 +364,7 @@ func l2ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D ...@@ -364,7 +364,7 @@ func l2ProcessContractEventsStandardBridge(processLog log.Logger, db *database.D
ToAddress: initiatedBridgeEvent.To, ToAddress: initiatedBridgeEvent.To,
Amount: database.U256{Int: initiatedBridgeEvent.Amount}, Amount: database.U256{Int: initiatedBridgeEvent.Amount},
Data: initiatedBridgeEvent.ExtraData, Data: initiatedBridgeEvent.ExtraData,
Timestamp: initiatedBridgeEvent.RawEvent.Timestamp, Timestamp: initiatedBridgeEvent.Event.Timestamp,
}, },
} }
} }
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
type L2ToL1MessagePasserMessagePassed struct { type L2ToL1MessagePasserMessagePassed struct {
*bindings.L2ToL1MessagePasserMessagePassed *bindings.L2ToL1MessagePasserMessagePassed
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
func L2ToL1MessagePasserMessagesPassed(events *ProcessedContractEvents) ([]L2ToL1MessagePasserMessagePassed, error) { func L2ToL1MessagePasserMessagesPassed(events *ProcessedContractEvents) ([]L2ToL1MessagePasserMessagePassed, error) {
...@@ -20,7 +20,7 @@ func L2ToL1MessagePasserMessagesPassed(events *ProcessedContractEvents) ([]L2ToL ...@@ -20,7 +20,7 @@ func L2ToL1MessagePasserMessagesPassed(events *ProcessedContractEvents) ([]L2ToL
processedMessagePassedEvents := events.eventsBySignature[l2ToL1MessagePasserAbi.Events[eventName].ID] processedMessagePassedEvents := events.eventsBySignature[l2ToL1MessagePasserAbi.Events[eventName].ID]
messagesPassed := make([]L2ToL1MessagePasserMessagePassed, len(processedMessagePassedEvents)) messagesPassed := make([]L2ToL1MessagePasserMessagePassed, len(processedMessagePassedEvents))
for i, messagePassedEvent := range processedMessagePassedEvents { for i, messagePassedEvent := range processedMessagePassedEvents {
log := messagePassedEvent.GethLog log := messagePassedEvent.RLPLog
var messagePassed bindings.L2ToL1MessagePasserMessagePassed var messagePassed bindings.L2ToL1MessagePasserMessagePassed
messagePassed.Raw = *log messagePassed.Raw = *log
...@@ -31,7 +31,7 @@ func L2ToL1MessagePasserMessagesPassed(events *ProcessedContractEvents) ([]L2ToL ...@@ -31,7 +31,7 @@ func L2ToL1MessagePasserMessagesPassed(events *ProcessedContractEvents) ([]L2ToL
messagesPassed[i] = L2ToL1MessagePasserMessagePassed{ messagesPassed[i] = L2ToL1MessagePasserMessagePassed{
L2ToL1MessagePasserMessagePassed: &messagePassed, L2ToL1MessagePasserMessagePassed: &messagePassed,
RawEvent: messagePassedEvent, Event: messagePassedEvent,
} }
} }
......
...@@ -14,17 +14,17 @@ import ( ...@@ -14,17 +14,17 @@ import (
type OptimismPortalTransactionDepositEvent struct { type OptimismPortalTransactionDepositEvent struct {
*bindings.OptimismPortalTransactionDeposited *bindings.OptimismPortalTransactionDeposited
DepositTx *types.DepositTx DepositTx *types.DepositTx
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
type OptimismPortalWithdrawalProvenEvent struct { type OptimismPortalWithdrawalProvenEvent struct {
*bindings.OptimismPortalWithdrawalProven *bindings.OptimismPortalWithdrawalProven
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
type OptimismPortalWithdrawalFinalizedEvent struct { type OptimismPortalWithdrawalFinalizedEvent struct {
*bindings.OptimismPortalWithdrawalFinalized *bindings.OptimismPortalWithdrawalFinalized
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
type OptimismPortalProvenWithdrawal struct { type OptimismPortalProvenWithdrawal struct {
...@@ -47,7 +47,7 @@ func OptimismPortalTransactionDepositEvents(events *ProcessedContractEvents) ([] ...@@ -47,7 +47,7 @@ func OptimismPortalTransactionDepositEvents(events *ProcessedContractEvents) ([]
processedTxDepositedEvents := events.eventsBySignature[derive.DepositEventABIHash] processedTxDepositedEvents := events.eventsBySignature[derive.DepositEventABIHash]
txDeposits := make([]OptimismPortalTransactionDepositEvent, len(processedTxDepositedEvents)) txDeposits := make([]OptimismPortalTransactionDepositEvent, len(processedTxDepositedEvents))
for i, txDepositEvent := range processedTxDepositedEvents { for i, txDepositEvent := range processedTxDepositedEvents {
log := txDepositEvent.GethLog log := txDepositEvent.RLPLog
depositTx, err := derive.UnmarshalDepositLogEvent(log) depositTx, err := derive.UnmarshalDepositLogEvent(log)
if err != nil { if err != nil {
...@@ -64,7 +64,7 @@ func OptimismPortalTransactionDepositEvents(events *ProcessedContractEvents) ([] ...@@ -64,7 +64,7 @@ func OptimismPortalTransactionDepositEvents(events *ProcessedContractEvents) ([]
txDeposits[i] = OptimismPortalTransactionDepositEvent{ txDeposits[i] = OptimismPortalTransactionDepositEvent{
OptimismPortalTransactionDeposited: &txDeposit, OptimismPortalTransactionDeposited: &txDeposit,
DepositTx: depositTx, DepositTx: depositTx,
RawEvent: txDepositEvent, Event: txDepositEvent,
} }
} }
...@@ -81,7 +81,7 @@ func OptimismPortalWithdrawalProvenEvents(events *ProcessedContractEvents) ([]Op ...@@ -81,7 +81,7 @@ func OptimismPortalWithdrawalProvenEvents(events *ProcessedContractEvents) ([]Op
processedWithdrawalProvenEvents := events.eventsBySignature[optimismPortalAbi.Events[eventName].ID] processedWithdrawalProvenEvents := events.eventsBySignature[optimismPortalAbi.Events[eventName].ID]
provenEvents := make([]OptimismPortalWithdrawalProvenEvent, len(processedWithdrawalProvenEvents)) provenEvents := make([]OptimismPortalWithdrawalProvenEvent, len(processedWithdrawalProvenEvents))
for i, provenEvent := range processedWithdrawalProvenEvents { for i, provenEvent := range processedWithdrawalProvenEvents {
log := provenEvent.GethLog log := provenEvent.RLPLog
var withdrawalProven bindings.OptimismPortalWithdrawalProven var withdrawalProven bindings.OptimismPortalWithdrawalProven
withdrawalProven.Raw = *log withdrawalProven.Raw = *log
...@@ -92,7 +92,7 @@ func OptimismPortalWithdrawalProvenEvents(events *ProcessedContractEvents) ([]Op ...@@ -92,7 +92,7 @@ func OptimismPortalWithdrawalProvenEvents(events *ProcessedContractEvents) ([]Op
provenEvents[i] = OptimismPortalWithdrawalProvenEvent{ provenEvents[i] = OptimismPortalWithdrawalProvenEvent{
OptimismPortalWithdrawalProven: &withdrawalProven, OptimismPortalWithdrawalProven: &withdrawalProven,
RawEvent: provenEvent, Event: provenEvent,
} }
} }
...@@ -109,7 +109,7 @@ func OptimismPortalWithdrawalFinalizedEvents(events *ProcessedContractEvents) ([ ...@@ -109,7 +109,7 @@ func OptimismPortalWithdrawalFinalizedEvents(events *ProcessedContractEvents) ([
processedWithdrawalFinalizedEvents := events.eventsBySignature[optimismPortalAbi.Events[eventName].ID] processedWithdrawalFinalizedEvents := events.eventsBySignature[optimismPortalAbi.Events[eventName].ID]
finalizedEvents := make([]OptimismPortalWithdrawalFinalizedEvent, len(processedWithdrawalFinalizedEvents)) finalizedEvents := make([]OptimismPortalWithdrawalFinalizedEvent, len(processedWithdrawalFinalizedEvents))
for i, finalizedEvent := range processedWithdrawalFinalizedEvents { for i, finalizedEvent := range processedWithdrawalFinalizedEvents {
log := finalizedEvent.GethLog log := finalizedEvent.RLPLog
var withdrawalFinalized bindings.OptimismPortalWithdrawalFinalized var withdrawalFinalized bindings.OptimismPortalWithdrawalFinalized
err := UnpackLog(&withdrawalFinalized, log, eventName, optimismPortalAbi) err := UnpackLog(&withdrawalFinalized, log, eventName, optimismPortalAbi)
...@@ -119,7 +119,7 @@ func OptimismPortalWithdrawalFinalizedEvents(events *ProcessedContractEvents) ([ ...@@ -119,7 +119,7 @@ func OptimismPortalWithdrawalFinalizedEvents(events *ProcessedContractEvents) ([
finalizedEvents[i] = OptimismPortalWithdrawalFinalizedEvent{ finalizedEvents[i] = OptimismPortalWithdrawalFinalizedEvent{
OptimismPortalWithdrawalFinalized: &withdrawalFinalized, OptimismPortalWithdrawalFinalized: &withdrawalFinalized,
RawEvent: finalizedEvent, Event: finalizedEvent,
} }
} }
......
...@@ -20,7 +20,7 @@ type StandardBridgeInitiatedEvent struct { ...@@ -20,7 +20,7 @@ type StandardBridgeInitiatedEvent struct {
*bindings.StandardBridgeERC20BridgeInitiated *bindings.StandardBridgeERC20BridgeInitiated
CrossDomainMessengerNonce *big.Int CrossDomainMessengerNonce *big.Int
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
type StandardBridgeFinalizedEvent struct { type StandardBridgeFinalizedEvent struct {
...@@ -29,7 +29,7 @@ type StandardBridgeFinalizedEvent struct { ...@@ -29,7 +29,7 @@ type StandardBridgeFinalizedEvent struct {
*bindings.StandardBridgeERC20BridgeFinalized *bindings.StandardBridgeERC20BridgeFinalized
CrossDomainMessengerNonce *big.Int CrossDomainMessengerNonce *big.Int
RawEvent *database.ContractEvent Event *database.ContractEvent
} }
// StandardBridgeInitiatedEvents extracts all initiated bridge events from the contracts that follow the StandardBridge ABI. The // StandardBridgeInitiatedEvents extracts all initiated bridge events from the contracts that follow the StandardBridge ABI. The
...@@ -97,7 +97,7 @@ func _standardBridgeInitiatedEvents[BridgeEvent bindings.StandardBridgeETHBridge ...@@ -97,7 +97,7 @@ func _standardBridgeInitiatedEvents[BridgeEvent bindings.StandardBridgeETHBridge
processedInitiatedBridgeEvents := events.eventsBySignature[StandardBridgeABI.Events[eventName].ID] processedInitiatedBridgeEvents := events.eventsBySignature[StandardBridgeABI.Events[eventName].ID]
initiatedBridgeEvents := make([]StandardBridgeInitiatedEvent, len(processedInitiatedBridgeEvents)) initiatedBridgeEvents := make([]StandardBridgeInitiatedEvent, len(processedInitiatedBridgeEvents))
for i, bridgeInitiatedEvent := range processedInitiatedBridgeEvents { for i, bridgeInitiatedEvent := range processedInitiatedBridgeEvents {
log := bridgeInitiatedEvent.GethLog log := bridgeInitiatedEvent.RLPLog
var bridgeData BridgeEvent var bridgeData BridgeEvent
err := UnpackLog(&bridgeData, log, eventName, StandardBridgeABI) err := UnpackLog(&bridgeData, log, eventName, StandardBridgeABI)
...@@ -109,7 +109,7 @@ func _standardBridgeInitiatedEvents[BridgeEvent bindings.StandardBridgeETHBridge ...@@ -109,7 +109,7 @@ func _standardBridgeInitiatedEvents[BridgeEvent bindings.StandardBridgeETHBridge
// - L1: BridgeInitiated -> Portal#DepositTransaction -> SentMessage ... // - L1: BridgeInitiated -> Portal#DepositTransaction -> SentMessage ...
// - L1: BridgeInitiated -> L2ToL1MessagePasser#MessagePassed -> SentMessage ... // - L1: BridgeInitiated -> L2ToL1MessagePasser#MessagePassed -> SentMessage ...
var sentMsgData bindings.L1CrossDomainMessengerSentMessage var sentMsgData bindings.L1CrossDomainMessengerSentMessage
sentMsgLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 2}].GethLog sentMsgLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 2}].RLPLog
sentMsgData.Raw = *sentMsgLog sentMsgData.Raw = *sentMsgLog
err = UnpackLog(&sentMsgData, sentMsgLog, sentMessageEventAbi.Name, l1CrossDomainMessengerABI) err = UnpackLog(&sentMsgData, sentMsgLog, sentMessageEventAbi.Name, l1CrossDomainMessengerABI)
if err != nil { if err != nil {
...@@ -152,7 +152,7 @@ func _standardBridgeInitiatedEvents[BridgeEvent bindings.StandardBridgeETHBridge ...@@ -152,7 +152,7 @@ func _standardBridgeInitiatedEvents[BridgeEvent bindings.StandardBridgeETHBridge
initiatedBridgeEvents[i] = StandardBridgeInitiatedEvent{ initiatedBridgeEvents[i] = StandardBridgeInitiatedEvent{
StandardBridgeERC20BridgeInitiated: erc20BridgeData, StandardBridgeERC20BridgeInitiated: erc20BridgeData,
CrossDomainMessengerNonce: sentMsgData.MessageNonce, CrossDomainMessengerNonce: sentMsgData.MessageNonce,
RawEvent: bridgeInitiatedEvent, Event: bridgeInitiatedEvent,
} }
} }
...@@ -197,7 +197,7 @@ func _standardBridgeFinalizedEvents[BridgeEvent bindings.StandardBridgeETHBridge ...@@ -197,7 +197,7 @@ func _standardBridgeFinalizedEvents[BridgeEvent bindings.StandardBridgeETHBridge
processedFinalizedBridgeEvents := events.eventsBySignature[StandardBridgeABI.Events[eventName].ID] processedFinalizedBridgeEvents := events.eventsBySignature[StandardBridgeABI.Events[eventName].ID]
finalizedBridgeEvents := make([]StandardBridgeFinalizedEvent, len(processedFinalizedBridgeEvents)) finalizedBridgeEvents := make([]StandardBridgeFinalizedEvent, len(processedFinalizedBridgeEvents))
for i, bridgeFinalizedEvent := range processedFinalizedBridgeEvents { for i, bridgeFinalizedEvent := range processedFinalizedBridgeEvents {
log := bridgeFinalizedEvent.GethLog log := bridgeFinalizedEvent.RLPLog
var bridgeData BridgeEvent var bridgeData BridgeEvent
err := UnpackLog(&bridgeData, log, eventName, StandardBridgeABI) err := UnpackLog(&bridgeData, log, eventName, StandardBridgeABI)
...@@ -206,7 +206,7 @@ func _standardBridgeFinalizedEvents[BridgeEvent bindings.StandardBridgeETHBridge ...@@ -206,7 +206,7 @@ func _standardBridgeFinalizedEvents[BridgeEvent bindings.StandardBridgeETHBridge
} }
// Look for the RelayedMessage event that follows right after the BridgeFinalized Event // Look for the RelayedMessage event that follows right after the BridgeFinalized Event
relayedMsgLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].GethLog relayedMsgLog := events.eventByLogIndex[ProcessedContractEventLogIndexKey{log.BlockHash, log.Index + 1}].RLPLog
if relayedMsgLog.Topics[0] != relayedMessageEventAbi.ID { if relayedMsgLog.Topics[0] != relayedMessageEventAbi.ID {
return nil, errors.New("unexpected bridge event ordering") return nil, errors.New("unexpected bridge event ordering")
} }
...@@ -280,7 +280,7 @@ func _standardBridgeFinalizedEvents[BridgeEvent bindings.StandardBridgeETHBridge ...@@ -280,7 +280,7 @@ func _standardBridgeFinalizedEvents[BridgeEvent bindings.StandardBridgeETHBridge
finalizedBridgeEvents[i] = StandardBridgeFinalizedEvent{ finalizedBridgeEvents[i] = StandardBridgeFinalizedEvent{
StandardBridgeERC20BridgeFinalized: erc20BridgeData, StandardBridgeERC20BridgeFinalized: erc20BridgeData,
CrossDomainMessengerNonce: nonce, CrossDomainMessengerNonce: nonce,
RawEvent: bridgeFinalizedEvent, Event: bridgeFinalizedEvent,
} }
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -73,16 +73,16 @@ var Goerli = rollup.Config{ ...@@ -73,16 +73,16 @@ var Goerli = rollup.Config{
var Sepolia = rollup.Config{ var Sepolia = rollup.Config{
Genesis: rollup.Genesis{ Genesis: rollup.Genesis{
L1: eth.BlockID{ L1: eth.BlockID{
Hash: common.HexToHash("0x70e5634d09793b1cfaa7d0a2a5d3289a3b2308de1e82f682b4f817fc670f9797"), Hash: common.HexToHash("0x48f520cf4ddaf34c8336e6e490632ea3cf1e5e93b0b2bc6e917557e31845371b"),
Number: 3976708, Number: 4071408,
}, },
L2: eth.BlockID{ L2: eth.BlockID{
Hash: common.HexToHash("0xfbfc64b34d705b0eb83ab8b2206c0da90a76e1ae54ae657c8cfbee0e802a9120"), Hash: common.HexToHash("0x102de6ffb001480cc9b8b548fd05c34cd4f46ae4aa91759393db90ea0409887d"),
Number: 0, Number: 0,
}, },
L2Time: 1690493568, L2Time: 1691802540,
SystemConfig: eth.SystemConfig{ SystemConfig: eth.SystemConfig{
BatcherAddr: common.HexToAddress("0x7431310e026b69bfc676c0013e12a1a11411eec9"), BatcherAddr: common.HexToAddress("0x8F23BB38F531600e5d8FDDaAEC41F13FaB46E98c"),
Overhead: eth.Bytes32(common.HexToHash("0x00000000000000000000000000000000000000000000000000000000000000bc")), Overhead: eth.Bytes32(common.HexToHash("0x00000000000000000000000000000000000000000000000000000000000000bc")),
Scalar: eth.Bytes32(common.HexToHash("0x00000000000000000000000000000000000000000000000000000000000a6fe0")), Scalar: eth.Bytes32(common.HexToHash("0x00000000000000000000000000000000000000000000000000000000000a6fe0")),
GasLimit: 30000000, GasLimit: 30000000,
...@@ -95,8 +95,8 @@ var Sepolia = rollup.Config{ ...@@ -95,8 +95,8 @@ var Sepolia = rollup.Config{
L1ChainID: big.NewInt(11155111), L1ChainID: big.NewInt(11155111),
L2ChainID: big.NewInt(11155420), L2ChainID: big.NewInt(11155420),
BatchInboxAddress: common.HexToAddress("0xff00000000000000000000000000000011155420"), BatchInboxAddress: common.HexToAddress("0xff00000000000000000000000000000011155420"),
DepositContractAddress: common.HexToAddress("0x8f6452d842438c4e22ba18baa21652ff65530df4"), DepositContractAddress: common.HexToAddress("0x16fc5058f25648194471939df75cf27a2fdc48bc"),
L1SystemConfigAddress: common.HexToAddress("0xf425ed544d2e1f1b7a8650d5897a7ccf43020791"), L1SystemConfigAddress: common.HexToAddress("0x034edd2a225f7f429a63e0f1d2084b9e0a93b538"),
RegolithTime: u64Ptr(0), RegolithTime: u64Ptr(0),
} }
......
...@@ -9,7 +9,7 @@ import ( ...@@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestIsURLAvailable(t *testing.T) { func TestIsURLAvailableLocal(t *testing.T) {
listener, err := net.Listen("tcp4", ":0") listener, err := net.Listen("tcp4", ":0")
require.NoError(t, err) require.NoError(t, err)
defer listener.Close() defer listener.Close()
...@@ -18,6 +18,39 @@ func TestIsURLAvailable(t *testing.T) { ...@@ -18,6 +18,39 @@ func TestIsURLAvailable(t *testing.T) {
parts := strings.Split(a, ":") parts := strings.Split(a, ":")
addr := fmt.Sprintf("http://localhost:%s", parts[1]) addr := fmt.Sprintf("http://localhost:%s", parts[1])
// True & False with ports
require.True(t, IsURLAvailable(addr)) require.True(t, IsURLAvailable(addr))
require.False(t, IsURLAvailable("http://localhost:0")) require.False(t, IsURLAvailable("http://localhost:0"))
// Fail open if we don't recognize the scheme
require.True(t, IsURLAvailable("mailto://example.com"))
}
func TestIsURLAvailableNonLocal(t *testing.T) {
if !IsURLAvailable("http://example.com") {
t.Skip("No internet connection found, skipping this test")
}
// True without ports. http & https
require.True(t, IsURLAvailable("http://example.com"))
require.True(t, IsURLAvailable("http://example.com/hello"))
require.True(t, IsURLAvailable("https://example.com"))
require.True(t, IsURLAvailable("https://example.com/hello"))
// True without ports. ws & wss
require.True(t, IsURLAvailable("ws://example.com"))
require.True(t, IsURLAvailable("ws://example.com/hello"))
require.True(t, IsURLAvailable("wss://example.com"))
require.True(t, IsURLAvailable("wss://example.com/hello"))
// False without ports
require.False(t, IsURLAvailable("http://fakedomainnamethatdoesnotexistandshouldneverexist.com"))
require.False(t, IsURLAvailable("http://fakedomainnamethatdoesnotexistandshouldneverexist.com/hello"))
require.False(t, IsURLAvailable("https://fakedomainnamethatdoesnotexistandshouldneverexist.com"))
require.False(t, IsURLAvailable("https://fakedomainnamethatdoesnotexistandshouldneverexist.com/hello"))
require.False(t, IsURLAvailable("ws://fakedomainnamethatdoesnotexistandshouldneverexist.com"))
require.False(t, IsURLAvailable("ws://fakedomainnamethatdoesnotexistandshouldneverexist.com/hello"))
require.False(t, IsURLAvailable("wss://fakedomainnamethatdoesnotexistandshouldneverexist.com"))
require.False(t, IsURLAvailable("wss://fakedomainnamethatdoesnotexistandshouldneverexist.com/hello"))
} }
...@@ -122,7 +122,19 @@ func IsURLAvailable(address string) bool { ...@@ -122,7 +122,19 @@ func IsURLAvailable(address string) bool {
if err != nil { if err != nil {
return false return false
} }
conn, err := net.DialTimeout("tcp", u.Host, 5*time.Second) addr := u.Host
if u.Port() == "" {
switch u.Scheme {
case "http", "ws":
addr += ":80"
case "https", "wss":
addr += ":443"
default:
// Fail open if we can't figure out what the port should be
return true
}
}
conn, err := net.DialTimeout("tcp", addr, 5*time.Second)
if err != nil { if err != nil {
return false return false
} }
......
...@@ -410,7 +410,8 @@ OptimismMintableERC20_Test:test_mint_notBridge_reverts() (gas: 11165) ...@@ -410,7 +410,8 @@ OptimismMintableERC20_Test:test_mint_notBridge_reverts() (gas: 11165)
OptimismMintableERC20_Test:test_mint_succeeds() (gas: 63544) OptimismMintableERC20_Test:test_mint_succeeds() (gas: 63544)
OptimismMintableERC20_Test:test_remoteToken_succeeds() (gas: 7667) OptimismMintableERC20_Test:test_remoteToken_succeeds() (gas: 7667)
OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 8351) OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 8351)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2321820) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_sameTwice_reverts() (gas: 8937393460516801476)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2363100)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9418) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9418)
OptimismMintableERC721_Test:test_burn_notBridge_reverts() (gas: 136966) OptimismMintableERC721_Test:test_burn_notBridge_reverts() (gas: 136966)
OptimismMintableERC721_Test:test_burn_succeeds() (gas: 118832) OptimismMintableERC721_Test:test_burn_succeeds() (gas: 118832)
...@@ -419,10 +420,10 @@ OptimismMintableERC721_Test:test_safeMint_notBridge_reverts() (gas: 11121) ...@@ -419,10 +420,10 @@ OptimismMintableERC721_Test:test_safeMint_notBridge_reverts() (gas: 11121)
OptimismMintableERC721_Test:test_safeMint_succeeds() (gas: 140547) OptimismMintableERC721_Test:test_safeMint_succeeds() (gas: 140547)
OptimismMintableERC721_Test:test_supportsInterfaces_succeeds() (gas: 9005) OptimismMintableERC721_Test:test_supportsInterfaces_succeeds() (gas: 9005)
OptimismMintableERC721_Test:test_tokenURI_succeeds() (gas: 163441) OptimismMintableERC721_Test:test_tokenURI_succeeds() (gas: 163441)
OptimismMintableTokenFactory_Test:test_bridge_succeeds() (gas: 7580) OptimismMintableTokenFactory_Test:test_bridge_succeeds() (gas: 7646)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_remoteIsZero_succeeds() (gas: 9390) OptimismMintableTokenFactory_Test:test_createStandardL2Token_remoteIsZero_reverts() (gas: 9401)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_succeeds() (gas: 2523203) OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_reverts() (gas: 8937393460516769032)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1268564) OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1293594)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 11178) OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 11178)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 16111) OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 16111)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 26781) OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 26781)
......
{ {
"finalSystemOwner": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", "finalSystemOwner": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301",
"portalGuardian": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", "portalGuardian": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301",
"l1StartingBlockTag": "0x70e5634d09793b1cfaa7d0a2a5d3289a3b2308de1e82f682b4f817fc670f9797", "l1StartingBlockTag": "0x48f520cf4ddaf34c8336e6e490632ea3cf1e5e93b0b2bc6e917557e31845371b",
"l1ChainID": 11155111, "l1ChainID": 11155111,
"l2ChainID": 11155420, "l2ChainID": 11155420,
"l2BlockTime": 2, "l2BlockTime": 2,
"l1BlockTime": 12,
"maxSequencerDrift": 600, "maxSequencerDrift": 600,
"sequencerWindowSize": 3600, "sequencerWindowSize": 3600,
"channelTimeout": 300, "channelTimeout": 300,
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
"src/periphery/op-nft/Optimist.sol": "0x38407f766aa9d394403e9da388dd0265b48901789f3e8a28af50014f9f5251d9", "src/periphery/op-nft/Optimist.sol": "0x38407f766aa9d394403e9da388dd0265b48901789f3e8a28af50014f9f5251d9",
"src/periphery/op-nft/OptimistAllowlist.sol": "0x53e9a9dfecbae036fd468e8f34c80c7d9c35bd8908c8a6483db44dbc5128ad69", "src/periphery/op-nft/OptimistAllowlist.sol": "0x53e9a9dfecbae036fd468e8f34c80c7d9c35bd8908c8a6483db44dbc5128ad69",
"src/periphery/op-nft/OptimistInviter.sol": "0xfdd5b9d45205ef9372ba37f7a6394724695e676d27a47cb154ee6e4148490013", "src/periphery/op-nft/OptimistInviter.sol": "0xfdd5b9d45205ef9372ba37f7a6394724695e676d27a47cb154ee6e4148490013",
"src/universal/OptimismMintableERC20.sol": "0xddb1f0047ee90db724405ad6a775fd2b26882cbc31d464c3def2c20c88aaf750", "src/universal/OptimismMintableERC20.sol": "0xa0b4f168802d0f9eca9ddc54347ca66c34ad7aa0fd84b01e0d7e99a9f86f46d6",
"src/universal/OptimismMintableERC20Factory.sol": "0x1c77e31f624d0a7306dec8ffc3947a72f8e1e93a01cd911b4561c038732ab7fe", "src/universal/OptimismMintableERC20Factory.sol": "0x8afb6b634f40e8ac8c60ec7e2ca3bcd610b020d09b3cae70a3d4995722cab3ce",
"src/universal/OptimismMintableERC721.sol": "0x4eaa5ea0d923ce967f299c2ded84c2a53431159c47c0a344a9b8f534a25b7e1f", "src/universal/OptimismMintableERC721.sol": "0x49dc863caf3e002bf0c90b3af3873990fb282771f4c63735fd61a885b7873983",
"src/universal/OptimismMintableERC721Factory.sol": "0x6c19bc51bf9184aafad46f292bf9c23cc87c3406f31cccf57d4e3e096b887a8d" "src/universal/OptimismMintableERC721Factory.sol": "0x502438b009bfaf0ab187914662468261f10446fd85d44a79b29cdaef7b4982ba"
} }
\ No newline at end of file
...@@ -35,7 +35,7 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20, ...@@ -35,7 +35,7 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
_; _;
} }
/// @custom:semver 1.0.3 /// @custom:semver 1.1.0
/// @param _bridge Address of the L2 standard bridge. /// @param _bridge Address of the L2 standard bridge.
/// @param _remoteToken Address of the corresponding L1 token. /// @param _remoteToken Address of the corresponding L1 token.
/// @param _name ERC20 name. /// @param _name ERC20 name.
...@@ -47,7 +47,7 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20, ...@@ -47,7 +47,7 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
string memory _symbol string memory _symbol
) )
ERC20(_name, _symbol) ERC20(_name, _symbol)
Semver(1, 0, 3) Semver(1, 1, 0)
{ {
REMOTE_TOKEN = _remoteToken; REMOTE_TOKEN = _remoteToken;
BRIDGE = _bridge; BRIDGE = _bridge;
......
...@@ -28,12 +28,12 @@ contract OptimismMintableERC20Factory is Semver { ...@@ -28,12 +28,12 @@ contract OptimismMintableERC20Factory is Semver {
/// @param deployer Address of the account that deployed the token. /// @param deployer Address of the account that deployed the token.
event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer); event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer);
/// @custom:semver 1.1.2 /// @custom:semver 1.2.0
/// @notice The semver MUST be bumped any time that there is a change in /// @notice The semver MUST be bumped any time that there is a change in
/// the OptimismMintableERC20 token contract since this contract /// the OptimismMintableERC20 token contract since this contract
/// is responsible for deploying OptimismMintableERC20 contracts. /// is responsible for deploying OptimismMintableERC20 contracts.
/// @param _bridge Address of the StandardBridge on this chain. /// @param _bridge Address of the StandardBridge on this chain.
constructor(address _bridge) Semver(1, 1, 2) { constructor(address _bridge) Semver(1, 2, 0) {
BRIDGE = _bridge; BRIDGE = _bridge;
} }
...@@ -70,7 +70,8 @@ contract OptimismMintableERC20Factory is Semver { ...@@ -70,7 +70,8 @@ contract OptimismMintableERC20Factory is Semver {
{ {
require(_remoteToken != address(0), "OptimismMintableERC20Factory: must provide remote token address"); require(_remoteToken != address(0), "OptimismMintableERC20Factory: must provide remote token address");
address localToken = address(new OptimismMintableERC20(BRIDGE, _remoteToken, _name, _symbol)); bytes32 salt = keccak256(abi.encode(_remoteToken, _name, _symbol));
address localToken = address(new OptimismMintableERC20{salt: salt}(BRIDGE, _remoteToken, _name, _symbol));
// Emit the old event too for legacy support. // Emit the old event too for legacy support.
emit StandardL2TokenCreated(_remoteToken, localToken); emit StandardL2TokenCreated(_remoteToken, localToken);
......
...@@ -31,7 +31,7 @@ contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721, Se ...@@ -31,7 +31,7 @@ contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721, Se
_; _;
} }
/// @custom:semver 1.1.2 /// @custom:semver 1.2.0
/// @param _bridge Address of the bridge on this network. /// @param _bridge Address of the bridge on this network.
/// @param _remoteChainId Chain ID where the remote token is deployed. /// @param _remoteChainId Chain ID where the remote token is deployed.
/// @param _remoteToken Address of the corresponding token on the other network. /// @param _remoteToken Address of the corresponding token on the other network.
...@@ -45,7 +45,7 @@ contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721, Se ...@@ -45,7 +45,7 @@ contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721, Se
string memory _symbol string memory _symbol
) )
ERC721(_name, _symbol) ERC721(_name, _symbol)
Semver(1, 1, 2) Semver(1, 2, 0)
{ {
require(_bridge != address(0), "OptimismMintableERC721: bridge cannot be address(0)"); require(_bridge != address(0), "OptimismMintableERC721: bridge cannot be address(0)");
require(_remoteChainId != 0, "OptimismMintableERC721: remote chain id cannot be zero"); require(_remoteChainId != 0, "OptimismMintableERC721: remote chain id cannot be zero");
......
...@@ -22,13 +22,13 @@ contract OptimismMintableERC721Factory is Semver { ...@@ -22,13 +22,13 @@ contract OptimismMintableERC721Factory is Semver {
/// @param deployer Address of the initiator of the deployment /// @param deployer Address of the initiator of the deployment
event OptimismMintableERC721Created(address indexed localToken, address indexed remoteToken, address deployer); event OptimismMintableERC721Created(address indexed localToken, address indexed remoteToken, address deployer);
/// @custom:semver 1.2.3 /// @custom:semver 1.3.0
/// @notice The semver MUST be bumped any time that there is a change in /// @notice The semver MUST be bumped any time that there is a change in
/// the OptimismMintableERC721 token contract since this contract /// the OptimismMintableERC721 token contract since this contract
/// is responsible for deploying OptimismMintableERC721 contracts. /// is responsible for deploying OptimismMintableERC721 contracts.
/// @param _bridge Address of the ERC721 bridge on this network. /// @param _bridge Address of the ERC721 bridge on this network.
/// @param _remoteChainId Chain ID for the remote network. /// @param _remoteChainId Chain ID for the remote network.
constructor(address _bridge, uint256 _remoteChainId) Semver(1, 2, 3) { constructor(address _bridge, uint256 _remoteChainId) Semver(1, 3, 0) {
BRIDGE = _bridge; BRIDGE = _bridge;
REMOTE_CHAIN_ID = _remoteChainId; REMOTE_CHAIN_ID = _remoteChainId;
} }
...@@ -47,7 +47,9 @@ contract OptimismMintableERC721Factory is Semver { ...@@ -47,7 +47,9 @@ contract OptimismMintableERC721Factory is Semver {
{ {
require(_remoteToken != address(0), "OptimismMintableERC721Factory: L1 token address cannot be address(0)"); require(_remoteToken != address(0), "OptimismMintableERC721Factory: L1 token address cannot be address(0)");
address localToken = address(new OptimismMintableERC721(BRIDGE, REMOTE_CHAIN_ID, _remoteToken, _name, _symbol)); bytes32 salt = keccak256(abi.encode(_remoteToken, _name, _symbol));
address localToken =
address(new OptimismMintableERC721{salt: salt}(BRIDGE, REMOTE_CHAIN_ID, _remoteToken, _name, _symbol));
isOptimismMintableERC721[localToken] = true; isOptimismMintableERC721[localToken] = true;
emit OptimismMintableERC721Created(localToken, _remoteToken, msg.sender); emit OptimismMintableERC721Created(localToken, _remoteToken, msg.sender);
......
...@@ -68,8 +68,7 @@ The input and return types here are as defined by the [engine API specs][engine- ...@@ -68,8 +68,7 @@ The input and return types here are as defined by the [engine API specs][engine-
- method: `optimism_outputAtBlock` - method: `optimism_outputAtBlock`
- params: - params:
1. `blockNumber`: `QUANTITY`, 64 bits - L2 integer block number </br> 1. `blockNumber`: `QUANTITY`, 64 bits - L2 integer block number.
OR `String` - one of `"safe"`, `"latest"`, or `"pending"`.
- returns: - returns:
1. `version`: `DATA`, 32 Bytes - the output root version number, beginning with 0. 1. `version`: `DATA`, 32 Bytes - the output root version number, beginning with 0.
1. `l2OutputRoot`: `DATA`, 32 Bytes - the output root. 1. `l2OutputRoot`: `DATA`, 32 Bytes - the output root.
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