|
|
@ -5,17 +5,14 @@ import ( |
|
|
|
"encoding/json" |
|
|
|
"fmt" |
|
|
|
"io/ioutil" |
|
|
|
"math/big" |
|
|
|
"os" |
|
|
|
"strconv" |
|
|
|
"testing" |
|
|
|
|
|
|
|
ethCommon "github.com/ethereum/go-ethereum/common" |
|
|
|
"github.com/hermeznetwork/hermez-node/common" |
|
|
|
"github.com/hermeznetwork/hermez-node/db/statedb" |
|
|
|
"github.com/hermeznetwork/hermez-node/log" |
|
|
|
"github.com/hermeznetwork/hermez-node/test/til" |
|
|
|
"github.com/iden3/go-iden3-crypto/babyjub" |
|
|
|
"github.com/hermeznetwork/hermez-node/test/txsets" |
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
) |
|
|
@ -39,41 +36,6 @@ func printZKInputs(t *testing.T, zki *common.ZKInputs) { |
|
|
|
fmt.Println("") |
|
|
|
} |
|
|
|
|
|
|
|
func generateJsUsers(t *testing.T) []til.User { |
|
|
|
// same values than in the js test
|
|
|
|
// skJsHex is equivalent to the 0000...000i js private key in commonjs
|
|
|
|
skJsHex := []string{"7eb258e61862aae75c6c1d1f7efae5006ffc9e4d5596a6ff95f3df4ea209ea7f", "c005700f76f4b4cec710805c21595688648524df0a9d467afae537b7a7118819", "b373d14c67fb2a517bf4ac831c93341eec8e1b38dbc14e7d725b292a7cf84707", "2064b68d04a7aaae0ac3b36bf6f1850b380f1423be94a506c531940bd4a48b76"} |
|
|
|
addrHex := []string{"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf", "0x2b5ad5c4795c026514f8317c7a215e218dccd6cf", "0x6813eb9362372eef6200f3b1dbc3f819671cba69", "0x1eff47bc3a10a45d4b230b5d10e37751fe6aa718"} |
|
|
|
var users []til.User |
|
|
|
for i := 0; i < len(skJsHex); i++ { |
|
|
|
skJs, err := hex.DecodeString(skJsHex[i]) |
|
|
|
require.NoError(t, err) |
|
|
|
var sk babyjub.PrivateKey |
|
|
|
copy(sk[:], skJs) |
|
|
|
// bjj := sk.Public()
|
|
|
|
user := til.User{ |
|
|
|
Name: strconv.Itoa(i), |
|
|
|
BJJ: &sk, |
|
|
|
Addr: ethCommon.HexToAddress(addrHex[i]), |
|
|
|
} |
|
|
|
users = append(users, user) |
|
|
|
} |
|
|
|
assert.Equal(t, "d746824f7d0ac5044a573f51b278acb56d823bec39551d1d7bf7378b68a1b021", users[0].BJJ.Public().String()) |
|
|
|
assert.Equal(t, "4d05c307400c65795f02db96b1b81c60386fd53e947d9d3f749f3d99b1853909", users[1].BJJ.Public().String()) |
|
|
|
assert.Equal(t, "38ffa002724562eb2a952a2503e206248962406cf16392ff32759b6f2a41fe11", users[2].BJJ.Public().String()) |
|
|
|
assert.Equal(t, "c719e6401190be7fa7fbfcd3448fe2755233c01575341a3b09edadf5454f760b", users[3].BJJ.Public().String()) |
|
|
|
|
|
|
|
return users |
|
|
|
} |
|
|
|
|
|
|
|
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() |
|
|
|
return l2Tx |
|
|
|
} |
|
|
|
|
|
|
|
func TestZKInputsHashTestVector0(t *testing.T) { |
|
|
|
dir, err := ioutil.TempDir("", "tmpdb") |
|
|
|
require.NoError(t, err) |
|
|
@ -82,34 +44,9 @@ func TestZKInputsHashTestVector0(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, 32) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 256, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputsHash0(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: 32, |
|
|
|
MaxFeeTx: 8, |
|
|
@ -119,7 +56,7 @@ func TestZKInputsHashTestVector0(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
ptOut, err := tp.ProcessTxs(nil, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -156,45 +93,9 @@ func TestZKInputsHashTestVector1(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, 32) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 257, |
|
|
|
ToIdx: 256, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 137, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputsHash1(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: 32, |
|
|
|
MaxFeeTx: 8, |
|
|
@ -204,7 +105,7 @@ func TestZKInputsHashTestVector1(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
ptOut, err := tp.ProcessTxs(nil, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -299,40 +200,9 @@ func TestZKInputsEmpty(t *testing.T) { |
|
|
|
// so that the state tree is not empty (same transactions as
|
|
|
|
// TestZKInputs0)
|
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1UserTxs = []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs = []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 256, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 0, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
toSign, err := l2Txs[0].HashToSign(tp.config.ChainID) |
|
|
|
require.NoError(t, err) |
|
|
|
sig := users[0].BJJ.SignPoseidon(toSign) |
|
|
|
l2Txs[0].Signature = sig.Compress() |
|
|
|
_, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs = txsets.GenerateTxsZKInputs0(t, chainID) |
|
|
|
|
|
|
|
ptOut, err = tp.ProcessTxs(nil, l1UserTxs, nil, l2Txs) |
|
|
|
ptOut, err = tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
rootNonZero := sdb.MT.Root() |
|
|
@ -399,39 +269,8 @@ func TestZKInputs0(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, nLevels) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 256, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 0, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
toSign, err := l2Txs[0].HashToSign(chainID) |
|
|
|
require.NoError(t, err) |
|
|
|
sig := users[0].BJJ.SignPoseidon(toSign) |
|
|
|
l2Txs[0].Signature = sig.Compress() |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs0(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: uint32(nLevels), |
|
|
@ -442,7 +281,7 @@ func TestZKInputs0(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
ptOut, err := tp.ProcessTxs(nil, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -486,50 +325,8 @@ func TestZKInputs1(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, nLevels) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 256, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
toSign, err := l2Txs[0].HashToSign(chainID) |
|
|
|
require.NoError(t, err) |
|
|
|
sig := users[0].BJJ.SignPoseidon(toSign) |
|
|
|
l2Txs[0].Signature = sig.Compress() |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs1(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: uint32(nLevels), |
|
|
@ -540,8 +337,7 @@ func TestZKInputs1(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
coordIdxs := []common.Idx{257} |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -592,79 +388,8 @@ func TestZKInputs2(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, nLevels) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[2].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[2].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[3].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[3].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 258, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 259, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 1, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
l2Txs[0] = signL2Tx(t, chainID, users[0], l2Txs[0]) |
|
|
|
l2Txs[1] = signL2Tx(t, chainID, users[0], l2Txs[1]) |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs2(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: uint32(nLevels), |
|
|
@ -675,8 +400,7 @@ func TestZKInputs2(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
coordIdxs := []common.Idx{257} |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -735,79 +459,8 @@ func TestZKInputs3(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, nLevels) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[2].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[2].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[3].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[3].Addr, |
|
|
|
ToIdx: 258, |
|
|
|
Type: common.TxTypeCreateAccountDepositTransfer, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 258, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 259, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 1, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
l2Txs[0] = signL2Tx(t, chainID, users[0], l2Txs[0]) |
|
|
|
l2Txs[1] = signL2Tx(t, chainID, users[0], l2Txs[1]) |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs3(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: uint32(nLevels), |
|
|
@ -818,8 +471,7 @@ func TestZKInputs3(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
coordIdxs := []common.Idx{257} |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -878,89 +530,8 @@ func TestZKInputs4(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, nLevels) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[2].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[2].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[3].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[3].Addr, |
|
|
|
ToIdx: 258, |
|
|
|
Type: common.TxTypeCreateAccountDepositTransfer, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 258, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
TokenID: 1, |
|
|
|
FromEthAddr: users[2].Addr, |
|
|
|
ToIdx: 259, |
|
|
|
Type: common.TxTypeDepositTransfer, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 258, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 259, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 1, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
l2Txs[0] = signL2Tx(t, chainID, users[0], l2Txs[0]) |
|
|
|
l2Txs[1] = signL2Tx(t, chainID, users[0], l2Txs[1]) |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs4(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: uint32(nLevels), |
|
|
@ -971,8 +542,7 @@ func TestZKInputs4(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
coordIdxs := []common.Idx{257} |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// check expected account keys values from tx inputs
|
|
|
@ -1031,68 +601,8 @@ func TestZKInputs5(t *testing.T) { |
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, nLevels) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// same values than in the js test
|
|
|
|
users := generateJsUsers(t) |
|
|
|
|
|
|
|
l1Txs := []common.L1Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[0].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[0].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 0, |
|
|
|
DepositAmount: big.NewInt(16000000), |
|
|
|
Amount: big.NewInt(0), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 0, |
|
|
|
Type: common.TxTypeCreateAccountDeposit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 257, |
|
|
|
DepositAmount: big.NewInt(0), |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
TokenID: 1, |
|
|
|
FromBJJ: users[1].BJJ.Public().Compress(), |
|
|
|
FromEthAddr: users[1].Addr, |
|
|
|
ToIdx: 1, |
|
|
|
Type: common.TxTypeForceExit, |
|
|
|
UserOrigin: true, |
|
|
|
}, |
|
|
|
} |
|
|
|
l2Txs := []common.PoolL2Tx{ |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 257, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 0, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeTransfer, |
|
|
|
}, |
|
|
|
{ |
|
|
|
FromIdx: 256, |
|
|
|
ToIdx: 1, |
|
|
|
TokenID: 1, |
|
|
|
Amount: big.NewInt(1000), |
|
|
|
Nonce: 1, |
|
|
|
Fee: 126, |
|
|
|
Type: common.TxTypeExit, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
chainID := uint16(0) |
|
|
|
l2Txs[0] = signL2Tx(t, chainID, users[0], l2Txs[0]) |
|
|
|
l2Txs[1] = signL2Tx(t, chainID, users[0], l2Txs[1]) |
|
|
|
users, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs5(t, chainID) |
|
|
|
|
|
|
|
config := Config{ |
|
|
|
NLevels: uint32(nLevels), |
|
|
@ -1103,8 +613,7 @@ func TestZKInputs5(t *testing.T) { |
|
|
|
} |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
coordIdxs := []common.Idx{257} |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1Txs, nil, l2Txs) |
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
assert.Equal(t, "9004936174112171168716185012590576631374182232656264130522697453639057968430", sdb.MT.Root().BigInt().String()) |
|
|
@ -1145,7 +654,7 @@ func TestZKInputs5(t *testing.T) { |
|
|
|
|
|
|
|
// TestZKInputs6:
|
|
|
|
// Tests ZKInputs generated by the batches generated by
|
|
|
|
// til.SetBlockchainMinimumFlow0
|
|
|
|
// txsets.SetBlockchainMinimumFlow0
|
|
|
|
func TestZKInputs6(t *testing.T) { |
|
|
|
dir, err := ioutil.TempDir("", "tmpdb") |
|
|
|
require.NoError(t, err) |
|
|
@ -1166,7 +675,7 @@ func TestZKInputs6(t *testing.T) { |
|
|
|
tp := NewTxProcessor(sdb, config) |
|
|
|
|
|
|
|
tc := til.NewContext(0, common.RollupConstMaxL1UserTx) |
|
|
|
blocks, err := tc.GenerateBlocks(til.SetBlockchainMinimumFlow0) |
|
|
|
blocks, err := tc.GenerateBlocks(txsets.SetBlockchainMinimumFlow0) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
// restart nonces of TilContext, as will be set by generating directly
|
|
|
|