Skip to content

Commit 79ba4bc

Browse files
committed
Move underlying getters to chainlink-ton
1 parent af713b0 commit 79ba4bc

File tree

6 files changed

+46
-206
lines changed

6 files changed

+46
-206
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ require (
2222
github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250805210128-7f8a0f403c3a
2323
github.com/smartcontractkit/chainlink-sui v0.0.0-20251104205009-00bd79b81471
2424
github.com/smartcontractkit/chainlink-testing-framework/framework v0.12.1
25-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251216164546-5c01294e67f0
25+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217111141-cb367045c4a0
2626
github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e
2727
github.com/spf13/cast v1.10.0
2828
github.com/stretchr/testify v1.11.1

go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,14 @@ github.com/smartcontractkit/chainlink-ton v0.0.0-20251216125720-1413fa6ffe65 h1:
664664
github.com/smartcontractkit/chainlink-ton v0.0.0-20251216125720-1413fa6ffe65/go.mod h1:z27AgU6fEXkkfmUAzcbEH9u3RKz2oaGy3isb7KK6Z2E=
665665
github.com/smartcontractkit/chainlink-ton v0.0.0-20251216164546-5c01294e67f0 h1:e8C47c6WC/BSFd/joI5kadkmA9twR5ArK7rKisQPZ+k=
666666
github.com/smartcontractkit/chainlink-ton v0.0.0-20251216164546-5c01294e67f0/go.mod h1:z27AgU6fEXkkfmUAzcbEH9u3RKz2oaGy3isb7KK6Z2E=
667+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217103847-dd1d787c2967 h1:4P3Sh1MnrsCq5reySmuAl/cZ/TXgYY70w34EoouEz0o=
668+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217103847-dd1d787c2967/go.mod h1:z27AgU6fEXkkfmUAzcbEH9u3RKz2oaGy3isb7KK6Z2E=
669+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217105631-b3317865102c h1:lOldYwfqRwMAm4Zq+Dz7jl8Xx9i3OkoB4gzaYeQAw/w=
670+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217105631-b3317865102c/go.mod h1:z27AgU6fEXkkfmUAzcbEH9u3RKz2oaGy3isb7KK6Z2E=
671+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217110120-33edeaf7c68d h1:cyJ9rjnMD827E86ofJr0csxzijemgnnlg8MUJC8LieQ=
672+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217110120-33edeaf7c68d/go.mod h1:z27AgU6fEXkkfmUAzcbEH9u3RKz2oaGy3isb7KK6Z2E=
673+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217111141-cb367045c4a0 h1:9O0FfiitHsAhekXJ2LIE6fr5fG1P0GhlSUijEKPCBtc=
674+
github.com/smartcontractkit/chainlink-ton v0.0.0-20251217111141-cb367045c4a0/go.mod h1:z27AgU6fEXkkfmUAzcbEH9u3RKz2oaGy3isb7KK6Z2E=
667675
github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY=
668676
github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU=
669677
github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs=

sdk/ton/inspector.go

Lines changed: 10 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ package ton
22

33
import (
44
"context"
5-
"errors"
65
"fmt"
76

87
"github.com/ethereum/go-ethereum/common"
98

109
"github.com/xssnick/tonutils-go/address"
1110
"github.com/xssnick/tonutils-go/ton"
12-
"github.com/xssnick/tonutils-go/tvm/cell"
1311

1412
"github.com/smartcontractkit/mcms/sdk"
1513
"github.com/smartcontractkit/mcms/types"
@@ -35,7 +33,6 @@ func NewInspector(client ton.APIClientWrapped) sdk.Inspector {
3533
}
3634
}
3735

38-
// TODO (ton): use GetConfig from chainlink-ton/pkg/bindings/mcms/mcms
3936
func (i Inspector) GetConfig(ctx context.Context, _address string) (*types.Config, error) {
4037
// Map to Ton Address type (mcms.address)
4138
addr, err := address.ParseAddr(_address)
@@ -48,146 +45,68 @@ func (i Inspector) GetConfig(ctx context.Context, _address string) (*types.Confi
4845
return nil, fmt.Errorf("failed to get current masterchain info: %w", err)
4946
}
5047

51-
r, err := i.client.RunGetMethod(ctx, block, addr, "getConfig")
48+
_config, err := tvm.CallGetter(ctx, i.client, block, addr, mcms.GetConfig)
5249
if err != nil {
53-
return nil, fmt.Errorf("error getting getConfig: %w", err)
50+
return nil, err
5451
}
5552

56-
rResult := r.AsTuple()
57-
if len(rResult) < 3 { //nolint:mnd // 3 expected return values
58-
return nil, errors.New("error: getConfig returned less than 3 cells")
59-
}
60-
61-
keySz := uint(tvm.SizeUINT8)
62-
signers := cell.NewDict(keySz)
63-
if rResult[0] != nil {
64-
rc0, err := r.Cell(0)
65-
if err != nil {
66-
return nil, fmt.Errorf("error getting Config.Signers cell(0): %w", err)
67-
}
68-
69-
if rc0 != nil {
70-
signers = rc0.AsDict(keySz)
71-
}
72-
}
73-
74-
groupQuorums := cell.NewDict(keySz)
75-
if rResult[1] != nil {
76-
rc1, err := r.Cell(1)
77-
if err != nil {
78-
return nil, fmt.Errorf("error getting Config.GroupQuorums cell(1): %w", err)
79-
}
80-
81-
if rc1 != nil {
82-
groupQuorums = rc1.AsDict(keySz)
83-
}
84-
}
85-
86-
groupParents := cell.NewDict(keySz)
87-
if rResult[2] != nil {
88-
rc2, err := r.Cell(2) //nolint:mnd // 2 index for 3rd return value
89-
if err != nil {
90-
return nil, fmt.Errorf("error getting Config.GroupParents cell(2): %w", err)
91-
}
92-
93-
if rc2 != nil {
94-
groupParents = rc2.AsDict(keySz)
95-
}
96-
}
97-
98-
return i.configTransformer.ToConfig(mcms.Config{
99-
Signers: signers,
100-
GroupQuorums: groupQuorums,
101-
GroupParents: groupParents,
102-
})
53+
return i.configTransformer.ToConfig(_config)
10354
}
10455

105-
// TODO (ton): use GetOpCount from chainlink-ton/pkg/bindings/mcms/mcms
10656
func (i Inspector) GetOpCount(ctx context.Context, _address string) (uint64, error) {
10757
// Map to Ton Address type (mcms.address)
10858
addr, err := address.ParseAddr(_address)
10959
if err != nil {
11060
return 0, fmt.Errorf("invalid mcms address: %w", err)
11161
}
11262

113-
// TODO: mv and import from github.com/smartcontractkit/chainlink-ton/bindings/mcms/mcms
11463
block, err := i.client.CurrentMasterchainInfo(ctx)
11564
if err != nil {
11665
return 0, fmt.Errorf("failed to get current masterchain info: %w", err)
11766
}
11867

119-
r, err := i.client.RunGetMethod(ctx, block, addr, "getOpCount")
120-
if err != nil {
121-
return 0, fmt.Errorf("error getting getOpCount: %w", err)
122-
}
123-
124-
ri, err := r.Int(0)
125-
if err != nil {
126-
return 0, fmt.Errorf("error getting opCount slice: %w", err)
127-
}
128-
129-
return ri.Uint64(), nil
68+
return tvm.CallGetter(ctx, i.client, block, addr, mcms.GetOpCount)
13069
}
13170

132-
// TODO (ton): use GetRoot from chainlink-ton/pkg/bindings/mcms/mcms
13371
func (i Inspector) GetRoot(ctx context.Context, _address string) (common.Hash, uint32, error) {
13472
// Map to Ton Address type (mcms.address)
13573
addr, err := address.ParseAddr(_address)
13674
if err != nil {
13775
return [32]byte{}, 0, fmt.Errorf("invalid mcms address: %w", err)
13876
}
13977

140-
// TODO: mv and import from github.com/smartcontractkit/chainlink-ton/bindings/mcms/mcms
14178
block, err := i.client.CurrentMasterchainInfo(ctx)
14279
if err != nil {
14380
return [32]byte{}, 0, fmt.Errorf("failed to get current masterchain info: %w", err)
14481
}
14582

146-
r, err := i.client.RunGetMethod(ctx, block, addr, "getRoot")
147-
if err != nil {
148-
return [32]byte{}, 0, fmt.Errorf("error getting getRoot: %w", err)
149-
}
150-
151-
root, err := r.Int(0)
83+
r, err := tvm.CallGetter(ctx, i.client, block, addr, mcms.GetRoot)
15284
if err != nil {
153-
return [32]byte{}, 0, fmt.Errorf("error getting Int(0) - root: %w", err)
85+
return [32]byte{}, 0, err
15486
}
15587

156-
validUntil, err := r.Int(1)
157-
if err != nil {
158-
return [32]byte{}, 0, fmt.Errorf("error getting Int(1) - validUntil: %w", err)
159-
}
160-
161-
//nolint:gosec // G115 conversion safe, validUntil is uint32
162-
return common.BigToHash(root), uint32(validUntil.Uint64()), nil
88+
return common.BigToHash(r.Root), r.ValidUntil, nil
16389
}
16490

165-
// TODO (ton): use GetRootMetadata from chainlink-ton/pkg/bindings/mcms/mcms
16691
func (i Inspector) GetRootMetadata(ctx context.Context, _address string) (types.ChainMetadata, error) {
16792
// Map to Ton Address type (mcms.address)
16893
addr, err := address.ParseAddr(_address)
16994
if err != nil {
17095
return types.ChainMetadata{}, fmt.Errorf("invalid mcms address: %w", err)
17196
}
17297

173-
// TODO: mv and import from github.com/smartcontractkit/chainlink-ton/bindings/mcms/mcms
17498
block, err := i.client.CurrentMasterchainInfo(ctx)
17599
if err != nil {
176100
return types.ChainMetadata{}, fmt.Errorf("failed to get current masterchain info: %w", err)
177101
}
178102

179-
r, err := i.client.RunGetMethod(ctx, block, addr, "getRootMetadata")
180-
if err != nil {
181-
return types.ChainMetadata{}, fmt.Errorf("error getting getRootMetadata: %w", err)
182-
}
183-
184-
ri, err := r.Int(2) //nolint:mnd // 2 index for 3rd return value
103+
rm, err := tvm.CallGetter(ctx, i.client, block, addr, mcms.GetRootMetadata)
185104
if err != nil {
186-
return types.ChainMetadata{}, fmt.Errorf("error getting preOpCount int: %w", err)
105+
return types.ChainMetadata{}, err
187106
}
188107

189108
return types.ChainMetadata{
190-
StartingOpCount: ri.Uint64(),
109+
StartingOpCount: rm.PreOpCount,
191110
MCMAddress: _address,
192111
}, nil
193112
}

sdk/ton/inspector_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func TestInspector_GetConfig(t *testing.T) {
8585
address: "EQADa3W6G0nSiTV4a6euRA42fU9QxSEnb-WeDpcrtWzA2jM8",
8686
mockError: errors.New("call to contract failed"),
8787
want: nil,
88-
wantErr: errors.New("error getting getConfig: call to contract failed"),
88+
wantErr: errors.New("tvm: failed to run get method \"getConfig\": call to contract failed"),
8989
},
9090
{
9191
name: "Empty Signers list",
@@ -177,7 +177,7 @@ func TestInspector_GetOpCount(t *testing.T) {
177177
address: "EQADa3W6G0nSiTV4a6euRA42fU9QxSEnb-WeDpcrtWzA2jM8",
178178
mockError: errors.New("call to contract failed"),
179179
want: 0,
180-
wantErr: errors.New("error getting getOpCount: call to contract failed"),
180+
wantErr: errors.New("tvm: failed to run get method \"getOpCount\": call to contract failed"),
181181
},
182182
}
183183

@@ -252,7 +252,7 @@ func TestInspector_GetRoot(t *testing.T) {
252252
name: "CallContract error",
253253
address: "EQADa3W6G0nSiTV4a6euRA42fU9QxSEnb-WeDpcrtWzA2jM8",
254254
mockError: errors.New("call to contract failed"),
255-
wantErr: errors.New("error getting getRoot: call to contract failed"),
255+
wantErr: errors.New("tvm: failed to run get method \"getRoot\": call to contract failed"),
256256
},
257257
}
258258

@@ -332,7 +332,7 @@ func TestInspector_GetRootMetadata(t *testing.T) {
332332
name: "CallContract error",
333333
address: "EQADa3W6G0nSiTV4a6euRA42fU9QxSEnb-WeDpcrtWzA2jM8",
334334
mockError: errors.New("call to contract failed"),
335-
wantErr: errors.New("error getting getRootMetadata: call to contract failed"),
335+
wantErr: errors.New("tvm: failed to run get method \"getRootMetadata\": call to contract failed"),
336336
},
337337
}
338338

0 commit comments

Comments
 (0)