From 99bb2b82e78eb522f0be0d6dc0aee999940e3cf3 Mon Sep 17 00:00:00 2001 From: Leonidas Maroulis Date: Wed, 18 Dec 2024 14:20:59 +0200 Subject: [PATCH] Update codec test vectors (#188) --- internal/work/item.go | 33 +- internal/work/package.go | 4 +- tests/integration/block_integration_test.go | 281 -------- tests/integration/codec_integration_test.go | 625 ++++++++++++++++++ .../vectors/codec/assurances_extrinsic.bin | Bin 0 -> 199 bytes .../vectors/codec/assurances_extrinsic.json | 14 + tests/integration/vectors/codec/block.bin | Bin 4907 -> 4907 bytes .../codec/{expected_block.json => block.json} | 6 +- .../vectors/codec/disputes_extrinsic.bin | Bin 0 -> 1130 bytes .../vectors/codec/disputes_extrinsic.json | 86 +++ tests/integration/vectors/codec/extrinsic.bin | Bin 0 -> 4322 bytes .../integration/vectors/codec/extrinsic.json | 186 ++++++ .../vectors/codec/guarantees_extrinsic.bin | Bin 0 -> 573 bytes .../vectors/codec/guarantees_extrinsic.json | 56 ++ tests/integration/vectors/codec/header_0.bin | Bin 0 -> 585 bytes tests/integration/vectors/codec/header_0.json | 25 + tests/integration/vectors/codec/header_1.bin | Bin 0 -> 693 bytes tests/integration/vectors/codec/header_1.json | 61 ++ .../vectors/codec/preimages_extrinsic.bin | Bin 0 -> 64 bytes .../vectors/codec/preimages_extrinsic.json | 14 + .../vectors/codec/refine_context.bin | Bin 0 -> 133 bytes .../vectors/codec/refine_context.json | 8 + .../vectors/codec/tickets_extrinsic.bin | Bin 0 -> 2356 bytes .../vectors/codec/tickets_extrinsic.json | 14 + tests/integration/vectors/codec/work_item.bin | Bin 0 -> 236 bytes .../integration/vectors/codec/work_item.json | 32 + .../vectors/codec/work_package.bin | Bin 0 -> 659 bytes .../vectors/codec/work_package.json | 82 +++ .../integration/vectors/codec/work_report.bin | Bin 0 -> 435 bytes .../vectors/codec/work_report.json | 41 ++ .../vectors/codec/work_result_0.bin | Bin 0 -> 81 bytes .../vectors/codec/work_result_0.json | 9 + .../vectors/codec/work_result_1.bin | Bin 0 -> 77 bytes .../vectors/codec/work_result_1.json | 9 + 34 files changed, 1279 insertions(+), 307 deletions(-) delete mode 100644 tests/integration/block_integration_test.go create mode 100644 tests/integration/codec_integration_test.go create mode 100644 tests/integration/vectors/codec/assurances_extrinsic.bin create mode 100644 tests/integration/vectors/codec/assurances_extrinsic.json rename tests/integration/vectors/codec/{expected_block.json => block.json} (99%) create mode 100644 tests/integration/vectors/codec/disputes_extrinsic.bin create mode 100644 tests/integration/vectors/codec/disputes_extrinsic.json create mode 100644 tests/integration/vectors/codec/extrinsic.bin create mode 100644 tests/integration/vectors/codec/extrinsic.json create mode 100644 tests/integration/vectors/codec/guarantees_extrinsic.bin create mode 100644 tests/integration/vectors/codec/guarantees_extrinsic.json create mode 100644 tests/integration/vectors/codec/header_0.bin create mode 100644 tests/integration/vectors/codec/header_0.json create mode 100644 tests/integration/vectors/codec/header_1.bin create mode 100644 tests/integration/vectors/codec/header_1.json create mode 100644 tests/integration/vectors/codec/preimages_extrinsic.bin create mode 100644 tests/integration/vectors/codec/preimages_extrinsic.json create mode 100644 tests/integration/vectors/codec/refine_context.bin create mode 100644 tests/integration/vectors/codec/refine_context.json create mode 100644 tests/integration/vectors/codec/tickets_extrinsic.bin create mode 100644 tests/integration/vectors/codec/tickets_extrinsic.json create mode 100644 tests/integration/vectors/codec/work_item.bin create mode 100644 tests/integration/vectors/codec/work_item.json create mode 100644 tests/integration/vectors/codec/work_package.bin create mode 100644 tests/integration/vectors/codec/work_package.json create mode 100644 tests/integration/vectors/codec/work_report.bin create mode 100644 tests/integration/vectors/codec/work_report.json create mode 100644 tests/integration/vectors/codec/work_result_0.bin create mode 100644 tests/integration/vectors/codec/work_result_0.json create mode 100644 tests/integration/vectors/codec/work_result_1.bin create mode 100644 tests/integration/vectors/codec/work_result_1.json diff --git a/internal/work/item.go b/internal/work/item.go index a9d3e022..ed39d656 100644 --- a/internal/work/item.go +++ b/internal/work/item.go @@ -5,42 +5,33 @@ import ( "github.com/eigerco/strawberry/internal/crypto" ) -// SegmentReferenceType differentiates between a direct segment-root hash (H) and a work-package hash (H⊞) -type SegmentReferenceType uint8 - -const ( - SegmentReferenceRootHash SegmentReferenceType = iota // H - SegmentReferenceWorkPackageHash // H⊞ -) - type ImportedSegment struct { - RefType SegmentReferenceType - Hash crypto.Hash - Index uint32 + Hash crypto.Hash + Index uint16 } -type BlobHashLengthPair struct { +type Extrinsic struct { Hash crypto.Hash Length uint32 } // Item represents I (14.2 v0.5.2) type Item struct { - ServiceId uint32 // s ∈ N_S - CodeHash crypto.Hash // c ∈ H - Payload []byte // y ∈ Y - GasLimitRefine uint64 // g ∈ N_G - GasLimitAccumulate uint64 // a ∈ N_G - ExportedSegments uint // e ∈ N - ImportedSegments []ImportedSegment // i ∈ ⟦{H ∪ (H⊞), N}⟧ - BlobHashLengths []BlobHashLengthPair // x ∈ ⟦(H, N)⟧ + ServiceId uint32 // s ∈ N_S + CodeHash crypto.Hash // c ∈ H + Payload []byte // y ∈ Y + GasLimitRefine uint64 // g ∈ N_G + GasLimitAccumulate uint64 // a ∈ N_G + ImportedSegments []ImportedSegment // i ∈ ⟦{H ∪ (H⊞), N}⟧ + Extrinsics []Extrinsic // x ∈ ⟦(H, N)⟧ + ExportedSegments uint16 // e ∈ N } func (w *Item) Size() uint64 { // S(w) = |w.y| + |w.i| * WG + Σ(h,l)∈w.x l total := uint64(len(w.Payload)) // |w.y| total += uint64(len(w.ImportedSegments)) * SizeOfSegment // |w.i| * WG - for _, bh := range w.BlobHashLengths { + for _, bh := range w.Extrinsics { total += uint64(bh.Length) } return total diff --git a/internal/work/package.go b/internal/work/package.go index 0153ec35..acc75cca 100644 --- a/internal/work/package.go +++ b/internal/work/package.go @@ -21,10 +21,10 @@ type Package struct { // ValidateNumberOfEntries (14.4 v0.5.2) func (wp *Package) ValidateNumberOfEntries() error { - var totalExported, totalImported uint + var totalExported, totalImported uint16 for _, w := range wp.WorkItems { totalExported += w.ExportedSegments - totalImported += uint(len(w.ImportedSegments)) + totalImported += uint16(len(w.ImportedSegments)) } if totalExported > MaxNumberOfEntries { diff --git a/tests/integration/block_integration_test.go b/tests/integration/block_integration_test.go deleted file mode 100644 index 807487e8..00000000 --- a/tests/integration/block_integration_test.go +++ /dev/null @@ -1,281 +0,0 @@ -//go:build integration - -package integration_test - -import ( - "encoding/json" - "fmt" - "os" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/eigerco/strawberry/internal/block" - "github.com/eigerco/strawberry/internal/crypto" - "github.com/eigerco/strawberry/internal/jamtime" - "github.com/eigerco/strawberry/pkg/serialization/codec/jam" -) - -var toWorkResultErrorMap = map[string]block.WorkResultError{ - "out-of-gas": block.OutOfGas, - "panic": block.UnexpectedTermination, - "bad-code": block.CodeNotAvailable, - "code-oversize": block.CodeTooLarge, -} - -func TestDecodeBlockWithJamCodec(t *testing.T) { - b, err := os.ReadFile("vectors/codec/block.bin") - require.NoError(t, err) - - var unmarshaled block.Block - err = jam.Unmarshal(b, &unmarshaled) - require.NoError(t, err) - - expected := unmarsalExpectedBlock(t) - - // Header fields - require.Equal(t, expected.Header.Parent, toHex(unmarshaled.Header.ParentHash)) - require.Equal(t, expected.Header.ParentStateRoot, toHex(unmarshaled.Header.PriorStateRoot)) - require.Equal(t, expected.Header.ExtrinsicHash, toHex(unmarshaled.Header.ExtrinsicHash)) - require.Equal(t, expected.Header.Slot, unmarshaled.Header.TimeSlotIndex) - - require.Equal(t, expected.Header.EpochMark.Entropy, toHex(unmarshaled.Header.EpochMarker.Entropy)) - require.Equal(t, expected.Header.EpochMark.TicketsEntropy, toHex(unmarshaled.Header.EpochMarker.TicketsEntropy)) - - for i := range expected.Header.EpochMark.Validators { - require.Equal(t, expected.Header.EpochMark.Validators[i], toHex(unmarshaled.Header.EpochMarker.Keys[i])) - } - - require.Equal(t, expected.Header.TicketsMark, unmarshaled.Header.WinningTicketsMarker) - - for i := range expected.Header.OffendersMark { - require.Equal(t, expected.Header.OffendersMark[i], toHex(unmarshaled.Header.OffendersMarkers[i])) - } - - require.Equal(t, expected.Header.AuthorIndex, unmarshaled.Header.BlockAuthorIndex) - require.Equal(t, expected.Header.EntropySource, toHex(unmarshaled.Header.VRFSignature)) - require.Equal(t, expected.Header.Seal, toHex(unmarshaled.Header.BlockSealSignature)) - - // Extrinsic fields - for i := range expected.Extrinsic.Tickets { - require.Equal(t, expected.Extrinsic.Tickets[i].Attempt, unmarshaled.Extrinsic.ET.TicketProofs[i].EntryIndex) - require.Equal(t, expected.Extrinsic.Tickets[i].Signature, toHex(unmarshaled.Extrinsic.ET.TicketProofs[i].Proof)) - } - - for i := range expected.Extrinsic.Disputes.Verdicts { - require.Equal(t, expected.Extrinsic.Disputes.Verdicts[i].Target, toHex(unmarshaled.Extrinsic.ED.Verdicts[i].ReportHash)) - require.Equal(t, expected.Extrinsic.Disputes.Verdicts[i].Age, unmarshaled.Extrinsic.ED.Verdicts[i].EpochIndex) - for j := range expected.Extrinsic.Disputes.Verdicts[i].Votes { - require.Equal(t, expected.Extrinsic.Disputes.Verdicts[i].Votes[j].Vote, unmarshaled.Extrinsic.ED.Verdicts[i].Judgements[j].IsValid) - require.Equal(t, expected.Extrinsic.Disputes.Verdicts[i].Votes[j].Index, unmarshaled.Extrinsic.ED.Verdicts[i].Judgements[j].ValidatorIndex) - require.Equal(t, expected.Extrinsic.Disputes.Verdicts[i].Votes[j].Signature, toHex(unmarshaled.Extrinsic.ED.Verdicts[i].Judgements[j].Signature)) - } - } - - for i := range expected.Extrinsic.Disputes.Culprits { - require.Equal(t, expected.Extrinsic.Disputes.Culprits[i].Target, toHex(unmarshaled.Extrinsic.ED.Culprits[i].ReportHash)) - require.Equal(t, expected.Extrinsic.Disputes.Culprits[i].Key, toHex(unmarshaled.Extrinsic.ED.Culprits[i].ValidatorEd25519PublicKey)) - require.Equal(t, expected.Extrinsic.Disputes.Culprits[i].Signature, toHex(unmarshaled.Extrinsic.ED.Culprits[i].Signature)) - } - - for i := range expected.Extrinsic.Disputes.Faults { - require.Equal(t, expected.Extrinsic.Disputes.Faults[i].Target, toHex(unmarshaled.Extrinsic.ED.Faults[i].ReportHash)) - require.Equal(t, expected.Extrinsic.Disputes.Faults[i].Vote, unmarshaled.Extrinsic.ED.Faults[i].IsValid) - require.Equal(t, expected.Extrinsic.Disputes.Faults[i].Key, toHex(unmarshaled.Extrinsic.ED.Faults[i].ValidatorEd25519PublicKey)) - require.Equal(t, expected.Extrinsic.Disputes.Faults[i].Signature, toHex(unmarshaled.Extrinsic.ED.Faults[i].Signature)) - } - - for i := range expected.Extrinsic.Preimages { - require.Equal(t, expected.Extrinsic.Preimages[i].Requester, unmarshaled.Extrinsic.EP[i].ServiceIndex) - require.Equal(t, expected.Extrinsic.Preimages[i].Blob, toHex(unmarshaled.Extrinsic.EP[i].Data)) - } - for i := range expected.Extrinsic.Assurances { - require.Equal(t, expected.Extrinsic.Assurances[i].Anchor, toHex(unmarshaled.Extrinsic.EA[i].Anchor)) - require.Equal(t, expected.Extrinsic.Assurances[i].Bitfield, toHex(unmarshaled.Extrinsic.EA[i].Bitfield)) - require.Equal(t, expected.Extrinsic.Assurances[i].ValidatorIndex, unmarshaled.Extrinsic.EA[i].ValidatorIndex) - require.Equal(t, expected.Extrinsic.Assurances[i].Signature, toHex(unmarshaled.Extrinsic.EA[i].Signature)) - } - - for i := range expected.Extrinsic.Guarantees { - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.PackageSpec.Hash, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkPackageSpecification.WorkPackageHash)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.PackageSpec.Length, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkPackageSpecification.AuditableWorkBundleLength) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.PackageSpec.ErasureRoot, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkPackageSpecification.ErasureRoot)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.PackageSpec.ExportsRoot, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkPackageSpecification.SegmentRoot)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.PackageSpec.ExportsCount, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkPackageSpecification.SegmentCount) - - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Context.Anchor, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.RefinementContext.Anchor.HeaderHash)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Context.StateRoot, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.RefinementContext.Anchor.PosteriorStateRoot)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Context.BeefyRoot, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.RefinementContext.Anchor.PosteriorBeefyRoot)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Context.LookupAnchor, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.RefinementContext.LookupAnchor.HeaderHash)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Context.LookupAnchorSlot, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.RefinementContext.LookupAnchor.Timeslot) - assertHashSlicesEqual(t, expected.Extrinsic.Guarantees[i].Report.Context.Prerequisites, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.RefinementContext.PrerequisiteWorkPackage) - - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.CoreIndex, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.CoreIndex) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.AuthorizerHash, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.AuthorizerHash)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.AuthOutput, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.Output)) - - for j := range expected.Extrinsic.Guarantees[i].Report.Results { - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Results[j].ServiceId, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkResults[j].ServiceId) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Results[j].CodeHash, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkResults[j].ServiceHashCode)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Results[j].PayloadHash, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkResults[j].PayloadHash)) - require.Equal(t, expected.Extrinsic.Guarantees[i].Report.Results[j].Gas, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkResults[j].GasPrioritizationRatio) - if expected.Extrinsic.Guarantees[i].Report.Results[j].Result.Ok != nil { - require.Equal(t, *expected.Extrinsic.Guarantees[i].Report.Results[j].Result.Ok, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkResults[j].Output.Inner)) - } - if expected.Extrinsic.Guarantees[i].Report.Results[j].Result.Error != nil { - expectedWorkResult, found := toWorkResultErrorMap[*expected.Extrinsic.Guarantees[i].Report.Results[j].Result.Error] - require.True(t, found) - require.Equal(t, expectedWorkResult, unmarshaled.Extrinsic.EG.Guarantees[i].WorkReport.WorkResults[j].Output.Inner) - } - } - - require.Equal(t, expected.Extrinsic.Guarantees[i].Slot, unmarshaled.Extrinsic.EG.Guarantees[i].Timeslot) - - for j := range expected.Extrinsic.Guarantees[i].Signatures { - require.Equal(t, expected.Extrinsic.Guarantees[i].Signatures[j].ValidatorIndex, unmarshaled.Extrinsic.EG.Guarantees[i].Credentials[j].ValidatorIndex) - require.Equal(t, expected.Extrinsic.Guarantees[i].Signatures[j].Signature, toHex(unmarshaled.Extrinsic.EG.Guarantees[i].Credentials[j].Signature)) - } - - } -} - -func toHex(data any) string { - return fmt.Sprintf("0x%x", data) -} - -func assertHashSlicesEqual(t *testing.T, expected []crypto.Hash, actual []crypto.Hash) { - if expected == nil { - expected = []crypto.Hash{} - } - if actual == nil { - actual = []crypto.Hash{} - } - - require.Equal(t, expected, actual, "Hashes do not match") -} - -func unmarsalExpectedBlock(t *testing.T) expectedBlock { - b, err := os.ReadFile("vectors/codec/expected_block.json") - require.NoError(t, err) - - var unmarshaled expectedBlock - err = json.Unmarshal(b, &unmarshaled) - require.NoError(t, err) - - return unmarshaled -} - -type Result struct { - Ok *string - Error *string -} - -func (r *Result) UnmarshalJSON(data []byte) error { - var temp map[string]*json.RawMessage - if err := json.Unmarshal(data, &temp); err != nil { - return err - } - - if _, found := temp["ok"]; found { - return nil - } - - for key := range temp { - r.Error = &key - break - } - - return nil -} - -type expectedBlock struct { - Header struct { - Parent string `json:"parent"` - ParentStateRoot string `json:"parent_state_root"` - ExtrinsicHash string `json:"extrinsic_hash"` - Slot jamtime.Timeslot `json:"slot"` - EpochMark struct { - Entropy string `json:"entropy"` - TicketsEntropy string `json:"tickets_entropy"` - Validators []string `json:"validators"` - } `json:"epoch_mark"` - TicketsMark *block.WinningTicketMarker `json:"tickets_mark"` - OffendersMark []string `json:"offenders_mark"` - AuthorIndex uint16 `json:"author_index"` - EntropySource string `json:"entropy_source"` - Seal string `json:"seal"` - } `json:"header"` - Extrinsic struct { - Tickets []struct { - Attempt uint8 `json:"attempt"` - Signature string `json:"signature"` - } `json:"tickets"` - Preimages []struct { - Requester uint32 `json:"requester"` - Blob string `json:"blob"` - } `json:"preimages"` - Guarantees []struct { - Report struct { - PackageSpec struct { - Hash string `json:"hash"` - Length uint32 `json:"length"` - ErasureRoot string `json:"erasure_root"` - ExportsRoot string `json:"exports_root"` - ExportsCount uint16 `json:"exports_count"` - } `json:"package_spec"` - Context struct { - Anchor string `json:"anchor"` - StateRoot string `json:"state_root"` - BeefyRoot string `json:"beefy_root"` - LookupAnchor string `json:"lookup_anchor"` - LookupAnchorSlot jamtime.Timeslot `json:"lookup_anchor_slot"` - Prerequisites []crypto.Hash `json:"prerequisites"` - } `json:"context"` - CoreIndex uint16 `json:"core_index"` - AuthorizerHash string `json:"authorizer_hash"` - AuthOutput string `json:"auth_output"` - SegmentRootLookup []interface{} `json:"segment_root_lookup"` - Results []struct { - ServiceId block.ServiceId `json:"service_id"` - CodeHash string `json:"code_hash"` - PayloadHash string `json:"payload_hash"` - Gas uint64 `json:"gas"` - Result Result `json:"result"` - } `json:"results"` - } `json:"report"` - Slot jamtime.Timeslot `json:"slot"` - Signatures []struct { - ValidatorIndex uint16 `json:"validator_index"` - Signature string `json:"signature"` - } `json:"signatures"` - } `json:"guarantees"` - Assurances []struct { - Anchor string `json:"anchor"` - Bitfield string `json:"bitfield"` - ValidatorIndex uint16 `json:"validator_index"` - Signature string `json:"signature"` - } `json:"assurances"` - Disputes struct { - Verdicts []struct { - Target string `json:"target"` - Age uint32 `json:"age"` - Votes []struct { - Vote bool `json:"vote"` - Index uint16 `json:"index"` - Signature string `json:"signature"` - } `json:"votes"` - } `json:"verdicts"` - Culprits []struct { - Target string `json:"target"` - Key string `json:"key"` - Signature string `json:"signature"` - } `json:"culprits"` - Faults []struct { - Target string `json:"target"` - Vote bool `json:"vote"` - Key string `json:"key"` - Signature string `json:"signature"` - } `json:"faults"` - } `json:"disputes"` - } `json:"extrinsic"` -} diff --git a/tests/integration/codec_integration_test.go b/tests/integration/codec_integration_test.go new file mode 100644 index 00000000..ec2d5051 --- /dev/null +++ b/tests/integration/codec_integration_test.go @@ -0,0 +1,625 @@ +//go:build integration + +package integration + +import ( + "encoding/json" + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/eigerco/strawberry/internal/block" + "github.com/eigerco/strawberry/internal/crypto" + "github.com/eigerco/strawberry/internal/jamtime" + "github.com/eigerco/strawberry/internal/work" + "github.com/eigerco/strawberry/pkg/serialization/codec/jam" +) + +const testVectorsPath = "vectors/codec" + +func TestCodec(t *testing.T) { + tests := []struct { + name string + files []string + unmarshal func([]byte) (any, error) + comparator func(*testing.T, any, any) + expected func(*testing.T, string) any + }{ + { + name: "DecodeBlock", + files: []string{"block"}, + unmarshal: func(b []byte) (any, error) { + var v block.Block + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + expectedBlock := expected.(expectedBlock) + unmarshaledBlock := unmarshaled.(block.Block) + + compareHeader(t, expectedBlock.Header, unmarshaledBlock.Header) + compareExtrinsicFields(t, expectedBlock.Extrinsic, unmarshaledBlock.Extrinsic) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[expectedBlock](t, file) + }, + }, + { + name: "DecodeHeader", + files: []string{"header_0", "header_1"}, + unmarshal: func(b []byte) (any, error) { + var v block.Header + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareHeader(t, expected.(ExpectedHeader), unmarshaled.(block.Header)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedHeader](t, file) + }, + }, + { + name: "DecodeAssurances", + files: []string{"assurances_extrinsic"}, + unmarshal: func(b []byte) (any, error) { + var v block.AssurancesExtrinsic + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareAssuranceFields(t, expected.([]ExpectedAssurances), unmarshaled.(block.AssurancesExtrinsic)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[[]ExpectedAssurances](t, file) + }, + }, + { + name: "DecodeGuarantees", + files: []string{"guarantees_extrinsic"}, + unmarshal: func(b []byte) (any, error) { + var v block.GuaranteesExtrinsic + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareGuaranteesFields(t, expected.([]ExpectedGuarantees), unmarshaled.(block.GuaranteesExtrinsic)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[[]ExpectedGuarantees](t, file) + }, + }, + { + name: "DecodePreimages", + files: []string{"preimages_extrinsic"}, + unmarshal: func(b []byte) (any, error) { + var v block.PreimageExtrinsic + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + comparePreimageFields(t, expected.([]ExpectedPreimages), unmarshaled.(block.PreimageExtrinsic)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[[]ExpectedPreimages](t, file) + }, + }, + { + name: "DecodeTickets", + files: []string{"tickets_extrinsic"}, + unmarshal: func(b []byte) (any, error) { + var v []block.TicketProof + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareTicketFields(t, expected.([]ExpectedTickets), unmarshaled.([]block.TicketProof)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[[]ExpectedTickets](t, file) + }, + }, + { + name: "DecodeExtrinsic", + files: []string{"extrinsic"}, + unmarshal: func(b []byte) (any, error) { + var v block.Extrinsic + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareExtrinsicFields(t, expected.(ExpectedExtrinsic), unmarshaled.(block.Extrinsic)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedExtrinsic](t, file) + }, + }, + { + name: "DecodeDisputes", + files: []string{"disputes_extrinsic"}, + unmarshal: func(b []byte) (any, error) { + var v block.DisputeExtrinsic + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareDisputeFields(t, expected.(ExpectedDisputes), unmarshaled.(block.DisputeExtrinsic)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedDisputes](t, file) + }, + }, + { + name: "DecodeRefineContext", + files: []string{"refine_context"}, + unmarshal: func(b []byte) (any, error) { + var v block.RefinementContext + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareRefinementContextFields(t, expected.(ExpectedRefinementContext), unmarshaled.(block.RefinementContext)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedRefinementContext](t, file) + }, + }, + { + name: "DecodeWorkItem", + files: []string{"work_item"}, + unmarshal: func(b []byte) (any, error) { + var v work.Item + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareWorkItemFields(t, expected.(ExpectedWorkItem), unmarshaled.(work.Item)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedWorkItem](t, file) + }, + }, + { + name: "DecodeWorkPackage", + files: []string{"work_package"}, + unmarshal: func(b []byte) (any, error) { + var v work.Package + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareWorkPackageFields(t, expected.(ExpectedWorkPackage), unmarshaled.(work.Package)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedWorkPackage](t, file) + }, + }, + { + name: "DecodeWorkReport", + files: []string{"work_report"}, + unmarshal: func(b []byte) (any, error) { + var v block.WorkReport + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareWorkReportFields(t, expected.(ExpectedWorkReport), unmarshaled.(block.WorkReport)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedWorkReport](t, file) + }, + }, + { + name: "DecodeWorkResult", + files: []string{"work_result_0", "work_result_1"}, + unmarshal: func(b []byte) (any, error) { + var v block.WorkResult + err := jam.Unmarshal(b, &v) + return v, err + }, + comparator: func(t *testing.T, expected any, unmarshaled any) { + compareWorkResultFields(t, expected.(ExpectedWorkResult), unmarshaled.(block.WorkResult)) + }, + expected: func(t *testing.T, file string) any { + return unmarshalExpected[ExpectedWorkResult](t, file) + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + for _, file := range tt.files { + binFile := fmt.Sprintf("%s/%s.bin", testVectorsPath, file) + + b, err := os.ReadFile(binFile) + require.NoError(t, err) + + unmarshaled, err := tt.unmarshal(b) + require.NoError(t, err) + + expected := tt.expected(t, file) + + tt.comparator(t, expected, unmarshaled) + } + }) + } +} + +func compareHeader(t *testing.T, expected ExpectedHeader, actual block.Header) { + require.Equal(t, expected.Parent, toHex(actual.ParentHash)) + require.Equal(t, expected.ParentStateRoot, toHex(actual.PriorStateRoot)) + require.Equal(t, expected.ExtrinsicHash, toHex(actual.ExtrinsicHash)) + require.Equal(t, expected.Slot, actual.TimeSlotIndex) + + if expected.EpochMark == nil { + require.Nil(t, actual.EpochMarker) + } else { + require.Equal(t, expected.EpochMark.Entropy, toHex(actual.EpochMarker.Entropy)) + require.Equal(t, expected.EpochMark.TicketsEntropy, toHex(actual.EpochMarker.TicketsEntropy)) + + for i := range expected.EpochMark.Validators { + require.Equal(t, expected.EpochMark.Validators[i], toHex(actual.EpochMarker.Keys[i])) + } + } + + if expected.TicketsMark == nil { + require.Nil(t, actual.WinningTicketsMarker) + } else { + for i := range expected.TicketsMark { + require.Equal(t, expected.TicketsMark[i].Attempt, actual.WinningTicketsMarker[i].EntryIndex) + require.Equal(t, expected.TicketsMark[i].Id, toHex(actual.WinningTicketsMarker[i].Identifier)) + } + } + + for i := range expected.OffendersMark { + require.Equal(t, expected.OffendersMark[i], toHex(actual.OffendersMarkers[i])) + } + + require.Equal(t, expected.AuthorIndex, actual.BlockAuthorIndex) + require.Equal(t, expected.EntropySource, toHex(actual.VRFSignature)) + require.Equal(t, expected.Seal, toHex(actual.BlockSealSignature)) +} + +func compareTicketFields(t *testing.T, expected []ExpectedTickets, actual []block.TicketProof) { + for i := range expected { + require.Equal(t, expected[i].Attempt, actual[i].EntryIndex) + require.Equal(t, expected[i].Signature, toHex(actual[i].Proof)) + } +} + +func comparePreimageFields(t *testing.T, expected []ExpectedPreimages, actual block.PreimageExtrinsic) { + for i := range expected { + require.Equal(t, expected[i].Requester, actual[i].ServiceIndex) + require.Equal(t, expected[i].Blob, toHex(actual[i].Data)) + } +} + +func compareAssuranceFields(t *testing.T, expected []ExpectedAssurances, actual block.AssurancesExtrinsic) { + for i := range expected { + require.Equal(t, expected[i].Anchor, toHex(actual[i].Anchor)) + require.Equal(t, expected[i].Bitfield, toHex(actual[i].Bitfield)) + require.Equal(t, expected[i].ValidatorIndex, actual[i].ValidatorIndex) + require.Equal(t, expected[i].Signature, toHex(actual[i].Signature)) + } +} + +func compareRefinementContextFields(t *testing.T, expected ExpectedRefinementContext, actual block.RefinementContext) { + require.Equal(t, expected.Anchor, toHex(actual.Anchor.HeaderHash)) + require.Equal(t, expected.StateRoot, toHex(actual.Anchor.PosteriorStateRoot)) + require.Equal(t, expected.BeefyRoot, toHex(actual.Anchor.PosteriorBeefyRoot)) + require.Equal(t, expected.LookupAnchor, toHex(actual.LookupAnchor.HeaderHash)) + require.Equal(t, expected.LookupAnchorSlot, actual.LookupAnchor.Timeslot) + assertHashSlicesEqual(t, expected.Prerequisites, actual.PrerequisiteWorkPackage) +} + +func compareWorkResultFields(t *testing.T, expected ExpectedWorkResult, actual block.WorkResult) { + require.Equal(t, expected.ServiceId, actual.ServiceId) + require.Equal(t, expected.CodeHash, toHex(actual.ServiceHashCode)) + require.Equal(t, expected.PayloadHash, toHex(actual.PayloadHash)) + require.Equal(t, expected.AccumulateGas, actual.GasPrioritizationRatio) + if expected.Result.Ok != nil { + require.Equal(t, *expected.Result.Ok, toHex(actual.Output.Inner)) + } + if expected.Result.Error != nil { + expectedWorkResult, found := toWorkResultErrorMap[*expected.Result.Error] + require.True(t, found) + require.Equal(t, expectedWorkResult, actual.Output.Inner) + } +} + +func compareWorkReportFields(t *testing.T, expected ExpectedWorkReport, actual block.WorkReport) { + require.Equal(t, expected.PackageSpec.Hash, toHex(actual.WorkPackageSpecification.WorkPackageHash)) + require.Equal(t, expected.PackageSpec.Length, actual.WorkPackageSpecification.AuditableWorkBundleLength) + require.Equal(t, expected.PackageSpec.ErasureRoot, toHex(actual.WorkPackageSpecification.ErasureRoot)) + require.Equal(t, expected.PackageSpec.ExportsRoot, toHex(actual.WorkPackageSpecification.SegmentRoot)) + require.Equal(t, expected.PackageSpec.ExportsCount, actual.WorkPackageSpecification.SegmentCount) + + compareRefinementContextFields(t, expected.Context, actual.RefinementContext) + + require.Equal(t, expected.CoreIndex, actual.CoreIndex) + require.Equal(t, expected.AuthorizerHash, toHex(actual.AuthorizerHash)) + require.Equal(t, expected.AuthOutput, toHex(actual.Output)) + + for j := range expected.Results { + compareWorkResultFields(t, expected.Results[j], actual.WorkResults[j]) + } +} + +func compareGuaranteesFields(t *testing.T, expected []ExpectedGuarantees, actual block.GuaranteesExtrinsic) { + for i := range expected { + compareWorkReportFields(t, expected[i].Report, actual.Guarantees[i].WorkReport) + + require.Equal(t, expected[i].Slot, actual.Guarantees[i].Timeslot) + + for j := range expected[i].Signatures { + require.Equal(t, expected[i].Signatures[j].ValidatorIndex, actual.Guarantees[i].Credentials[j].ValidatorIndex) + require.Equal(t, expected[i].Signatures[j].Signature, toHex(actual.Guarantees[i].Credentials[j].Signature)) + } + } +} + +func compareDisputeFields(t *testing.T, expected ExpectedDisputes, actual block.DisputeExtrinsic) { + for i := range expected.Verdicts { + require.Equal(t, expected.Verdicts[i].Target, toHex(actual.Verdicts[i].ReportHash)) + require.Equal(t, expected.Verdicts[i].Age, actual.Verdicts[i].EpochIndex) + for j := range expected.Verdicts[i].Votes { + require.Equal(t, expected.Verdicts[i].Votes[j].Vote, actual.Verdicts[i].Judgements[j].IsValid) + require.Equal(t, expected.Verdicts[i].Votes[j].Index, actual.Verdicts[i].Judgements[j].ValidatorIndex) + require.Equal(t, expected.Verdicts[i].Votes[j].Signature, toHex(actual.Verdicts[i].Judgements[j].Signature)) + } + } + + for i := range expected.Culprits { + require.Equal(t, expected.Culprits[i].Target, toHex(actual.Culprits[i].ReportHash)) + require.Equal(t, expected.Culprits[i].Key, toHex(actual.Culprits[i].ValidatorEd25519PublicKey)) + require.Equal(t, expected.Culprits[i].Signature, toHex(actual.Culprits[i].Signature)) + } + + for i := range expected.Faults { + require.Equal(t, expected.Faults[i].Target, toHex(actual.Faults[i].ReportHash)) + require.Equal(t, expected.Faults[i].Vote, actual.Faults[i].IsValid) + require.Equal(t, expected.Faults[i].Key, toHex(actual.Faults[i].ValidatorEd25519PublicKey)) + require.Equal(t, expected.Faults[i].Signature, toHex(actual.Faults[i].Signature)) + } +} + +func compareExtrinsicFields(t *testing.T, expected ExpectedExtrinsic, actual block.Extrinsic) { + compareTicketFields(t, expected.Tickets, actual.ET.TicketProofs) + comparePreimageFields(t, expected.Preimages, actual.EP) + compareAssuranceFields(t, expected.Assurances, actual.EA) + compareGuaranteesFields(t, expected.Guarantees, actual.EG) + compareDisputeFields(t, expected.Disputes, actual.ED) +} + +func compareWorkItemFields(t *testing.T, expected ExpectedWorkItem, actual work.Item) { + require.Equal(t, expected.Service, actual.ServiceId) + require.Equal(t, expected.CodeHash, toHex(actual.CodeHash)) + require.Equal(t, expected.Payload, toHex(actual.Payload)) + require.Equal(t, expected.RefineGasLimit, actual.GasLimitRefine) + require.Equal(t, expected.AccumulateGasLimit, actual.GasLimitAccumulate) + + for i := range expected.ImportSegments { + require.Equal(t, expected.ImportSegments[i].TreeRoot, toHex(actual.ImportedSegments[i].Hash)) + require.Equal(t, expected.ImportSegments[i].Index, actual.ImportedSegments[i].Index) + } + + for i := range expected.Extrinsic { + require.Equal(t, expected.Extrinsic[i].Hash, toHex(actual.Extrinsics[i].Hash)) + require.Equal(t, expected.Extrinsic[i].Len, actual.Extrinsics[i].Length) + } + + require.Equal(t, expected.ExportCount, actual.ExportedSegments) +} + +func compareWorkPackageFields(t *testing.T, expected ExpectedWorkPackage, actual work.Package) { + require.Equal(t, expected.Authorization, toHex(actual.AuthorizationToken)) + require.Equal(t, expected.AuthCodeHost, actual.AuthorizerService) + require.Equal(t, expected.Authorizer.CodeHash, toHex(actual.AuthCodeHash)) + require.Equal(t, expected.Authorizer.Params, toHex(actual.Parameterization)) + compareRefinementContextFields(t, expected.Context, actual.Context) + + for i := range expected.Items { + compareWorkItemFields(t, expected.Items[i], actual.WorkItems[i]) + } +} + +func toHex(data any) string { + return fmt.Sprintf("0x%x", data) +} + +func assertHashSlicesEqual(t *testing.T, expected []crypto.Hash, actual []crypto.Hash) { + if expected == nil { + expected = []crypto.Hash{} + } + if actual == nil { + actual = []crypto.Hash{} + } + + require.Equal(t, expected, actual, "Hashes do not match") +} + +func unmarshalExpected[T any](t *testing.T, fileName string) T { + b, err := os.ReadFile(fmt.Sprintf("%s/%s.json", testVectorsPath, fileName)) + require.NoError(t, err) + + var result T + err = json.Unmarshal(b, &result) + require.NoError(t, err) + + return result +} + +var toWorkResultErrorMap = map[string]block.WorkResultError{ + "out-of-gas": block.OutOfGas, + "panic": block.UnexpectedTermination, + "bad-code": block.CodeNotAvailable, + "code-oversize": block.CodeTooLarge, +} + +type expectedBlock struct { + Header ExpectedHeader `json:"header"` + Extrinsic ExpectedExtrinsic `json:"extrinsic"` +} + +type ExpectedHeader struct { + Parent string `json:"parent"` + ParentStateRoot string `json:"parent_state_root"` + ExtrinsicHash string `json:"extrinsic_hash"` + Slot jamtime.Timeslot `json:"slot"` + EpochMark *struct { + Entropy string `json:"entropy"` + TicketsEntropy string `json:"tickets_entropy"` + Validators []string `json:"validators"` + } `json:"epoch_mark"` + TicketsMark []struct { + Id string `json:"id"` + Attempt uint8 `json:"attempt"` + } `json:"tickets_mark"` + OffendersMark []string `json:"offenders_mark"` + AuthorIndex uint16 `json:"author_index"` + EntropySource string `json:"entropy_source"` + Seal string `json:"seal"` +} + +type ExpectedExtrinsic struct { + Tickets []ExpectedTickets `json:"tickets"` + Preimages []ExpectedPreimages `json:"preimages"` + Guarantees []ExpectedGuarantees `json:"guarantees"` + Assurances []ExpectedAssurances `json:"assurances"` + Disputes ExpectedDisputes `json:"disputes"` +} + +type ExpectedTickets struct { + Attempt uint8 `json:"attempt"` + Signature string `json:"signature"` +} + +type ExpectedPreimages struct { + Requester uint32 `json:"requester"` + Blob string `json:"blob"` +} + +type ExpectedGuarantees struct { + Report ExpectedWorkReport `json:"report"` + Slot jamtime.Timeslot `json:"slot"` + Signatures []struct { + ValidatorIndex uint16 `json:"validator_index"` + Signature string `json:"signature"` + } `json:"signatures"` +} + +type ExpectedWorkReport struct { + PackageSpec struct { + Hash string `json:"hash"` + Length uint32 `json:"length"` + ErasureRoot string `json:"erasure_root"` + ExportsRoot string `json:"exports_root"` + ExportsCount uint16 `json:"exports_count"` + } `json:"package_spec"` + Context ExpectedRefinementContext `json:"context"` + CoreIndex uint16 `json:"core_index"` + AuthorizerHash string `json:"authorizer_hash"` + AuthOutput string `json:"auth_output"` + SegmentRootLookup []interface{} `json:"segment_root_lookup"` + Results []ExpectedWorkResult `json:"results"` +} + +type ExpectedWorkResult struct { + ServiceId block.ServiceId `json:"service_id"` + CodeHash string `json:"code_hash"` + PayloadHash string `json:"payload_hash"` + AccumulateGas uint64 `json:"accumulate_gas"` + Result Result `json:"result"` +} + +type ExpectedRefinementContext struct { + Anchor string `json:"anchor"` + StateRoot string `json:"state_root"` + BeefyRoot string `json:"beefy_root"` + LookupAnchor string `json:"lookup_anchor"` + LookupAnchorSlot jamtime.Timeslot `json:"lookup_anchor_slot"` + Prerequisites []crypto.Hash `json:"prerequisites"` +} + +type ExpectedAssurances struct { + Anchor string `json:"anchor"` + Bitfield string `json:"bitfield"` + ValidatorIndex uint16 `json:"validator_index"` + Signature string `json:"signature"` +} + +type ExpectedDisputes struct { + Verdicts []struct { + Target string `json:"target"` + Age uint32 `json:"age"` + Votes []struct { + Vote bool `json:"vote"` + Index uint16 `json:"index"` + Signature string `json:"signature"` + } `json:"votes"` + } `json:"verdicts"` + Culprits []struct { + Target string `json:"target"` + Key string `json:"key"` + Signature string `json:"signature"` + } `json:"culprits"` + Faults []struct { + Target string `json:"target"` + Vote bool `json:"vote"` + Key string `json:"key"` + Signature string `json:"signature"` + } `json:"faults"` +} + +type Result struct { + Ok *string + Error *string +} + +func (r *Result) UnmarshalJSON(data []byte) error { + var temp map[string]*json.RawMessage + if err := json.Unmarshal(data, &temp); err != nil { + return err + } + + if _, found := temp["ok"]; found { + return nil + } + + for key := range temp { + r.Error = &key + break + } + + return nil +} + +type ExpectedWorkItem struct { + Service uint32 `json:"service"` + CodeHash string `json:"code_hash"` + Payload string `json:"payload"` + RefineGasLimit uint64 `json:"refine_gas_limit"` + AccumulateGasLimit uint64 `json:"accumulate_gas_limit"` + ImportSegments []struct { + TreeRoot string `json:"tree_root"` + Index uint16 `json:"index"` + } `json:"import_segments"` + Extrinsic []struct { + Hash string `json:"hash"` + Len uint32 `json:"len"` + } `json:"extrinsic"` + ExportCount uint16 `json:"export_count"` +} + +type ExpectedWorkPackage struct { + Authorization string `json:"authorization"` + AuthCodeHost uint32 `json:"auth_code_host"` + Authorizer struct { + CodeHash string `json:"code_hash"` + Params string `json:"params"` + } `json:"authorizer"` + Context ExpectedRefinementContext `json:"context"` + Items []ExpectedWorkItem `json:"items"` +} diff --git a/tests/integration/vectors/codec/assurances_extrinsic.bin b/tests/integration/vectors/codec/assurances_extrinsic.bin new file mode 100644 index 0000000000000000000000000000000000000000..d873f7188cc06cbb7745ccd12d18b8cbb492de8e GIT binary patch literal 199 zcmV;&066~w4FA7ps^tpq)5iGl*}r{-PyL6^_%)2Xs#toSJJF|h0RR9kj>ob!zB@d= zo8#60Ht>R!Ap+J)4aJo=38`GlRke#6@|X2A)MO@0=X7_qNAty&xkv51qd#Ub@v0b& zC8LWYn9ga#SY8_&S4vuOg`%K_H442(2GLrq=(J%ANk?)40RY{nrFZdA?t`!G$L=@SCoT!bA8%rp!PTh*=(={jt{6 BXN>>= literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/assurances_extrinsic.json b/tests/integration/vectors/codec/assurances_extrinsic.json new file mode 100644 index 00000000..a9b81476 --- /dev/null +++ b/tests/integration/vectors/codec/assurances_extrinsic.json @@ -0,0 +1,14 @@ +[ + { + "anchor": "0x0cffbf67aae50aeed3c6f8f0d9bf7d854ffd87cef8358cbbaa587a9e3bd1a776", + "bitfield": "0x01", + "validator_index": 0, + "signature": "0x2d8ec7b235be3b3cbe9be3d5ff36f082942102d64a0dc5953709a95cca55b58b1af297f534d464264be77477b547f3c596b947edbca33f6631f1aa188d25a38b" + }, + { + "anchor": "0x2398ce69c3585e1b1b574a5a7185a2a086350abd4606d15aace8b4610b494772", + "bitfield": "0x01", + "validator_index": 1, + "signature": "0xdda7a577f150ee83afedc9d3b50a4f00fcf21248e6f73097abcc4bb634f854aedc53769838d294b09c0184fb0e66f09bae8cc243f842a6cc401488591e9ffdb1" + } +] diff --git a/tests/integration/vectors/codec/block.bin b/tests/integration/vectors/codec/block.bin index bfdf3aa8f06fd50cc94abfcdf18e203db0b0b4dc..35f508d4fe63364725aca1e6bd074977eb3e69e7 100644 GIT binary patch delta 14 VcmZ3jwpwjN4hJLC=3I__TmUA_1iAnK delta 14 VcmZ3jwpwjN4hJK{=3I__TmUA(1h@bI diff --git a/tests/integration/vectors/codec/expected_block.json b/tests/integration/vectors/codec/block.json similarity index 99% rename from tests/integration/vectors/codec/expected_block.json rename to tests/integration/vectors/codec/block.json index 76229aa0..2af39c13 100644 --- a/tests/integration/vectors/codec/expected_block.json +++ b/tests/integration/vectors/codec/block.json @@ -35,7 +35,7 @@ "signature": "0x2f24ea5c5cfc5631ea3b7799222ca555250b8591751fd1d59df4abeb690d66e634aceeaf381ac13f60ee9dcd6c4645385b029b8776d7c0d8edddba0f039e3e7efca4d9c13fe75b27834585d9ac0e8f427efa5ed25d13d9f42a34c834ec1a5c2f07076e2677a80977884012425bfe958b306e2deb61b677bd4e4952df117fab2a3d2bdf4be8e7bae62f1415dd86adeb8bfa5bcf7a329ed19cb770750c1ee3901502ac3d44882f3cb85c78dd1164cdf48f9742ed80dc644c4a6117e95b90b4403f2cbcb44856c7aeae36aa64ee19c671350a1fffa4c0eead5863430c72d9681d80a66a95e083051eabe71518efb861c9a2316d949b177b8d415855625996c2322183506053ed443a24107e8826f2f30f1d0196df96edf78718a587f89e5aa52ca187a7e04ed51433fb030af5633510042de1e904ec2478743c58d3535151b430452e82e77608d6ee7f56a1a1446b4fa6d89aa979a90422233a05b82564695ff4b6361d920a22c441c6f0505fa260a71b7e1f278711f27ebd9c00b4885a671021d0d75bc9a9c95ceb73cadb1c301f1da2111a86a5f87a8a7d5153ebbc98bf3a83ef65e5d7aedec99927bc5138dacbc75e8391f91537417ee7f8d72869df185a333d081423f4222c114a04727e0de4169b0e32f3b85b9cdab701208a2b39c7fb0892e09b01186f76ea73bd927fcef68886433ca15f4c968581d50fabed92a7dd7f005fb99c5d5fafbacd763c2c401dbbd3e89eee769ff41ed06b771675070242405e5ac7bae5f547b7e64ee82aca2e32977453da4c5651038e51420c33dfeb24f8a6ea1271de70e1dc8100dbf0df3d71cb30915cb8937cc31caa7cfc0ed5bca03de30ab2e67e55feffcc0c8db7e98414ef85896b9b881958527a9f2d0cc68b02795f4131c3812b1393ce9f6f0617d1aec9a3cd51be4bddb7a75cc8bc710197e618407fe4a1b8908dac4b8031d22e8f7591304c8641daf97abcbc55e81de7b935b94ef074fcb19808e7c3fa0ce827f70a3feb301da33af34fb9a4ad21acc7dcabcabe06f9fba188eeb9e30badc43fda3030fb8f888a41a8822c7fa32ff8fe0dd2abfc7d6323ebcdd0092d5f82c5d94e6ea296" }, { - "attempt": 0, + "attempt": 2, "signature": "0x036479afe8e29f97741a1e3c2b59c217dc67d8a25f7ce12bf1febf6b4a5b2646fd81cdf0a75e20fc0de981f48471527728b0c4d151fbdd9b32e6c6b3c6cd71db9b51d1cca8eef4a128d63f542bdb129c6edca628e1276d8376347bd2071d949b7ec5d1bfc18ebc61753a5f24544d1ae75b6f6f35a5707fc99e787b86cb5a17138069f5bac8d16e08b20781b8841ff928a49ec7bf09f5f39159cb44370a5ce16b93b2d4325445bfd641f2ef750e1971690a4f11e815d418a4dca01f8d039f4543a59665dcea27a24dbb1fddca0a2e90b4e3292dfc7a5cee69c1e707cd491742f3d3015d9499b07bbf6ddc2342e48522c149089311cf6ccc9bf957b509e52df550f06e70f4f601c01c1326e0ce7e7ce2547fcc16509b8bdb1577b15adb042f1e393c01bc010ba3460119ab738e58e39297278315b0825b8b798835a7a0b133a0d890a24018f0797c3ba43d62dcda03320215c5734bc1b10e8bef5003aefb5513ce9cd1964db23b1a143c4da8142676e254f00f84cfc15fa1a3bab78536f5f9e2cbce7560be876142a8655b8c1fdf0ffab7e187ace3c37ed2c6dfc4590e658ad2efc8cdec6140452493e2693e682946d1c99a62cca529f46a6e9874ef72955e4d855881e35ef53fd95e307f9ebf94542860711bdd288ab13d8dec1fecd82fc9a2eb97e67ae38ec859034473972157b819b3215e359bf17952b95aaa2932f09e2a8c8e0fea82de9c6c2612766ed50702667520fbd5089c0cc300e9d32893799cf73520f5a925bdfb791a419e80e118d2ba69031566da30c06f5e83e74f4eae8a886018a4c1269a97217851bcb4bb945dbf1309d1d2e59d78474f5e52702536761eed0d9fd01e46261b61dca3fc85a0b4bdfa315edb0972fed80399909eef35ed10cda0e1a66680eedcf15b400d404dadf77cda5641412c20a465cea4411820ee491678821eef8dca745a2ffd8a787837d22b486342499ad84a51d4093655947185bfe72018c16b8fe622ab58c7d965e8dac3b1d5c9cedfb27f562d077ab85e1293496d69f6bafd8468855b50255788b430ed6e6ef8c0fde28651b005a91dbb0fd4d0635108d5ff9e4527fefa66817221b76f" } ], @@ -80,7 +80,7 @@ "service_id": 16909060, "code_hash": "0x70a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532e", "payload_hash": "0xfa99b97e72fcfaef616108de981a59dc3310e2a9f5e73cd44d702ecaaccd8696", - "gas": 42, + "accumulate_gas": 42, "result": { "ok": "0xaabbcc" } @@ -89,7 +89,7 @@ "service_id": 84281096, "code_hash": "0xfcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae6", "payload_hash": "0xd55e07438aeeeb0d6509ab28af8a758d1fb70424db6b27c7e1ef6473e721c328", - "gas": 33, + "accumulate_gas": 33, "result": { "panic": null } diff --git a/tests/integration/vectors/codec/disputes_extrinsic.bin b/tests/integration/vectors/codec/disputes_extrinsic.bin new file mode 100644 index 0000000000000000000000000000000000000000..2708d5716487d9c37015fffb77a04facbd290531 GIT binary patch literal 1130 zcmZR&E1i14ETlZ((hvVH$9^5Z7dFK$BA6@bg-p(&2^=L37nm6s7#JBC4ivTYM<1_k zT`>2^v-u_pnidnqOxWI7d7k+!760QvGKm_UA?Y6JFX1PLT`ig5T=?%BkuADw7 zyt(wS(~LdQPZ?fwbQv$0`6JJ%G34a8BHtcHCI*d{8h>04?w|1USOeqJxt%XUzutCU z9<7?&`G}!U*IoN-oqf6UQ@y<}#W(5)3deU!oWHY6Q!wU8Yu4P8E$?6ci(_PF@G3H| ztSc;6{e9qzRrH>K%@VimBENn$E6$P)G5F?iuRMiz!coC%AvCRQysPg6dgs1r~kciBa;=$PJ}mo+gxbKYu-&y|hY zv8sP}Z@$x&>4`t$jub?*`jq|9nrnE6_1{6utpeJ&ce$H+9CY*w_S3nX6fX1IgfZ~i zZnfUcl}Be*bKFS;1vwC$<_+Xsk-WNNI)mxal*YcB-BL!*k6zV2{rq#MTyv#ny4%fM z$$RtsgA)r*{&}Ua+bE>yiuWWfleJaqC1!^EFQ@>cO)6k6+pU`={G5vp|6A;|ut=<& zqj7ez4DXlwUD=(y@69*eTy`Li#aC>e(fxhroR0e|75=*!I_b-y%~^|VS9E4HF)%Uk zzgTj%?QX80{IZj8y;ljIy*~NFdc%$77mLl$3O;%%C3;}Nj8l6nC(5W6b*3_$Yg*YV zdE}@0lcaw;_!vJnZCG)dftg{~$@4tQ%l0gvx?JYScV|7vcdO;v9Lo;f^_&w@mlGi8 z$^T$2t6Ys(v{TBu9I?6|ar*@)UQ7A@@u>Y$o1Dt-W2YHd7`D{O8@ev~vP?-nph&W2 zN3q!DK9@bs$?7_5y4x+wG{NO42uxii`-8IPl%>dw zX=aOjgd5vx!(DgoTf7j`C|Nf1!D-9R8+VT%X!q`qFWYaOrM~Cfwk5hri&tFG%I7Uk zH4-hCedN5%>VU_>?#Nr3g!G@N5&tyz_dVnDPiKDqU3lS-qM$>AK*Jk>`2EgN)9Wj| zEA!gW`Co~s*K6lrxx1IEo&DX$>YvY9Iaht(Saz$b=+RRz z#^C&`I{x0m2G43e3oA>Uqdy+(yE}2)Toc2#>7o*_jvTEN`q+e6{QEckyZOwyV6W^Z$5P G{yG3EmmRnO literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/disputes_extrinsic.json b/tests/integration/vectors/codec/disputes_extrinsic.json new file mode 100644 index 00000000..8a9220d2 --- /dev/null +++ b/tests/integration/vectors/codec/disputes_extrinsic.json @@ -0,0 +1,86 @@ +{ + "verdicts": [ + { + "target": "0xdd1b65c036547750d2f84ff4c6fac7de56944658530a62e81c6cc290087440d0", + "age": 3, + "votes": [ + { + "vote": true, + "index": 0, + "signature": "0xc072848f5bc77d85a09dc4e69f3420293891163406ec3a49ccf31a5ff8c063042a9c8c59e5f83d4d276ab4110af0ca85d7a713434694f8c6b391b122c303aadb" + }, + { + "vote": true, + "index": 1, + "signature": "0xcb021d8507925eb2d49040cc08cbcca0af197c5f3eb7aad639a82497a8d6046780da26d4cbc113b375c34298bc5be500eb088a33a099f86e428154c9f6724d8c" + }, + { + "vote": true, + "index": 2, + "signature": "0x28e928fc44c1bf90f9c68001e59d89e855f5db43a75b256d89e2008e2d472bf57e3f7743e52ebde917b12f51135f8918cfdcba29115cc4856a9dc984efe9fe5e" + }, + { + "vote": true, + "index": 3, + "signature": "0x4a7237797e717725fbc0f43a5bbc50b318db3e59f5f536776a189bf65c6508100eedbb2bae1e2ed123c2fb025ca8e8b7f306ced32b03fd98c1045aef4153a1ae" + }, + { + "vote": true, + "index": 4, + "signature": "0xc20960a26a917aa7376623c7612c50741ed3442172c62edce97c5c8c9ced29179d1d5cb8aa8fbb8d6f42d49761f85ec4705b054c76f82a9d31dc05fec139b510" + } + ] + }, + { + "target": "0x2bdbba473648c1414a534e2cd362571cfb340151d6bb268db379c5997b08dc61", + "age": 3, + "votes": [ + { + "vote": false, + "index": 0, + "signature": "0xcb0d510da863ab88970035c564818ed98b1a3243e2ea7de5f3f9b91e8379296746d96d19de9e4f536170c9fcea20bb325472d44b922a34ad7a27743631bfd024" + }, + { + "vote": false, + "index": 1, + "signature": "0x1a509d06dad9740f09a2c3fea342a172167708819b731c0df4df8a6b890def37b2d9a6c05e044d169e32dfbece42c74f2271fed95592f4c2b36aa23da8896882" + }, + { + "vote": false, + "index": 2, + "signature": "0x0fe8a4cd86dd6d4e1fa6c9ed4baa11cdd793f0af31b177d17337cd11e2e91a15c0a098cabd79911c2572896500ce82a98519c4f937e462feb80e01f182b0a8cb" + }, + { + "vote": false, + "index": 3, + "signature": "0xbac9cf0c23a6bca795a71cc4f7432e41eeab1e864176c2dd499c547e6c501e490fe0ad051e7c165b4264ae6c167ef85ebf1191d664f7f1c53fa53c6c798bc6cb" + }, + { + "vote": false, + "index": 4, + "signature": "0xb47e1f3145a2f4a6221f5072197cb87316d38e44bc8363272cac8b87397629bac5092bbae7c4738079cecc2b2468e23b281e5c833435ed5918c3b0aa15047236" + } + ] + } + ], + "culprits": [ + { + "target": "0x99841f584606ab31badcdf38e8122874a699e0cb3989d8ddc7c0874b8f5f76bf", + "key": "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29", + "signature": "0x99841f584606ab31badcdf38e8122874a699e0cb3989d8ddc7c0874b8f5f76bfc87c17f29dfbde33cfe599f3fb71d0fc211140801080ec105fbf435a977f784a" + }, + { + "target": "0xd0e1f11843bda78bec027cd2046488ec6c54bbbfa8170442c988768eb006a16a", + "key": "0x22351e22105a19aabb42589162ad7f1ea0df1c25cebf0e4a9fcd261301274862", + "signature": "0xd0e1f11843bda78bec027cd2046488ec6c54bbbfa8170442c988768eb006a16ad1d7e7fd185aebad9fd4ddbd0a8707eeb17bf9e70509aaf7b176da7a72e2e54a" + } + ], + "faults": [ + { + "target": "0x536fd52c4f4b1330e67d49717974435bf1c18edd91b69d343186a784844415bc", + "vote": false, + "key": "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29", + "signature": "0x557e5ee3660be9247c4908c74a46c91eebd713925dd7f2ede3ef4900ba277039f7d46ec15432116176cce8ce39d8ae21eabafdf71796eeb724ee7e4ff1dd1fd7" + } + ] +} diff --git a/tests/integration/vectors/codec/extrinsic.bin b/tests/integration/vectors/codec/extrinsic.bin new file mode 100644 index 0000000000000000000000000000000000000000..8b974622b63caefb369655ee65f8da5202434016 GIT binary patch literal 4322 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 L3NbicVO{tim%BD2 literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/extrinsic.json b/tests/integration/vectors/codec/extrinsic.json new file mode 100644 index 00000000..e00c02a2 --- /dev/null +++ b/tests/integration/vectors/codec/extrinsic.json @@ -0,0 +1,186 @@ +{ + "tickets": [ + { + "attempt": 0, + "signature": "0x8c25c063c631c0d4cd0206159b3495deb761cc057e06192fe5497dc9b3744c7b9e975801b14185ebe44f91704eb45f652ed1913c35bd733813a32bca7f7d02bec508724e0bc643989f015d7f4bc483fb6c10f01a8279ab75067316fd3463bcc215f1b0dc85250b15bc42aa7473561204bd8aae566d506e2b0cfd7adbc44ca17d94226eb0cfc09c2180acd27d184f272af2bd2d9c57fb54b134eebccecab7dec04483bb191cf889a5e2852ade92ada839cdad17b7dc9525ecb2e134c5dc415743f8f564c386a7c4d7bca8bc6a5dc125308fbb274c44f5bbe911d9ce5c670044e3343986cf66900c198bb377b53a607a0b23ac9caac9ef751a7850488854381bc2ad3cdec73e3be1cc7d014cf92b4ef289b1bfa15124e147b3c4d902c89bf1195d15452e4bde9599392a3099b783dca00dcfb6540d2eda3c05cbf5415608105e60181da8f9d7729c3cc22228a2f1dbd562ee6400c0aa74d17cab13f7014febebecaed9c3a079cbaa92fc71443635d4149ca39e89c7d157e238f856a0701a664e1ff99a7b8b0a18fb9733d1e9255bff6a5345896d0696c2094e24f8b5eeb7538a96edf09830291df328d633d098ee2e4ad1b037590390c393c7ec85f0308b198f5a7f0d0d171ba7d1623f2c7c4131f8fd76ce67c1fe363d029099d454e316e842785f6bac40e7bba10217e3f457755c0fd35251a99ea180df1c7a6ba824166243109de8bb00b2aeb7436d15ebd2d1fbf40d389158903a1d95344a0492909bce4719ae43c4c8623ad733a9621e87b8f737b8ee1af9fb4180eccb9716804afaf59393113d3b10a359b65ff7b9ead5cb36bc576ad8c58a5c8750403971347f9a27c7022b8c56f754f7d5b353cce72b12fc9f317307d6a2999daf1de765f56bcf6859792fc208a1458902a7255c3ea59c172238236dc5e7e10b1b96d657c2d5f0c13afa9c8ff7288c6349ede216e8069a26b1d4254e0ac4c783f54922976b8430464a4f7bec582750820276cda6deac10dece627b1def68f02160bcc98add96b4198e279eafdc5f4fc54f074e2011ddb4faa336960cd3cf4bbcbbe7015632fb800298d8484e05430bf95773da1d76bef380a1f4" + }, + { + "attempt": 1, + "signature": "0x2f24ea5c5cfc5631ea3b7799222ca555250b8591751fd1d59df4abeb690d66e634aceeaf381ac13f60ee9dcd6c4645385b029b8776d7c0d8edddba0f039e3e7efca4d9c13fe75b27834585d9ac0e8f427efa5ed25d13d9f42a34c834ec1a5c2f07076e2677a80977884012425bfe958b306e2deb61b677bd4e4952df117fab2a3d2bdf4be8e7bae62f1415dd86adeb8bfa5bcf7a329ed19cb770750c1ee3901502ac3d44882f3cb85c78dd1164cdf48f9742ed80dc644c4a6117e95b90b4403f2cbcb44856c7aeae36aa64ee19c671350a1fffa4c0eead5863430c72d9681d80a66a95e083051eabe71518efb861c9a2316d949b177b8d415855625996c2322183506053ed443a24107e8826f2f30f1d0196df96edf78718a587f89e5aa52ca187a7e04ed51433fb030af5633510042de1e904ec2478743c58d3535151b430452e82e77608d6ee7f56a1a1446b4fa6d89aa979a90422233a05b82564695ff4b6361d920a22c441c6f0505fa260a71b7e1f278711f27ebd9c00b4885a671021d0d75bc9a9c95ceb73cadb1c301f1da2111a86a5f87a8a7d5153ebbc98bf3a83ef65e5d7aedec99927bc5138dacbc75e8391f91537417ee7f8d72869df185a333d081423f4222c114a04727e0de4169b0e32f3b85b9cdab701208a2b39c7fb0892e09b01186f76ea73bd927fcef68886433ca15f4c968581d50fabed92a7dd7f005fb99c5d5fafbacd763c2c401dbbd3e89eee769ff41ed06b771675070242405e5ac7bae5f547b7e64ee82aca2e32977453da4c5651038e51420c33dfeb24f8a6ea1271de70e1dc8100dbf0df3d71cb30915cb8937cc31caa7cfc0ed5bca03de30ab2e67e55feffcc0c8db7e98414ef85896b9b881958527a9f2d0cc68b02795f4131c3812b1393ce9f6f0617d1aec9a3cd51be4bddb7a75cc8bc710197e618407fe4a1b8908dac4b8031d22e8f7591304c8641daf97abcbc55e81de7b935b94ef074fcb19808e7c3fa0ce827f70a3feb301da33af34fb9a4ad21acc7dcabcabe06f9fba188eeb9e30badc43fda3030fb8f888a41a8822c7fa32ff8fe0dd2abfc7d6323ebcdd0092d5f82c5d94e6ea296" + }, + { + "attempt": 2, + "signature": "0x036479afe8e29f97741a1e3c2b59c217dc67d8a25f7ce12bf1febf6b4a5b2646fd81cdf0a75e20fc0de981f48471527728b0c4d151fbdd9b32e6c6b3c6cd71db9b51d1cca8eef4a128d63f542bdb129c6edca628e1276d8376347bd2071d949b7ec5d1bfc18ebc61753a5f24544d1ae75b6f6f35a5707fc99e787b86cb5a17138069f5bac8d16e08b20781b8841ff928a49ec7bf09f5f39159cb44370a5ce16b93b2d4325445bfd641f2ef750e1971690a4f11e815d418a4dca01f8d039f4543a59665dcea27a24dbb1fddca0a2e90b4e3292dfc7a5cee69c1e707cd491742f3d3015d9499b07bbf6ddc2342e48522c149089311cf6ccc9bf957b509e52df550f06e70f4f601c01c1326e0ce7e7ce2547fcc16509b8bdb1577b15adb042f1e393c01bc010ba3460119ab738e58e39297278315b0825b8b798835a7a0b133a0d890a24018f0797c3ba43d62dcda03320215c5734bc1b10e8bef5003aefb5513ce9cd1964db23b1a143c4da8142676e254f00f84cfc15fa1a3bab78536f5f9e2cbce7560be876142a8655b8c1fdf0ffab7e187ace3c37ed2c6dfc4590e658ad2efc8cdec6140452493e2693e682946d1c99a62cca529f46a6e9874ef72955e4d855881e35ef53fd95e307f9ebf94542860711bdd288ab13d8dec1fecd82fc9a2eb97e67ae38ec859034473972157b819b3215e359bf17952b95aaa2932f09e2a8c8e0fea82de9c6c2612766ed50702667520fbd5089c0cc300e9d32893799cf73520f5a925bdfb791a419e80e118d2ba69031566da30c06f5e83e74f4eae8a886018a4c1269a97217851bcb4bb945dbf1309d1d2e59d78474f5e52702536761eed0d9fd01e46261b61dca3fc85a0b4bdfa315edb0972fed80399909eef35ed10cda0e1a66680eedcf15b400d404dadf77cda5641412c20a465cea4411820ee491678821eef8dca745a2ffd8a787837d22b486342499ad84a51d4093655947185bfe72018c16b8fe622ab58c7d965e8dac3b1d5c9cedfb27f562d077ab85e1293496d69f6bafd8468855b50255788b430ed6e6ef8c0fde28651b005a91dbb0fd4d0635108d5ff9e4527fefa66817221b76f" + } + ], + "preimages": [ + { + "requester": 16909060, + "blob": "0x81095e6122e3bc9d961e00014a7fc833" + }, + { + "requester": 16909061, + "blob": "0xd257bc7d93a55be3561d720d40a6a342" + }, + { + "requester": 16909062, + "blob": "0x38db056c7c3065fadb630ce6ccbc7385" + } + ], + "guarantees": [ + { + "report": { + "package_spec": { + "hash": "0x30466e0ae1b05dde5249872475f6beeac368fd014b5a3413ceb32d3872143284", + "length": 42, + "erasure_root": "0x7af11fdaa717c398e223211842b41392f18df4bbc4ea0f4cfb972f19c7a64949", + "exports_root": "0xe8e52949f6e4fb1d943248df48c3f2b538200fddfea22388e5e061be8ebf21a7", + "exports_count": 69 + }, + "context": { + "anchor": "0xc0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986", + "state_root": "0xf6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b48", + "beefy_root": "0x9329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f3", + "lookup_anchor": "0x60751ab5b251361fbfd3ad5b0e84f051ccece6b00830aed31a5354e00b20b9ed", + "lookup_anchor_slot": 33, + "prerequisites": [] + }, + "core_index": 3, + "authorizer_hash": "0x022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eef", + "auth_output": "0x0102030405", + "segment_root_lookup": [], + "results": [ + { + "service_id": 16909060, + "code_hash": "0x70a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532e", + "payload_hash": "0xfa99b97e72fcfaef616108de981a59dc3310e2a9f5e73cd44d702ecaaccd8696", + "accumulate_gas": 42, + "result": { + "ok": "0xaabbcc" + } + }, + { + "service_id": 84281096, + "code_hash": "0xfcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae6", + "payload_hash": "0xd55e07438aeeeb0d6509ab28af8a758d1fb70424db6b27c7e1ef6473e721c328", + "accumulate_gas": 33, + "result": { + "panic": null + } + } + ] + }, + "slot": 42, + "signatures": [ + { + "validator_index": 0, + "signature": "0x5f6e74d204c2490e71be4451963d7d7da797d4fd37d6e0bda56927d02a3302ca3b3a0e08c961e7580e97a0f08c269f549728f52d9c7de3affe850a0371380012" + }, + { + "validator_index": 1, + "signature": "0x3a6813f7691895a444d72cad60e3d54d64266fbaf567d7a5816a6623edcdbafed304517e4de88a399ed4d3faa2fc86e38243acbf480a652a236c27e515939032" + } + ] + } + ], + "assurances": [ + { + "anchor": "0x0cffbf67aae50aeed3c6f8f0d9bf7d854ffd87cef8358cbbaa587a9e3bd1a776", + "bitfield": "0x01", + "validator_index": 0, + "signature": "0x2d8ec7b235be3b3cbe9be3d5ff36f082942102d64a0dc5953709a95cca55b58b1af297f534d464264be77477b547f3c596b947edbca33f6631f1aa188d25a38b" + }, + { + "anchor": "0x2398ce69c3585e1b1b574a5a7185a2a086350abd4606d15aace8b4610b494772", + "bitfield": "0x01", + "validator_index": 1, + "signature": "0xdda7a577f150ee83afedc9d3b50a4f00fcf21248e6f73097abcc4bb634f854aedc53769838d294b09c0184fb0e66f09bae8cc243f842a6cc401488591e9ffdb1" + } + ], + "disputes": { + "verdicts": [ + { + "target": "0xdd1b65c036547750d2f84ff4c6fac7de56944658530a62e81c6cc290087440d0", + "age": 3, + "votes": [ + { + "vote": true, + "index": 0, + "signature": "0xc072848f5bc77d85a09dc4e69f3420293891163406ec3a49ccf31a5ff8c063042a9c8c59e5f83d4d276ab4110af0ca85d7a713434694f8c6b391b122c303aadb" + }, + { + "vote": true, + "index": 1, + "signature": "0xcb021d8507925eb2d49040cc08cbcca0af197c5f3eb7aad639a82497a8d6046780da26d4cbc113b375c34298bc5be500eb088a33a099f86e428154c9f6724d8c" + }, + { + "vote": true, + "index": 2, + "signature": "0x28e928fc44c1bf90f9c68001e59d89e855f5db43a75b256d89e2008e2d472bf57e3f7743e52ebde917b12f51135f8918cfdcba29115cc4856a9dc984efe9fe5e" + }, + { + "vote": true, + "index": 3, + "signature": "0x4a7237797e717725fbc0f43a5bbc50b318db3e59f5f536776a189bf65c6508100eedbb2bae1e2ed123c2fb025ca8e8b7f306ced32b03fd98c1045aef4153a1ae" + }, + { + "vote": true, + "index": 4, + "signature": "0xc20960a26a917aa7376623c7612c50741ed3442172c62edce97c5c8c9ced29179d1d5cb8aa8fbb8d6f42d49761f85ec4705b054c76f82a9d31dc05fec139b510" + } + ] + }, + { + "target": "0x2bdbba473648c1414a534e2cd362571cfb340151d6bb268db379c5997b08dc61", + "age": 3, + "votes": [ + { + "vote": false, + "index": 0, + "signature": "0xcb0d510da863ab88970035c564818ed98b1a3243e2ea7de5f3f9b91e8379296746d96d19de9e4f536170c9fcea20bb325472d44b922a34ad7a27743631bfd024" + }, + { + "vote": false, + "index": 1, + "signature": "0x1a509d06dad9740f09a2c3fea342a172167708819b731c0df4df8a6b890def37b2d9a6c05e044d169e32dfbece42c74f2271fed95592f4c2b36aa23da8896882" + }, + { + "vote": false, + "index": 2, + "signature": "0x0fe8a4cd86dd6d4e1fa6c9ed4baa11cdd793f0af31b177d17337cd11e2e91a15c0a098cabd79911c2572896500ce82a98519c4f937e462feb80e01f182b0a8cb" + }, + { + "vote": false, + "index": 3, + "signature": "0xbac9cf0c23a6bca795a71cc4f7432e41eeab1e864176c2dd499c547e6c501e490fe0ad051e7c165b4264ae6c167ef85ebf1191d664f7f1c53fa53c6c798bc6cb" + }, + { + "vote": false, + "index": 4, + "signature": "0xb47e1f3145a2f4a6221f5072197cb87316d38e44bc8363272cac8b87397629bac5092bbae7c4738079cecc2b2468e23b281e5c833435ed5918c3b0aa15047236" + } + ] + } + ], + "culprits": [ + { + "target": "0x99841f584606ab31badcdf38e8122874a699e0cb3989d8ddc7c0874b8f5f76bf", + "key": "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29", + "signature": "0x99841f584606ab31badcdf38e8122874a699e0cb3989d8ddc7c0874b8f5f76bfc87c17f29dfbde33cfe599f3fb71d0fc211140801080ec105fbf435a977f784a" + }, + { + "target": "0xd0e1f11843bda78bec027cd2046488ec6c54bbbfa8170442c988768eb006a16a", + "key": "0x22351e22105a19aabb42589162ad7f1ea0df1c25cebf0e4a9fcd261301274862", + "signature": "0xd0e1f11843bda78bec027cd2046488ec6c54bbbfa8170442c988768eb006a16ad1d7e7fd185aebad9fd4ddbd0a8707eeb17bf9e70509aaf7b176da7a72e2e54a" + } + ], + "faults": [ + { + "target": "0x536fd52c4f4b1330e67d49717974435bf1c18edd91b69d343186a784844415bc", + "vote": false, + "key": "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29", + "signature": "0x557e5ee3660be9247c4908c74a46c91eebd713925dd7f2ede3ef4900ba277039f7d46ec15432116176cce8ce39d8ae21eabafdf71796eeb724ee7e4ff1dd1fd7" + } + ] + } +} diff --git a/tests/integration/vectors/codec/guarantees_extrinsic.bin b/tests/integration/vectors/codec/guarantees_extrinsic.bin new file mode 100644 index 0000000000000000000000000000000000000000..a139dc412b5255cbc5587d0a8c66c56a082199a5 GIT binary patch literal 573 zcmV-D0>b?PFh*_);jmraQb~s-b@smM!)W~hOIkD&&a*8zauhOzDgXcgdhs9Hrx(MR z;v*p#LbMZ-@s0Gm#Oe=B`8=lrl))NW=2AI3N$*{-Ps@<=|ny zj=v$NMF7B7OkNG(lqHGZLqn|@R@!EHazNsu^49nfYfwjaiH7!;c39tHZ=;;QwgF2} z8EqrHEc^O#r&%1Qaa3~MD@cO+@KMa{=CBAbuG1P*RNxCBx$PkU0000300J&v7F@`^SY!kxe_Yn} zqY-zt$x-VEYkVZIt0=FE zb&Vgl1SH#QC&%IMWOL^s!zdvD000000006i00002003WZbkYRENe*$oL{XMKeSN2w z)crTs;Ju}3C(tT00?Io&4hYF%=U5Jxpzw?)pH!D9^(~xzVB^(IWF~LA^=H?mfof(W?ajLW(*#j|P3Vd_p48L&qWp&AfmU*CM8GSDpC!g1g6j0X8!!r;uWi zw3Tk+ULW)y-bib_6mtH`0`8KP&*!R1JUG{`@ISFpTHt}}0VS0MlV*PKbMTrL_9CWH zi-CcGab4@RT3<+6{QmsuU~SlAtTOOu&_ zP#AeGRZjTs#bkVLL3wc4YF43N|375de&}Ckv%^D3Pcvsvz`si>60br(&I{dqJZ{H^ zH-&fB@m4n3T2A8racz-mPQ2lrXt^oMZ_fYRb2ioU)eC0FB+&+jtNSKfPMmYVR)i%l z#qgldZgFj^w*}hsW@JwAmbYB?Pu^~VH~&?$k9Iw4Jky#Uo{*UFqA$Ud4A literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/header_0.json b/tests/integration/vectors/codec/header_0.json new file mode 100644 index 00000000..68e570f3 --- /dev/null +++ b/tests/integration/vectors/codec/header_0.json @@ -0,0 +1,25 @@ +{ + "parent": "0x5c743dbc514284b2ea57798787c5a155ef9d7ac1e9499ec65910a7a3d65897b7", + "parent_state_root": "0x2591ebd047489f1006361a4254731466a946174af02fe1d86681d254cfd4a00b", + "extrinsic_hash": "0x74a9e79d2618e0ce8720ff61811b10e045c02224a09299f04e404a9656e85c81", + "slot": 42, + "epoch_mark": { + "entropy": "0xae85d6635e9ae539d0846b911ec86a27fe000f619b78bcac8a74b77e36f6dbcf", + "tickets_entropy": "0x333a7e328f0c4183f4b947e1d8f68aa4034f762e5ecdb5a7f6fbf0afea2fd8cd", + "validators": [ + "0x5e465beb01dbafe160ce8216047f2155dd0569f058afd52dcea601025a8d161d", + "0x3d5e5a51aab2b048f8686ecd79712a80e3265a114cc73f14bdb2a59233fb66d0", + "0xaa2b95f7572875b0d0f186552ae745ba8222fc0b5bd456554bfe51c68938f8bc", + "0x7f6190116d118d643a98878e294ccf62b509e214299931aad8ff9764181a4e33", + "0x48e5fcdce10e0b64ec4eebd0d9211c7bac2f27ce54bca6f7776ff6fee86ab3e3", + "0xf16e5352840afb47e206b5c89f560f2611835855cf2e6ebad1acc9520a72591d" + ] + }, + "tickets_mark": null, + "offenders_mark": [ + "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29" + ], + "author_index": 3, + "entropy_source": "0xae85d6635e9ae539d0846b911ec86a27fe000f619b78bcac8a74b77e36f6dbcf49a52360f74a0233cea0775356ab0512fafff0683df08fae3cb848122e296cbc50fed22418ea55f19e55b3c75eb8b0ec71dcae0d79823d39920bf8d6a2256c5f", + "seal": "0x31dc5b1e9423eccff9bccd6549eae8034162158000d5be9339919cc03d14046e6431c14cbb172b3aed702b9e9869904b1f39a6fe1f3e904b0fd536f13e8cac496682e1c81898e88e604904fa7c3e496f9a8771ef1102cc29d567c4aad283f7b0" +} diff --git a/tests/integration/vectors/codec/header_1.bin b/tests/integration/vectors/codec/header_1.bin new file mode 100644 index 0000000000000000000000000000000000000000..e388b3a637badf9ca69ae1e1df16ef966ccc6dd7 GIT binary patch literal 693 zcmV;m0!sZ{bUnOLLWHvFS9ynr#i3R2oqECPNuI`85T~QoSeLgYk?YV$NS_b}HX1@y za};K&Mi)x(FX7l`fznjZ)SwG=spp+07~sx_Apc>38xY_{z#=4|l9}*MKuVTY=v;v+ z000000gNTUW5zMS)Xf406`M4b-nU`Q1%3t@FXc&n$+L7!djKya>Rep>Rx#>3cbOtA zrBx*hg^_h1(bb*wtLteEX669{WO=XX;-8mv8Xi0=S;80GXV{`&eBmqc{=aKVTP8*V zsH8chs%{u)ENW6u>n)<|&aH0`u!3g?uJ^Iket8aV08haM5i&kYJA%&;?BSvIxJiAz z+1>*#Y-xtoa|6Q@WC7L6dRMKl{Ad9iM(hIri>lM{Q;=x(Lbk6g{H&%q*=_v>Fi z1^kJZ7@(7_oP#PII*Id7QeIWKe^UVc?g>7B)ymG2x9gul)9!Ips=WA1d3tWL=~1o` z?UEb;tMrDQC57jA{{7Z{s0eQn|QpeigdSrHul@kNu?uT_eugY&Y*WwR;vXP`v34~J@AjNJh(^_E-7rh zQ2x>+80uB=o>jBQUbwLAaonyAd4fGTk_-6Oq9tr!G2B}olq2lV`Mk|#N$ThWL1Gnv z0M)*eIgy;eJro3PWHG@^yB8}u?Qkoem}!tpA33J}A3l&v57jpDK8&nMW`g0!7?|je bU`Yh}d_GBUnul@k5dzF9)n~-2(u4P~oV!#p literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/header_1.json b/tests/integration/vectors/codec/header_1.json new file mode 100644 index 00000000..6d261728 --- /dev/null +++ b/tests/integration/vectors/codec/header_1.json @@ -0,0 +1,61 @@ +{ + "parent": "0x5c743dbc514284b2ea57798787c5a155ef9d7ac1e9499ec65910a7a3d65897b7", + "parent_state_root": "0x2591ebd047489f1006361a4254731466a946174af02fe1d86681d254cfd4a00b", + "extrinsic_hash": "0x74a9e79d2618e0ce8720ff61811b10e045c02224a09299f04e404a9656e85c81", + "slot": 42, + "epoch_mark": null, + "tickets_mark": [ + { + "id": "0x8c25c063c631c0d4cd0206159b3495deb761cc057e06192fe5497dc9b3744c7b", + "attempt": 0 + }, + { + "id": "0x2f24ea5c5cfc5631ea3b7799222ca555250b8591751fd1d59df4abeb690d66e6", + "attempt": 1 + }, + { + "id": "0x036479afe8e29f97741a1e3c2b59c217dc67d8a25f7ce12bf1febf6b4a5b2646", + "attempt": 2 + }, + { + "id": "0xa8a439a4aa6e18682c6a524feb2da2ebcead6f0fb0826707aef7b1d57e790e6e", + "attempt": 0 + }, + { + "id": "0x4fc10511323e4b3b82cf10ece1a1f6b8497dbdd9de032e6c6986d57303c31364", + "attempt": 1 + }, + { + "id": "0xd5ca7a57adaffc68011b46ec02ff8baad3f1539068f642b6af2cfcaca639d96e", + "attempt": 2 + }, + { + "id": "0x3ec31eb46e471951d21febf6a2842b8482b2ea40a61b37c4cbd4f136ef31d24f", + "attempt": 0 + }, + { + "id": "0xb5a35c5c1473de918f517142bacb78a968fcdd65fb5e935b2cfaf52c840cc3ad", + "attempt": 1 + }, + { + "id": "0x3559f53a0ad2e4462b2d1805ac28a665e2181fdc27e5acc6561fd6e713e7d498", + "attempt": 2 + }, + { + "id": "0x5ed4423732dbeb794c7a05fc899718a093ad9c832a1d3a89f34f525e55b87f53", + "attempt": 0 + }, + { + "id": "0xfdee093e7fd5cace92b7eb9f41d3ee7154aabcf84b797a6eb2e951ae11ed921c", + "attempt": 1 + }, + { + "id": "0xabf4869d2585e777feb713a7fd79ea49dbea2ca3eeb5e081c63ece4d6208c68c", + "attempt": 2 + } + ], + "offenders_mark": [], + "author_index": 3, + "entropy_source": "0xae85d6635e9ae539d0846b911ec86a27fe000f619b78bcac8a74b77e36f6dbcf49a52360f74a0233cea0775356ab0512fafff0683df08fae3cb848122e296cbc50fed22418ea55f19e55b3c75eb8b0ec71dcae0d79823d39920bf8d6a2256c5f", + "seal": "0x31dc5b1e9423eccff9bccd6549eae8034162158000d5be9339919cc03d14046e6431c14cbb172b3aed702b9e9869904b1f39a6fe1f3e904b0fd536f13e8cac496682e1c81898e88e604904fa7c3e496f9a8771ef1102cc29d567c4aad283f7b0" +} diff --git a/tests/integration/vectors/codec/preimages_extrinsic.bin b/tests/integration/vectors/codec/preimages_extrinsic.bin new file mode 100644 index 0000000000000000000000000000000000000000..e16ebfbe51396c63c5c51e15c6dfd63a9a1049fc GIT binary patch literal 64 zcmZQ(VP;|!XylAbRC>H;?ld_DMz8u4#;hR0OW}KJCoheD941@D>#%IG6B|g-;x=ne RjX~~}1psNg7D)gA literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/preimages_extrinsic.json b/tests/integration/vectors/codec/preimages_extrinsic.json new file mode 100644 index 00000000..a97be290 --- /dev/null +++ b/tests/integration/vectors/codec/preimages_extrinsic.json @@ -0,0 +1,14 @@ +[ + { + "requester": 16909060, + "blob": "0x81095e6122e3bc9d961e00014a7fc833" + }, + { + "requester": 16909061, + "blob": "0xd257bc7d93a55be3561d720d40a6a342" + }, + { + "requester": 16909062, + "blob": "0x38db056c7c3065fadb630ce6ccbc7385" + } +] diff --git a/tests/integration/vectors/codec/refine_context.bin b/tests/integration/vectors/codec/refine_context.bin new file mode 100644 index 0000000000000000000000000000000000000000..51962c1914c66784ee213fe0b57c76e75437d2cc GIT binary patch literal 133 zcmV;00DAwxR!m+E;FKka-$O&K8CKe6d2&GFqVm@G5o=IKc8P}emUdX*VsE3IzqSEO zP#J9_ye#|rai>`vr*Twr-783wDc)mUOS_Cm&CI*OC|*dvox0OyuSBv1G(MT$qL}kw nbsDv@Q8pjH)2&+$gz!*P<7 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 a1*sjo57f|OQ3%!lo<%4A`euQ0A-8WOB$#mk literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/tickets_extrinsic.json b/tests/integration/vectors/codec/tickets_extrinsic.json new file mode 100644 index 00000000..93c64d3f --- /dev/null +++ b/tests/integration/vectors/codec/tickets_extrinsic.json @@ -0,0 +1,14 @@ +[ + { + "attempt": 0, + "signature": "0x8c25c063c631c0d4cd0206159b3495deb761cc057e06192fe5497dc9b3744c7b9e975801b14185ebe44f91704eb45f652ed1913c35bd733813a32bca7f7d02bec508724e0bc643989f015d7f4bc483fb6c10f01a8279ab75067316fd3463bcc215f1b0dc85250b15bc42aa7473561204bd8aae566d506e2b0cfd7adbc44ca17d94226eb0cfc09c2180acd27d184f272af2bd2d9c57fb54b134eebccecab7dec04483bb191cf889a5e2852ade92ada839cdad17b7dc9525ecb2e134c5dc415743f8f564c386a7c4d7bca8bc6a5dc125308fbb274c44f5bbe911d9ce5c670044e3343986cf66900c198bb377b53a607a0b23ac9caac9ef751a7850488854381bc2ad3cdec73e3be1cc7d014cf92b4ef289b1bfa15124e147b3c4d902c89bf1195d15452e4bde9599392a3099b783dca00dcfb6540d2eda3c05cbf5415608105e60181da8f9d7729c3cc22228a2f1dbd562ee6400c0aa74d17cab13f7014febebecaed9c3a079cbaa92fc71443635d4149ca39e89c7d157e238f856a0701a664e1ff99a7b8b0a18fb9733d1e9255bff6a5345896d0696c2094e24f8b5eeb7538a96edf09830291df328d633d098ee2e4ad1b037590390c393c7ec85f0308b198f5a7f0d0d171ba7d1623f2c7c4131f8fd76ce67c1fe363d029099d454e316e842785f6bac40e7bba10217e3f457755c0fd35251a99ea180df1c7a6ba824166243109de8bb00b2aeb7436d15ebd2d1fbf40d389158903a1d95344a0492909bce4719ae43c4c8623ad733a9621e87b8f737b8ee1af9fb4180eccb9716804afaf59393113d3b10a359b65ff7b9ead5cb36bc576ad8c58a5c8750403971347f9a27c7022b8c56f754f7d5b353cce72b12fc9f317307d6a2999daf1de765f56bcf6859792fc208a1458902a7255c3ea59c172238236dc5e7e10b1b96d657c2d5f0c13afa9c8ff7288c6349ede216e8069a26b1d4254e0ac4c783f54922976b8430464a4f7bec582750820276cda6deac10dece627b1def68f02160bcc98add96b4198e279eafdc5f4fc54f074e2011ddb4faa336960cd3cf4bbcbbe7015632fb800298d8484e05430bf95773da1d76bef380a1f4" + }, + { + "attempt": 1, + "signature": "0x2f24ea5c5cfc5631ea3b7799222ca555250b8591751fd1d59df4abeb690d66e634aceeaf381ac13f60ee9dcd6c4645385b029b8776d7c0d8edddba0f039e3e7efca4d9c13fe75b27834585d9ac0e8f427efa5ed25d13d9f42a34c834ec1a5c2f07076e2677a80977884012425bfe958b306e2deb61b677bd4e4952df117fab2a3d2bdf4be8e7bae62f1415dd86adeb8bfa5bcf7a329ed19cb770750c1ee3901502ac3d44882f3cb85c78dd1164cdf48f9742ed80dc644c4a6117e95b90b4403f2cbcb44856c7aeae36aa64ee19c671350a1fffa4c0eead5863430c72d9681d80a66a95e083051eabe71518efb861c9a2316d949b177b8d415855625996c2322183506053ed443a24107e8826f2f30f1d0196df96edf78718a587f89e5aa52ca187a7e04ed51433fb030af5633510042de1e904ec2478743c58d3535151b430452e82e77608d6ee7f56a1a1446b4fa6d89aa979a90422233a05b82564695ff4b6361d920a22c441c6f0505fa260a71b7e1f278711f27ebd9c00b4885a671021d0d75bc9a9c95ceb73cadb1c301f1da2111a86a5f87a8a7d5153ebbc98bf3a83ef65e5d7aedec99927bc5138dacbc75e8391f91537417ee7f8d72869df185a333d081423f4222c114a04727e0de4169b0e32f3b85b9cdab701208a2b39c7fb0892e09b01186f76ea73bd927fcef68886433ca15f4c968581d50fabed92a7dd7f005fb99c5d5fafbacd763c2c401dbbd3e89eee769ff41ed06b771675070242405e5ac7bae5f547b7e64ee82aca2e32977453da4c5651038e51420c33dfeb24f8a6ea1271de70e1dc8100dbf0df3d71cb30915cb8937cc31caa7cfc0ed5bca03de30ab2e67e55feffcc0c8db7e98414ef85896b9b881958527a9f2d0cc68b02795f4131c3812b1393ce9f6f0617d1aec9a3cd51be4bddb7a75cc8bc710197e618407fe4a1b8908dac4b8031d22e8f7591304c8641daf97abcbc55e81de7b935b94ef074fcb19808e7c3fa0ce827f70a3feb301da33af34fb9a4ad21acc7dcabcabe06f9fba188eeb9e30badc43fda3030fb8f888a41a8822c7fa32ff8fe0dd2abfc7d6323ebcdd0092d5f82c5d94e6ea296" + }, + { + "attempt": 2, + "signature": "0x036479afe8e29f97741a1e3c2b59c217dc67d8a25f7ce12bf1febf6b4a5b2646fd81cdf0a75e20fc0de981f48471527728b0c4d151fbdd9b32e6c6b3c6cd71db9b51d1cca8eef4a128d63f542bdb129c6edca628e1276d8376347bd2071d949b7ec5d1bfc18ebc61753a5f24544d1ae75b6f6f35a5707fc99e787b86cb5a17138069f5bac8d16e08b20781b8841ff928a49ec7bf09f5f39159cb44370a5ce16b93b2d4325445bfd641f2ef750e1971690a4f11e815d418a4dca01f8d039f4543a59665dcea27a24dbb1fddca0a2e90b4e3292dfc7a5cee69c1e707cd491742f3d3015d9499b07bbf6ddc2342e48522c149089311cf6ccc9bf957b509e52df550f06e70f4f601c01c1326e0ce7e7ce2547fcc16509b8bdb1577b15adb042f1e393c01bc010ba3460119ab738e58e39297278315b0825b8b798835a7a0b133a0d890a24018f0797c3ba43d62dcda03320215c5734bc1b10e8bef5003aefb5513ce9cd1964db23b1a143c4da8142676e254f00f84cfc15fa1a3bab78536f5f9e2cbce7560be876142a8655b8c1fdf0ffab7e187ace3c37ed2c6dfc4590e658ad2efc8cdec6140452493e2693e682946d1c99a62cca529f46a6e9874ef72955e4d855881e35ef53fd95e307f9ebf94542860711bdd288ab13d8dec1fecd82fc9a2eb97e67ae38ec859034473972157b819b3215e359bf17952b95aaa2932f09e2a8c8e0fea82de9c6c2612766ed50702667520fbd5089c0cc300e9d32893799cf73520f5a925bdfb791a419e80e118d2ba69031566da30c06f5e83e74f4eae8a886018a4c1269a97217851bcb4bb945dbf1309d1d2e59d78474f5e52702536761eed0d9fd01e46261b61dca3fc85a0b4bdfa315edb0972fed80399909eef35ed10cda0e1a66680eedcf15b400d404dadf77cda5641412c20a465cea4411820ee491678821eef8dca745a2ffd8a787837d22b486342499ad84a51d4093655947185bfe72018c16b8fe622ab58c7d965e8dac3b1d5c9cedfb27f562d077ab85e1293496d69f6bafd8468855b50255788b430ed6e6ef8c0fde28651b005a91dbb0fd4d0635108d5ff9e4527fefa66817221b76f" + } +] diff --git a/tests/integration/vectors/codec/work_item.bin b/tests/integration/vectors/codec/work_item.bin new file mode 100644 index 0000000000000000000000000000000000000000..8c8b57ada7b4a2100a08586552b113a614e39eb7 GIT binary patch literal 236 zcmZQ!W@0Q@%AwgR*PqqX@Kb|r9pBW~HEe6y{0wCdPh{V$I4@X_m63^=g;k3I0$?<= zn~>S^*P3_!AH1uf^Y9)Y-?fQ<8eYmVspr4=Uh$!0;SL6d=cj{Hl@1=dd`lA5QSvk(Nt!JCnzi63W gQGfezYrC-f}E>^`Uw=dpk8uFI+GT{f|r*v-7RXvXJ+ zQmL(*0?p+2UtSx{*YY9o%$sK$I1JWZmI@Aez^$Ii&PvYg^AYtAEily`uj1;nsFx_sgrEyXfnF{NM1y zWX;DaL7*BI1`c*M)<1t*Yga4gu6O*xd5BT1wI$EjWZnH&r+)a(y8rrC@vmph!0_+| zc@qd=G?QH{_p6HF5|OQHMzh0&nuiIbb`fi90SM4?Uc|+>7wFWQCi*hBP8g>Q%kH8gI literal 0 HcmV?d00001 diff --git a/tests/integration/vectors/codec/work_package.json b/tests/integration/vectors/codec/work_package.json new file mode 100644 index 00000000..303f40bc --- /dev/null +++ b/tests/integration/vectors/codec/work_package.json @@ -0,0 +1,82 @@ +{ + "authorization": "0x0102030405", + "auth_code_host": 305419896, + "authorizer": { + "code_hash": "0x022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eef", + "params": "0x00010203040506070809" + }, + "context": { + "anchor": "0xc0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986", + "state_root": "0xf6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b48", + "beefy_root": "0x9329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f3", + "lookup_anchor": "0x60751ab5b251361fbfd3ad5b0e84f051ccece6b00830aed31a5354e00b20b9ed", + "lookup_anchor_slot": 33, + "prerequisites": [] + }, + "items": [ + { + "service": 16909060, + "code_hash": "0x70a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532e", + "payload": "0x0102030405", + "refine_gas_limit": 42, + "accumulate_gas_limit": 42, + "import_segments": [ + { + "tree_root": "0x461236a7eb29dcffc1dd282ce1de0e0ed691fc80e91e02276fe8f778f088a1b8", + "index": 0 + }, + { + "tree_root": "0xe7cb536522c1c1b41fff8021055b774e929530941ea12c10f1213c56455f29ad", + "index": 1 + }, + { + "tree_root": "0xb0a487a4adf6a0eda5d69ddd2f8b241cf44204f0ff793e993e5e553b7862a1dc", + "index": 2 + } + ], + "extrinsic": [ + { + "hash": "0x381a0e351c5593018bbc87dd6694695caa1c0c1ddb24e70995da878d89495bf1", + "len": 16 + }, + { + "hash": "0x6c437d85cd8327f42a35d427ede1b5871347d3aae7442f2df1ff80f834acf17a", + "len": 17 + } + ], + "export_count": 4 + }, + { + "service": 84281096, + "code_hash": "0xfcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae6", + "payload": "0x030201", + "refine_gas_limit": 77, + "accumulate_gas_limit": 77, + "import_segments": [ + { + "tree_root": "0x3e5d0bea78537414bd1cfdaeb0f22d743bcaba5dbffacbabce8457f4cd78f69b", + "index": 0 + }, + { + "tree_root": "0xb7f8dffa65971832ec9e19719debc04b1ccd9ad27187a4943807ca756962481b", + "index": 1 + } + ], + "extrinsic": [ + { + "hash": "0x80b628780612e8928705018d1ced53b2f76607ad026a86e4f36c99ac0491f8eb", + "len": 32 + }, + { + "hash": "0x47f142b4488bbd34e59afc60a0daedc6020e8be52a3cedecbd75e93ee9908adf", + "len": 33 + }, + { + "hash": "0xcc2f47030ff8a9fe8d02e8eb87e86d4db05b57258d30f9d81acb3b280d04e877", + "len": 34 + } + ], + "export_count": 7 + } + ] +} diff --git a/tests/integration/vectors/codec/work_report.bin b/tests/integration/vectors/codec/work_report.bin new file mode 100644 index 0000000000000000000000000000000000000000..b96155938060721b51aa78f2f1d3fb480b4f0c92 GIT binary patch literal 435 zcmV;k0ZjfdMs5n>uwC9#NrxnL_P*-FX#D|8S~L^Rvn@Ds6f%S=0001b@gLf!7sHt1 zBOw?JLo&moFK|rb$WYwE^S22L>? z!;uHGA)Zq%`kA?Ya{T)5VPOc~m>OB!GZ5mb_2)d)O>i#Ctj&g&DgXcg0000000XMK z%m@bt1^oPleXAjDuR-()!T~0Qgl)Lbr=G9&YLyGR}4P^