NethermindEth / juno

Starknet client implementation.
https://juno.nethermind.io
Apache License 2.0
371 stars 157 forks source link

Implement SnapSync for Juno #1828

Open stranger80 opened 2 months ago

stranger80 commented 2 months ago

Tasks:

asdacap commented 1 month ago
type ContractRangeStreamingResult struct {
    ContractsRoot *felt.Felt
    ClassesRoot   *felt.Felt
    Range         []*spec.ContractState
    RangeProof    *spec.PatriciaRangeProof
}

type StorageRangeRequest struct {
    StateRoot     *felt.Felt
    ChunkPerProof uint64 // Missing in spec
    Queries       []*spec.StorageRangeQuery
}

type StorageRangeStreamingResult struct {
    ContractsRoot *felt.Felt
    ClassesRoot   *felt.Felt
    Range         []*spec.ContractStoredValue
    RangeProof    *spec.PatriciaRangeProof
}

type ClassRangeStreamingResult struct {
    ContractsRoot *felt.Felt
    ClassesRoot   *felt.Felt
    Range         []*spec.Class
    RangeProof    *spec.PatriciaRangeProof
}

type SnapServer interface {
    GetContractRange(request *spec.ContractRangeRequest) (chan *ContractRangeStreamingResult, error)
    GetStorageRange(request *StorageRangeRequest) (chan *StorageRangeStreamingResult, error)
    GetClassRange(request *spec.ClassRangeRequest) (chan *ClassRangeStreamingResult, error)
}
asdacap commented 1 month ago

PR on missed data https://github.com/starknet-io/starknet-p2p-specs/pull/32/files

asdacap commented 2 weeks ago

Changed the snap server interface.

type ContractRangeStreamingResult struct {
    ContractsRoot *felt.Felt
    ClassesRoot   *felt.Felt
    Range         []*spec.ContractState
    RangeProof    *spec.PatriciaRangeProof
}

type StorageRangeRequest struct {
    StateRoot     *felt.Felt
    ChunkPerProof uint64 // Missing in spec
    Queries       []*spec.StorageRangeQuery
}

type StorageRangeStreamingResult struct {
    ContractsRoot *felt.Felt
    ClassesRoot   *felt.Felt
    Range         []*spec.ContractStoredValue
    RangeProof    *spec.PatriciaRangeProof
}

type ClassRangeStreamingResult struct {
    ContractsRoot *felt.Felt
    ClassesRoot   *felt.Felt
    Range         *spec.Classes
    RangeProof    *spec.PatriciaRangeProof
}

type SnapServer interface {
    GetContractRange(ctx context.Context, request *spec.ContractRangeRequest) iter.Seq2[*ContractRangeStreamingResult, error]
    GetStorageRange(ctx context.Context, request *StorageRangeRequest) iter.Seq2[*StorageRangeStreamingResult, error]
    GetClassRange(ctx context.Context, request *spec.ClassRangeRequest) iter.Seq2[*ClassRangeStreamingResult, error]
    GetClasses(ctx context.Context, classHashes []*felt.Felt) ([]*spec.Class, error)
}