Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
fd799dbc
Commit
fd799dbc
authored
Sep 13, 2023
by
Hamdi Allam
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove checkpoint schemas
parent
75b4f1e4
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
20 additions
and
166 deletions
+20
-166
blocks.go
indexer/database/blocks.go
+0
-65
mocks.go
indexer/database/mocks.go
+0
-21
etl_e2e_test.go
indexer/e2e_tests/etl_e2e_test.go
+0
-39
20230523_create_schema.sql
indexer/migrations/20230523_create_schema.sql
+20
-41
No files found.
indexer/database/blocks.go
View file @
fd799dbc
...
...
@@ -7,8 +7,6 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/google/uuid"
"gorm.io/gorm"
)
...
...
@@ -44,25 +42,6 @@ type L2BlockHeader struct {
BlockHeader
`gorm:"embedded"`
}
type
LegacyStateBatch
struct
{
// `default:0` is added since gorm would interepret 0 as NULL
// violating the primary key constraint.
Index
uint64
`gorm:"primaryKey;default:0"`
Root
common
.
Hash
`gorm:"serializer:bytes"`
Size
uint64
PrevTotal
uint64
L1ContractEventGUID
uuid
.
UUID
}
type
OutputProposal
struct
{
OutputRoot
common
.
Hash
`gorm:"primaryKey;serializer:bytes"`
L2OutputIndex
*
big
.
Int
`gorm:"serializer:u256"`
L2BlockNumber
*
big
.
Int
`gorm:"serializer:u256"`
L1ContractEventGUID
uuid
.
UUID
}
type
BlocksView
interface
{
L1BlockHeader
(
common
.
Hash
)
(
*
L1BlockHeader
,
error
)
L1BlockHeaderWithFilter
(
BlockHeader
)
(
*
L1BlockHeader
,
error
)
...
...
@@ -72,9 +51,6 @@ type BlocksView interface {
L2BlockHeaderWithFilter
(
BlockHeader
)
(
*
L2BlockHeader
,
error
)
L2LatestBlockHeader
()
(
*
L2BlockHeader
,
error
)
LatestCheckpointedOutput
()
(
*
OutputProposal
,
error
)
OutputProposal
(
index
*
big
.
Int
)
(
*
OutputProposal
,
error
)
LatestEpoch
()
(
*
Epoch
,
error
)
}
...
...
@@ -83,9 +59,6 @@ type BlocksDB interface {
StoreL1BlockHeaders
([]
L1BlockHeader
)
error
StoreL2BlockHeaders
([]
L2BlockHeader
)
error
StoreLegacyStateBatches
([]
LegacyStateBatch
)
error
StoreOutputProposals
([]
OutputProposal
)
error
}
/**
...
...
@@ -107,16 +80,6 @@ func (db *blocksDB) StoreL1BlockHeaders(headers []L1BlockHeader) error {
return
result
.
Error
}
func
(
db
*
blocksDB
)
StoreLegacyStateBatches
(
stateBatches
[]
LegacyStateBatch
)
error
{
result
:=
db
.
gorm
.
CreateInBatches
(
stateBatches
,
batchInsertSize
)
return
result
.
Error
}
func
(
db
*
blocksDB
)
StoreOutputProposals
(
outputs
[]
OutputProposal
)
error
{
result
:=
db
.
gorm
.
CreateInBatches
(
outputs
,
batchInsertSize
)
return
result
.
Error
}
func
(
db
*
blocksDB
)
L1BlockHeader
(
hash
common
.
Hash
)
(
*
L1BlockHeader
,
error
)
{
return
db
.
L1BlockHeaderWithFilter
(
BlockHeader
{
Hash
:
hash
})
}
...
...
@@ -148,34 +111,6 @@ func (db *blocksDB) L1LatestBlockHeader() (*L1BlockHeader, error) {
return
&
l1Header
,
nil
}
func
(
db
*
blocksDB
)
LatestCheckpointedOutput
()
(
*
OutputProposal
,
error
)
{
var
outputProposal
OutputProposal
result
:=
db
.
gorm
.
Order
(
"l2_output_index DESC"
)
.
Take
(
&
outputProposal
)
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
}
return
nil
,
result
.
Error
}
return
&
outputProposal
,
nil
}
func
(
db
*
blocksDB
)
OutputProposal
(
index
*
big
.
Int
)
(
*
OutputProposal
,
error
)
{
var
outputProposal
OutputProposal
result
:=
db
.
gorm
.
Where
(
&
OutputProposal
{
L2OutputIndex
:
index
})
.
Take
(
&
outputProposal
)
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
}
return
nil
,
result
.
Error
}
return
&
outputProposal
,
nil
}
// L2
func
(
db
*
blocksDB
)
StoreL2BlockHeaders
(
headers
[]
L2BlockHeader
)
error
{
...
...
indexer/database/mocks.go
View file @
fd799dbc
package
database
import
(
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/stretchr/testify/mock"
...
...
@@ -53,16 +51,6 @@ func (m *MockBlocksView) L2LatestBlockHeader() (*L2BlockHeader, error) {
return
args
.
Get
(
0
)
.
(
*
L2BlockHeader
),
args
.
Error
(
1
)
}
func
(
m
*
MockBlocksView
)
LatestCheckpointedOutput
()
(
*
OutputProposal
,
error
)
{
args
:=
m
.
Called
()
return
args
.
Get
(
0
)
.
(
*
OutputProposal
),
args
.
Error
(
1
)
}
func
(
m
*
MockBlocksView
)
OutputProposal
(
index
*
big
.
Int
)
(
*
OutputProposal
,
error
)
{
args
:=
m
.
Called
()
return
args
.
Get
(
0
)
.
(
*
OutputProposal
),
args
.
Error
(
1
)
}
func
(
m
*
MockBlocksView
)
LatestEpoch
()
(
*
Epoch
,
error
)
{
args
:=
m
.
Called
()
return
args
.
Get
(
0
)
.
(
*
Epoch
),
args
.
Error
(
1
)
...
...
@@ -82,15 +70,6 @@ func (m *MockBlocksDB) StoreL2BlockHeaders(headers []L2BlockHeader) error {
return
args
.
Error
(
1
)
}
func
(
m
*
MockBlocksDB
)
StoreLegacyStateBatches
(
headers
[]
LegacyStateBatch
)
error
{
args
:=
m
.
Called
(
headers
)
return
args
.
Error
(
1
)
}
func
(
m
*
MockBlocksDB
)
StoreOutputProposals
(
headers
[]
OutputProposal
)
error
{
args
:=
m
.
Called
(
headers
)
return
args
.
Error
(
1
)
}
// MockDB is a mock database that can be used for testing
type
MockDB
struct
{
MockBlocks
*
MockBlocksDB
...
...
indexer/e2e_tests/etl_e2e_test.go
View file @
fd799dbc
...
...
@@ -71,45 +71,6 @@ func TestE2EETL(t *testing.T) {
}
})
/*
TODO: ADD THIS BACK IN WHEN THESE MARKERS ARE INDEXED
t.Run("indexes L2 checkpoints", func(t *testing.T) {
latestOutput, err := testSuite.DB.Blocks.LatestCheckpointedOutput()
require.NoError(t, err)
require.NotNil(t, latestOutput)
require.GreaterOrEqual(t, latestOutput.L2BlockNumber.Int.Uint64(), uint64(9))
l2EthClient, err := node.DialEthClient(testSuite.OpSys.EthInstances["sequencer"].HTTPEndpoint())
require.NoError(t, err)
submissionInterval := testSuite.OpCfg.DeployConfig.L2OutputOracleSubmissionInterval
numOutputs := latestOutput.L2BlockNumber.Int.Uint64() / submissionInterval
for i := int64(0); i < int64(numOutputs); i++ {
blockNumber := big.NewInt((i + 1) * int64(submissionInterval))
output, err := testSuite.DB.Blocks.OutputProposal(big.NewInt(i))
require.NoError(t, err)
require.NotNil(t, output)
require.Equal(t, i, output.L2OutputIndex.Int.Int64())
require.Equal(t, blockNumber, output.L2BlockNumber.Int)
require.NotEmpty(t, output.L1ContractEventGUID)
// we may as well check the integrity of the output root
l2Block, err := testSuite.L2Client.BlockByNumber(context.Background(), blockNumber)
require.NoError(t, err)
messagePasserStorageHash, err := l2EthClient.StorageHash(predeploys.L2ToL1MessagePasserAddr, blockNumber)
require.NoError(t, err)
// construct and check output root
outputRootPreImage := [128]byte{} // 4 words (first 32 are zero for version 0)
copy(outputRootPreImage[32:64], l2Block.Root().Bytes()) // state root
copy(outputRootPreImage[64:96], messagePasserStorageHash.Bytes()) // message passer storage root
copy(outputRootPreImage[96:128], l2Block.Hash().Bytes()) // block hash
require.Equal(t, crypto.Keccak256Hash(outputRootPreImage[:]), output.OutputRoot)
}
})
*/
t
.
Run
(
"indexes L1 blocks with accompanying contract event"
,
func
(
t
*
testing
.
T
)
{
l1Contracts
:=
[]
common
.
Address
{}
testSuite
.
OpCfg
.
L1Deployments
.
ForEach
(
func
(
name
string
,
addr
common
.
Address
)
{
l1Contracts
=
append
(
l1Contracts
,
addr
)
})
...
...
indexer/migrations/20230523_create_schema.sql
View file @
fd799dbc
...
...
@@ -77,51 +77,10 @@ CREATE INDEX IF NOT EXISTS l2_contract_events_block_hash ON l2_contract_events(b
CREATE
INDEX
IF
NOT
EXISTS
l2_contract_events_event_signature
ON
l2_contract_events
(
event_signature
);
CREATE
INDEX
IF
NOT
EXISTS
l2_contract_events_contract_address
ON
l2_contract_events
(
contract_address
);
-- Tables that index finalization markers for L2 blocks.
CREATE
TABLE
IF
NOT
EXISTS
legacy_state_batches
(
index
INTEGER
PRIMARY
KEY
,
root
VARCHAR
NOT
NULL
UNIQUE
,
size
INTEGER
NOT
NULL
,
prev_total
INTEGER
NOT
NULL
,
state_batch_appended_guid
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_contract_events
(
guid
)
ON
DELETE
CASCADE
);
CREATE
TABLE
IF
NOT
EXISTS
output_proposals
(
output_root
VARCHAR
PRIMARY
KEY
,
l2_output_index
UINT256
NOT
NULL
UNIQUE
,
l2_block_number
UINT256
NOT
NULL
UNIQUE
,
output_proposed_guid
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_contract_events
(
guid
)
ON
DELETE
CASCADE
);
/**
* BRIDGING DATA
*/
-- Bridged L1/L2 Tokens
CREATE
TABLE
IF
NOT
EXISTS
l1_bridged_tokens
(
address
VARCHAR
PRIMARY
KEY
,
bridge_address
VARCHAR
NOT
NULL
,
name
VARCHAR
NOT
NULL
,
symbol
VARCHAR
NOT
NULL
,
decimals
INTEGER
NOT
NULL
CHECK
(
decimals
>=
0
AND
decimals
<=
18
)
);
CREATE
TABLE
IF
NOT
EXISTS
l2_bridged_tokens
(
address
VARCHAR
PRIMARY
KEY
,
bridge_address
VARCHAR
NOT
NULL
,
-- L1-L2 relationship is 1 to many so this is not necessarily unique
l1_token_address
VARCHAR
REFERENCES
l1_bridged_tokens
(
address
)
ON
DELETE
CASCADE
,
name
VARCHAR
NOT
NULL
,
symbol
VARCHAR
NOT
NULL
,
decimals
INTEGER
NOT
NULL
CHECK
(
decimals
>=
0
AND
decimals
<=
18
)
);
-- OptimismPortal/L2ToL1MessagePasser
CREATE
TABLE
IF
NOT
EXISTS
l1_transaction_deposits
(
source_hash
VARCHAR
PRIMARY
KEY
,
...
...
@@ -204,6 +163,26 @@ CREATE INDEX IF NOT EXISTS l2_bridge_messages_transaction_withdrawal_hash ON l2_
CREATE
INDEX
IF
NOT
EXISTS
l2_bridge_messages_from_address
ON
l2_bridge_messages
(
from_address
);
-- StandardBridge
CREATE
TABLE
IF
NOT
EXISTS
l1_bridged_tokens
(
address
VARCHAR
PRIMARY
KEY
,
bridge_address
VARCHAR
NOT
NULL
,
name
VARCHAR
NOT
NULL
,
symbol
VARCHAR
NOT
NULL
,
decimals
INTEGER
NOT
NULL
CHECK
(
decimals
>=
0
AND
decimals
<=
18
)
);
CREATE
TABLE
IF
NOT
EXISTS
l2_bridged_tokens
(
address
VARCHAR
PRIMARY
KEY
,
bridge_address
VARCHAR
NOT
NULL
,
-- L1-L2 relationship is 1 to many so this is not necessarily unique
l1_token_address
VARCHAR
REFERENCES
l1_bridged_tokens
(
address
)
ON
DELETE
CASCADE
,
name
VARCHAR
NOT
NULL
,
symbol
VARCHAR
NOT
NULL
,
decimals
INTEGER
NOT
NULL
CHECK
(
decimals
>=
0
AND
decimals
<=
18
)
);
CREATE
TABLE
IF
NOT
EXISTS
l1_bridge_deposits
(
transaction_source_hash
VARCHAR
PRIMARY
KEY
REFERENCES
l1_transaction_deposits
(
source_hash
)
ON
DELETE
CASCADE
,
cross_domain_message_hash
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_bridge_messages
(
message_hash
)
ON
DELETE
CASCADE
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment