diff --git a/cciplib/ccip/bindings/common/common.go b/cciplib/ccip/bindings/common/common.go index 9fc66e2d9..4fcb1a115 100644 --- a/cciplib/ccip/bindings/common/common.go +++ b/cciplib/ccip/bindings/common/common.go @@ -107,7 +107,11 @@ func (c CrossChainAddress) ToCell() (*cell.Cell, error) { return builder.EndCell(), nil } -func (c *CrossChainAddress) LoadFromCell(s *cell.Slice) error { +func (c *CrossChainAddress) LoadFromCell(cell *cell.Cell) error { + s, err := cell.BeginParse() + if err != nil { + return fmt.Errorf("failed to begin parsing cell: %w", err) + } if s.BitsLeft() < 8 { return errors.New("crosschain address is too short") } @@ -236,7 +240,7 @@ func unpackArrayWithRefChaining[T any](root *cell.Cell) ([]T, error) { break // move to next cell, do not decode this ref } var v T - if err := tlb.LoadFromCell(&v, ref.BeginParse()); err != nil { + if err := tlb.Parse(&v, ref); err != nil { return nil, fmt.Errorf("failed to decode element: %w", err) } result = append(result, v) @@ -357,7 +361,10 @@ func unpackArrayFromCell[T any](root *cell.Cell) ([]T, error) { return nil, fmt.Errorf("cell chain depth %d exceeds maximum of %d cells", cellCount, MaxCellChainDepth) } - s := curr.BeginParse() + s, err := curr.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parsing cell: %w", err) + } for s.BitsLeft() > 0 { var v T if err := tlb.LoadFromCell(&v, s); err != nil { @@ -372,7 +379,6 @@ func unpackArrayFromCell[T any](root *cell.Cell) ([]T, error) { } // Use slice's remaining refs (after element refs are consumed), not cell's original refs. // This correctly handles elements with ^ fields whose refs were consumed by tlb.LoadFromCell. - var err error curr, err = loadChainRef(s) if err != nil { return nil, err @@ -456,7 +462,10 @@ func unloadCellToByteArray(c *cell.Cell) ([]byte, error) { return nil, fmt.Errorf("cell chain depth %d exceeds maximum of %d cells", cellCount, MaxCellChainDepth) } - s := curr.BeginParse() + s, err := curr.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parsing cell: %w", err) + } for s.BitsLeft() > 0 { part, err := s.LoadSlice(s.BitsLeft()) if err != nil { @@ -472,7 +481,6 @@ func unloadCellToByteArray(c *cell.Cell) ([]byte, error) { result = append(result, part...) } - var err error curr, err = loadChainRef(s) if err != nil { return nil, err diff --git a/cciplib/ccip/bindings/common/common_test.go b/cciplib/ccip/bindings/common/common_test.go index 9df892635..a609008e1 100644 --- a/cciplib/ccip/bindings/common/common_test.go +++ b/cciplib/ccip/bindings/common/common_test.go @@ -57,7 +57,7 @@ func TestCrossChainAddress_LoadFromCell(t *testing.T) { c := builder.EndCell() var addr CrossChainAddress - err = addr.LoadFromCell(c.BeginParse()) + err = addr.LoadFromCell(c) if tt.expectErr { require.Error(t, err) @@ -76,7 +76,7 @@ func TestCrossChainAddress_RoundTrip_Empty(t *testing.T) { require.NoError(t, err) var restored CrossChainAddress - err = restored.LoadFromCell(c.BeginParse()) + err = restored.LoadFromCell(c) require.NoError(t, err) require.Empty(t, restored) } @@ -89,7 +89,7 @@ func TestCrossChainAddress_RoundTrip(t *testing.T) { require.Equal(t, uint(56), c.BitsSize(), "CrossChainAddress should be 56 bits (7 bytes)") var restored CrossChainAddress - err = restored.LoadFromCell(c.BeginParse()) + err = restored.LoadFromCell(c) require.NoError(t, err) require.Equal(t, original, restored) @@ -226,7 +226,7 @@ func TestPackAndUnpack2DByteArrayToCell(t *testing.T) { require.NoError(t, err, "ToCell should succeed - depth limits enforced during LoadFromCell") var output SnakeRef[SnakeBytes] - err = tlb.LoadFromCell(&output, c.BeginParse()) + err = tlb.Parse(&output, c) require.NoError(t, err) require.Len(t, tt.input, len(output), "array count mismatch") @@ -250,7 +250,7 @@ func TestPackAndUnpack2DByteArrayToCell_CellStructure(t *testing.T) { // Verify unpacking works correctly var output SnakeRef[SnakeBytes] - err = tlb.LoadFromCell(&output, c.BeginParse()) + err = tlb.Parse(&output, c) require.NoError(t, err) require.Len(t, arrays, len(output)) @@ -274,7 +274,7 @@ func TestPackAndUnpack2DByteArrayToCell_CellStructure(t *testing.T) { // Verify unpacking works correctly var output SnakeRef[SnakeBytes] - err = tlb.LoadFromCell(&output, c.BeginParse()) + err = tlb.Parse(&output, c) require.NoError(t, err) require.Len(t, arrays, len(output)) @@ -299,7 +299,7 @@ func TestPackAndUnpack2DByteArrayToCell_CellStructure(t *testing.T) { require.NoError(t, err) var output SnakeRef[SnakeBytes] - err = tlb.LoadFromCell(&output, c.BeginParse()) + err = tlb.Parse(&output, c) require.NoError(t, err) require.Equal(t, arrays, output) }) @@ -497,7 +497,7 @@ func TestLoadCrossChainAddressWithoutPrefix_Validation(t *testing.T) { builder := cell.BeginCell() addr := []byte{0x01, 0x02, 0x03, 0x04, 0x05} _ = builder.StoreSlice(addr, uint(len(addr))*8) - return builder.EndCell().BeginParse() + return builder.ToSlice() }, expectErr: "", }, @@ -505,7 +505,7 @@ func TestLoadCrossChainAddressWithoutPrefix_Validation(t *testing.T) { name: "empty address", setupFunc: func() *cell.Slice { builder := cell.BeginCell() - return builder.EndCell().BeginParse() + return builder.ToSlice() }, expectErr: "crosschain address is empty", }, @@ -515,7 +515,7 @@ func TestLoadCrossChainAddressWithoutPrefix_Validation(t *testing.T) { builder := cell.BeginCell() addr := make([]byte, 65) _ = builder.StoreSlice(addr, uint(len(addr))*8) - return builder.EndCell().BeginParse() + return builder.ToSlice() }, expectErr: "exceeds maximum of 64 bytes", }, diff --git a/cciplib/ccip/bindings/feequoter/reader.go b/cciplib/ccip/bindings/feequoter/reader.go index 3b4b64fd9..192814284 100644 --- a/cciplib/ccip/bindings/feequoter/reader.go +++ b/cciplib/ccip/bindings/feequoter/reader.go @@ -143,7 +143,7 @@ var GetDestinationChainGasPrice = tvm.Getter[uint64, USDPerUnitGas]{ if err != nil { return u, err } - err = tlb.LoadFromCell(&u, c.BeginParse()) + err = tlb.Parse(&u, c) return u, err }), } @@ -153,7 +153,7 @@ var GetTokenPrice = tvm.Getter[*address.Address, TimestampedPrice]{ Name: tokenPriceGetter, Encoder: tvm.NewArgsEncoder(func(addr *address.Address) ([]any, error) { // Encode address as a cell slice (as expected by the contract) - addrSlice := cell.BeginCell().MustStoreAddr(addr).EndCell().BeginParse() + addrSlice := cell.BeginCell().MustStoreAddr(addr).ToSlice() return []any{addrSlice}, nil }), Decoder: tvm.NewResultDecoder(func(r *ton.ExecutionResult) (TimestampedPrice, error) { diff --git a/cciplib/ccip/bindings/ocr/commitreport_test.go b/cciplib/ccip/bindings/ocr/commitreport_test.go index 20e6f94b5..97ce3f7c3 100644 --- a/cciplib/ccip/bindings/ocr/commitreport_test.go +++ b/cciplib/ccip/bindings/ocr/commitreport_test.go @@ -110,7 +110,7 @@ func TestCommitReport_EncodingAndDecoding(t *testing.T) { // Decode from cell var decoded CommitReport - err = tlb.LoadFromCell(&decoded, newCell.BeginParse()) + err = tlb.Parse(&decoded, newCell) require.NoError(t, err) require.Equal(t, c.Hash(), newCell.Hash()) require.Equal(t, commitReport, decoded) diff --git a/cciplib/ccip/bindings/ocr/executereport_test.go b/cciplib/ccip/bindings/ocr/executereport_test.go index a00f88d3e..f845385f3 100644 --- a/cciplib/ccip/bindings/ocr/executereport_test.go +++ b/cciplib/ccip/bindings/ocr/executereport_test.go @@ -65,7 +65,7 @@ func TestTokenAmounts(t *testing.T) { }) require.NoError(t, err) array := common.SnakeRef[Any2TVMTokenTransfer]{} - err = tlb.LoadFromCell(&array, tokenAmountsCell.BeginParse()) + err = tlb.Parse(&array, tokenAmountsCell) require.NoError(t, err) require.Len(t, array, 6) } @@ -133,7 +133,7 @@ func TestExecute_EncodingAndDecoding(t *testing.T) { // Decode from cell var decoded ExecuteReport - err = tlb.LoadFromCell(&decoded, newCell.BeginParse()) + err = tlb.Parse(&decoded, newCell) require.NoError(t, err) require.Equal(t, c.Hash(), newCell.Hash()) require.Len(t, decoded.Message.TokenAmounts, 3) diff --git a/cciplib/ccip/bindings/onramp/onramp_test.go b/cciplib/ccip/bindings/onramp/onramp_test.go index 84e2caae8..96ec196cb 100644 --- a/cciplib/ccip/bindings/onramp/onramp_test.go +++ b/cciplib/ccip/bindings/onramp/onramp_test.go @@ -63,7 +63,7 @@ func TestGenericExtraArgsV2_TLBEncodeDecode(t *testing.T) { require.NoError(t, err) var decoded GenericExtraArgsV2 - err = tlb.LoadFromCell(&decoded, c.BeginParse()) + err = tlb.Parse(&decoded, c) require.NoError(t, err) require.Equal(t, orig.GasLimit, decoded.GasLimit) require.Equal(t, orig.AllowOutOfOrderExecution, decoded.AllowOutOfOrderExecution) @@ -94,7 +94,7 @@ func TestSVMExtraArgsV1_ToCellAndLoadFromCell(t *testing.T) { require.NoError(t, err) var decoded SVMExtraArgsV1 - err = tlb.LoadFromCell(&decoded, cell.BeginParse()) + err = tlb.Parse(&decoded, cell) require.NoError(t, err) require.Equal(t, orig.ComputeUnits, decoded.ComputeUnits) require.Equal(t, orig.AccountIsWritableBitmap, decoded.AccountIsWritableBitmap) @@ -132,7 +132,7 @@ func TestSuiExtraArgsV1_ToCellAndLoadFromCell(t *testing.T) { require.NoError(t, err) var decoded SuiExtraArgsV1 - err = tlb.LoadFromCell(&decoded, cell.BeginParse()) + err = tlb.Parse(&decoded, cell) require.NoError(t, err) require.Equal(t, orig.GasLimit, decoded.GasLimit) require.Equal(t, orig.AllowOutOfOrderExecution, decoded.AllowOutOfOrderExecution) @@ -155,7 +155,7 @@ func TestOwnable2Step(t *testing.T) { cell, err := tlb.ToCell(orig) require.NoError(t, err) var decoded ownable2step.Storage - err = tlb.LoadFromCell(&decoded, cell.BeginParse()) + err = tlb.Parse(&decoded, cell) require.NoError(t, err) require.Equal(t, orig.Owner, decoded.Owner) require.Equal(t, orig.PendingOwner, decoded.PendingOwner) @@ -167,7 +167,7 @@ func TestOwnable2Step(t *testing.T) { } cell, err = tlb.ToCell(orig2) require.NoError(t, err) - err = tlb.LoadFromCell(&decoded, cell.BeginParse()) + err = tlb.Parse(&decoded, cell) require.NoError(t, err) require.Equal(t, orig2.Owner, decoded.Owner) require.Equal(t, orig2.PendingOwner, decoded.PendingOwner) @@ -196,7 +196,7 @@ func TestDestChainConfig(t *testing.T) { c, err := tlb.ToCell(dc) require.NoError(t, err) var decoded DestChainConfig - err = tlb.LoadFromCell(&decoded, c.BeginParse()) + err = tlb.Parse(&decoded, c) require.NoError(t, err) require.Equal(t, dc.Router, decoded.Router) require.Equal(t, dc.SequenceNumber, decoded.SequenceNumber) @@ -275,7 +275,7 @@ func TestStorage(t *testing.T) { c, err = tlb.ToCell(s) require.NoError(t, err) var decoded Storage - err = tlb.LoadFromCell(&decoded, c.BeginParse()) + err = tlb.Parse(&decoded, c) require.NoError(t, err) require.Equal(t, s.ID, decoded.ID) require.Equal(t, s.Ownable.Owner, decoded.Ownable.Owner) diff --git a/cciplib/ccip/codec/commitcodec.go b/cciplib/ccip/codec/commitcodec.go index 405a9c0c2..db373ef5f 100644 --- a/cciplib/ccip/codec/commitcodec.go +++ b/cciplib/ccip/codec/commitcodec.go @@ -122,7 +122,7 @@ func (cr *commitPluginCodecV1) Decode(ctx context.Context, bytes []byte) (ccipty } var report ocr.CommitReport - if err := tlb.LoadFromCell(&report, c.BeginParse()); err != nil { + if err := tlb.Parse(&report, c); err != nil { return cciptypes.CommitPluginReport{}, fmt.Errorf("cannot decode commit report from cell: %w", err) } diff --git a/cciplib/ccip/codec/executecodec.go b/cciplib/ccip/codec/executecodec.go index b330b0953..1299d6e1f 100644 --- a/cciplib/ccip/codec/executecodec.go +++ b/cciplib/ccip/codec/executecodec.go @@ -187,7 +187,7 @@ func (e *executePluginCodecV1) Decode(ctx context.Context, data []byte) (ccipocr // TON supports single chain only, decode single ExecuteReport (not array) var tonReport ocr.ExecuteReport - err = tlb.LoadFromCell(&tonReport, c.BeginParse()) + err = tlb.Parse(&tonReport, c) if err != nil { return ccipocr3.ExecutePluginReport{}, fmt.Errorf("unpack execute report: %w", err) } @@ -218,7 +218,7 @@ func (e *executePluginCodecV1) Decode(ctx context.Context, data []byte) (ccipocr var tokenAmounts []ccipocr3.RampTokenAmount for _, tokenAmount := range msg.TokenAmounts { var extraData common.SnakeBytes - err = tlb.LoadFromCell(&extraData, tokenAmount.ExtraData.BeginParse()) + err = tlb.Parse(&extraData, tokenAmount.ExtraData) if err != nil { return executeReport, fmt.Errorf("unpack extra data: %w", err) } diff --git a/cciplib/ccip/codec/executecodec_test.go b/cciplib/ccip/codec/executecodec_test.go index b8855839d..7f3161e54 100644 --- a/cciplib/ccip/codec/executecodec_test.go +++ b/cciplib/ccip/codec/executecodec_test.go @@ -223,7 +223,7 @@ func TestExecutePluginCodecV1_TON(t *testing.T) { c, err := cell.FromBOC(boc) require.NoError(t, err) var report ocr.ExecuteReport - err = tlb.LoadFromCell(&report, c.BeginParse()) + err = tlb.Parse(&report, c) require.NoError(t, err) return report } diff --git a/cciplib/ccip/codec/extradatacodec.go b/cciplib/ccip/codec/extradatacodec.go index e6ed98ba3..b73e75315 100644 --- a/cciplib/ccip/codec/extradatacodec.go +++ b/cciplib/ccip/codec/extradatacodec.go @@ -56,7 +56,11 @@ func (d extraDataDecoder) DecodeExtraArgsToMap(extraArgs ccipocr3.Bytes) (map[st return nil, fmt.Errorf("failed to decode BOC: %w", err) } - tag, err := c.BeginParse().LoadSlice(32) + s, err := c.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parsing cell: %w", err) + } + tag, err := s.LoadSlice(32) if err != nil { return nil, fmt.Errorf("failed to load tag from cell: %w", err) } @@ -68,7 +72,7 @@ func (d extraDataDecoder) DecodeExtraArgsToMap(extraArgs ccipocr3.Bytes) (map[st } argsPtr := reflect.New(argsType) - if err = tlb.LoadFromCell(argsPtr.Interface(), c.BeginParse()); err != nil { + if err = tlb.Parse(argsPtr.Interface(), c); err != nil { return nil, fmt.Errorf("failed to tlb load extra args from cell: %w", err) } diff --git a/cciplib/go.mod b/cciplib/go.mod index 409864019..ae4ce9670 100644 --- a/cciplib/go.mod +++ b/cciplib/go.mod @@ -10,12 +10,12 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-common v0.11.2-0.20260407150650-8115835abd6e github.com/stretchr/testify v1.11.1 - github.com/xssnick/tonutils-go v1.14.1 + github.com/xssnick/tonutils-go v1.18.0 golang.org/x/sync v0.22.0 ) require ( - filippo.io/edwards25519 v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect github.com/btcsuite/btcutil v1.0.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -42,9 +42,9 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect github.com/mr-tron/base58 v1.2.0 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/smartcontractkit/libocr v0.0.0-20250912173940-f3ab0246e23d // indirect github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect github.com/stretchr/objx v0.5.2 // indirect diff --git a/cciplib/go.sum b/cciplib/go.sum index 6adccae9e..a70359f2b 100644 --- a/cciplib/go.sum +++ b/cciplib/go.sum @@ -1,5 +1,5 @@ -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= @@ -99,6 +99,8 @@ github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjW github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -112,8 +114,6 @@ github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRo github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= github.com/smartcontractkit/chain-selectors v1.0.98 h1:fuI7CQ1o5cX64eO4/LvwtfhdpGFH5vnsM/bFHRwEiww= github.com/smartcontractkit/chain-selectors v1.0.98/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= github.com/smartcontractkit/chainlink-common v0.11.2-0.20260407150650-8115835abd6e h1:SLnJ0/55Rcn9/9OWrjhvhOTDW9+Bhd63v1tY4dvqtQM= @@ -141,8 +141,8 @@ github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhso github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= +github.com/xssnick/tonutils-go v1.18.0 h1:VDH614303RfPQxO4e/GcfrtWbL3WanpHIfxlWVd0Ea0= +github.com/xssnick/tonutils-go v1.18.0/go.mod h1:4z7dSfiufWiE2SnzgM0IYzlwpJ5UlHyPH45HP0QZNzQ= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= diff --git a/cciplib/ton/tlbe/biguint_test.go b/cciplib/ton/tlbe/biguint_test.go index 15c3d0aab..0d5398240 100644 --- a/cciplib/ton/tlbe/biguint_test.go +++ b/cciplib/ton/tlbe/biguint_test.go @@ -56,7 +56,7 @@ func TestUintWrappers_MaskSignBit(t *testing.T) { // Testing typed wrappers - should mask sign bit and interpret as unsigned var typed typedValues - err = tlb.LoadFromCell(&typed, c.BeginParse()) + err = tlb.Parse(&typed, c) require.NoError(t, err) require.NotNil(t, typed.Address.Value(), "address value is nil") @@ -67,7 +67,7 @@ func TestUintWrappers_MaskSignBit(t *testing.T) { // Testing legacy big.Int loading - should interpret as signed integers var legacy legacyValues - err = tlb.LoadFromCell(&legacy, c.BeginParse()) + err = tlb.Parse(&legacy, c) require.NoError(t, err) require.Equal(t, tc.legacyAddrNeg, legacy.Address.Sign() < 0, "address sign mismatch") @@ -89,7 +89,7 @@ func TestUintWrappers_RoundTrip(t *testing.T) { require.NoError(t, err) var decoded typedValues - err = tlb.LoadFromCell(&decoded, cellValue.BeginParse()) + err = tlb.Parse(&decoded, cellValue) require.NoError(t, err) require.NotNil(t, decoded.Address.Value(), "address value is nil after roundtrip") @@ -99,7 +99,7 @@ func TestUintWrappers_RoundTrip(t *testing.T) { require.Equal(t, new(big.Int).SetBytes(root), decoded.Root.Value(), "root mismatch after roundtrip") var legacy legacyValues - err = tlb.LoadFromCell(&legacy, cellValue.BeginParse()) + err = tlb.Parse(&legacy, cellValue) require.NoError(t, err) require.Negative(t, legacy.Address.Sign(), "legacy address expected negative sign") diff --git a/cciplib/ton/tlbe/cell.go b/cciplib/ton/tlbe/cell.go index 50793e1ad..7128ef038 100644 --- a/cciplib/ton/tlbe/cell.go +++ b/cciplib/ton/tlbe/cell.go @@ -52,7 +52,7 @@ func ManyCellsFrom[T any](values []T) ([]*Cell[T], error) { // a pointer to a value type, not a pointer to a pointer. func (c *Cell[T]) ToValue() (T, error) { var v T - err := tlb.LoadFromCell(&v, c.MustToCell().BeginParse()) + err := tlb.Parse(&v, c.MustToCell()) if err != nil { // Provide a hint if the error might be due to using a pointer type if reflect.TypeOf(v) != nil && reflect.TypeOf(v).Kind() == reflect.Pointer { diff --git a/cciplib/ton/tlbe/dictionary.go b/cciplib/ton/tlbe/dictionary.go index 29b1982b3..75cff102b 100644 --- a/cciplib/ton/tlbe/dictionary.go +++ b/cciplib/ton/tlbe/dictionary.go @@ -269,7 +269,11 @@ func (d Dict[K, V]) ToCell() (*cell.Cell, error) { return builder.EndCell(), nil } -func (d *Dict[K, V]) LoadFromCell(slice *cell.Slice) error { +func (d *Dict[K, V]) LoadFromCell(cell *cell.Cell) error { + slice, err := cell.BeginParse() + if err != nil { + return fmt.Errorf("failed to begin parsing cell: %w", err) + } if d == nil { return errors.New("invalid nil receiver") } diff --git a/cciplib/ton/tlbe/dictionary_test.go b/cciplib/ton/tlbe/dictionary_test.go index 21687cc67..9ce15547c 100644 --- a/cciplib/ton/tlbe/dictionary_test.go +++ b/cciplib/ton/tlbe/dictionary_test.go @@ -71,10 +71,10 @@ func TestDictCellRoundTrip(t *testing.T) { require.NoError(t, err) restored := Dict[uint16, testValue]{} - require.NoError(t, restored.LoadFromCell(encoded.BeginParse())) + require.NoError(t, restored.LoadFromCell(encoded)) require.Equal(t, dict.entries, restored.entries) - slice := encoded.BeginParse() + slice := encoded.MustBeginParse() tonDict, err := slice.LoadDict(16) require.NoError(t, err) @@ -96,10 +96,10 @@ func TestDictEmptyRoundTrip(t *testing.T) { require.NoError(t, err) var restored Dict[uint16, testValue] - require.NoError(t, restored.LoadFromCell(encoded.BeginParse())) + require.NoError(t, restored.LoadFromCell(encoded)) require.Equal(t, 0, restored.Len()) - slice := encoded.BeginParse() + slice := encoded.MustBeginParse() loadedDict, err := slice.LoadDict(16) require.NoError(t, err) require.True(t, loadedDict == nil || loadedDict.IsEmpty()) diff --git a/cciplib/ton/tvm/cell.go b/cciplib/ton/tvm/cell.go index 35fd09b55..30e68f955 100644 --- a/cciplib/ton/tvm/cell.go +++ b/cciplib/ton/tvm/cell.go @@ -18,7 +18,10 @@ func ExtractOpcode(body *cell.Cell) (uint32, error) { return 0, nil } - s := body.BeginParse() + s, err := body.BeginParse() + if err != nil { + return 0, fmt.Errorf("failed to begin parsing cell: %w", err) + } if s.BitsLeft() < BitLenOpcode { return 0, nil } diff --git a/cciplib/ton/tvm/wallet.go b/cciplib/ton/tvm/wallet.go index d14314ab0..73507806c 100644 --- a/cciplib/ton/tvm/wallet.go +++ b/cciplib/ton/tvm/wallet.go @@ -26,7 +26,7 @@ func NewRandomTestWallet(client ton.APIClientWrapped, version wallet.VersionConf if err != nil { return nil, fmt.Errorf("failed to generate random wallet: %w", err) } - pw, perr := wallet.FromPrivateKeyWithOptions(client, rw.PrivateKey(), version, option) + pw, perr := wallet.FromPrivateKeyWithOptions(rw.PrivateKey(), version, wallet.WithAPI(client), option) if perr != nil { return nil, fmt.Errorf("failed to generate random wallet: %w", perr) } @@ -84,7 +84,7 @@ func MyLocalTONWalletDefault(client ton.APIClientWrapped) (*wallet.Wallet, error if err != nil { return nil, fmt.Errorf("failed to create highload wallet: %w", err) } - mcFunderWallet, err := wallet.FromPrivateKeyWithOptions(client, rawHlWallet.PrivateKey(), walletVersion, wallet.WithWorkchain(int8(address.MasterchainID))) + mcFunderWallet, err := wallet.FromPrivateKeyWithOptions(rawHlWallet.PrivateKey(), walletVersion, wallet.WithAPI(client), wallet.WithWorkchain(int8(address.MasterchainID))) if err != nil { return nil, fmt.Errorf("failed to create highload wallet: %w", err) } @@ -127,7 +127,7 @@ func NewInitializedWallet(ctx context.Context, funder *wallet.Wallet, w *wallet. IHRDisabled: true, Bounce: false, DstAddr: w.WalletAddress(), - Amount: *amount.MustDiv(big.NewInt(2)), // Send some non-zero amount to self to trigger wallet initialization + Amount: amount.MustDiv(big.NewInt(2)), // Send some non-zero amount to self to trigger wallet initialization Body: nil, }, }) diff --git a/deployment/go.mod b/deployment/go.mod index 7c212853b..c0d809760 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -21,14 +21,14 @@ require ( github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260714130443-bb3cf7801e11 github.com/smartcontractkit/mcms v0.45.0 github.com/stretchr/testify v1.11.1 - github.com/xssnick/tonutils-go v1.14.1 + github.com/xssnick/tonutils-go v1.18.0 golang.org/x/sync v0.22.0 google.golang.org/grpc v1.81.0 ) require ( dario.cat/mergo v1.0.2 // indirect - filippo.io/edwards25519 v1.1.1 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect @@ -159,6 +159,7 @@ require ( github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.3.0 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect @@ -171,7 +172,6 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil/v4 v4.26.3 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260428085939-5c70de12dbfc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260121163256-85accaf3d28d // indirect diff --git a/deployment/go.sum b/deployment/go.sum index c808b5935..48cc7dc6a 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= @@ -560,8 +560,8 @@ github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf4 github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= @@ -618,8 +618,6 @@ github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUN github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/smartcontractkit/ccip-owner-contracts v0.1.0 h1:GiBDtlx7539o7AKlDV+9LsA7vTMPv+0n7ClhSFnZFAk= @@ -739,8 +737,8 @@ github.com/xdrpp/goxdr v0.1.1 h1:E1B2c6E8eYhOVyd7yEpOyopzTPirUeF6mVOfXfGyJyc= github.com/xdrpp/goxdr v0.1.1/go.mod h1:dXo1scL/l6s7iME1gxHWo2XCppbHEKZS7m/KyYWkNzA= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= +github.com/xssnick/tonutils-go v1.18.0 h1:VDH614303RfPQxO4e/GcfrtWbL3WanpHIfxlWVd0Ea0= +github.com/xssnick/tonutils-go v1.18.0/go.mod h1:4z7dSfiufWiE2SnzgM0IYzlwpJ5UlHyPH45HP0QZNzQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= diff --git a/deployment/pkg/ops/mcms/sequence.go b/deployment/pkg/ops/mcms/sequence.go index 4279f5ed9..80d878b1c 100644 --- a/deployment/pkg/ops/mcms/sequence.go +++ b/deployment/pkg/ops/mcms/sequence.go @@ -129,7 +129,11 @@ func RawPlanCellsToBatch(selector types.ChainSelector, plans []*tlbe.Cell[tlb.In } value := msg.Amount.Nano() - mcmsTxs[i], err = mcmston.NewTransaction(msg.DstAddr, body.BeginParse(), value, m.ContractType, m.ContractVersion, m.ContractTypeFull, m.Tags) + s, err := body.BeginParse() + if err != nil { + return types.BatchOperation{}, fmt.Errorf("failed to begin parse body for plan %d: %w", i, err) + } + mcmsTxs[i], err = mcmston.NewTransaction(msg.DstAddr, s, value, m.ContractType, m.ContractVersion, m.ContractTypeFull, m.Tags) if err != nil { return types.BatchOperation{}, fmt.Errorf("failed to create mcms transaction: %w", err) } diff --git a/deployment/testadapter/test_adapter.go b/deployment/testadapter/test_adapter.go index c4761ba14..62d2116c6 100644 --- a/deployment/testadapter/test_adapter.go +++ b/deployment/testadapter/test_adapter.go @@ -669,7 +669,12 @@ func waitForReceivedMsgFlatten(ctx context.Context, l logger.Logger, clientConn // Add this message to the queue for further processing messagesToProcess = append(messagesToProcess, outMsg) - opcode, err := outMsg.InternalMsg.Body.BeginParse().LoadUInt(32) + s, err := outMsg.InternalMsg.Body.BeginParse() + if err != nil { + l.Errorf("failed to begin parse: %v", err) + continue + } + opcode, err := s.LoadUInt(32) if err == nil && opcode == onramp.OpcodeOnRampExecutorFinishedSuccessfully { commitMessage = outMsg } @@ -681,7 +686,7 @@ func waitForReceivedMsgFlatten(ctx context.Context, l logger.Logger, clientConn } var event onramp.CCIPMessageSent - err := tlb.LoadFromCell(&event, commitMessage.OutgoingExternalMessages[0].Body.BeginParse()) + err := tlb.Parse(&event, commitMessage.OutgoingExternalMessages[0].Body) if err != nil { l.Errorf("failed to parse CCIPMessageSent from cell: %v", err) return onramp.CCIPMessageSent{}, err diff --git a/devenv/go.mod b/devenv/go.mod index a5639e93d..ce2315202 100644 --- a/devenv/go.mod +++ b/devenv/go.mod @@ -20,12 +20,12 @@ require ( github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.1 github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260710204427-f53ee44a1088 github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260513143859-5836cab366c3 - github.com/xssnick/tonutils-go v1.14.1 + github.com/xssnick/tonutils-go v1.18.0 ) require ( dario.cat/mergo v1.0.2 // indirect - filippo.io/edwards25519 v1.1.1 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect @@ -156,6 +156,7 @@ require ( github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.3.0 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect @@ -168,7 +169,6 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil/v4 v4.26.3 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260428085939-5c70de12dbfc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260121163256-85accaf3d28d // indirect diff --git a/devenv/go.sum b/devenv/go.sum index 97716b9cc..562d628fc 100644 --- a/devenv/go.sum +++ b/devenv/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= @@ -558,8 +558,8 @@ github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf4 github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= @@ -616,8 +616,6 @@ github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUN github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/smartcontractkit/ccip-owner-contracts v0.1.0 h1:GiBDtlx7539o7AKlDV+9LsA7vTMPv+0n7ClhSFnZFAk= @@ -735,8 +733,8 @@ github.com/xdrpp/goxdr v0.1.1 h1:E1B2c6E8eYhOVyd7yEpOyopzTPirUeF6mVOfXfGyJyc= github.com/xdrpp/goxdr v0.1.1/go.mod h1:dXo1scL/l6s7iME1gxHWo2XCppbHEKZS7m/KyYWkNzA= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= +github.com/xssnick/tonutils-go v1.18.0 h1:VDH614303RfPQxO4e/GcfrtWbL3WanpHIfxlWVd0Ea0= +github.com/xssnick/tonutils-go v1.18.0/go.mod h1:4z7dSfiufWiE2SnzgM0IYzlwpJ5UlHyPH45HP0QZNzQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= diff --git a/go.mod b/go.mod index 39bbb928c..1966099f5 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,9 @@ module github.com/smartcontractkit/chainlink-ton go 1.26.2 +// Temporary for merging PR +replace github.com/smartcontractkit/chainlink-ton/cciplib => ./cciplib // TODO remove local replace + require ( github.com/Masterminds/semver/v3 v3.4.0 github.com/TyphonHill/go-mermaid v1.0.0 @@ -19,7 +22,7 @@ require ( github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 - github.com/xssnick/tonutils-go v1.14.1 + github.com/xssnick/tonutils-go v1.18.0 go.opentelemetry.io/otel v1.44.0 go.opentelemetry.io/otel/metric v1.44.0 go.uber.org/zap v1.27.1 @@ -27,8 +30,10 @@ require ( golang.org/x/sync v0.22.0 ) +require github.com/pierrec/lz4/v4 v4.1.27 // indirect + require ( - filippo.io/edwards25519 v1.1.1 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/XSAM/otelsql v0.37.0 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -97,7 +102,6 @@ require ( github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/scylladb/go-reflectx v1.0.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f // indirect github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b // indirect diff --git a/go.sum b/go.sum index 6b38ae7fb..8ad8abae4 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= @@ -289,8 +289,8 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -324,8 +324,6 @@ github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9Nz github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartcontractkit/chain-selectors v1.0.98 h1:fuI7CQ1o5cX64eO4/LvwtfhdpGFH5vnsM/bFHRwEiww= @@ -346,8 +344,6 @@ github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-202510021 github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b/go.mod h1:qSTSwX3cBP3FKQwQacdjArqv0g6QnukjV4XuzO6UyoY= github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260211172625-dff40e83b3c9 h1:hhevsu8k7tlDRrYZmgAh7V4avGQDMvus1bwIlial3Ps= github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260211172625-dff40e83b3c9/go.mod h1:dkR2uYg9XYJuT1JASkPzWE51jjFkVb86P7a/yXe5/GM= -github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260714130443-bb3cf7801e11 h1:2iRvjIWJaMZVcxq2wzh+byT6OX1UVKWmsyfGFb5MeSM= -github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260714130443-bb3cf7801e11/go.mod h1:WjihFo64itMaOcaDMJ97iz0cJYO2zlLfPdUkF7/mQNo= github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad h1:lgHxTHuzJIF3Vj6LSMOnjhqKgRqYW+0MV2SExtCYL1Q= github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= @@ -393,8 +389,8 @@ github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/ github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= +github.com/xssnick/tonutils-go v1.18.0 h1:VDH614303RfPQxO4e/GcfrtWbL3WanpHIfxlWVd0Ea0= +github.com/xssnick/tonutils-go v1.18.0/go.mod h1:4z7dSfiufWiE2SnzgM0IYzlwpJ5UlHyPH45HP0QZNzQ= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= diff --git a/integration-tests/deployment/ccip/cs_deployer_test.go b/integration-tests/deployment/ccip/cs_deployer_test.go index 31c5bbaf5..bd9222567 100644 --- a/integration-tests/deployment/ccip/cs_deployer_test.go +++ b/integration-tests/deployment/ccip/cs_deployer_test.go @@ -142,7 +142,7 @@ func TestWalletInit(t *testing.T) { balance, err = w.GetBalance(t.Context(), block) require.NoError(t, err) t.Logf("Target wallet balance after second funding attempt (wallet.IgnoreErrors): %s", balance.String()) - require.Equal(t, -1, tlb.ZeroCoins.Compare(&balance), "Balance should be greater than 0 after funding") + require.Equal(t, -1, tlb.ZeroCoins.Compare(balance), "Balance should be greater than 0 after funding") // Fund wallet with amount and deploy err = tvm.NewInitializedWallet(t.Context(), tonChain.Wallet, w, amount) diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 62103e920..eb856747f 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -36,7 +36,7 @@ require ( github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d github.com/smartcontractkit/mcms v0.45.0 github.com/stretchr/testify v1.11.1 - github.com/xssnick/tonutils-go v1.14.1 + github.com/xssnick/tonutils-go v1.18.0 go.uber.org/zap v1.28.0 google.golang.org/grpc v1.81.0 ) @@ -53,7 +53,7 @@ require ( cosmossdk.io/x/tx v0.13.7 // indirect dario.cat/mergo v1.0.2 // indirect filippo.io/bigmod v0.1.0 // indirect - filippo.io/edwards25519 v1.1.1 // indirect + filippo.io/edwards25519 v1.2.0 // indirect filippo.io/nistec v0.0.4 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect @@ -334,7 +334,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/pierrec/lz4/v4 v4.1.22 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pion/dtls/v2 v2.2.12 // indirect github.com/pion/logging v0.2.2 // indirect github.com/pion/stun/v2 v2.0.0 // indirect @@ -363,7 +363,6 @@ require ( github.com/shirou/gopsutil/v3 v3.24.3 // indirect github.com/shirou/gopsutil/v4 v4.26.3 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/smartcontractkit/ccip-contract-examples/chains/evm v0.0.0-20260129135848-c86808ba5cb9 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index f762ea91d..355131bca 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -49,8 +49,8 @@ filippo.io/bigmod v0.1.0 h1:UNzDk7y9ADKST+axd9skUpBQeW7fG2KrTZyOE4uGQy8= filippo.io/bigmod v0.1.0/go.mod h1:OjOXDNlClLblvXdwgFFOQFJEocLhhtai8vGLy0JCZlI= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= filippo.io/nistec v0.0.4 h1:F14ZHT5htWlMnQVPndX9ro9arf56cBhQxq4LnDI491s= filippo.io/nistec v0.0.4/go.mod h1:PK/lw8I1gQT4hUML4QGaqljwdDaFcMyFKSXN7kjrtKI= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -1175,8 +1175,8 @@ github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQm github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= @@ -1306,8 +1306,6 @@ github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFR github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1570,8 +1568,8 @@ github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= +github.com/xssnick/tonutils-go v1.18.0 h1:VDH614303RfPQxO4e/GcfrtWbL3WanpHIfxlWVd0Ea0= +github.com/xssnick/tonutils-go v1.18.0/go.mod h1:4z7dSfiufWiE2SnzgM0IYzlwpJ5UlHyPH45HP0QZNzQ= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration-tests/jetton/jetton_test.go b/integration-tests/jetton/jetton_test.go index 572662120..6e473fffb 100644 --- a/integration-tests/jetton/jetton_test.go +++ b/integration-tests/jetton/jetton_test.go @@ -710,7 +710,7 @@ func TestJettonAll(t *testing.T) { require.NotNil(t, insufficientFeeEventMessage, "Insufficient fee event message should not be nil") insufficientFeeEvent := &jetton_testing_wrappers.InsufficientFeeEvent{} - err = tlb.LoadFromCell(insufficientFeeEvent, insufficientFeeEventMessage.Body.BeginParse()) + err = tlb.Parse(insufficientFeeEvent, insufficientFeeEventMessage.Body) require.NoError(t, err, "failed to load InsufficientFeeEvent: ", err) assert.True(t, setup.Sender.Contract.Address.Equals(insufficientFeeEvent.Sender), "Sender address should match") assert.Equal(t, queryID, insufficientFeeEvent.QueryID, "Query ID should match") @@ -725,17 +725,17 @@ func TestJettonAll(t *testing.T) { require.NotNil(t, acceptedRequestEventMessage, "Accepted request event message should not be nil") acceptedRequestEvent := &jetton_testing_wrappers.AcceptedRequestEvent{} - err = tlb.LoadFromCell(acceptedRequestEvent, acceptedRequestEventMessage.Body.BeginParse()) + err = tlb.Parse(acceptedRequestEvent, acceptedRequestEventMessage.Body) require.NoError(t, err, "failed to parse accepted request event") assert.True(t, setup.Sender.Contract.Address.Equals(acceptedRequestEvent.Sender), "Sender address should match") assert.Equal(t, queryID, acceptedRequestEvent.QueryID, "Query ID should match") - _, payloadBuf, err := acceptedRequestEvent.Payload.BeginParse().RestBits() + _, payloadBuf, err := acceptedRequestEvent.Payload.MustBeginParse().RestBits() require.NoError(t, err, "failed to parse payload") assert.Equal(t, buf, payloadBuf, "Payload should match") jettonReceiverDataAfter2, err := receiverJettonWallet.GetBalance(t.Context()) require.NoError(t, err, "failed to get receiver wallet balance after accepted request") - expectedJettonAmount, err := insufficientJettonTransferAmount.Add(&sufficientJettonTransferAmount) + expectedJettonAmount, err := insufficientJettonTransferAmount.Add(sufficientJettonTransferAmount) require.NoError(t, err, "failed to calculate expected jetton amount") assert.Equal(t, expectedJettonAmount.Nano().Uint64(), jettonReceiverDataAfter2.Uint64(), "Receiver wallet balance should match the sum of insufficient and sufficient jetton transfer amounts") }) diff --git a/integration-tests/smoke/chainaccessor/accessor_test.go b/integration-tests/smoke/chainaccessor/accessor_test.go index df63b311d..f289a729a 100644 --- a/integration-tests/smoke/chainaccessor/accessor_test.go +++ b/integration-tests/smoke/chainaccessor/accessor_test.go @@ -107,7 +107,7 @@ func Test_TonAccessorMessageSentEventQueries(t *testing.T) { skipMagic := true // logpoller skips the opcode var messageSent onramp.CCIPMessageSent - err = tlb.LoadFromCell(&messageSent, messageSentCell.BeginParse(), skipMagic) + err = tlb.LoadFromCell(&messageSent, messageSentCell.MustBeginParse(), skipMagic) require.NoError(t, err, "failed to decode CCIPMessageSent from BOC") // Validate expected values from the TypeScript test @@ -132,7 +132,7 @@ func Test_TonAccessor_MsgsBetweenSeqNums(t *testing.T) { require.NoError(t, err) var messageSent onramp.CCIPMessageSent - err = tlb.LoadFromCell(&messageSent, bocCell.BeginParse(), true) + err = tlb.LoadFromCell(&messageSent, bocCell.MustBeginParse(), true) require.NoError(t, err) require.Equal(t, tc.SeqNum, messageSent.Message.Header.SequenceNumber) @@ -170,7 +170,7 @@ func Test_TonAccessorCommitEventQueries(t *testing.T) { t.Run("Analyze BOC structure - MerkleRoot detection", func(t *testing.T) { // Examine cell data to understand 'maybe' encoding pattern t.Logf("=== MerkleRoot Only BOC Analysis ===") - merkleParser := merkleRootOnlyCell.BeginParse() + merkleParser := merkleRootOnlyCell.MustBeginParse() t.Logf("BOC Hex: %s", CommitReportAcceptedMerkleRootOnlyBOC) t.Logf("Cell bits remaining: %d", merkleParser.BitsLeft()) @@ -187,7 +187,7 @@ func Test_TonAccessorCommitEventQueries(t *testing.T) { } t.Logf("=== Price Updates Only BOC Analysis ===") - priceParser := priceOnlyCell.BeginParse() + priceParser := priceOnlyCell.MustBeginParse() t.Logf("BOC Hex: %s", CommitReportAcceptedPriceOnlyBOC) t.Logf("Cell bits remaining: %d", priceParser.BitsLeft()) @@ -204,7 +204,7 @@ func Test_TonAccessorCommitEventQueries(t *testing.T) { } t.Logf("=== Both MerkleRoot AND PriceUpdates BOC Analysis ===") - bothParser := bothCell.BeginParse() + bothParser := bothCell.MustBeginParse() t.Logf("BOC Hex: %s", CommitReportAcceptedBothBOC) t.Logf("Cell bits remaining: %d", bothParser.BitsLeft()) @@ -224,7 +224,7 @@ func Test_TonAccessorCommitEventQueries(t *testing.T) { t.Run("Test BOC decoding - Merkle Root only", func(t *testing.T) { // Decode using Go bindings var commitReportAccepted offramp.CommitReportAccepted - err = tlb.LoadFromCell(&commitReportAccepted, merkleRootOnlyCell.BeginParse()) + err = tlb.Parse(&commitReportAccepted, merkleRootOnlyCell) require.NoError(t, err, "failed to decode CommitReportAccepted from BOC") // Validate the decoded data @@ -247,7 +247,7 @@ func Test_TonAccessorCommitEventQueries(t *testing.T) { t.Run("Test BOC decoding - Price Updates only", func(t *testing.T) { // Decode using Go bindings var commitReportAccepted offramp.CommitReportAccepted - err = tlb.LoadFromCell(&commitReportAccepted, priceOnlyCell.BeginParse()) + err = tlb.Parse(&commitReportAccepted, priceOnlyCell) require.NoError(t, err, "failed to decode CommitReportAccepted from BOC") // Validate the decoded data @@ -294,7 +294,7 @@ func Test_TonAccessorCommitEventQueries(t *testing.T) { t.Run("Test BOC decoding - Both MerkleRoot and PriceUpdates", func(t *testing.T) { // Decode using Go bindings var commitReportAccepted offramp.CommitReportAccepted - err = tlb.LoadFromCell(&commitReportAccepted, bothCell.BeginParse()) + err = tlb.Parse(&commitReportAccepted, bothCell) require.NoError(t, err, "failed to decode CommitReportAccepted from BOC") // Validate the decoded data @@ -689,7 +689,7 @@ func Test_TonAccessorExecutionStateChangedEventQueries(t *testing.T) { require.NoError(t, err, "failed to parse BOC from hex") var execEvent offramp.ExecutionStateChanged - err = tlb.LoadFromCell(&execEvent, bocCell.BeginParse(), true) // Skip magic for logpoller + err = tlb.LoadFromCell(&execEvent, bocCell.MustBeginParse(), true) // Skip magic for logpoller require.NoError(t, err, "failed to decode ExecutionStateChanged from BOC") // Validate expected values from the TypeScript test diff --git a/integration-tests/smoke/logpoller/helper/event_emitter.go b/integration-tests/smoke/logpoller/helper/event_emitter.go index 95abe500c..7b2e97f90 100644 --- a/integration-tests/smoke/logpoller/helper/event_emitter.go +++ b/integration-tests/smoke/logpoller/helper/event_emitter.go @@ -63,7 +63,7 @@ func VerifyAllCountLogs(indexedCells []*cell.Cell, expectedCount int) error { // parse all events and track counters for i, cell := range indexedCells { var event counter.CountIncreased - err := tlb.LoadFromCell(&event, cell.BeginParse(), true) + err := tlb.LoadFromCell(&event, cell.MustBeginParse(), true) if err != nil { return fmt.Errorf("failed to parse event #%d: %w", i, err) } diff --git a/integration-tests/smoke/logpoller/log_poller_test.go b/integration-tests/smoke/logpoller/log_poller_test.go index 2ad8ae0bd..0d2ef3abd 100644 --- a/integration-tests/smoke/logpoller/log_poller_test.go +++ b/integration-tests/smoke/logpoller/log_poller_test.go @@ -357,7 +357,7 @@ func Test_LogPoller(t *testing.T) { if len(resA) != targetCounter { for _, data := range indexedLogsA { var event counter.CountIncreased - err = tlb.LoadFromCell(&event, data.BeginParse()) + err = tlb.Parse(&event, data) require.NoError(t, err) t.Logf("emitterA Event Counter=%d", event.Value) } @@ -368,7 +368,7 @@ func Test_LogPoller(t *testing.T) { if len(resB) != targetCounter { for _, data := range indexedLogsB { var event counter.CountIncreased - err = tlb.LoadFromCell(&event, data.BeginParse()) + err = tlb.Parse(&event, data) require.NoError(t, err) t.Logf("emitterB Event Counter=%d", event.Value) } @@ -409,7 +409,7 @@ func Test_LogPoller(t *testing.T) { t.Logf("emitterA Reply Log: %s", log.String()) var event counter.CountIncreasedMsg - err = tlb.LoadFromCell(&event, log.Data.BeginParse(), true) + err = tlb.LoadFromCell(&event, log.Data.MustBeginParse(), true) require.NoError(t, err) t.Logf("emitterA Reply Event Counter=%d", event.Value) @@ -487,7 +487,7 @@ func Test_LogPoller(t *testing.T) { // Parse the logs manually since FilterBytes doesn't parse events for _, log := range result { var event counter.CountIncreased - lerr := tlb.LoadFromCell(&event, log.Data.BeginParse()) + lerr := tlb.Parse(&event, log.Data) require.NoError(t, lerr) // check that the counter is within the expected range require.Greater(t, event.Value, uint32(5)) @@ -500,7 +500,7 @@ func Test_LogPoller(t *testing.T) { testCell := cell.BeginCell(). MustStoreAddr(emitterA.Wallet()). EndCell() - testSlice := testCell.BeginParse() + testSlice := testCell.MustBeginParse() senderBytes, sberr := testSlice.LoadSlice(267) // Load exactly 267 bits require.NoError(t, sberr) @@ -522,7 +522,7 @@ func Test_LogPoller(t *testing.T) { // Parse events from logs to verify data for _, log := range result { var event counter.CountIncreased - lerr := tlb.LoadFromCell(&event, log.Data.BeginParse()) + lerr := tlb.Parse(&event, log.Data) require.NoError(t, lerr) // check that the counter is within the expected range require.GreaterOrEqual(t, event.Value, uint32(1)) @@ -553,7 +553,7 @@ func Test_LogPoller(t *testing.T) { // Parse events from logs to verify data for _, log := range result { var event counter.CountIncreased - lerr := tlb.LoadFromCell(&event, log.Data.BeginParse()) + lerr := tlb.Parse(&event, log.Data) require.NoError(t, lerr) // check that the counter is within the expected range require.GreaterOrEqual(t, event.Value, uint32(1)) @@ -581,7 +581,7 @@ func Test_LogPoller(t *testing.T) { seen := make(map[uint32]bool, targetCounter) for _, log := range result { var event counter.CountIncreased - err = tlb.LoadFromCell(&event, log.Data.BeginParse()) + err = tlb.Parse(&event, log.Data) require.NoError(t, err) require.GreaterOrEqual(t, event.Value, uint32(1)) @@ -789,7 +789,7 @@ func Test_LogPoller(t *testing.T) { // Verify the filtering worked for _, log := range result { var event counter.CountIncreased - err = tlb.LoadFromCell(&event, log.Data.BeginParse()) + err = tlb.Parse(&event, log.Data) require.NoError(t, err) require.GreaterOrEqual(t, event.Value, uint32(from)) diff --git a/pkg/bindings/examples/counter/types_test.go b/pkg/bindings/examples/counter/types_test.go index a9697c7bb..dc91481ae 100644 --- a/pkg/bindings/examples/counter/types_test.go +++ b/pkg/bindings/examples/counter/types_test.go @@ -21,7 +21,7 @@ func TestSetCount_TlbEncodingDecoding(t *testing.T) { // Decode from cell var decoded SetCount - err = tlb.LoadFromCell(&decoded, c.BeginParse()) + err = tlb.Parse(&decoded, c) require.NoError(t, err, "tlb.LoadFromCell decoding failed") require.Equal(t, original.QueryID, decoded.QueryID, "QueryID mismatch after decoding") @@ -40,7 +40,7 @@ func TestIncreaseCount_TlbEncodingDecoding(t *testing.T) { // Decode from cell var decoded IncreaseCount - err = tlb.LoadFromCell(&decoded, c.BeginParse()) + err = tlb.Parse(&decoded, c) require.NoError(t, err, "tlb.LoadFromCell decoding failed") require.Equal(t, original.QueryID, decoded.QueryID, "QueryID mismatch after decoding") diff --git a/pkg/bindings/lib/access/rbac/reader.go b/pkg/bindings/lib/access/rbac/reader.go index cfdcb6fbb..f41e0f870 100644 --- a/pkg/bindings/lib/access/rbac/reader.go +++ b/pkg/bindings/lib/access/rbac/reader.go @@ -160,7 +160,10 @@ var GetRoleMembers = tvm.Getter[*big.Int, map[*address.Address]bool]{ return nil, fmt.Errorf("error getting Cell(0) - getRoleMembers: %w", err) } - cs := c.BeginParse() + cs, err := c.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parsing cell - getRoleMembers: %w", err) + } dict, err := cs.LoadDict(267) // address keys use 267 bits if err != nil { return nil, fmt.Errorf("error loading dict - getRoleMembers: %w", err) diff --git a/pkg/bindings/test/examples/jetton/onramp_mock.go b/pkg/bindings/test/examples/jetton/onramp_mock.go index 7d6cdfeb3..161f8de53 100644 --- a/pkg/bindings/test/examples/jetton/onramp_mock.go +++ b/pkg/bindings/test/examples/jetton/onramp_mock.go @@ -82,7 +82,7 @@ type AcceptedRequestEvent struct { // Note: This would typically be used when parsing transaction events/logs func ParseAcceptedRequestEvent(cell *cell.Cell) (*AcceptedRequestEvent, error) { event := &AcceptedRequestEvent{} - err := tlb.LoadFromCell(event, cell.BeginParse()) + err := tlb.Parse(event, cell) if err != nil { return nil, fmt.Errorf("failed to load AcceptedRequestEvent: %w", err) } diff --git a/pkg/ccip/bindings/offramp/offramp_test.go b/pkg/ccip/bindings/offramp/offramp_test.go index c292305ee..de02d0ae6 100644 --- a/pkg/ccip/bindings/offramp/offramp_test.go +++ b/pkg/ccip/bindings/offramp/offramp_test.go @@ -95,7 +95,7 @@ func TestCommit_EncodingAndDecoding(t *testing.T) { // Decode from cell var decoded Commit - err = tlb.LoadFromCell(&decoded, newCell.BeginParse()) + err = tlb.Parse(&decoded, newCell) require.NoError(t, err) require.Equal(t, c.Hash(), newCell.Hash()) require.Equal(t, commitReport, decoded.CommitReport) @@ -171,7 +171,7 @@ func TestExecute_EncodingAndDecoding(t *testing.T) { // Decode from cell var decoded Execute - err = tlb.LoadFromCell(&decoded, newCell.BeginParse()) + err = tlb.Parse(&decoded, newCell) require.NoError(t, err) require.Equal(t, c.Hash(), newCell.Hash()) require.Len(t, decoded.ExecuteReport.Message.TokenAmounts, 2) @@ -194,7 +194,7 @@ func TestExecuteReport_WithHardCodedTSBytes(t *testing.T) { // Load the message from the cell var rampMsg ocr.Any2TVMRampMessage - err = tlb.LoadFromCell(&rampMsg, c.BeginParse()) + err = tlb.Parse(&rampMsg, c) require.NoError(t, err) // Convert hex string to bytes @@ -208,6 +208,6 @@ func TestExecuteReport_WithHardCodedTSBytes(t *testing.T) { // Load the message from the cell var report ocr.ExecuteReport - err = tlb.LoadFromCell(&report, c.BeginParse()) + err = tlb.Parse(&report, c) require.NoError(t, err) } diff --git a/pkg/ccip/bindings/offramp/reader.go b/pkg/ccip/bindings/offramp/reader.go index cf1334449..e3a6efbb7 100644 --- a/pkg/ccip/bindings/offramp/reader.go +++ b/pkg/ccip/bindings/offramp/reader.go @@ -44,7 +44,7 @@ var GetOCR3Config = tvm.NewNoArgsGetter(tvm.NoArgsOpts[OCR3Base]{ } var config OCR3Config - if err = tlb.LoadFromCell(&config, configCell.BeginParse()); err != nil { + if err = tlb.Parse(&config, configCell); err != nil { return c, fmt.Errorf("load OCR3Config from cell: %w", err) } c.Commit = &config @@ -62,7 +62,7 @@ var GetOCR3Config = tvm.NewNoArgsGetter(tvm.NoArgsOpts[OCR3Base]{ } var config OCR3Config - if err = tlb.LoadFromCell(&config, configCell.BeginParse()); err != nil { + if err = tlb.Parse(&config, configCell); err != nil { return c, fmt.Errorf("load OCR3Config from cell: %w", err) } c.Execute = &config diff --git a/pkg/ccip/bindings/tokenpool/reader.go b/pkg/ccip/bindings/tokenpool/reader.go index 02fc88ac3..7c34900e3 100644 --- a/pkg/ccip/bindings/tokenpool/reader.go +++ b/pkg/ccip/bindings/tokenpool/reader.go @@ -343,7 +343,7 @@ var GetTokenTransferFeeConfig = tvm.Getter[uint64, GetTokenTransferFeeConfigResu } var cfg TokenTransferFeeConfig - if err := tlb.LoadFromCell(&cfg, c.BeginParse()); err != nil { + if err := tlb.Parse(&cfg, c); err != nil { return GetTokenTransferFeeConfigResult{}, fmt.Errorf("error decoding TokenTransferFeeConfig: %w", err) } @@ -367,7 +367,7 @@ var GetCurrentRateLimiterState = tvm.Getter[GetCurrentRateLimiterStateArgs, Rate } var pair RateLimiterPair - if err := tlb.LoadFromCell(&pair, c.BeginParse()); err != nil { + if err := tlb.Parse(&pair, c); err != nil { return RateLimiterPair{}, fmt.Errorf("error decoding RateLimiterPair: %w", err) } @@ -414,7 +414,7 @@ var GetAdminConfig = tvm.NewNoArgsGetter(tvm.NoArgsOpts[AdminConfig]{ } var cfg AdminConfig - if err := tlb.LoadFromCell(&cfg, c.BeginParse()); err != nil { + if err := tlb.Parse(&cfg, c); err != nil { return AdminConfig{}, fmt.Errorf("error decoding AdminConfig: %w", err) } @@ -434,7 +434,7 @@ var GetMirroredPolicy = tvm.NewNoArgsGetter(tvm.NoArgsOpts[MirroredPolicy]{ } var mp MirroredPolicy - if err := tlb.LoadFromCell(&mp, c.BeginParse()); err != nil { + if err := tlb.Parse(&mp, c); err != nil { return MirroredPolicy{}, fmt.Errorf("error decoding MirroredPolicy: %w", err) } @@ -463,7 +463,7 @@ var GetRemoteChainConfig = tvm.Getter[uint64, GetRemoteChainConfigResult]{ } var cfg RemoteChainConfig - if err := tlb.LoadFromCell(&cfg, c.BeginParse()); err != nil { + if err := tlb.Parse(&cfg, c); err != nil { return GetRemoteChainConfigResult{}, fmt.Errorf("error decoding RemoteChainConfig: %w", err) } @@ -488,7 +488,10 @@ func loadCrossChainAddressFromCell(c *cell.Cell) (common.CrossChainAddress, erro return nil, errors.New("nil cell") } - cs := c.BeginParse() + cs, err := c.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parsing cell: %w", err) + } return common.LoadCrossChainAddressWithoutPrefix(cs) } diff --git a/pkg/ccip/chainaccessor/ton_accessor.go b/pkg/ccip/chainaccessor/ton_accessor.go index 5e0c0c24f..339645cad 100644 --- a/pkg/ccip/chainaccessor/ton_accessor.go +++ b/pkg/ccip/chainaccessor/ton_accessor.go @@ -378,7 +378,11 @@ func (a *TONAccessor) LatestMessageTo(ctx context.Context, dest ccipocr3.ChainSe var event onramp.CCIPMessageSent const skipMagic = true // Always skip magic (opcode in msg) when parsing log cells, we only store message body - if parseErr := tlb.LoadFromCell(&event, log.Data.BeginParse(), skipMagic); parseErr != nil { + s, err := log.Data.BeginParse() + if err != nil { + return 0, fmt.Errorf("failed to begin parsing log data cell: %w", err) + } + if parseErr := tlb.LoadFromCell(&event, s, skipMagic); parseErr != nil { return 0, fmt.Errorf("failed to decode log at tx %s: %w", hex.EncodeToString(log.TxHash[:]), parseErr) } diff --git a/pkg/ccip/model/common.go b/pkg/ccip/model/common.go index 22356bd18..2eb1323de 100644 --- a/pkg/ccip/model/common.go +++ b/pkg/ccip/model/common.go @@ -24,7 +24,7 @@ func FromBindingDataHex[B any, M Mapper[B]](m M, dataHex string) error { } var raw B - if err := tlb.LoadFromCell(&raw, root.BeginParse()); err != nil { + if err := tlb.Parse(&raw, root); err != nil { return fmt.Errorf("decode TL-B object: %w", err) } diff --git a/pkg/ccip/model/fee_quoter.go b/pkg/ccip/model/fee_quoter.go index 49c36a407..a0031b252 100644 --- a/pkg/ccip/model/fee_quoter.go +++ b/pkg/ccip/model/fee_quoter.go @@ -221,7 +221,7 @@ func (s *FeeQuoterStorage) FromBinding(raw *feequoter.Storage) error { } var gas feequoter.USDPerUnitGas - if err3 := tlb.LoadFromCell(&gas, dcc.USDPerUnitGasRef.BeginParse()); err3 != nil { + if err3 := tlb.Parse(&gas, dcc.USDPerUnitGasRef); err3 != nil { return fmt.Errorf("error while decoding USDPerUnitGas from DestChainConfigs: %w", err3) } diff --git a/pkg/ccip/ocr/contract_transmitter.go b/pkg/ccip/ocr/contract_transmitter.go index 87168f097..4ebe88589 100644 --- a/pkg/ccip/ocr/contract_transmitter.go +++ b/pkg/ccip/ocr/contract_transmitter.go @@ -153,7 +153,7 @@ var CommitCallData = func( } var commitReport ocr.CommitReport - if err = tlb.LoadFromCell(&commitReport, reportCell.BeginParse()); err != nil { + if err = tlb.Parse(&commitReport, reportCell); err != nil { return nil, fmt.Errorf("cannot decode commit report from cell: %w", err) } @@ -190,7 +190,7 @@ var ExecuteCallData = func( // Decode as single ExecuteReport (not array) since TON supports single chain only var executeReport ocr.ExecuteReport - if err = tlb.LoadFromCell(&executeReport, reportCell.BeginParse()); err != nil { + if err = tlb.Parse(&executeReport, reportCell); err != nil { return nil, fmt.Errorf("cannot decode execute report from cell (reportLen=%d, cellBits=%d, cellRefs=%d): %w", len(report.Report), reportCell.BitsSize(), reportCell.RefsNum(), err) } @@ -241,24 +241,24 @@ func getReportTxInfo(reportBytes []byte, seqNr uint64, cfg *Config) (txID string // Check ExecuteReport first var executeReport ocr.ExecuteReport - if err = tlb.LoadFromCell(&executeReport, reportCell.BeginParse()); err == nil { + if err = tlb.Parse(&executeReport, reportCell); err == nil { // This is an execute report messageIDHex := hex.EncodeToString(executeReport.Message.Header.MessageID) txID = fmt.Sprintf("seq-%d-msg-%s", seqNr, messageIDHex) // Calculate cost: ExecuteCostTON + message gas limit baseCost := tlb.MustFromTON(fmt.Sprintf("%.6f", cfg.ExecuteCostTON)) - totalCost, err1 := baseCost.Add(&executeReport.Message.GasLimit) + totalCost, err1 := baseCost.Add(executeReport.Message.GasLimit) if err1 != nil { return txID, nil, &executeReport.Message.GasLimit, fmt.Errorf("failed to add gas limit to execute cost: %w", err1) } - return txID, totalCost, &executeReport.Message.GasLimit, nil + return txID, &totalCost, &executeReport.Message.GasLimit, nil } // Not an execute report, try to decode as CommitReport var commitReport ocr.CommitReport - if err = tlb.LoadFromCell(&commitReport, reportCell.BeginParse()); err != nil { + if err = tlb.Parse(&commitReport, reportCell); err != nil { return fmt.Sprintf("seq-%d", seqNr), nil, nil, fmt.Errorf("failed to decode as commit report: %w", err) } diff --git a/pkg/logpoller/loader/loader.go b/pkg/logpoller/loader/loader.go index e722f7db2..d5c8a3b8f 100644 --- a/pkg/logpoller/loader/loader.go +++ b/pkg/logpoller/loader/loader.go @@ -266,7 +266,10 @@ func (l *rawTxLoader) listTransactionsWithBlock(ctx context.Context, addr *addre // transaction we've processed yet - we need the txHash parameter from our cursor. // After the first iteration, txHash gets updated to tx.PrevTxHash for the next comparison. for i := range txList { - loader := txList[i].BeginParse() + loader, err := txList[i].BeginParse() + if err != nil { + return nil, nil, fmt.Errorf("failed to begin parsing transaction cell: %w", err) + } var tx tlb.Transaction err = tlb.LoadFromCell(&tx, loader) diff --git a/pkg/logpoller/query/query.go b/pkg/logpoller/query/query.go index 7e5efa1b8..0f4397dbf 100644 --- a/pkg/logpoller/query/query.go +++ b/pkg/logpoller/query/query.go @@ -200,7 +200,11 @@ func DecodedLogs[T any](logs []models.Log) ([]models.TypedLog[T], error) { var event T // Always skip magic (opcode in msg) when parsing log cells, we only store message body const skipMagic = true - if parseErr := tlb.LoadFromCell(&event, log.Data.BeginParse(), skipMagic); parseErr != nil { + s, err := log.Data.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parse log at tx %s: %w", hex.EncodeToString(log.TxHash[:]), err) + } + if parseErr := tlb.LoadFromCell(&event, s, skipMagic); parseErr != nil { // Return error when parsing fails - clients can decide how to handle return nil, fmt.Errorf("failed to decode log at tx %s: %w", hex.EncodeToString(log.TxHash[:]), parseErr) } diff --git a/pkg/logpoller/store/memory/logs.go b/pkg/logpoller/store/memory/logs.go index 7600b418b..1dedba113 100644 --- a/pkg/logpoller/store/memory/logs.go +++ b/pkg/logpoller/store/memory/logs.go @@ -291,7 +291,11 @@ func (s *inMemoryLogs) compareTypedValues(a, b any) (int, bool) { // matchBytes checks if a log passes a single byte filter func (s *inMemoryLogs) matchBytes(log models.Log, filter *query.ByteFilter) bool { // Extract cell payload as bytes for byte-level filtering - _, cellPayload, err := log.Data.BeginParse().RestBits() + slice, err := log.Data.BeginParse() + if err != nil { + return false + } + _, cellPayload, err := slice.RestBits() if err != nil { return false } @@ -335,7 +339,11 @@ func (s *inMemoryLogs) passesByteCondition(data []byte, condition query.Conditio // matchBits checks if a log passes a bit filter (single bit or bit range) func (s *inMemoryLogs) matchBits(log models.Log, filter *query.BitFilter) bool { // Extract cell payload as bits using RestBits() for accurate bit-level processing - _, cellPayload, err := log.Data.BeginParse().RestBits() + slice, err := log.Data.BeginParse() + if err != nil { + return false + } + _, cellPayload, err := slice.RestBits() if err != nil { return false } diff --git a/pkg/relay/chain.go b/pkg/relay/chain.go index b219ed169..8382791a5 100644 --- a/pkg/relay/chain.go +++ b/pkg/relay/chain.go @@ -373,7 +373,7 @@ func (c *chain) GetClient(ctx context.Context) (ton.APIClientWrapped, error) { continue } - client := ton.NewAPIClient(connectionPool, ton.ProofCheckPolicyFast).WithRetry(defaultTONClientRetryCount) + client := ton.NewAPIClient(connectionPool, ton.ProofCheckPolicyFast).WithRetryTimeout(defaultTONClientRetryCount, 0) blockID, err := client.CurrentMasterchainInfo(ctx) if err != nil { @@ -443,7 +443,7 @@ func (c *chain) GetSignerWallet(ctx context.Context, client ton.APIClientWrapped } // Create the wallet from public key + signer wrapper - w, err := wallet.FromSigner(client, pubKey, tonconfig.WalletVersion, signer) + w, err := wallet.FromPubKeyWithOptions(pubKey, tonconfig.WalletVersion, wallet.WithAPI(client), wallet.WithSigner(signer)) if err != nil { return nil, fmt.Errorf("failed to create wallet: %w", err) } diff --git a/pkg/ton/boc/boc_test.go b/pkg/ton/boc/boc_test.go index 5e658fe62..a841bf757 100644 --- a/pkg/ton/boc/boc_test.go +++ b/pkg/ton/boc/boc_test.go @@ -112,7 +112,9 @@ func TestHeaderLenSimple(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { c := tt.createCell() - boc := c.ToBOCWithFlags(tt.withCRC) + boc := c.ToBOCWithOptions(cell.BOCSerializeOptions{ + WithCRC32C: tt.withCRC, + }) headerLen, err := HeaderLen(boc) require.NoError(t, err) @@ -257,7 +259,7 @@ func TestPayloadByteFiltering(t *testing.T) { require.NoError(t, err) var execEvent offramp.ExecutionStateChanged - err = tlb.LoadFromCell(&execEvent, bocCell.BeginParse(), true) + err = tlb.LoadFromCell(&execEvent, bocCell.MustBeginParse(), true) require.NoError(t, err) require.Equal(t, tc.expectedSourceChain, execEvent.SourceChainSelector) @@ -325,7 +327,7 @@ func TestPayloadByteFiltering(t *testing.T) { require.NoError(t, err) var msgEvent onramp.CCIPMessageSent - err = tlb.LoadFromCell(&msgEvent, bocCell.BeginParse(), true) + err = tlb.LoadFromCell(&msgEvent, bocCell.MustBeginParse(), true) require.NoError(t, err) require.Equal(t, tc.expectedSeqNum, msgEvent.Message.Header.SequenceNumber) @@ -350,15 +352,17 @@ func TestBOCHeaderVariability(t *testing.T) { testCases := []struct { name string createCell func() *cell.Cell - flags []bool // withCRC, withIndex, withCache - expectedHeaderSize int // exact expected header size (deterministic!) + options cell.BOCSerializeOptions + expectedHeaderSize int // exact expected header size (deterministic!) }{ { name: "simple_cell_no_crc", createCell: func() *cell.Cell { return cell.BeginCell().MustStoreUInt(0xABCD, 16).EndCell() }, - flags: []bool{false}, // no CRC + options: cell.BOCSerializeOptions{ + WithCRC32C: false, + }, // 1 cell, 1 root, cellSizeBytes=1, sizeBytes=1, no index // Formula: 6 + (3×1) + 1 + (1×1) = 11 bytes expectedHeaderSize: 11, @@ -368,7 +372,9 @@ func TestBOCHeaderVariability(t *testing.T) { createCell: func() *cell.Cell { return cell.BeginCell().MustStoreUInt(0x12345678, 32).EndCell() }, - flags: []bool{true}, // with CRC + options: cell.BOCSerializeOptions{ + WithCRC32C: true, + }, // 1 cell, 1 root, cellSizeBytes=1, sizeBytes=1, no index // Formula: 6 + (3×1) + 1 + (1×1) = 11 bytes expectedHeaderSize: 11, @@ -378,7 +384,10 @@ func TestBOCHeaderVariability(t *testing.T) { createCell: func() *cell.Cell { return cell.BeginCell().MustStoreUInt(0xDEADBEEF, 32).EndCell() }, - flags: []bool{true, true}, // CRC + index + options: cell.BOCSerializeOptions{ + WithCRC32C: true, + WithIndex: true, + }, // 1 cell, 1 root, cellSizeBytes=1, sizeBytes=1, WITH index // Formula: 6 + (3×1) + 1 + (1×1) + (1×1) = 12 bytes expectedHeaderSize: 12, @@ -397,7 +406,9 @@ func TestBOCHeaderVariability(t *testing.T) { MustStoreRef(ref3). EndCell() }, - flags: []bool{true}, // with CRC + options: cell.BOCSerializeOptions{ + WithCRC32C: true, + }, // 4 cells total, 1 root, cellSizeBytes=1, sizeBytes=1, no index // Formula: 6 + (3×1) + 1 + (1×1) = 11 bytes expectedHeaderSize: 11, @@ -412,7 +423,9 @@ func TestBOCHeaderVariability(t *testing.T) { } return cell.BeginCell().MustStoreSlice(data, 800).EndCell() }, - flags: []bool{true}, // with CRC + options: cell.BOCSerializeOptions{ + WithCRC32C: true, + }, // 1 cell, 1 root, cellSizeBytes=1, sizeBytes=1, no index // Formula: 6 + (3×1) + 1 + (1×1) = 11 bytes expectedHeaderSize: 11, @@ -459,7 +472,9 @@ func TestBOCHeaderVariability(t *testing.T) { return cells[0] }, - flags: []bool{true}, // with CRC + options: cell.BOCSerializeOptions{ + WithCRC32C: true, + }, // ~400 cells total, 1 root, cellSizeBytes=2, sizeBytes=2, no index // Formula: 6 + (3×2) + 2 + (1×2) = 16 bytes expectedHeaderSize: 16, @@ -471,7 +486,7 @@ func TestBOCHeaderVariability(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { testCell := tc.createCell() - bocBytes := testCell.ToBOCWithFlags(tc.flags...) + bocBytes := testCell.ToBOCWithOptions(tc.options) headerLen, err := HeaderLen(bocBytes) require.NoError(t, err) diff --git a/pkg/ton/codec/debug/decoders/ccip/onramp/onramp.go b/pkg/ton/codec/debug/decoders/ccip/onramp/onramp.go index 54febff6c..06df504ce 100644 --- a/pkg/ton/codec/debug/decoders/ccip/onramp/onramp.go +++ b/pkg/ton/codec/debug/decoders/ccip/onramp/onramp.go @@ -37,7 +37,7 @@ func (d *decoder) EventInfo(dstAddr *address.Address, msg *cell.Cell) (lib.Messa } if topic == onramp.TopicCCIPMessageSent { var ccipMessageSent onramp.CCIPMessageSent - err := tlb.LoadFromCell(&ccipMessageSent, msg.BeginParse()) + err := tlb.Parse(&ccipMessageSent, msg) if err != nil { return nil, err } diff --git a/pkg/ton/codec/debug/pretty_print.go b/pkg/ton/codec/debug/pretty_print.go index 8c1e1326d..0b90e1f22 100644 --- a/pkg/ton/codec/debug/pretty_print.go +++ b/pkg/ton/codec/debug/pretty_print.go @@ -336,17 +336,21 @@ func NewSimpleInfoUnknown(body string) SimpleInfo { } func describeBody(body *cell.Cell, verbose bool) lib.MessageInfo { - slice := body.BeginParse() + slice, err := body.BeginParse() + if err != nil { + return NewSimpleInfoUnknown(fmt.Sprintf("failed to begin parsing body: %v", err)) + } if slice.BitsLeft() == 0 { return NewSimpleInfoUnknown("empty") } if !verbose { - opcode, err := slice.LoadUInt(32) + var opcode uint64 + opcode, err = slice.LoadUInt(32) if err == nil { return NewSimpleInfoUnknown(fmt.Sprintf("opcode: 0x %x", opcode)) } } - strSnake, err := body.BeginParse().LoadStringSnake() + strSnake, err := slice.LoadStringSnake() if err == nil { return NewSimpleInfoUnknown(fmt.Sprintf("stringSnake: %x", strSnake)) } @@ -369,12 +373,15 @@ func describeEmitBody(dstAddr *address.Address, body *cell.Cell, verbose bool) l } } - slice := body.BeginParse() + slice, err := body.BeginParse() + if err != nil { + return NewSimpleInfo(eventName, fmt.Sprintf("failed to begin parsing body: %v", err)) + } if slice.BitsLeft() == 0 { return NewSimpleInfo(eventName, "empty") } - strSnake, err := body.BeginParse().LoadStringSnake() + strSnake, err := slice.LoadStringSnake() if err == nil { return NewSimpleInfo(eventName, fmt.Sprintf("stringSnake: %x", strSnake)) } diff --git a/pkg/ton/codec/decoder.go b/pkg/ton/codec/decoder.go index 627880a64..e1608ef1c 100644 --- a/pkg/ton/codec/decoder.go +++ b/pkg/ton/codec/decoder.go @@ -22,7 +22,10 @@ func DecodeTLBCellToAny(c *cell.Cell, tlbs tvm.TLBMap) (any, error) { } // Try to decode *cell.Cell as one of the TLBs type by reading the opcode - r := c.BeginParse() + r, err := c.BeginParse() + if err != nil { + return nil, fmt.Errorf("failed to begin parsing cell: %w", err) + } if r.BitsLeft() == 0 { return nil, ErrUnknownMessage } diff --git a/pkg/ton/message/message.go b/pkg/ton/message/message.go index 20fa2f946..5777d0603 100644 --- a/pkg/ton/message/message.go +++ b/pkg/ton/message/message.go @@ -44,7 +44,10 @@ func ParseInternalMsg(msg *tlb.InternalMessage) (sig uint32, body *cell.Cell, er // extractOpcodeAndBody safely extracts the opcode and remaining body without mutating the original cell func extractOpcodeAndBody(payload *cell.Cell) (opcode uint32, remainingBody *cell.Cell, err error) { // create a slice for reading without mutating the original - payloadSlice := payload.BeginParse() + payloadSlice, err := payload.BeginParse() + if err != nil { + return 0, nil, fmt.Errorf("failed to begin parsing payload: %w", err) + } // validate we have enough bits for opcode if payloadSlice.BitsLeft() < 32 { diff --git a/pkg/ton/tracetracking/message.go b/pkg/ton/tracetracking/message.go index 7005c4665..e66c5546a 100644 --- a/pkg/ton/tracetracking/message.go +++ b/pkg/ton/tracetracking/message.go @@ -99,7 +99,11 @@ type OutgoingExternalMessages struct { // This is commonly used for external messages that contain text data or event information. // Returns an error if the body cannot be parsed as a string. func (e *OutgoingExternalMessages) AsString() (string, error) { - str, err := e.Body.BeginParse().LoadStringSnake() + s, err := e.Body.BeginParse() + if err != nil { + return "", fmt.Errorf("failed to begin parsing event body: %w", err) + } + str, err := s.LoadStringSnake() if err != nil { return "", fmt.Errorf("failed to parse event body: %w", err) } diff --git a/pkg/txm/txm.go b/pkg/txm/txm.go index 5aec794d4..ffce5badb 100644 --- a/pkg/txm/txm.go +++ b/pkg/txm/txm.go @@ -181,7 +181,7 @@ func (t *Txm) Enqueue(request Request) error { if !transmitterAccount.IsActive || transmitterAccount.State == nil { return fmt.Errorf("failed to get account status: account.IsActive: %v, account.State == nil: %v", transmitterAccount.IsActive, transmitterAccount.State == nil) } - maxAmount, err := request.Amount.Add(walletGas(request)) + maxAmount, err := request.Amount.Add(*walletGas(request)) if err != nil { return fmt.Errorf("failed to add wallet gas: %w", err) } @@ -234,7 +234,7 @@ func (t *Txm) broadcastLoop() { var st tlb.StateInit if tx.StateInit != nil { - err := tlb.LoadFromCell(&st, tx.StateInit.BeginParse()) + err := tlb.Parse(&st, tx.StateInit) if err != nil { t.logger.Errorw("load from cell failed", "err", err, "to", tx.To.String()) continue diff --git a/staging-monitor/go.mod b/staging-monitor/go.mod index b361c0f61..0918ab8e7 100644 --- a/staging-monitor/go.mod +++ b/staging-monitor/go.mod @@ -17,12 +17,12 @@ require ( github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260710204427-f53ee44a1088 github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260714130443-bb3cf7801e11 github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260513143859-5836cab366c3 - github.com/xssnick/tonutils-go v1.14.1 + github.com/xssnick/tonutils-go v1.18.0 ) require ( dario.cat/mergo v1.0.2 // indirect - filippo.io/edwards25519 v1.1.1 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/Masterminds/semver/v3 v3.4.0 // indirect @@ -154,6 +154,7 @@ require ( github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.3.0 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect @@ -168,7 +169,6 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil/v4 v4.26.3 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260428085939-5c70de12dbfc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260121163256-85accaf3d28d // indirect diff --git a/staging-monitor/go.sum b/staging-monitor/go.sum index 985a00c1d..03c0fe937 100644 --- a/staging-monitor/go.sum +++ b/staging-monitor/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= @@ -562,8 +562,8 @@ github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf4 github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= @@ -620,8 +620,6 @@ github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUN github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/smartcontractkit/ccip-owner-contracts v0.1.0 h1:GiBDtlx7539o7AKlDV+9LsA7vTMPv+0n7ClhSFnZFAk= @@ -743,8 +741,8 @@ github.com/xdrpp/goxdr v0.1.1 h1:E1B2c6E8eYhOVyd7yEpOyopzTPirUeF6mVOfXfGyJyc= github.com/xdrpp/goxdr v0.1.1/go.mod h1:dXo1scL/l6s7iME1gxHWo2XCppbHEKZS7m/KyYWkNzA= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= +github.com/xssnick/tonutils-go v1.18.0 h1:VDH614303RfPQxO4e/GcfrtWbL3WanpHIfxlWVd0Ea0= +github.com/xssnick/tonutils-go v1.18.0/go.mod h1:4z7dSfiufWiE2SnzgM0IYzlwpJ5UlHyPH45HP0QZNzQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= diff --git a/staging-monitor/lib/ton/client.go b/staging-monitor/lib/ton/client.go index 42d0e104e..3b913af23 100644 --- a/staging-monitor/lib/ton/client.go +++ b/staging-monitor/lib/ton/client.go @@ -11,13 +11,14 @@ import ( "time" chainsel "github.com/smartcontractkit/chain-selectors" - "github.com/smartcontractkit/chainlink-ccip/deployment/testadapters" - "github.com/smartcontractkit/chainlink-common/pkg/logger" "github.com/xssnick/tonutils-go/address" "github.com/xssnick/tonutils-go/tlb" "github.com/xssnick/tonutils-go/ton" "github.com/xssnick/tonutils-go/ton/wallet" + "github.com/smartcontractkit/chainlink-ccip/deployment/testadapters" + "github.com/smartcontractkit/chainlink-common/pkg/logger" + "github.com/smartcontractkit/chainlink-ton/cciplib/ton/tvm" tonhash "github.com/smartcontractkit/chainlink-ton/cciplib/ton/hash" @@ -279,7 +280,11 @@ func (c *Client) WaitForMessageReceived(ctx context.Context, lggr logger.Logger, // Decode and match data if expectedData provided if expectedData != "" && event.TypedData.Message.Data != nil { - dataSlice := event.TypedData.Message.Data.BeginParse() + dataSlice, err := event.TypedData.Message.Data.BeginParse() + if err != nil { + lggr.Warnw("Failed to begin parsing data cell", "error", err) + continue + } if dataSlice.BitsLeft() > 0 { dataBits, err := dataSlice.LoadSlice(dataSlice.BitsLeft()) if err == nil {