Parametrize ChainID

This commit is contained in:
arnaucube
2020-12-23 14:53:00 +01:00
parent adc044001f
commit 150597c282
27 changed files with 185 additions and 132 deletions

View File

@@ -76,6 +76,7 @@ type StateDB struct {
db *pebble.PebbleStorage
mt *merkletree.MerkleTree
typ TypeStateDB
chainID uint16
// idx holds the current Idx that the BatchBuilder is using
idx common.Idx
zki *common.ZKInputs
@@ -88,7 +89,7 @@ type StateDB struct {
// NewStateDB creates a new StateDB, allowing to use an in-memory or in-disk
// storage
func NewStateDB(path string, typ TypeStateDB, nLevels int) (*StateDB, error) {
func NewStateDB(path string, typ TypeStateDB, nLevels int, chainID uint16) (*StateDB, error) {
var sto *pebble.PebbleStorage
var err error
sto, err = pebble.NewPebbleStorage(path+PathCurrent, false)
@@ -108,10 +109,11 @@ func NewStateDB(path string, typ TypeStateDB, nLevels int) (*StateDB, error) {
}
sdb := &StateDB{
path: path,
db: sto,
mt: mt,
typ: typ,
path: path,
db: sto,
mt: mt,
typ: typ,
chainID: chainID,
}
// load currentBatch
@@ -521,7 +523,7 @@ type LocalStateDB struct {
// NewLocalStateDB returns a new LocalStateDB connected to the given
// synchronizerDB
func NewLocalStateDB(path string, synchronizerDB *StateDB, typ TypeStateDB, nLevels int) (*LocalStateDB, error) {
s, err := NewStateDB(path, typ, nLevels)
s, err := NewStateDB(path, typ, nLevels, synchronizerDB.chainID)
if err != nil {
return nil, tracerr.Wrap(err)
}

View File

@@ -45,7 +45,8 @@ func TestNewStateDBIntermediateState(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeTxSelector, 0)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeTxSelector, 0, chainID)
assert.NoError(t, err)
// test values
@@ -67,7 +68,7 @@ func TestNewStateDBIntermediateState(t *testing.T) {
// call NewStateDB which should get the db at the last checkpoint state
// executing a Reset (discarding the last 'testkey0'&'testvalue0' data)
sdb, err = NewStateDB(dir, TypeTxSelector, 0)
sdb, err = NewStateDB(dir, TypeTxSelector, 0, chainID)
assert.NoError(t, err)
v, err = sdb.db.Get(k0)
assert.NotNil(t, err)
@@ -109,7 +110,7 @@ func TestNewStateDBIntermediateState(t *testing.T) {
// call NewStateDB which should get the db at the last checkpoint state
// executing a Reset (discarding the last 'testkey1'&'testvalue1' data)
sdb, err = NewStateDB(dir, TypeTxSelector, 0)
sdb, err = NewStateDB(dir, TypeTxSelector, 0, chainID)
assert.NoError(t, err)
v, err = sdb.db.Get(k0)
@@ -127,7 +128,8 @@ func TestStateDBWithoutMT(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeTxSelector, 0)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeTxSelector, 0, chainID)
assert.NoError(t, err)
// create test accounts
@@ -181,7 +183,8 @@ func TestStateDBWithMT(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeSynchronizer, 32, chainID)
assert.NoError(t, err)
// create test accounts
@@ -233,7 +236,8 @@ func TestCheckpoints(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeSynchronizer, 32, chainID)
assert.NoError(t, err)
// create test accounts
@@ -350,7 +354,8 @@ func TestStateDBGetAccounts(t *testing.T) {
dir, err := ioutil.TempDir("", "tmpdb")
require.NoError(t, err)
sdb, err := NewStateDB(dir, TypeTxSelector, 0)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeTxSelector, 0, chainID)
assert.NoError(t, err)
// create test accounts
@@ -397,7 +402,8 @@ func TestCheckAccountsTreeTestVectors(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeSynchronizer, 32, chainID)
require.NoError(t, err)
ay0 := new(big.Int).Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(253), nil), big.NewInt(1))

View File

@@ -93,7 +93,7 @@ func (s *StateDB) ProcessTxs(ptc ProcessTxsConfig, coordIdxs []common.Idx, l1use
exits := make([]processedExit, nTx)
if s.typ == TypeBatchBuilder {
s.zki = common.NewZKInputs(ptc.MaxTx, ptc.MaxL1Tx, ptc.MaxTx, ptc.MaxFeeTx, ptc.NLevels, s.currentBatch.BigInt())
s.zki = common.NewZKInputs(s.chainID, ptc.MaxTx, ptc.MaxL1Tx, ptc.MaxTx, ptc.MaxFeeTx, ptc.NLevels, s.currentBatch.BigInt())
s.zki.OldLastIdx = s.idx.BigInt()
s.zki.OldStateRoot = s.mt.Root().BigInt()
s.zki.Metadata.NewLastIdxRaw = s.idx
@@ -544,7 +544,7 @@ func (s *StateDB) ProcessL2Tx(coordIdxsMap map[common.TokenID]common.Idx, collec
// ZKInputs
if s.zki != nil {
// Txs
s.zki.TxCompressedData[s.i], err = tx.TxCompressedData()
s.zki.TxCompressedData[s.i], err = tx.TxCompressedData(s.chainID)
if err != nil {
return nil, nil, false, tracerr.Wrap(err)
}

View File

@@ -28,7 +28,8 @@ func TestComputeEffectiveAmounts(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeSynchronizer, 32, chainID)
assert.NoError(t, err)
set := `
@@ -42,7 +43,7 @@ func TestComputeEffectiveAmounts(t *testing.T) {
> batchL1
> block
`
tc := til.NewContext(common.RollupConstMaxL1UserTx)
tc := til.NewContext(chainID, common.RollupConstMaxL1UserTx)
blocks, err := tc.GenerateBlocks(set)
require.NoError(t, err)
@@ -201,11 +202,12 @@ func TestProcessTxsBalances(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeSynchronizer, 32, chainID)
assert.NoError(t, err)
// generate test transactions from test.SetBlockchain0 code
tc := til.NewContext(common.RollupConstMaxL1UserTx)
tc := til.NewContext(chainID, common.RollupConstMaxL1UserTx)
blocks, err := tc.GenerateBlocks(til.SetBlockchainMinimumFlow0)
require.NoError(t, err)
@@ -333,11 +335,12 @@ func TestProcessTxsSynchronizer(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeSynchronizer, 32, chainID)
assert.NoError(t, err)
// generate test transactions from test.SetBlockchain0 code
tc := til.NewContext(common.RollupConstMaxL1UserTx)
tc := til.NewContext(0, common.RollupConstMaxL1UserTx)
blocks, err := tc.GenerateBlocks(til.SetBlockchain0)
require.NoError(t, err)
@@ -461,11 +464,12 @@ func TestProcessTxsBatchBuilder(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32, chainID)
assert.NoError(t, err)
// generate test transactions from test.SetBlockchain0 code
tc := til.NewContext(common.RollupConstMaxL1UserTx)
tc := til.NewContext(0, common.RollupConstMaxL1UserTx)
blocks, err := tc.GenerateBlocks(til.SetBlockchain0)
require.NoError(t, err)
@@ -549,7 +553,8 @@ func TestProcessTxsRootTestVectors(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32, chainID)
assert.NoError(t, err)
// same values than in the js test
@@ -597,8 +602,8 @@ func TestCreateAccountDepositMaxValue(t *testing.T) {
defer assert.NoError(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.NoError(t, err)
users := generateJsUsers(t)

View File

@@ -20,7 +20,8 @@ func TestGetIdx(t *testing.T) {
require.NoError(t, err)
defer assert.NoError(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeTxSelector, 0)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeTxSelector, 0, chainID)
assert.NoError(t, err)
var sk babyjub.PrivateKey

View File

@@ -65,8 +65,8 @@ func generateJsUsers(t *testing.T) []til.User {
return users
}
func signL2Tx(t *testing.T, user til.User, l2Tx common.PoolL2Tx) common.PoolL2Tx {
toSign, err := l2Tx.HashToSign()
func signL2Tx(t *testing.T, chainID uint16, user til.User, l2Tx common.PoolL2Tx) common.PoolL2Tx {
toSign, err := l2Tx.HashToSign(chainID)
require.NoError(t, err)
sig := user.BJJ.SignPoseidon(toSign)
l2Tx.Signature = sig.Compress()
@@ -78,7 +78,8 @@ func TestZKInputsHashTestVector0(t *testing.T) {
require.NoError(t, err)
defer assert.Nil(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -152,7 +153,8 @@ func TestZKInputsHashTestVector1(t *testing.T) {
require.NoError(t, err)
defer assert.Nil(t, os.RemoveAll(dir))
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, 32, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -251,7 +253,8 @@ func TestZKInputsEmpty(t *testing.T) {
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
ptc := ProcessTxsConfig{
@@ -330,7 +333,7 @@ func TestZKInputsEmpty(t *testing.T) {
},
}
toSign, err := l2Txs[0].HashToSign()
toSign, err := l2Txs[0].HashToSign(sdb.chainID)
require.Nil(t, err)
sig := users[0].BJJ.SignPoseidon(toSign)
l2Txs[0].Signature = sig.Compress()
@@ -399,8 +402,8 @@ func TestZKInputs0(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -431,7 +434,7 @@ func TestZKInputs0(t *testing.T) {
},
}
toSign, err := l2Txs[0].HashToSign()
toSign, err := l2Txs[0].HashToSign(sdb.chainID)
require.NoError(t, err)
sig := users[0].BJJ.SignPoseidon(toSign)
l2Txs[0].Signature = sig.Compress()
@@ -487,8 +490,8 @@ func TestZKInputs1(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -530,7 +533,7 @@ func TestZKInputs1(t *testing.T) {
},
}
toSign, err := l2Txs[0].HashToSign()
toSign, err := l2Txs[0].HashToSign(sdb.chainID)
require.NoError(t, err)
sig := users[0].BJJ.SignPoseidon(toSign)
l2Txs[0].Signature = sig.Compress()
@@ -594,8 +597,8 @@ func TestZKInputs2(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -668,8 +671,8 @@ func TestZKInputs2(t *testing.T) {
},
}
l2Txs[0] = signL2Tx(t, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, users[0], l2Txs[1])
l2Txs[0] = signL2Tx(t, sdb.chainID, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, sdb.chainID, users[0], l2Txs[1])
ptc := ProcessTxsConfig{
NLevels: uint32(nLevels),
@@ -738,8 +741,8 @@ func TestZKInputs3(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -812,8 +815,8 @@ func TestZKInputs3(t *testing.T) {
},
}
l2Txs[0] = signL2Tx(t, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, users[0], l2Txs[1])
l2Txs[0] = signL2Tx(t, sdb.chainID, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, sdb.chainID, users[0], l2Txs[1])
ptc := ProcessTxsConfig{
NLevels: uint32(nLevels),
@@ -882,8 +885,8 @@ func TestZKInputs4(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -966,8 +969,8 @@ func TestZKInputs4(t *testing.T) {
},
}
l2Txs[0] = signL2Tx(t, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, users[0], l2Txs[1])
l2Txs[0] = signL2Tx(t, sdb.chainID, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, sdb.chainID, users[0], l2Txs[1])
ptc := ProcessTxsConfig{
NLevels: uint32(nLevels),
@@ -1036,8 +1039,8 @@ func TestZKInputs5(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// same values than in the js test
@@ -1098,8 +1101,8 @@ func TestZKInputs5(t *testing.T) {
Type: common.TxTypeExit,
},
}
l2Txs[0] = signL2Tx(t, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, users[0], l2Txs[1])
l2Txs[0] = signL2Tx(t, sdb.chainID, users[0], l2Txs[0])
l2Txs[1] = signL2Tx(t, sdb.chainID, users[0], l2Txs[1])
ptc := ProcessTxsConfig{
NLevels: uint32(nLevels),
@@ -1160,8 +1163,8 @@ func TestZKInputs6(t *testing.T) {
defer assert.Nil(t, os.RemoveAll(dir))
nLevels := 16
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels)
chainID := uint16(0)
sdb, err := NewStateDB(dir, TypeBatchBuilder, nLevels, chainID)
assert.Nil(t, err)
// Coordinator Idx where to send the fees
@@ -1174,7 +1177,7 @@ func TestZKInputs6(t *testing.T) {
MaxFeeTx: 4,
}
tc := til.NewContext(common.RollupConstMaxL1UserTx)
tc := til.NewContext(0, common.RollupConstMaxL1UserTx)
blocks, err := tc.GenerateBlocks(til.SetBlockchainMinimumFlow0)
require.NoError(t, err)