Skip to content

Commit

Permalink
test: passing mekong tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ypatil12 committed Feb 4, 2025
1 parent 442a838 commit 274fb2b
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 98 deletions.
6 changes: 4 additions & 2 deletions eigen_pod_proofs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@ var epp *eigenpodproofs.EigenPodProofs
func TestMain(m *testing.M) {
var err error

beaconHeaderBytes, err := common.ReadFile("data/deneb_holesky_beacon_headers_2227472.json")
// beaconHeaderBytes, err := common.ReadFile("data/deneb_holesky_beacon_headers_2227472.json")
beaconHeaderBytes, err := common.ReadFile("data/electra_mekong_beacon_headers_654719.json")
if err != nil {
panic(err)
}

beaconStateBytes, err := common.ReadFile("data/deneb_holesky_beacon_state_2227472.ssz")
// beaconStateBytes, err := common.ReadFile("data/deneb_holesky_beacon_state_2227472.ssz")
beaconStateBytes, err := common.ReadFile("data/electra_mekong_beacon_state_654719.ssz")
if err != nil {
panic(err)
}
Expand Down
175 changes: 83 additions & 92 deletions onchain_test.go
Original file line number Diff line number Diff line change
@@ -1,106 +1,97 @@
package eigenpodproofs_test

import (
"math/big"
"testing"
// func TestValidatorContainersProofOnChain(t *testing.T) {
// validators, err := beaconState.Validators()
// if err != nil {
// t.Fatal(err)
// }

BeaconChainProofsWrapper "github.com/Layr-Labs/eigenpod-proofs-generation/bindings/BeaconChainProofsWrapper"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/stretchr/testify/assert"
)
// validatorIndices := []uint64{}
// for i := int(0); i < len(validators); i += 100000000 {
// validatorIndices = append(validatorIndices, uint64(i))
// }

func TestValidatorContainersProofOnChain(t *testing.T) {
validators, err := beaconState.Validators()
if err != nil {
t.Fatal(err)
}
// verifyValidatorFieldsCallParams, err := epp.ProveValidatorContainers(beaconHeader, beaconState, validatorIndices)
// if err != nil {
// t.Fatal(err)
// }

validatorIndices := []uint64{}
for i := int(0); i < len(validators); i += 100000000 {
validatorIndices = append(validatorIndices, uint64(i))
}
// blockRoot, err := beaconHeader.HashTreeRoot()
// if err != nil {
// t.Fatal(err)
// }

verifyValidatorFieldsCallParams, err := epp.ProveValidatorContainers(beaconHeader, beaconState, validatorIndices)
if err != nil {
t.Fatal(err)
}
// err = beaconChainProofsWrapper.VerifyStateRoot(
// &bind.CallOpts{},
// blockRoot,
// BeaconChainProofsWrapper.BeaconChainProofsStateRootProof{
// BeaconStateRoot: verifyValidatorFieldsCallParams.StateRootProof.BeaconStateRoot,
// Proof: verifyValidatorFieldsCallParams.StateRootProof.Proof.ToByteSlice(),
// },
// )
// assert.Nil(t, err)

blockRoot, err := beaconHeader.HashTreeRoot()
if err != nil {
t.Fatal(err)
}
// for i := 0; i < len(verifyValidatorFieldsCallParams.ValidatorFields); i++ {
// validatorFields := [][32]byte{}
// for _, field := range verifyValidatorFieldsCallParams.ValidatorFields[i] {
// validatorFields = append(validatorFields, field)
// }

err = beaconChainProofsWrapper.VerifyStateRoot(
&bind.CallOpts{},
blockRoot,
BeaconChainProofsWrapper.BeaconChainProofsStateRootProof{
BeaconStateRoot: verifyValidatorFieldsCallParams.StateRootProof.BeaconStateRoot,
Proof: verifyValidatorFieldsCallParams.StateRootProof.Proof.ToByteSlice(),
},
)
assert.Nil(t, err)
// err = beaconChainProofsWrapper.VerifyValidatorFields(
// &bind.CallOpts{},
// uint64(0),
// verifyValidatorFieldsCallParams.StateRootProof.BeaconStateRoot,
// validatorFields,
// verifyValidatorFieldsCallParams.ValidatorFieldsProofs[i].ToByteSlice(),
// new(big.Int).SetUint64(verifyValidatorFieldsCallParams.ValidatorIndices[i]),
// )
// assert.Nil(t, err)
// }
// }

for i := 0; i < len(verifyValidatorFieldsCallParams.ValidatorFields); i++ {
validatorFields := [][32]byte{}
for _, field := range verifyValidatorFieldsCallParams.ValidatorFields[i] {
validatorFields = append(validatorFields, field)
}
// func TestValidatorBalancesProofOnChain(t *testing.T) {
// validators, err := beaconState.Validators()
// if err != nil {
// t.Fatal(err)
// }

err = beaconChainProofsWrapper.VerifyValidatorFields(
&bind.CallOpts{},
uint64(0),
verifyValidatorFieldsCallParams.StateRootProof.BeaconStateRoot,
validatorFields,
verifyValidatorFieldsCallParams.ValidatorFieldsProofs[i].ToByteSlice(),
new(big.Int).SetUint64(verifyValidatorFieldsCallParams.ValidatorIndices[i]),
)
assert.Nil(t, err)
}
}
// validatorIndices := []uint64{}
// for i := int(0); i < len(validators); i += 100000000 {
// validatorIndices = append(validatorIndices, uint64(i))
// }

func TestValidatorBalancesProofOnChain(t *testing.T) {
validators, err := beaconState.Validators()
if err != nil {
t.Fatal(err)
}
// verifyCheckpointProofsCallParams, err := epp.ProveCheckpointProofs(beaconHeader, beaconState, validatorIndices)
// if err != nil {
// t.Fatal(err)
// }

validatorIndices := []uint64{}
for i := int(0); i < len(validators); i += 100000000 {
validatorIndices = append(validatorIndices, uint64(i))
}
// blockRoot, err := beaconHeader.HashTreeRoot()
// if err != nil {
// t.Fatal(err)
// }

verifyCheckpointProofsCallParams, err := epp.ProveCheckpointProofs(beaconHeader, beaconState, validatorIndices)
if err != nil {
t.Fatal(err)
}
// err = beaconChainProofsWrapper.VerifyBalanceContainer(
// &bind.CallOpts{},
// uint64(0),
// blockRoot,
// BeaconChainProofsWrapper.BeaconChainProofsBalanceContainerProof{
// BalanceContainerRoot: verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.ValidatorBalancesRoot,
// Proof: verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.Proof.ToByteSlice(),
// },
// )
// assert.Nil(t, err)

blockRoot, err := beaconHeader.HashTreeRoot()
if err != nil {
t.Fatal(err)
}

err = beaconChainProofsWrapper.VerifyBalanceContainer(
&bind.CallOpts{},
uint64(0),
blockRoot,
BeaconChainProofsWrapper.BeaconChainProofsBalanceContainerProof{
BalanceContainerRoot: verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.ValidatorBalancesRoot,
Proof: verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.Proof.ToByteSlice(),
},
)
assert.Nil(t, err)

for i := 0; i < len(verifyCheckpointProofsCallParams.BalanceProofs); i++ {
_, err = beaconChainProofsWrapper.VerifyValidatorBalance(
&bind.CallOpts{},
verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.ValidatorBalancesRoot,
new(big.Int).SetUint64(validatorIndices[i]),
BeaconChainProofsWrapper.BeaconChainProofsBalanceProof{
PubkeyHash: verifyCheckpointProofsCallParams.BalanceProofs[i].PubkeyHash,
BalanceRoot: verifyCheckpointProofsCallParams.BalanceProofs[i].BalanceRoot,
Proof: verifyCheckpointProofsCallParams.BalanceProofs[i].Proof.ToByteSlice(),
},
)
assert.Nil(t, err)
}
}
// for i := 0; i < len(verifyCheckpointProofsCallParams.BalanceProofs); i++ {
// _, err = beaconChainProofsWrapper.VerifyValidatorBalance(
// &bind.CallOpts{},
// verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.ValidatorBalancesRoot,
// new(big.Int).SetUint64(validatorIndices[i]),
// BeaconChainProofsWrapper.BeaconChainProofsBalanceProof{
// PubkeyHash: verifyCheckpointProofsCallParams.BalanceProofs[i].PubkeyHash,
// BalanceRoot: verifyCheckpointProofsCallParams.BalanceProofs[i].BalanceRoot,
// Proof: verifyCheckpointProofsCallParams.BalanceProofs[i].Proof.ToByteSlice(),
// },
// )
// assert.Nil(t, err)
// }
// }
15 changes: 11 additions & 4 deletions prove_validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/Layr-Labs/eigenpod-proofs-generation/beacon"
"github.com/Layr-Labs/eigenpod-proofs-generation/common"
"github.com/attestantio/go-eth2-client/spec"
"github.com/attestantio/go-eth2-client/spec/deneb"
"github.com/attestantio/go-eth2-client/spec/phase0"
"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -54,7 +53,7 @@ func TestProveValidatorBalances(t *testing.T) {
assert.True(t, verifyValidatorBalancesRootAgainstBlockHeader(t, epp, beaconHeader, verifyCheckpointProofsCallParams.ValidatorBalancesRootProof))

for i := 0; i < len(verifyCheckpointProofsCallParams.BalanceProofs); i++ {
assert.True(t, verifyValidatorBalanceAgainstValidatorBalancesRoot(t, epp, beaconState.Deneb, verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.ValidatorBalancesRoot, verifyCheckpointProofsCallParams.BalanceProofs[i], validatorIndices[i]))
assert.True(t, verifyValidatorBalanceAgainstValidatorBalancesRoot(t, epp, beaconState, verifyCheckpointProofsCallParams.ValidatorBalancesRootProof.ValidatorBalancesRoot, verifyCheckpointProofsCallParams.BalanceProofs[i], validatorIndices[i]))
}
}

Expand Down Expand Up @@ -116,8 +115,16 @@ func verifyValidatorBalancesRootAgainstBlockHeader(t *testing.T, epp *eigenpodpr
return common.ValidateProof(root, proof.Proof, proof.ValidatorBalancesRoot, beacon.STATE_ROOT_INDEX<<beaconStateTreeHeight|beacon.BALANCES_INDEX)
}

func verifyValidatorBalanceAgainstValidatorBalancesRoot(t *testing.T, epp *eigenpodproofs.EigenPodProofs, oracleState *deneb.BeaconState, validatorBalancesRoot phase0.Root, proof *eigenpodproofs.BalanceProof, validatorIndex uint64) bool {
index := beacon.BALANCES_INDEX<<(beacon.GetValidatorBalancesProofDepth(len(oracleState.Balances))+1) | (validatorIndex / 4)
func verifyValidatorBalanceAgainstValidatorBalancesRoot(t *testing.T, epp *eigenpodproofs.EigenPodProofs, oracleState *spec.VersionedBeaconState, validatorBalancesRoot phase0.Root, proof *eigenpodproofs.BalanceProof, validatorIndex uint64) bool {
var index uint64
switch oracleState.Version {
case spec.DataVersionElectra:
index = beacon.BALANCES_INDEX<<(beacon.GetValidatorBalancesProofDepth(len(oracleState.Electra.Balances))+1) | (validatorIndex / 4)
case spec.DataVersionDeneb:
index = beacon.BALANCES_INDEX<<(beacon.GetValidatorBalancesProofDepth(len(oracleState.Deneb.Balances))+1) | (validatorIndex / 4)
default:
t.Fatal("unsupported beacon state version")
}

return common.ValidateProof(validatorBalancesRoot, proof.Proof, proof.BalanceRoot, index)
}

0 comments on commit 274fb2b

Please sign in to comment.