Skip to content

Commit

Permalink
wip: fixing panic
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickhuie19 committed Jul 1, 2024
1 parent b5ecbbb commit b02cb32
Show file tree
Hide file tree
Showing 16 changed files with 51 additions and 37 deletions.
2 changes: 0 additions & 2 deletions core/scripts/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,6 @@ require (
github.com/mtibben/percent v0.2.1 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9 // indirect
github.com/naoina/go-stringutil v0.1.0 // indirect
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
Expand Down
4 changes: 0 additions & 4 deletions core/scripts/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -949,10 +949,6 @@ github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ib
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks=
github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 h1:NHrXEjTNQY7P0Zfx1aMrNhpgxHmow66XQtm0aQLY0AE=
Expand Down
2 changes: 1 addition & 1 deletion core/services/chainlink/relayer_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"errors"
"fmt"

"github.com/naoina/toml"
"github.com/pelletier/go-toml/v2"

"github.com/smartcontractkit/chainlink-common/pkg/loop"
"github.com/smartcontractkit/chainlink-common/pkg/loop/adapters/relay"
Expand Down
4 changes: 2 additions & 2 deletions core/services/ocr2/delegate.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"strconv"
"time"

nullv4 "gopkg.in/guregu/null.v4"
"gopkg.in/guregu/null.v4"

chainselectors "github.com/smartcontractkit/chain-selectors"
cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccip"
Expand Down Expand Up @@ -526,7 +526,7 @@ func GetEVMEffectiveTransmitterID(ctx context.Context, jb *job.Job, chain legacy
if len(sendingKeys) > 1 && spec.PluginType != types.OCR2VRF {
return "", errors.New("only ocr2 vrf should have more than 1 sending key")
}
spec.TransmitterID = nullv4.StringFrom(sendingKeys[0])
spec.TransmitterID = null.StringFrom(sendingKeys[0])
}

// effectiveTransmitterID is the transmitter address registered on the ocr contract. This is by default the EOA account on the node.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
)

func TestCommitStore(t *testing.T) {
for _, versionStr := range []string{ccipdata.V1_0_0, ccipdata.V1_2_0} {
for _, versionStr := range []string{ccipdata.V1_0_0, ccipdata.V1_2_0, ccipdata.V1_5_0} {
lggr := logger.TestLogger(t)
addr := cciptypes.Address(utils.RandomAddress().String())
lp := mocks2.NewLogPoller(t)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package v1_2_0
import (
"context"
"fmt"
"log"
"math/big"
"time"

Expand Down Expand Up @@ -177,6 +178,9 @@ func (o *OffRamp) ChangeConfig(ctx context.Context, onchainConfigBytes []byte, o
PermissionLessExecutionThresholdSeconds: time.Second * time.Duration(onchainConfigParsed.PermissionLessExecutionThresholdSeconds),
Router: cciptypes.Address(onchainConfigParsed.Router.String()),
}

logger := log.Default()
logger.Printf("ALPACA NewDAGasPriceEstimator call: %v", time.Now())
priceEstimator := prices.NewDAGasPriceEstimator(o.Estimator, o.DestMaxGasPrice, 0, 0)

o.UpdateDynamicConfig(onchainConfig, offchainConfig, priceEstimator)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package v1_5_0

import (
"context"
"log"
"math/big"
"time"

Expand Down Expand Up @@ -162,6 +163,9 @@ func (o *OffRamp) ChangeConfig(ctx context.Context, onchainConfigBytes []byte, o
PermissionLessExecutionThresholdSeconds: time.Second * time.Duration(onchainConfigParsed.PermissionLessExecutionThresholdSeconds),
Router: cciptypes.Address(onchainConfigParsed.Router.String()),
}

logger := log.Default()
logger.Printf("ALPACA NewDAGasPriceEstimator call: %v", time.Now())
priceEstimator := prices.NewDAGasPriceEstimator(o.Estimator, o.DestMaxGasPrice, 0, 0)

o.UpdateDynamicConfig(onchainConfig, offchainConfig, priceEstimator)
Expand Down
5 changes: 5 additions & 0 deletions core/services/ocr2/plugins/ccip/prices/da_price_estimator.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package prices
import (
"context"
"fmt"
"log"
"math/big"
"time"

cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccip"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/gas"
Expand All @@ -27,6 +29,8 @@ func NewDAGasPriceEstimator(
deviationPPB int64,
daDeviationPPB int64,
) DAGasPriceEstimator {
logger := log.Default()
logger.Printf("ALPACA NewDAGasPriceEstimator call: %v", time.Now().String())
return DAGasPriceEstimator{
execEstimator: NewExecGasPriceEstimator(estimator, maxGasPrice, deviationPPB),
l1Oracle: estimator.L1Oracle(),
Expand All @@ -36,6 +40,7 @@ func NewDAGasPriceEstimator(
}

func (g DAGasPriceEstimator) GetGasPrice(ctx context.Context) (*big.Int, error) {
// TODO execEstimator here is nil
execGasPrice, err := g.execEstimator.GetGasPrice(ctx)
if err != nil {
return nil, err
Expand Down
37 changes: 31 additions & 6 deletions core/services/relay/evm/ccip.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package evm
import (
"context"
"fmt"
"log"
"math/big"
"time"

Expand All @@ -26,21 +27,41 @@ var _ cciptypes.CommitStoreReader = (*IncompleteDestCommitStoreReader)(nil)
// IncompleteSourceCommitStoreReader is an implementation of CommitStoreReader with the only valid methods being
// GasPriceEstimator, ChangeConfig, and OffchainConfig
type IncompleteSourceCommitStoreReader struct {
logger logger.Logger

Check failure on line 30 in core/services/relay/evm/ccip.go

View workflow job for this annotation

GitHub Actions / lint

field `logger` is unused (unused)
estimator gas.EvmFeeEstimator
gasPriceEstimator prices.DAGasPriceEstimator
sourceMaxGasPrice *big.Int
execGasPriceDeviationPPB int64
daGasPriceDeviationPPB int64
offchainConfig cciptypes.CommitOffchainConfig
cs cciptypes.CommitStoreReader
}

func NewIncompleteSourceCommitStoreReader(gasEstimator gas.EvmFeeEstimator, sourceMaxGasPrice *big.Int) *IncompleteSourceCommitStoreReader {
// NewIncompleteSourceCommitStoreReader currently accepts an lp, but this is slightly misleading - there's no use
// for the source log poller wrt to the commit store contract that lives on the destination chain. The factory
// NewCommitStoreReader currently mixes the concerns of initialization and registering filters, so a nil lp will not
// suffice at the moment.
func NewIncompleteSourceCommitStoreReader(ctx context.Context, logger logger.Logger, estimator gas.EvmFeeEstimator, sourceMaxGasPrice *big.Int, lp logpoller.LogPoller) (*IncompleteSourceCommitStoreReader, error) {
cs, err := ccip.NewCommitStoreReader(logger, ccip.NewEvmVersionFinder(), "", nil, lp)
if err != nil {
return nil, fmt.Errorf("failed to create commit store reader: %w", err)
}
err = cs.SetGasEstimator(ctx, estimator)
if err != nil {
return nil, fmt.Errorf("failed to set gas estimator: %w", err)
}
err = cs.SetSourceMaxGasPrice(ctx, sourceMaxGasPrice)
if err != nil {
return nil, fmt.Errorf("failed to set source max gas price: %w", err)
}

return &IncompleteSourceCommitStoreReader{
estimator: gasEstimator,
cs: cs,
estimator: estimator,
sourceMaxGasPrice: sourceMaxGasPrice,
execGasPriceDeviationPPB: 0, // This value must be updated with a ChangeConfig call
daGasPriceDeviationPPB: 0, // This value must be updated with a ChangeConfig call
}
}, nil
}

func (i IncompleteSourceCommitStoreReader) ChangeConfig(ctx context.Context, onchainConfig []byte, offchainConfig []byte) (cciptypes.Address, error) {
Expand All @@ -54,6 +75,8 @@ func (i IncompleteSourceCommitStoreReader) ChangeConfig(ctx context.Context, onc
return "", err
}

logger := log.Default()
logger.Printf("ALPACA ChangeConfig call: %v", time.Now())
i.gasPriceEstimator = prices.NewDAGasPriceEstimator(

Check failure on line 80 in core/services/relay/evm/ccip.go

View workflow job for this annotation

GitHub Actions / lint

modifies-value-receiver: suspicious assignment to a by-value method receiver (revive)
i.estimator,
i.sourceMaxGasPrice,
Expand All @@ -69,6 +92,8 @@ func (i IncompleteSourceCommitStoreReader) ChangeConfig(ctx context.Context, onc
offchainConfigParsed.PriceReportingDisabled,
)

i.cs.ChangeConfig(ctx, onchainConfig, offchainConfig)

Check failure on line 95 in core/services/relay/evm/ccip.go

View workflow job for this annotation

GitHub Actions / lint

Error return value of `i.cs.ChangeConfig` is not checked (errcheck)

return cciptypes.Address(onchainConfigParsed.PriceRegistry.String()), nil
}

Expand All @@ -84,7 +109,7 @@ func (i IncompleteSourceCommitStoreReader) EncodeCommitReport(ctx context.Contex
// with deviationPPB values hardcoded to 0 when this implementation is first constructed.
// When ChangeConfig is called, another call to this method must be made to fetch a GasPriceEstimator with updated values
func (i IncompleteSourceCommitStoreReader) GasPriceEstimator(ctx context.Context) (cciptypes.GasPriceEstimatorCommit, error) {
return i.gasPriceEstimator, nil
return i.cs.GasPriceEstimator(ctx)
}

func (i IncompleteSourceCommitStoreReader) GetAcceptedCommitReportsGteTimestamp(ctx context.Context, ts time.Time, confirmations int) ([]cciptypes.CommitStoreReportWithTxMeta, error) {
Expand Down Expand Up @@ -120,7 +145,7 @@ func (i IncompleteSourceCommitStoreReader) IsDown(ctx context.Context) (bool, er
}

func (i IncompleteSourceCommitStoreReader) OffchainConfig(ctx context.Context) (cciptypes.CommitOffchainConfig, error) {
return i.offchainConfig, nil
return i.cs.OffchainConfig(ctx)
}

func (i IncompleteSourceCommitStoreReader) VerifyExecutionReport(ctx context.Context, report cciptypes.ExecReport) (bool, error) {
Expand All @@ -131,7 +156,7 @@ func (i IncompleteSourceCommitStoreReader) Close() error {
return fmt.Errorf("invalid usage of IncompleteSourceCommitStoreReader")
}

// [IncompleteDestCommitStoreReader] is an implementation of CommitStoreReader with all valid methods except
// IncompleteDestCommitStoreReader is an implementation of CommitStoreReader with all valid methods except
// GasPriceEstimator, ChangeConfig, and OffchainConfig.
type IncompleteDestCommitStoreReader struct {
cs cciptypes.CommitStoreReader
Expand Down
6 changes: 3 additions & 3 deletions core/services/relay/evm/commit_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ func NewSrcCommitProvider(
startBlock uint64,
client client.Client,
lp logpoller.LogPoller,
srcEstimator gas.EvmFeeEstimator,
estimator gas.EvmFeeEstimator,
maxGasPrice *big.Int,
) commontypes.CCIPCommitProvider {
return &SrcCommitProvider{
lggr: lggr,
startBlock: startBlock,
client: client,
lp: lp,
estimator: srcEstimator,
estimator: estimator,
maxGasPrice: maxGasPrice,
}
}
Expand Down Expand Up @@ -187,7 +187,7 @@ func (P DstCommitProvider) NewPriceGetter(ctx context.Context) (priceGetter ccip
}

func (P SrcCommitProvider) NewCommitStoreReader(ctx context.Context, commitStoreAddress cciptypes.Address) (commitStoreReader cciptypes.CommitStoreReader, err error) {
commitStoreReader = NewIncompleteSourceCommitStoreReader(P.estimator, P.maxGasPrice)
commitStoreReader, err = NewIncompleteSourceCommitStoreReader(ctx, P.lggr, P.estimator, P.maxGasPrice, P.lp)
return
}

Expand Down
2 changes: 0 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ require (
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/mapstructure v1.5.0
github.com/mr-tron/base58 v1.2.0
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
github.com/olekukonko/tablewriter v0.0.5
github.com/onsi/gomega v1.30.0
github.com/patrickmn/go-cache v2.1.0+incompatible
Expand Down Expand Up @@ -281,7 +280,6 @@ require (
github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect
github.com/mtibben/percent v0.2.1 // indirect
github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9 // indirect
github.com/naoina/go-stringutil v0.1.0 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
Expand Down
4 changes: 0 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -915,10 +915,6 @@ github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjW
github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks=
github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 h1:NHrXEjTNQY7P0Zfx1aMrNhpgxHmow66XQtm0aQLY0AE=
Expand Down
2 changes: 0 additions & 2 deletions integration-tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -346,8 +346,6 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9 // indirect
github.com/naoina/go-stringutil v0.1.0 // indirect
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
Expand Down
4 changes: 0 additions & 4 deletions integration-tests/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1211,10 +1211,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks=
github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 h1:NHrXEjTNQY7P0Zfx1aMrNhpgxHmow66XQtm0aQLY0AE=
Expand Down
2 changes: 0 additions & 2 deletions integration-tests/load/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,6 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9 // indirect
github.com/naoina/go-stringutil v0.1.0 // indirect
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
Expand Down
4 changes: 0 additions & 4 deletions integration-tests/load/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1201,10 +1201,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks=
github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0=
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 h1:NHrXEjTNQY7P0Zfx1aMrNhpgxHmow66XQtm0aQLY0AE=
Expand Down

0 comments on commit b02cb32

Please sign in to comment.