From 81da3d9c58285b98bc929ed1e6a5cc41a4c17de5 Mon Sep 17 00:00:00 2001 From: Lei Date: Tue, 28 Oct 2025 10:47:57 -0700 Subject: [PATCH 1/2] fix block number bug in balanceAt --- .changeset/slick-pianos-warn.md | 5 +++++ core/capabilities/fakes/evm_chain.go | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 .changeset/slick-pianos-warn.md diff --git a/.changeset/slick-pianos-warn.md b/.changeset/slick-pianos-warn.md new file mode 100644 index 00000000000..d02f9dd2ae0 --- /dev/null +++ b/.changeset/slick-pianos-warn.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#bugfix fix block number nil issue in fake evm diff --git a/core/capabilities/fakes/evm_chain.go b/core/capabilities/fakes/evm_chain.go index be18a41da75..81dc0ea1983 100644 --- a/core/capabilities/fakes/evm_chain.go +++ b/core/capabilities/fakes/evm_chain.go @@ -302,10 +302,15 @@ func (fc *FakeEVMChain) BalanceAt(ctx context.Context, metadata commonCap.Reques // Prepare balance at request address := common.Address(input.Account) - blockNumber := new(big.Int).SetBytes(input.BlockNumber.AbsVal) + + // Convert proto big-int to *big.Int; nil ⇒ latest (handled by geth toBlockNumArg) + var blockArg *big.Int + if input != nil { + blockArg = pb.NewIntFromBigInt(input.BlockNumber) // returns nil if input.BlockNumber is nil + } // Get balance at block number - balance, err := fc.gethClient.BalanceAt(ctx, address, blockNumber) + balance, err := fc.gethClient.BalanceAt(ctx, address, blockArg) if err != nil { return nil, err } From c0ac9fb417536ce707ce39acfb8a8bf6866e1e3f Mon Sep 17 00:00:00 2001 From: Lei Date: Tue, 28 Oct 2025 11:25:04 -0700 Subject: [PATCH 2/2] fix lint --- core/capabilities/fakes/evm_chain.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/capabilities/fakes/evm_chain.go b/core/capabilities/fakes/evm_chain.go index 81dc0ea1983..a0acd9aa56f 100644 --- a/core/capabilities/fakes/evm_chain.go +++ b/core/capabilities/fakes/evm_chain.go @@ -3,6 +3,7 @@ package fakes import ( "context" "crypto/ecdsa" + "errors" "fmt" "math/big" "strings" @@ -300,14 +301,15 @@ func (fc *FakeEVMChain) FilterLogs(ctx context.Context, metadata commonCap.Reque func (fc *FakeEVMChain) BalanceAt(ctx context.Context, metadata commonCap.RequestMetadata, input *evmcappb.BalanceAtRequest) (*commonCap.ResponseAndMetadata[*evmcappb.BalanceAtReply], error) { fc.eng.Infow("EVM Chain BalanceAt Started", "input", input) + if input == nil { + return nil, errors.New("BalanceAtRequest is nil") + } + // Prepare balance at request address := common.Address(input.Account) // Convert proto big-int to *big.Int; nil ⇒ latest (handled by geth toBlockNumArg) - var blockArg *big.Int - if input != nil { - blockArg = pb.NewIntFromBigInt(input.BlockNumber) // returns nil if input.BlockNumber is nil - } + blockArg := pb.NewIntFromBigInt(input.BlockNumber) // Get balance at block number balance, err := fc.gethClient.BalanceAt(ctx, address, blockArg)