Skip to content

Commit 01df93e

Browse files
authored
Feature/backward let endpoint + forwardLET implementation (#887)
* backwardLET endpoint * ForwardLET * ForwardLET working * fix new endpoint * linter
1 parent 926fee2 commit 01df93e

File tree

27 files changed

+1583
-772
lines changed

27 files changed

+1583
-772
lines changed

bridgectrl/pb/query.pb.go

Lines changed: 399 additions & 222 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bridgectrl/pb/query.pb.gw.go

Lines changed: 87 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bridgectrl/pb/query_grpc.pb.go

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

db/pgstorage/migrations/0020_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ func (m migrationTest0020) RunAssertsAfterMigrationUp(t *testing.T, db *sql.DB)
2929
insertUnSetClaim := `INSERT INTO sync.set_unset_claim(block_id, mainnet_flag, rollup_index, index, global_index, type)
3030
VALUES(1, false, 4294967295, 4294967295, '18446744073709551615', 'UNSET');`
3131
_, err = db.Exec(insertUnSetClaim)
32-
3332
assert.NoError(t, err)
33+
3434
var count uint32
3535
selectCount := "SELECT count(*) FROM sync.backward_let"
3636
err = db.QueryRow(selectCount).Scan(&count)

db/pgstorage/migrations/0021.sql

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-- +migrate Up
2+
3+
CREATE TABLE IF NOT EXISTS sync.forward_let(
4+
id BIGSERIAL,
5+
block_id BIGINT REFERENCES sync.block (id) ON DELETE CASCADE,
6+
previous_deposit_cnt BIGINT,
7+
previous_root BYTEA,
8+
new_deposit_cnt BIGINT,
9+
new_root BYTEA,
10+
new_raw_leaves BYTEA,
11+
PRIMARY KEY (id)
12+
);
13+
14+
-- +migrate Down
15+
16+
DROP TABLE IF EXISTS sync.forward_let;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package migrations_test
2+
3+
import (
4+
"database/sql"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
type migrationTest0021 struct{}
11+
12+
func (m migrationTest0021) InsertData(db *sql.DB) error {
13+
block := "INSERT INTO sync.block (id, block_num, block_hash, network_id) VALUES(1, 1, decode('C9B5033799ADF3739383A0489EFBE8A0D4D5E4478778A4F4304562FD51AE4C07','hex'), 0);"
14+
if _, err := db.Exec(block); err != nil {
15+
return err
16+
}
17+
return nil
18+
}
19+
20+
func (m migrationTest0021) RunAssertsAfterMigrationUp(t *testing.T, db *sql.DB) {
21+
insertForwardLET := `INSERT INTO sync.forward_let(block_id, previous_deposit_cnt, previous_root, new_deposit_cnt, new_root)
22+
VALUES(1, 2, decode('A9B5033799ADF3739383A0489EFBE8A0D4D5E4478778A4F4304562FD51AE4C08','hex'), 1, decode('B9B5033799ADF3739383A0489EFBE8A0D4D5E4478778A4F4304562FD51AE4C09','hex'));`
23+
_, err := db.Exec(insertForwardLET)
24+
assert.NoError(t, err)
25+
26+
var count uint32
27+
selectCount := "SELECT count(*) FROM sync.forward_let"
28+
err = db.QueryRow(selectCount).Scan(&count)
29+
assert.NoError(t, err)
30+
assert.Equal(t, uint32(1), count)
31+
}
32+
33+
func (m migrationTest0021) RunAssertsAfterMigrationDown(t *testing.T, db *sql.DB) {
34+
var count uint32
35+
selectCount := "SELECT count(*) FROM sync.forward_let"
36+
err := db.QueryRow(selectCount).Scan(&count)
37+
assert.Error(t, err)
38+
}
39+
40+
func TestMigration0021(t *testing.T) {
41+
runMigrationTest(t, 21, migrationTest0021{})
42+
}

db/pgstorage/pgstorage.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,14 @@ func (p *PostgresStorage) AddBackwardLET(ctx context.Context, backwardLET *ether
940940
return err
941941
}
942942

943+
// AddForwardLET adds a new ForwardLET event to the db.
944+
func (p *PostgresStorage) AddForwardLET(ctx context.Context, forwardLET *etherman.ForwardLET, dbTx interface{}) error {
945+
const addExitRootSQL = "INSERT INTO sync.forward_let(block_id, previous_deposit_cnt, previous_root, new_deposit_cnt, new_root, new_raw_leaves) VALUES ($1, $2, $3, $4, $5, $6)"
946+
e := p.getExecQuerier(dbTx)
947+
_, err := e.Exec(ctx, addExitRootSQL, forwardLET.BlockID, forwardLET.PreviousDepositCount, forwardLET.PreviousRoot, forwardLET.NewDepositCount, forwardLET.NewRoot, forwardLET.NewRawLeaves)
948+
return err
949+
}
950+
943951
// AddSetClaim adds a new SetClaim event to the db.
944952
func (p *PostgresStorage) AddSetClaim(ctx context.Context, setClaim *etherman.SetClaim, dbTx interface{}) error {
945953
return p.addSetUnsetClaim(ctx, "SET", setClaim.BlockID, setClaim.MainnetFlag, setClaim.RollupIndex, setClaim.Index, setClaim.GlobalIndex, dbTx)
@@ -965,6 +973,16 @@ func (p *PostgresStorage) DeleteClaimByGlobalIndex(ctx context.Context, globalIn
965973
return err
966974
}
967975

976+
func (p *PostgresStorage) GetLastComputedRoot(ctx context.Context, networkID uint32, dbTx interface{}) (common.Hash, error) {
977+
const query = "SELECT root FROM mt.root WHERE network = $1 ORDER BY deposit_id desc LIMIT 1;"
978+
var root common.Hash
979+
err := p.getExecQuerier(dbTx).QueryRow(ctx, query, networkID).Scan(&root)
980+
if err != nil {
981+
return common.Hash{}, fmt.Errorf("error getting the root from db: %v", err)
982+
}
983+
return root, nil
984+
}
985+
968986
// UpdateDepositsStatusForTesting updates the ready_for_claim status of all deposits for testing.
969987
func (p *PostgresStorage) UpdateDepositsStatusForTesting(ctx context.Context, dbTx interface{}) error {
970988
const updateDepositsStatusSQL = "UPDATE sync.deposit SET ready_for_claim = true;"

db/pgstorage/pgstorage_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,40 @@ func TestAddBackwardLET(t *testing.T) {
361361
assert.Equal(t, uint32(1), count)
362362
}
363363

364+
func TestAddForwardLET(t *testing.T) {
365+
data := `INSERT INTO sync.block
366+
(id, block_num, block_hash, network_id)
367+
VALUES(1, 1, decode('5C7831','hex'), 0);
368+
`
369+
dbCfg := NewConfigFromEnv()
370+
ctx := context.Background()
371+
err := InitOrReset(ctx, dbCfg)
372+
require.NoError(t, err)
373+
374+
store, err := NewPostgresStorage(ctx, dbCfg)
375+
require.NoError(t, err)
376+
377+
_, err = store.Exec(ctx, data)
378+
require.NoError(t, err)
379+
380+
fLET := &etherman.ForwardLET{
381+
BlockID: 1,
382+
PreviousDepositCount: 3,
383+
PreviousRoot: common.HexToHash("0x6282FACE883070640F802CE8A2C42593AA18D3A691C61BA006EC477D6E5FEE1F"),
384+
NewDepositCount: 1,
385+
NewRoot: common.HexToHash("0xAA82FACE883070640F802CE8A2C42593AA18D3A691C61BA006EC477D6E5FEECC"),
386+
NewRawLeaves: []byte("Random bytes to fill the db field"),
387+
}
388+
err = store.AddForwardLET(ctx, fLET, nil)
389+
require.NoError(t, err)
390+
391+
var count uint32
392+
selectCount := "SELECT count(*) FROM sync.forward_let"
393+
err = store.QueryRow(ctx, selectCount).Scan(&count)
394+
assert.NoError(t, err)
395+
assert.Equal(t, uint32(1), count)
396+
}
397+
364398
func TestAddSetUnsetClaim(t *testing.T) {
365399
data := `INSERT INTO sync.block
366400
(id, block_num, block_hash, network_id)

0 commit comments

Comments
 (0)