Merge pull request #148 from fearlessfe/types

feat: add test for HistoricalSummaries types
This commit is contained in:
彭振 2024-09-11 12:46:09 +08:00 committed by GitHub
commit ef9012a22e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 104 additions and 28 deletions

View file

@ -181,7 +181,7 @@ func GetHistorySummariesWithProof() (HistoricalSummariesWithProof, error) {
return HistoricalSummariesWithProof{
EPOCH: common.Epoch(uint64(beaconState.Slot) / 32),
HistoricalSummaries: beaconState.HistoricalSummaries,
Proof: &HistoricalSummariesProof{
Proof: HistoricalSummariesProof{
Proof: summariesProof,
},
}, nil

View file

@ -0,0 +1,13 @@
# Beacon state is sourced from consensus-spec-tests: https://github.com/ethereum/consensus-spec-tests/blob/7ffca8d9ec30d937bef52097be6715419e93a4ba/tests/mainnet/deneb/ssz_static/BeaconState/ssz_random/case_0/value.yaml
content_key: "0x14ae7e346485874006"
# The SSZ content is prefixed with the mainnet forkdigest
content_value: "0x6a95a1a9ae7e346485874006ac0000006f4ea1cbdfedfaf60000000000000000000000000000000000000000000000008fa1cfc27730c1942e4919e2a8bd2668e5ba02ee7769599a931db20dfeb7120cdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d719cc5feb29e02a89a7429376ff532621801239f408e7f7e63049a771d5b6473dc5a3afe60235feefc3e97234390b780e1996cbee7439111ca287fa001a9e1cb7537c8d6fb365cbcb3c68b958881578ef49bb8b51440c6b934e8e9dc8366c9f4136bba5413b4948f8015a1abe9e3df190a0d0ba524facfa9340f310a5af718d93311dd263279526c4f8575a52cc6eace34090dbd6d534ab44fad8351757dea160a993f8d25ef03a1096a86bcc10371a3f0b83d1f322532723202f021e1b95f2d5060a6e9eb9c8d35d5c9644fea283bfd553fddf6613069050a4c1ac38047df75aa3fa064c5de29b76edf1cde4fde3ac58d203d7ba87165cbb542fb7a7967565929"
beacon_state_root: "0xf596255a2b920a0387e770320ae4533a221155989f0e8f0a9091b19fef97d279"
historical_summaries_root: "0x696023d8205c3a8ff5d5a880bd6e343e2f1fd95b4c8d5d85d693b54f71b49265"
historical_summaries_state_proof:
- "0x6f4ea1cbdfedfaf6000000000000000000000000000000000000000000000000"
- "0x8fa1cfc27730c1942e4919e2a8bd2668e5ba02ee7769599a931db20dfeb7120c"
- "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71"
- "0x9cc5feb29e02a89a7429376ff532621801239f408e7f7e63049a771d5b6473dc"
- "0x5a3afe60235feefc3e97234390b780e1996cbee7439111ca287fa001a9e1cb75"
epoch: 450508969718611630

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,6 @@
{
"6718463": {
"content_key": "0x12a083660000000000",
"content_value": "0xbba4da9670010000b30400001d34030000000000000000000000000000000000000000000000000000000000a4f8b2415bbca66d73597343afead504bd8282523df27153543b2de8973b7474ace652bb73991c3b63f7185a17333c8aea619a69b69863a5d79810dad6c363d3df460765de20d3c8f56bcd9490f15e2d9e122b3f6173cea76f6d0d16074ce0f0ecde5df1b81f36c08e91ce803c25add312bfd8cb759a81b7cfd158d724959cf22e83908e043f77bdc5992806617ef1fa0a4f1985d9aa1b67371d3580be8c2c64ffffffffffffffffffffffffffffbfffff7fffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffffffffffeffffffffffffffffefffa480f81d481c5aa8439f8c65f86c69d3b1570cfd95b61300f7e29c5b0954c0c0fb080bba0e8ba60dead40c45355332ed06982fcaf53ad1ad4a7e6e39091ee7e5602d4a30b6d46e12047c31451f246bf43c4a3fbdb1d1de2f2180a776ef71fc3d0084660000000000ff83660000000000e5f4020000000000007b8211614b9c5331a1de2691ad7cdde1ca113b4e51b9f2757a4b502833f9234a06eb807d82b9175dd085748ade76aaa86fb4eca48bc8deb01b9c56a267a896d98469820ef7d34f8610e134c6eaf8d379e83cf6c3ab0663fba828edab344dc5f40000008e2a532cfdfdce86b27b26f611f1df0e2b00a54d18c6980e69ad28a4b70bf480336488033fe5f3ef4ccc12af07b9370b92e553e35ecb4a337a1b1c0e4afe1e0edb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71b4c4e01065cd22a0d2f27a544ff8315b9e28f6270a63f543831778f32648ac3a15ecbea44f91b9b4a28ec8308a30a4b6252f554a2088bb1c73ea01013ba4963dfeebabe6b0418ec13b30aadf129f5dcdd4f70ceaa56499df0b3ba9d8fe6ca410132a29cf387371294137003adb139ce9f06b6f7dbf32ee01da91016a485a8aab5669168efc3d3a200b2ee0f25d937a413dfc38e44e211f02432a01a83088e700808c302002139aad8496010300cd220b14288429d8a6049945000a3b60f00f00109019341a0129a08906314848650817002cb98894a328084521a87e6d0a64e8080004ac0805000800e29808294016508a2004001304002a02320c4705501ac008a62848701040012a08e5c8b69010f1009f80408894857053e1b940e2c9004912860e26112080610d002098242000ca001420209a42c141d0c86087509344ced8a32e0204410a0196025a12106104e20008ad4449d5043208090008810201820209108607a0fa1004aa323410050222867024e0d172a82821b02c00020513152006484c800b10f0420802c0244d0850288c6541dc34cabc32f5d355aef4017425cab95c1de0474d483623e23c9bf13d9a18f1597e930b010000000080c3c901000000000ca88800000000004b6094640000000038020000ab9bf66d04000000000000000000000000000000000000000000000000000000797be971185ac699fa7288c87457c3611b443fb98483fddf282dfa7c5b4b27058eddbcd8b5de9b747c57c827ceba820d19e987ff6740eed38ccbc947696d71e3e2c3b96c9200d7d5c66fb4e8458067d6420e64647682ca2f0798ae817d2bc19468747470733a2f2f6574682d6275696c6465722e636f6da08366000000000037b10700000000002a7315c8ddfc25dc2266a6b221cb8f9fdf641970ab1f65a2754df4e14c432b9c446c604131913bed45976c4a8ea27df843a72d622f80ef15da622f0d56ec1ffe3021190177b0405c4fa1a0311a493c4dd095f24d386be6a03f5838a6b1008665f4000000f5c98fc152bf40e1ce216c8839b8ddd42ea5b355f0b5c700fc9b2cb7c802e1c8336488033fe5f3ef4ccc12af07b9370b92e553e35ecb4a337a1b1c0e4afe1e0edb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71a533e05d648cb9635382f38b778dc3c76b18e4eab2d017fdb24c1c0e32d2991707a45ce3f26e443dafa697a76bf24122c9b19b57eebe798668dbd1a0da7c900795222290dd7278aa3ddd389cc1e1d165cc4bafe5c658153cdef5850f97c4d4fb6706b82310414a00fe7dc34b3043e0c7a8a24e810e3cec9de3e1dd7ce06bc191efd2273a357da4436fc4bf82069f6cb87d3d605aeda1336ac513f358b4296b8da51232896ad271063d93404eaa6b80960fa2d4b41d74a544eef94731f0b83ba2701e33b49e3191098c3369bc4658d82f536cb9d38285c51c7844292ced06dd2e8148f0bcd585dc1104e64aa930045e83d828ab436a0e587637e5ef83044d1c2918da284d7072847132885d443640979907485847368e32501345b0dc24c904c06732cc17d944b26181b0c05c6461bccbe4f7b2180a282b6871aa6472fa36cdc49ec50cf69d3eee4b26fe02bf48f39efb549d3963d19e4112c7250c580543516204ff1b0675680cfea02ac09f0b23d6e28c14b08421b3a10a9788442457d732b120c5c466c54ad938dedd3cd3701d9b32fa15dc8db3d6b1ea5d8495732477a72b34efcaf8c349aa40d8e1f21f226ca11182cff00921930b010000000080c3c901000000009104e90000000000d75b9464000000003802000076ab1c8604000000000000000000000000000000000000000000000000000000844f7a7e7585362114fc88a70654146215ab4eaad65ad54b64975840b78d365e8b75e78616a92294e747589c3ee4a845c2962e1cf6cd7fe8bfbd09439e5e6d5e4d4efdf181473803e734d97891388e1b50628658ac818599cf2cb069c8e6b38b6265617665726275696c642e6f7267"
}
}

View file

@ -0,0 +1,6 @@
{
"6718463": {
"content_key": "0x130084660000000000",
"content_value": "0xbba4da96ac000000ffffffffffffffffffffffffffffbfffff7fffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffffffffffeffffffffffffffffefffa480f81d481c5aa8439f8c65f86c69d3b1570cfd95b61300f7e29c5b0954c0c0fb080bba0e8ba60dead40c45355332ed06982fcaf53ad1ad4a7e6e39091ee7e5602d4a30b6d46e12047c31451f246bf43c4a3fbdb1d1de2f2180a776ef71fc3d0084660000000000ff83660000000000e5f4020000000000007b8211614b9c5331a1de2691ad7cdde1ca113b4e51b9f2757a4b502833f9234a06eb807d82b9175dd085748ade76aaa86fb4eca48bc8deb01b9c56a267a896d98469820ef7d34f8610e134c6eaf8d379e83cf6c3ab0663fba828edab344dc5f40000008e2a532cfdfdce86b27b26f611f1df0e2b00a54d18c6980e69ad28a4b70bf480336488033fe5f3ef4ccc12af07b9370b92e553e35ecb4a337a1b1c0e4afe1e0edb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71b4c4e01065cd22a0d2f27a544ff8315b9e28f6270a63f543831778f32648ac3a15ecbea44f91b9b4a28ec8308a30a4b6252f554a2088bb1c73ea01013ba4963dfeebabe6b0418ec13b30aadf129f5dcdd4f70ceaa56499df0b3ba9d8fe6ca410132a29cf387371294137003adb139ce9f06b6f7dbf32ee01da91016a485a8aab5669168efc3d3a200b2ee0f25d937a413dfc38e44e211f02432a01a83088e700808c302002139aad8496010300cd220b14288429d8a6049945000a3b60f00f00109019341a0129a08906314848650817002cb98894a328084521a87e6d0a64e8080004ac0805000800e29808294016508a2004001304002a02320c4705501ac008a62848701040012a08e5c8b69010f1009f80408894857053e1b940e2c9004912860e26112080610d002098242000ca001420209a42c141d0c86087509344ced8a32e0204410a0196025a12106104e20008ad4449d5043208090008810201820209108607a0fa1004aa323410050222867024e0d172a82821b02c00020513152006484c800b10f0420802c0244d0850288c6541dc34cabc32f5d355aef4017425cab95c1de0474d483623e23c9bf13d9a18f1597e930b010000000080c3c901000000000ca88800000000004b6094640000000038020000ab9bf66d04000000000000000000000000000000000000000000000000000000797be971185ac699fa7288c87457c3611b443fb98483fddf282dfa7c5b4b27058eddbcd8b5de9b747c57c827ceba820d19e987ff6740eed38ccbc947696d71e3e2c3b96c9200d7d5c66fb4e8458067d6420e64647682ca2f0798ae817d2bc19468747470733a2f2f6574682d6275696c6465722e636f6d"
}
}

File diff suppressed because one or more lines are too long

View file

@ -329,32 +329,30 @@ func (hsp *HistoricalSummariesProof) HashTreeRoot(hFn tree.HashFn) common.Root {
}, 5)
}
// TODO: Add tests for HistoricalSummariesWithProof
type HistoricalSummariesWithProof struct {
EPOCH common.Epoch
HistoricalSummaries capella.HistoricalSummaries
Proof *HistoricalSummariesProof
Proof HistoricalSummariesProof
}
func (hswp HistoricalSummariesWithProof) Deserialize(spec *common.Spec, dr *codec.DecodingReader) error {
return dr.Container(&hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), hswp.Proof)
func (hswp *HistoricalSummariesWithProof) Deserialize(spec *common.Spec, dr *codec.DecodingReader) error {
return dr.Container(&hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), &hswp.Proof)
}
func (hswp HistoricalSummariesWithProof) Serialize(spec *common.Spec, w *codec.EncodingWriter) error {
return w.Container(hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), hswp.Proof)
func (hswp *HistoricalSummariesWithProof) Serialize(spec *common.Spec, w *codec.EncodingWriter) error {
return w.Container(hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), &hswp.Proof)
}
func (hswp HistoricalSummariesWithProof) ByteLength(spec *common.Spec) uint64 {
return codec.ContainerLength(hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), hswp.Proof)
func (hswp *HistoricalSummariesWithProof) ByteLength(spec *common.Spec) uint64 {
return codec.ContainerLength(hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), &hswp.Proof)
}
func (hswp HistoricalSummariesWithProof) FixedLength(_ *common.Spec) uint64 {
func (hswp *HistoricalSummariesWithProof) FixedLength(_ *common.Spec) uint64 {
return 0
}
func (hswp HistoricalSummariesWithProof) HashTreeRoot(spec *common.Spec, hFn tree.HashFn) common.Root {
return hFn.HashTreeRoot(hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), hswp.Proof)
func (hswp *HistoricalSummariesWithProof) HashTreeRoot(spec *common.Spec, hFn tree.HashFn) common.Root {
return hFn.HashTreeRoot(hswp.EPOCH, spec.Wrap(&hswp.HistoricalSummaries), &hswp.Proof)
}
type ForkedHistoricalSummariesWithProof struct {
@ -392,5 +390,5 @@ func (fhswp ForkedHistoricalSummariesWithProof) ByteLength(spec *common.Spec) ui
}
func (fhswp ForkedHistoricalSummariesWithProof) HashTreeRoot(spec *common.Spec, h tree.HashFn) common.Root {
return h.HashTreeRoot(fhswp.ForkDigest, spec.Wrap(common.SpecObj(fhswp.HistoricalSummariesWithProof)))
return h.HashTreeRoot(fhswp.ForkDigest, spec.Wrap(common.SpecObj(&fhswp.HistoricalSummariesWithProof)))
}

View file

@ -12,14 +12,17 @@ import (
"github.com/protolambda/zrnt/eth2/configs"
"github.com/protolambda/ztyp/codec"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v3"
)
func TestForkedLightClientBootstrap(t *testing.T) {
filePath := "testdata/light_client_bootstrap.json"
f, _ := os.Open(filePath)
jsonStr, _ := io.ReadAll(f)
filePath := "testdata/types/light_client_bootstrap.json"
f, err := os.Open(filePath)
require.NoError(t, err)
jsonStr, err := io.ReadAll(f)
require.NoError(t, err)
var result map[string]interface{}
_ = json.Unmarshal(jsonStr, &result)
@ -39,11 +42,12 @@ func TestForkedLightClientBootstrap(t *testing.T) {
}
func TestLightClientUpdateRange(t *testing.T) {
filePath := "testdata/light_client_updates_by_range.json"
f, _ := os.Open(filePath)
jsonStr, _ := io.ReadAll(f)
filePath := "testdata/types/light_client_updates_by_range.json"
f, err := os.Open(filePath)
require.NoError(t, err)
jsonStr, err := io.ReadAll(f)
require.NoError(t, err)
var result map[string]interface{}
_ = json.Unmarshal(jsonStr, &result)
@ -64,10 +68,12 @@ func TestLightClientUpdateRange(t *testing.T) {
}
func TestForkedLightClientOptimisticUpdate(t *testing.T) {
filePath := "testdata/light_client_optimistic_update.json"
filePath := "testdata/types/light_client_optimistic_update.json"
f, _ := os.Open(filePath)
jsonStr, _ := io.ReadAll(f)
f, err := os.Open(filePath)
require.NoError(t, err)
jsonStr, err := io.ReadAll(f)
require.NoError(t, err)
var result map[string]interface{}
_ = json.Unmarshal(jsonStr, &result)
@ -88,10 +94,12 @@ func TestForkedLightClientOptimisticUpdate(t *testing.T) {
}
func TestForkedLightClientFinalityUpdate(t *testing.T) {
filePath := "testdata/light_client_finality_update.json"
filePath := "testdata/types/light_client_finality_update.json"
f, _ := os.Open(filePath)
jsonStr, _ := io.ReadAll(f)
f, err := os.Open(filePath)
require.NoError(t, err)
jsonStr, err := io.ReadAll(f)
require.NoError(t, err)
var result map[string]interface{}
_ = json.Unmarshal(jsonStr, &result)
@ -110,3 +118,36 @@ func TestForkedLightClientFinalityUpdate(t *testing.T) {
assert.Equal(t, b, buf.Bytes())
}
}
type TestProof struct {
ContentKey string `yaml:"content_key"`
ContentValue string `yaml:"content_value"`
BeaconStateRoot string `yaml:"beacon_state_root"`
HistoricalSummariesRoot string `yaml:"historical_summaries_root"`
HistoricalSummariesStateProof []string `yaml:"historical_summaries_state_proof"`
Epoch uint64 `yaml:"epoch"`
}
func TestForkedHistoricalSummariesWithProof(t *testing.T) {
filePath := "testdata/types/historical_summaries_with_proof.yaml"
f, err := os.Open(filePath)
require.NoError(t, err)
contentBytes, err := io.ReadAll(f)
require.NoError(t, err)
testData := TestProof{}
err = yaml.Unmarshal(contentBytes, &testData)
require.NoError(t, err)
historyKey := &HistoricalSummariesWithProofKey{}
contentKey := hexutil.MustDecode(testData.ContentKey)
err = historyKey.Deserialize(codec.NewDecodingReader(bytes.NewReader(contentKey[1:]), uint64(len(contentKey)-1)))
require.NoError(t, err)
require.Equal(t, testData.Epoch, historyKey.Epoch)
historyProof := &ForkedHistoricalSummariesWithProof{}
content := hexutil.MustDecode(testData.ContentValue)
err = historyProof.Deserialize(configs.Mainnet, codec.NewDecodingReader(bytes.NewReader(content), uint64(len(content))))
require.NoError(t, err)
require.Equal(t, uint64(historyProof.HistoricalSummariesWithProof.EPOCH), testData.Epoch)
}