Skip to content

Commit

Permalink
Merge branch 'ccip-develop' into offchain-usdc
Browse files Browse the repository at this point in the history
# Conflicts:
#	core/services/ocr2/plugins/ccip/execution_plugin.go
#	core/services/ocr2/plugins/ccip/execution_reporting_plugin.go
#	core/services/ocr2/plugins/ccip/execution_reporting_plugin_test.go
#	core/services/ocr2/plugins/ccip/internal/ccipevents/client_mock.go
  • Loading branch information
RensR committed Sep 13, 2023
2 parents bb5b50e + db3b88e commit f738579
Show file tree
Hide file tree
Showing 33 changed files with 88 additions and 81 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ MacOSX*
cache
core/services/ocr2/plugins/ccip/transactions.rlp
lcov.info
!core/services/ocr2/plugins/ccip/cache/
!core/services/ocr2/plugins/ccip/internal/cache/


core/scripts/ccip/json/credentials
Expand Down
13 changes: 8 additions & 5 deletions core/services/ocr2/plugins/ccip/commit_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/pkg/errors"
chainselectors "github.com/smartcontractkit/chain-selectors"
relaylogger "github.com/smartcontractkit/chainlink-relay/pkg/logger"

libocr2 "github.com/smartcontractkit/libocr/offchainreporting2plus"

relaylogger "github.com/smartcontractkit/chainlink-relay/pkg/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/oraclelib"

"github.com/smartcontractkit/chainlink/v2/core/chains/evm"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/txmgr"
Expand All @@ -21,9 +26,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
ccipconfig "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/promwrapper"
"github.com/smartcontractkit/chainlink/v2/core/services/pg"
"github.com/smartcontractkit/chainlink/v2/core/services/pipeline"
Expand Down Expand Up @@ -92,7 +95,7 @@ func NewCommitServices(lggr logger.Logger, jb job.Job, chainSet evm.LegacyChainC
return nil, err
}

leafHasher := hasher.NewLeafHasher(staticConfig.SourceChainSelector, staticConfig.ChainSelector, onRamp.Address(), hasher.NewKeccakCtx())
leafHasher := hashlib.NewLeafHasher(staticConfig.SourceChainSelector, staticConfig.ChainSelector, onRamp.Address(), hashlib.NewKeccakCtx())
// Note that lggr already has the jobName and contractID (commit store)
commitLggr := lggr.Named("CCIPCommit").With(
"sourceChain", ChainName(int64(chainId)),
Expand Down Expand Up @@ -136,7 +139,7 @@ func NewCommitServices(lggr logger.Logger, jb job.Job, chainSet evm.LegacyChainC
"sourceRouter", sourceRouter.Address())
// If this is a brand-new job, then we make use of the start blocks. If not then we're rebooting and log poller will pick up where we left off.
if new {
return []job.ServiceCtx{NewBackfilledOracle(
return []job.ServiceCtx{oraclelib.NewBackfilledOracle(
commitLggr,
sourceChain.LogPoller(),
destChain.LogPoller(),
Expand Down
13 changes: 7 additions & 6 deletions core/services/ocr2/plugins/ccip/commit_reporting_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
ccipconfig "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/merklemulti"

"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/merklemulti"
"github.com/smartcontractkit/chainlink/v2/core/services/pg"
)

Expand Down Expand Up @@ -64,7 +65,7 @@ type CommitPluginConfig struct {
sourceNative common.Address
sourceFeeEstimator gas.EvmFeeEstimator
sourceClient, destClient evmclient.Client
leafHasher hasher.LeafHasherInterface[[32]byte]
leafHasher hashlib.LeafHasherInterface[[32]byte]
checkFinalityTags bool
}

Expand Down Expand Up @@ -678,7 +679,7 @@ func (r *CommitReportingPlugin) buildReport(ctx context.Context, lggr logger.Log
return commit_store.CommitStoreCommitReport{}, fmt.Errorf("tried building a tree without leaves")
}

tree, err := merklemulti.NewTree(hasher.NewKeccakCtx(), leaves)
tree, err := merklemulti.NewTree(hashlib.NewKeccakCtx(), leaves)
if err != nil {
return commit_store.CommitStoreCommitReport{}, err
}
Expand Down
15 changes: 7 additions & 8 deletions core/services/ocr2/plugins/ccip/commit_reporting_plugin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,11 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
ccipconfig "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/merklemulti"

"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/merklemulti"
plugintesthelpers "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/testhelpers/plugins"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
"github.com/smartcontractkit/chainlink/v2/core/utils"
Expand Down Expand Up @@ -85,7 +84,7 @@ func setupCommitTestHarness(t *testing.T) commitTestHarness {
sourceChainSelector: th.Source.ChainSelector,
destClient: backendClient,
sourceClient: backendClient,
leafHasher: hasher.NewLeafHasher(th.Source.ChainSelector, th.Dest.ChainSelector, th.Source.OnRamp.Address(), hasher.NewKeccakCtx()),
leafHasher: hashlib.NewLeafHasher(th.Source.ChainSelector, th.Dest.ChainSelector, th.Source.OnRamp.Address(), hashlib.NewKeccakCtx()),
},
inflightReports: newInflightCommitReportsContainer(time.Hour),
onchainConfig: th.CommitOnchainConfig,
Expand Down Expand Up @@ -142,7 +141,7 @@ func TestCommitReportEncoding(t *testing.T) {
newGasPrice := big.NewInt(2000e9) // $2000 per eth * 1gwei

// Send a report.
mctx := hasher.NewKeccakCtx()
mctx := hashlib.NewKeccakCtx()
tree, err := merklemulti.NewTree(mctx, [][32]byte{mctx.Hash([]byte{0xaa})})
require.NoError(t, err)
report := commit_store.CommitStoreCommitReport{
Expand Down Expand Up @@ -1096,7 +1095,7 @@ func TestShouldAcceptFinalizedReport(t *testing.T) {
}

func TestCommitReportToEthTxMeta(t *testing.T) {
mctx := hasher.NewKeccakCtx()
mctx := hashlib.NewKeccakCtx()
tree, err := merklemulti.NewTree(mctx, [][32]byte{mctx.Hash([]byte{0xaa})})
require.NoError(t, err)

Expand Down
10 changes: 5 additions & 5 deletions core/services/ocr2/plugins/ccip/execution_batch_building.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/merklemulti"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/merklemulti"
"github.com/smartcontractkit/chainlink/v2/core/services/pg"
)

func getProofData(
ctx context.Context,
lggr logger.Logger,
hashLeaf hasher.LeafHasherInterface[[32]byte],
hashLeaf hashlib.LeafHasherInterface[[32]byte],
onRampAddress common.Address,
sourceEventsClient ccipevents.Client,
interval commit_store.CommitStoreInterval,
Expand All @@ -41,7 +41,7 @@ func getProofData(
if err != nil {
return nil, nil, nil, err
}
tree, err = merklemulti.NewTree(hasher.NewKeccakCtx(), leaves)
tree, err = merklemulti.NewTree(hashlib.NewKeccakCtx(), leaves)
if err != nil {
return nil, nil, nil, err
}
Expand Down
9 changes: 5 additions & 4 deletions core/services/ocr2/plugins/ccip/execution_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import (
libocr2 "github.com/smartcontractkit/libocr/offchainreporting2plus"

relaylogger "github.com/smartcontractkit/chainlink-relay/pkg/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/oraclelib"

"github.com/smartcontractkit/chainlink/v2/core/chains/evm"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
Expand All @@ -26,9 +29,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
ccipconfig "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/observability"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/offchaintokendata"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/offchaintokendata/usdc"
Expand Down Expand Up @@ -137,7 +138,7 @@ func NewExecutionServices(lggr logger.Logger, jb job.Job, chainSet evm.LegacyCha
destClient: destChain.Client(),
sourceClient: sourceChain.Client(),
destGasEstimator: destChain.GasEstimator(),
leafHasher: hasher.NewLeafHasher(offRampConfig.SourceChainSelector, offRampConfig.ChainSelector, onRamp.Address(), hasher.NewKeccakCtx()),
leafHasher: hashlib.NewLeafHasher(offRampConfig.SourceChainSelector, offRampConfig.ChainSelector, onRamp.Address(), hashlib.NewKeccakCtx()),
tokenDataProviders: tokenDataProviders,
})

Expand All @@ -162,7 +163,7 @@ func NewExecutionServices(lggr logger.Logger, jb job.Job, chainSet evm.LegacyCha
// If this is a brand-new job, then we make use of the start blocks. If not then we're rebooting and log poller will pick up where we left off.
if new {
return []job.ServiceCtx{
NewBackfilledOracle(
oraclelib.NewBackfilledOracle(
execLggr,
sourceChain.LogPoller(),
destChain.LogPoller(),
Expand Down
8 changes: 4 additions & 4 deletions core/services/ocr2/plugins/ccip/execution_reporting_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
ccipconfig "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/observability"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/offchaintokendata"
"github.com/smartcontractkit/chainlink/v2/core/services/pg"
Expand Down Expand Up @@ -66,7 +66,7 @@ type ExecutionPluginConfig struct {
destClient evmclient.Client
sourceClient evmclient.Client
destGasEstimator gas.EvmFeeEstimator
leafHasher hasher.LeafHasherInterface[[32]byte]
leafHasher hashlib.LeafHasherInterface[[32]byte]
tokenDataProviders map[common.Address]offchaintokendata.Provider
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ import (
mock_contracts "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/mocks"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/ccipevents"
ccipconfig "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/ccipevents"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/offchaintokendata"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/testhelpers"
plugintesthelpers "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/testhelpers/plugins"
Expand All @@ -40,7 +41,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
)

Expand Down Expand Up @@ -94,7 +94,7 @@ func setupExecTestHarness(t *testing.T) execTestHarness {
destClient: th.DestClient,
sourceClient: th.SourceClient,
sourceWrappedNativeToken: th.Source.WrappedNative.Address(),
leafHasher: hasher.NewLeafHasher(th.Source.ChainSelector, th.Dest.ChainSelector, th.Source.OnRamp.Address(), hasher.NewKeccakCtx()),
leafHasher: hashlib.NewLeafHasher(th.Source.ChainSelector, th.Dest.ChainSelector, th.Source.OnRamp.Address(), hashlib.NewKeccakCtx()),
destGasEstimator: destFeeEstimator,
tokenDataProviders: tokenDataProviders,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package hasher
package hashlib

import (
"bytes"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package hasher
package hashlib

import (
"testing"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package hasher
package hashlib

import (
"math/big"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
package hasher_test
package hashlib

import (
"encoding/hex"
"math/big"
"testing"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/stretchr/testify/require"

"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/testhelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
)

func TestHasher(t *testing.T) {
sourceChainSelector, destChainSelector := uint64(1), uint64(4)
onRampAddress := common.HexToAddress("0x5550000000000000000000000000000000000001")

hashingCtx := hasher.NewKeccakCtx()
hashingCtx := NewKeccakCtx()

hasher := hasher.NewLeafHasher(sourceChainSelector, destChainSelector, onRampAddress, hashingCtx)
hasher := NewLeafHasher(sourceChainSelector, destChainSelector, onRampAddress, hashingCtx)

message := evm_2_evm_onramp.InternalEVM2EVMMessage{
SourceChainSelector: sourceChainSelector,
Expand All @@ -37,7 +37,9 @@ func TestHasher(t *testing.T) {
MessageId: [32]byte{},
}

hash, err := hasher.HashLeaf(testhelpers.GenerateCCIPSendLog(t, message))
pack, err := abihelpers.MessageArgs.Pack(message)
require.NoError(t, err)
hash, err := hasher.HashLeaf(types.Log{Topics: []common.Hash{abihelpers.EventSignatures.SendRequested}, Data: pack})
require.NoError(t, err)

// NOTE: Must match spec
Expand All @@ -62,7 +64,9 @@ func TestHasher(t *testing.T) {
MessageId: [32]byte{},
}

hash, err = hasher.HashLeaf(testhelpers.GenerateCCIPSendLog(t, message))
pack, err = abihelpers.MessageArgs.Pack(message)
require.NoError(t, err)
hash, err = hasher.HashLeaf(types.Log{Topics: []common.Hash{abihelpers.EventSignatures.SendRequested}, Data: pack})
require.NoError(t, err)

// NOTE: Must match spec
Expand All @@ -72,7 +76,7 @@ func TestHasher(t *testing.T) {
func TestMetaDataHash(t *testing.T) {
sourceChainSelector, destChainSelector := uint64(1), uint64(4)
onRampAddress := common.HexToAddress("0x5550000000000000000000000000000000000001")
ctx := hasher.NewKeccakCtx()
hash := hasher.GetMetaDataHash(ctx, ctx.Hash([]byte("EVM2EVMSubscriptionMessagePlus")), sourceChainSelector, onRampAddress, destChainSelector)
ctx := NewKeccakCtx()
hash := GetMetaDataHash(ctx, ctx.Hash([]byte("EVM2EVMSubscriptionMessagePlus")), sourceChainSelector, onRampAddress, destChainSelector)
require.Equal(t, "e8b93c9d01a7a72ec6c7235e238701cf1511b267a31fdb78dd342649ee58c08d", hex.EncodeToString(hash[:]))
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ import (

"github.com/pkg/errors"

"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/hasher"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/hashlib"
)

type singleLayerProof[H hasher.Hash] struct {
type singleLayerProof[H hashlib.Hash] struct {
nextIndices []int
subProof []H
sourceFlags []bool
}

type Proof[H hasher.Hash] struct {
type Proof[H hashlib.Hash] struct {
Hashes []H `json:"hashes"`
SourceFlags []bool `json:"source_flags"`
}
Expand Down Expand Up @@ -44,7 +44,7 @@ func siblingIndex(idx int) int {
return idx ^ 1
}

func proveSingleLayer[H hasher.Hash](layer []H, indices []int) (singleLayerProof[H], error) {
func proveSingleLayer[H hashlib.Hash](layer []H, indices []int) (singleLayerProof[H], error) {
var (
authIndices []int
nextIndices []int
Expand Down Expand Up @@ -77,11 +77,11 @@ func proveSingleLayer[H hasher.Hash](layer []H, indices []int) (singleLayerProof
}, nil
}

type Tree[H hasher.Hash] struct {
type Tree[H hashlib.Hash] struct {
layers [][]H
}

func NewTree[H hasher.Hash](ctx hasher.Ctx[H], leafHashes []H) (*Tree[H], error) {
func NewTree[H hashlib.Hash](ctx hashlib.Ctx[H], leafHashes []H) (*Tree[H], error) {
if len(leafHashes) == 0 {
return nil, errors.New("Cannot construct a tree without leaves")
}
Expand Down Expand Up @@ -131,7 +131,7 @@ func (t *Tree[H]) Prove(indices []int) (Proof[H], error) {
return proof, nil
}

func computeNextLayer[H hasher.Hash](ctx hasher.Ctx[H], layer []H) ([]H, []H) {
func computeNextLayer[H hashlib.Hash](ctx hashlib.Ctx[H], layer []H) ([]H, []H) {
if len(layer) == 1 {
return layer, layer
}
Expand All @@ -145,7 +145,7 @@ func computeNextLayer[H hasher.Hash](ctx hasher.Ctx[H], layer []H) ([]H, []H) {
return layer, nextLayer
}

func VerifyComputeRoot[H hasher.Hash](ctx hasher.Ctx[H], leafHashes []H, proof Proof[H]) (H, error) {
func VerifyComputeRoot[H hashlib.Hash](ctx hashlib.Ctx[H], leafHashes []H, proof Proof[H]) (H, error) {
leavesLength := len(leafHashes)
proofsLength := len(proof.Hashes)
if leavesLength == 0 && proofsLength == 0 {
Expand Down
Loading

0 comments on commit f738579

Please sign in to comment.