From 001ae30a59b24d21f11a446f279481439920cc89 Mon Sep 17 00:00:00 2001 From: Sammy Rosso <15244892+saolyn@users.noreply.github.com> Date: Wed, 2 Nov 2022 00:31:32 +0100 Subject: [PATCH] EIP-4881: Add merkle tree interface (#11597) * Add merkle tree interface * Run gazelle Co-authored-by: Nishant Das --- .../cache/depositsnapshot/BUILD.bazel | 8 ++++++++ .../cache/depositsnapshot/merkle_tree.go | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 beacon-chain/cache/depositsnapshot/BUILD.bazel create mode 100644 beacon-chain/cache/depositsnapshot/merkle_tree.go diff --git a/beacon-chain/cache/depositsnapshot/BUILD.bazel b/beacon-chain/cache/depositsnapshot/BUILD.bazel new file mode 100644 index 0000000000..e3fde87dd9 --- /dev/null +++ b/beacon-chain/cache/depositsnapshot/BUILD.bazel @@ -0,0 +1,8 @@ +load("@prysm//tools/go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["merkle_tree.go"], + importpath = "github.com/prysmaticlabs/prysm/v3/beacon-chain/cache/depositsnapshot", + visibility = ["//visibility:public"], +) diff --git a/beacon-chain/cache/depositsnapshot/merkle_tree.go b/beacon-chain/cache/depositsnapshot/merkle_tree.go new file mode 100644 index 0000000000..5d2efa5b7d --- /dev/null +++ b/beacon-chain/cache/depositsnapshot/merkle_tree.go @@ -0,0 +1,19 @@ +package depositsnapshot + +const ( + DepositContractDepth = 32 // Maximum tree depth as defined by EIP-4881. +) + +// MerkleTreeNode is the interface for a Merkle tree. +type MerkleTreeNode interface { + // GetRoot returns the root of the Merkle tree. + GetRoot() [32]byte + // IsFull returns whether there is space left for deposits. + IsFull() bool + // Finalize marks deposits of the Merkle tree as finalized. + Finalize(deposits uint, depth uint) MerkleTreeNode + // GetFinalized returns a list of hashes of all the finalized nodes and the number of deposits. + GetFinalized(result [][32]byte) ([][32]byte, uint) + // PushLeaf adds a new leaf node at the next available Zero node. + PushLeaf(leaf [32]byte, deposits uint, depth uint) MerkleTreeNode +}