|
|
package test
import ( "math/big" "strconv" "time"
ethCommon "github.com/ethereum/go-ethereum/common" "github.com/hermeznetwork/hermez-node/common" "github.com/iden3/go-iden3-crypto/babyjub" "github.com/jmoiron/sqlx" )
// CleanL2DB deletes 'tx_pool' and 'account_creation_auth' from the given DB
func CleanL2DB(db *sqlx.DB) { if _, err := db.Exec("DELETE FROM tx_pool;"); err != nil { panic(err) } if _, err := db.Exec("DELETE FROM account_creation_auth;"); err != nil { panic(err) } }
// GenPoolTxs generates L2 pool txs.
// WARNING: This tx doesn't follow the protocol (signature, txID, ...)
// it's just to test getting/setting from/to the DB.
func GenPoolTxs(n int, tokens []common.Token) []*common.PoolL2Tx { txs := make([]*common.PoolL2Tx, 0, n) privK := babyjub.NewRandPrivKey() for i := 256; i < 256+n; i++ { var state common.PoolL2TxState //nolint:gomnd
if i%4 == 0 { state = common.PoolL2TxStatePending //nolint:gomnd
} else if i%4 == 1 { state = common.PoolL2TxStateInvalid //nolint:gomnd
} else if i%4 == 2 { state = common.PoolL2TxStateForging //nolint:gomnd
} else if i%4 == 3 { state = common.PoolL2TxStateForged } f := new(big.Float).SetInt(big.NewInt(int64(i))) amountF, _ := f.Float64() var usd, absFee *float64 fee := common.FeeSelector(i % 255) //nolint:gomnd
token := tokens[i%len(tokens)] if token.USD != nil { usd = new(float64) absFee = new(float64) *usd = *token.USD * amountF *absFee = fee.Percentage() * *usd } toIdx := new(common.Idx) *toIdx = common.Idx(i + 1) toEthAddr := new(ethCommon.Address) *toEthAddr = ethCommon.BigToAddress(big.NewInt(int64(i))) tx := &common.PoolL2Tx{ FromIdx: common.Idx(i), ToIdx: toIdx, ToEthAddr: toEthAddr, ToBJJ: privK.Public(), TokenID: token.TokenID, Amount: big.NewInt(int64(i)), AmountFloat: amountF, USD: usd, Fee: fee, Nonce: common.Nonce(i), State: state, Signature: privK.SignPoseidon(big.NewInt(int64(i))), Timestamp: time.Now().UTC(), AbsoluteFee: absFee, AbsoluteFeeUpdate: token.USDUpdate, } var err error tx, err = common.NewPoolL2Tx(tx) if err != nil { panic(err) } if i%2 == 0 { // Optional parameters: rq
rqFromIdx := new(common.Idx) *rqFromIdx = common.Idx(i) tx.RqFromIdx = rqFromIdx rqToIdx := new(common.Idx) *rqToIdx = common.Idx(i + 1) tx.RqToIdx = rqToIdx rqToEthAddr := new(ethCommon.Address) *rqToEthAddr = ethCommon.BigToAddress(big.NewInt(int64(i))) tx.RqToEthAddr = rqToEthAddr tx.RqToBJJ = privK.Public() rqTokenID := new(common.TokenID) *rqTokenID = common.TokenID(i) tx.RqTokenID = rqTokenID tx.RqAmount = big.NewInt(int64(i)) rqFee := new(common.FeeSelector) *rqFee = common.FeeSelector(i) tx.RqFee = rqFee rqNonce := new(uint64) *rqNonce = uint64(i) tx.RqNonce = rqNonce } if i%3 == 0 { // Optional parameters: things that get updated "a posteriori"
batchNum := new(common.BatchNum) *batchNum = 489 tx.BatchNum = batchNum } txs = append(txs, tx) } return txs }
// GenAuths generates account creation authorizations
func GenAuths(nAuths int) []*common.AccountCreationAuth { auths := []*common.AccountCreationAuth{} for i := 0; i < nAuths; i++ { privK := babyjub.NewRandPrivKey() auths = append(auths, &common.AccountCreationAuth{ EthAddr: ethCommon.BigToAddress(big.NewInt(int64(i))), BJJ: privK.Public(), Signature: []byte(strconv.Itoa(i)), Timestamp: time.Now(), }) } return auths }
|