mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-25 04:47:18 +00:00
943dec525c
* Delete deploy contract tool. Move mock to its own package as testonly with some helper functions * gofmt contracts/deposit/mock/mock.go * move stategen mock.go to its on testonly pkg * move password_reader_mock.go to mock testonly package * move mock keymanager to its own testonly package * move attestations mock * move voluntaryexits mock * Move slashings mock to mock pkg * move the slasher mock Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
85 lines
3.5 KiB
Go
85 lines
3.5 KiB
Go
package deposit_test
|
|
|
|
import (
|
|
"context"
|
|
"encoding/binary"
|
|
"testing"
|
|
|
|
"github.com/ethereum/go-ethereum"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
depositcontract "github.com/prysmaticlabs/prysm/contracts/deposit"
|
|
"github.com/prysmaticlabs/prysm/contracts/deposit/mock"
|
|
"github.com/prysmaticlabs/prysm/runtime/interop"
|
|
"github.com/prysmaticlabs/prysm/testing/assert"
|
|
"github.com/prysmaticlabs/prysm/testing/require"
|
|
)
|
|
|
|
func TestSetupRegistrationContract_OK(t *testing.T) {
|
|
_, err := mock.Setup()
|
|
assert.NoError(t, err, "Can not deploy validator registration contract")
|
|
}
|
|
|
|
// negative test case, deposit with less than 1 ETH which is less than the top off amount.
|
|
func TestRegister_Below1ETH(t *testing.T) {
|
|
testAccount, err := mock.Setup()
|
|
require.NoError(t, err)
|
|
|
|
// Generate deposit data
|
|
privKeys, pubKeys, err := interop.DeterministicallyGenerateKeys(0 /*startIndex*/, 1)
|
|
require.NoError(t, err)
|
|
depositDataItems, depositDataRoots, err := interop.DepositDataFromKeys(privKeys, pubKeys)
|
|
require.NoError(t, err)
|
|
|
|
var depositDataRoot [32]byte
|
|
copy(depositDataRoot[:], depositDataRoots[0])
|
|
testAccount.TxOpts.Value = mock.LessThan1Eth()
|
|
_, err = testAccount.Contract.Deposit(testAccount.TxOpts, pubKeys[0].Marshal(), depositDataItems[0].WithdrawalCredentials, depositDataItems[0].Signature, depositDataRoot)
|
|
assert.ErrorContains(t, "execution reverted", err, "Validator registration should have failed with insufficient deposit")
|
|
}
|
|
|
|
// normal test case, test depositing 32 ETH and verify HashChainValue event is correctly emitted.
|
|
func TestValidatorRegister_OK(t *testing.T) {
|
|
testAccount, err := mock.Setup()
|
|
require.NoError(t, err)
|
|
testAccount.TxOpts.Value = mock.Amount32Eth()
|
|
|
|
// Generate deposit data
|
|
privKeys, pubKeys, err := interop.DeterministicallyGenerateKeys(0 /*startIndex*/, 1)
|
|
require.NoError(t, err)
|
|
depositDataItems, depositDataRoots, err := interop.DepositDataFromKeys(privKeys, pubKeys)
|
|
require.NoError(t, err)
|
|
|
|
var depositDataRoot [32]byte
|
|
copy(depositDataRoot[:], depositDataRoots[0])
|
|
_, err = testAccount.Contract.Deposit(testAccount.TxOpts, pubKeys[0].Marshal(), depositDataItems[0].WithdrawalCredentials, depositDataItems[0].Signature, depositDataRoot)
|
|
testAccount.Backend.Commit()
|
|
require.NoError(t, err, "Validator registration failed")
|
|
_, err = testAccount.Contract.Deposit(testAccount.TxOpts, pubKeys[0].Marshal(), depositDataItems[0].WithdrawalCredentials, depositDataItems[0].Signature, depositDataRoot)
|
|
testAccount.Backend.Commit()
|
|
assert.NoError(t, err, "Validator registration failed")
|
|
_, err = testAccount.Contract.Deposit(testAccount.TxOpts, pubKeys[0].Marshal(), depositDataItems[0].WithdrawalCredentials, depositDataItems[0].Signature, depositDataRoot)
|
|
testAccount.Backend.Commit()
|
|
assert.NoError(t, err, "Validator registration failed")
|
|
|
|
query := ethereum.FilterQuery{
|
|
Addresses: []common.Address{
|
|
testAccount.ContractAddr,
|
|
},
|
|
}
|
|
|
|
logs, err := testAccount.Backend.FilterLogs(context.Background(), query)
|
|
assert.NoError(t, err, "Unable to get logs of deposit contract")
|
|
|
|
merkleTreeIndex := make([]uint64, 5)
|
|
|
|
for i, log := range logs {
|
|
_, _, _, _, idx, err := depositcontract.UnpackDepositLogData(log.Data)
|
|
require.NoError(t, err, "Unable to unpack log data")
|
|
merkleTreeIndex[i] = binary.LittleEndian.Uint64(idx)
|
|
}
|
|
|
|
assert.Equal(t, uint64(0), merkleTreeIndex[0], "Deposit event total desposit count miss matched")
|
|
assert.Equal(t, uint64(1), merkleTreeIndex[1], "Deposit event total desposit count miss matched")
|
|
assert.Equal(t, uint64(2), merkleTreeIndex[2], "Deposit event total desposit count miss matched")
|
|
}
|