package zkproof
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/hermeznetwork/hermez-node/db/statedb"
|
|
"github.com/hermeznetwork/hermez-node/prover"
|
|
"github.com/hermeznetwork/hermez-node/test/txsets"
|
|
"github.com/hermeznetwork/hermez-node/txprocessor"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var proofServerURL string
|
|
|
|
const pollInterval = 200 * time.Millisecond
|
|
|
|
func TestMain(m *testing.M) {
|
|
exitVal := 0
|
|
proofServerURL = os.Getenv("PROOF_SERVER_URL")
|
|
if proofServerURL != "" {
|
|
exitVal = m.Run()
|
|
}
|
|
os.Exit(exitVal)
|
|
}
|
|
|
|
const MaxTx = 376
|
|
const NLevels = 32
|
|
const MaxL1Tx = 256
|
|
const MaxFeeTx = 64
|
|
const ChainID uint16 = 1
|
|
|
|
func TestZKInputs5(t *testing.T) {
|
|
dir, err := ioutil.TempDir("", "tmpdb")
|
|
require.NoError(t, err)
|
|
defer assert.Nil(t, os.RemoveAll(dir))
|
|
|
|
sdb, err := statedb.NewStateDB(dir, 128, statedb.TypeBatchBuilder, NLevels)
|
|
require.NoError(t, err)
|
|
|
|
_, coordIdxs, l1UserTxs, l1CoordTxs, l2Txs := txsets.GenerateTxsZKInputs5(t, ChainID)
|
|
|
|
config := txprocessor.Config{
|
|
NLevels: uint32(NLevels),
|
|
MaxTx: MaxTx,
|
|
MaxL1Tx: MaxL1Tx,
|
|
MaxFeeTx: MaxFeeTx,
|
|
ChainID: ChainID,
|
|
}
|
|
tp := txprocessor.NewTxProcessor(sdb, config)
|
|
|
|
// skip first batch to do the test with BatchNum=1
|
|
_, err = tp.ProcessTxs(nil, nil, nil, nil)
|
|
require.NoError(t, err)
|
|
|
|
ptOut, err := tp.ProcessTxs(coordIdxs, l1UserTxs, l1CoordTxs, l2Txs)
|
|
require.NoError(t, err)
|
|
|
|
// Store zkinputs json for debugging purposes
|
|
zkInputsJSON, err := json.Marshal(ptOut.ZKInputs)
|
|
require.NoError(t, err)
|
|
err = ioutil.WriteFile("/tmp/dbgZKInputs.json", zkInputsJSON, 0640) //nolint:gosec
|
|
require.NoError(t, err)
|
|
|
|
proofServerClient := prover.NewProofServerClient(proofServerURL, pollInterval)
|
|
err = proofServerClient.WaitReady(context.Background())
|
|
require.NoError(t, err)
|
|
err = proofServerClient.CalculateProof(context.Background(), ptOut.ZKInputs)
|
|
require.NoError(t, err)
|
|
proof, pubInputs, err := proofServerClient.GetProof(context.Background())
|
|
require.NoError(t, err)
|
|
fmt.Printf("proof: %#v\n", proof)
|
|
fmt.Printf("pubInputs: %#v\n", pubInputs)
|
|
}
|