Skip to content

Commit 9e33a9f

Browse files
committed
Add sdk/ton/timelock_inspector_test.go
1 parent d7e0cb4 commit 9e33a9f

File tree

4 files changed

+480
-23
lines changed

4 files changed

+480
-23
lines changed

go.sum

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -623,20 +623,6 @@ github.com/smartcontractkit/chainlink-sui v0.0.0-20251016153021-3d4a0208cf70 h1:
623623
github.com/smartcontractkit/chainlink-sui v0.0.0-20251016153021-3d4a0208cf70/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8=
624624
github.com/smartcontractkit/chainlink-testing-framework/framework v0.11.2 h1:Bl6eBzGmhjtYG3HF9tD3TccwfrPy8nqh8/RxY3Dthb4=
625625
github.com/smartcontractkit/chainlink-testing-framework/framework v0.11.2/go.mod h1:ssfyl4ynbxSyASGztjuAxhsum5i6uZSHM7Dd0v2p8sc=
626-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029112858-0771b49bd4d0 h1:OoSlU+HS2ng3e433m+Tw+pf8rXXcC2T2BalRG3y7Feg=
627-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029112858-0771b49bd4d0/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
628-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029194420-e883f44ef802 h1:7nFrtAjmbAMYvA6fncR3U/2eqk2XBOHOVzxKQU6E+dk=
629-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029194420-e883f44ef802/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
630-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029202225-2d29e83c38cd h1:2fxFciwc2+rAO9EFweRFbsTSYgf6lVDQUSaZYAcZWto=
631-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029202225-2d29e83c38cd/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
632-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029202625-1a32c9ac0454 h1:DHJMB8EE8F7P07ESOKEbyn1+TwC4BBZfGZHNQU8dZBM=
633-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251029202625-1a32c9ac0454/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
634-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251030104718-9dd51b8b5190 h1:/XfrZ7tjm5q91xNsmuUTZIS7/Kx8yc/n/6pbpBVMFNU=
635-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251030104718-9dd51b8b5190/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
636-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251030120805-3cc729d99e11 h1:zygLFsIKyYZoOm+h5hjbTJOOVWAc7fZmiz3UA7w7EFw=
637-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251030120805-3cc729d99e11/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
638-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251102111607-ca45c30b0924 h1:1GayyMDxwVtApmDrvNlzrawkuhxsHIiUQE6l8nlVc1A=
639-
github.com/smartcontractkit/chainlink-ton v0.0.0-20251102111607-ca45c30b0924/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
640626
github.com/smartcontractkit/chainlink-ton v0.0.0-20251102125826-96306f144e3c h1:5Ay0tAj+vXwG90LY2dAQ/8YX3Dp0naapA6rO6AYoBl4=
641627
github.com/smartcontractkit/chainlink-ton v0.0.0-20251102125826-96306f144e3c/go.mod h1:2tLeF9Rgnbp+aMH+/9vwxpSCc4I+8eyBn9sJzLbMaLc=
642628
github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY=

sdk/ton/inspector.go

Lines changed: 90 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import (
99

1010
"github.com/xssnick/tonutils-go/address"
1111
"github.com/xssnick/tonutils-go/ton"
12+
"github.com/xssnick/tonutils-go/tvm/cell"
1213

14+
"github.com/smartcontractkit/chainlink-ton/pkg/bindings/mcms/mcms"
1315
"github.com/smartcontractkit/mcms/sdk"
1416
"github.com/smartcontractkit/mcms/types"
1517
)
@@ -24,15 +26,67 @@ type Inspector struct {
2426
}
2527

2628
// NewInspector creates a new Inspector for EVM chains
27-
func NewInspector(client ton.APIClientWrapped, configTransformer ConfigTransformer) *Inspector {
29+
func NewInspector(client ton.APIClientWrapped, configTransformer ConfigTransformer) sdk.Inspector {
2830
return &Inspector{
2931
client: client,
3032
configTransformer: configTransformer,
3133
}
3234
}
3335

34-
func (i *Inspector) GetConfig(ctx context.Context, address string) (*types.Config, error) {
35-
return nil, fmt.Errorf("not implemented")
36+
func (i *Inspector) GetConfig(ctx context.Context, _address string) (*types.Config, error) {
37+
// Map to Ton Address type (mcms.address)
38+
addr, err := address.ParseAddr(_address)
39+
if err != nil {
40+
return nil, fmt.Errorf("invalid mcms address: %w", err)
41+
}
42+
43+
// TODO: mv and import from github.com/smartcontractkit/chainlink-ton/bindings/mcms/mcms
44+
block, err := i.client.CurrentMasterchainInfo(ctx)
45+
if err != nil {
46+
return nil, fmt.Errorf("failed to get current masterchain info: %w", err)
47+
}
48+
49+
r, err := i.client.RunGetMethod(ctx, block, addr, "getConfig")
50+
if err != nil {
51+
return nil, fmt.Errorf("error getting getConfig: %w", err)
52+
}
53+
54+
rc0, err := r.Cell(0)
55+
if err != nil {
56+
return nil, fmt.Errorf("error getting Config.Signers cell(0): %w", err)
57+
}
58+
59+
keySz := uint(8)
60+
signers := cell.NewDict(keySz)
61+
if rc0 != nil {
62+
signers = rc0.AsDict(keySz)
63+
}
64+
65+
rc1, err := r.Cell(1)
66+
if err != nil {
67+
return nil, fmt.Errorf("error getting Config.GroupQuorums cell(1): %w", err)
68+
}
69+
70+
groupQuorums := cell.NewDict(keySz)
71+
if rc0 != nil {
72+
groupQuorums = rc1.AsDict(keySz)
73+
}
74+
75+
rc2, err := r.Cell(2)
76+
if err != nil {
77+
return nil, fmt.Errorf("error getting Config.GroupParents cell(2): %w", err)
78+
}
79+
80+
groupParents := cell.NewDict(keySz)
81+
if rc0 != nil {
82+
groupParents = rc2.AsDict(keySz)
83+
}
84+
85+
return i.configTransformer.ToConfig(mcms.Config{
86+
Signers: signers,
87+
GroupQuorums: groupQuorums,
88+
GroupParents: groupParents,
89+
})
3690
}
3791

3892
func (i *Inspector) GetOpCount(ctx context.Context, _address string) (uint64, error) {
@@ -48,21 +102,48 @@ func (i *Inspector) GetOpCount(ctx context.Context, _address string) (uint64, er
48102
return 0, fmt.Errorf("failed to get current masterchain info: %w", err)
49103
}
50104

51-
result, err := i.client.RunGetMethod(ctx, block, addr, "getOpCount")
105+
r, err := i.client.RunGetMethod(ctx, block, addr, "getOpCount")
52106
if err != nil {
53107
return 0, fmt.Errorf("error getting getOpCount: %w", err)
54108
}
55109

56-
rs, err := result.Slice(0)
110+
ri, err := r.Int(0)
57111
if err != nil {
58112
return 0, fmt.Errorf("error getting opCount slice: %w", err)
59113
}
60114

61-
return rs.LoadUInt(64)
115+
return ri.Uint64(), nil
62116
}
63117

64-
func (i *Inspector) GetRoot(ctx context.Context, address string) (common.Hash, uint32, error) {
65-
return common.Hash{}, 0, fmt.Errorf("not implemented")
118+
func (i *Inspector) GetRoot(ctx context.Context, _address string) (common.Hash, uint32, error) {
119+
// Map to Ton Address type (mcms.address)
120+
addr, err := address.ParseAddr(_address)
121+
if err != nil {
122+
return [32]byte{}, 0, fmt.Errorf("invalid mcms address: %w", err)
123+
}
124+
125+
// TODO: mv and import from github.com/smartcontractkit/chainlink-ton/bindings/mcms/mcms
126+
block, err := i.client.CurrentMasterchainInfo(ctx)
127+
if err != nil {
128+
return [32]byte{}, 0, fmt.Errorf("failed to get current masterchain info: %w", err)
129+
}
130+
131+
r, err := i.client.RunGetMethod(ctx, block, addr, "getRoot")
132+
if err != nil {
133+
return [32]byte{}, 0, fmt.Errorf("error getting getRoot: %w", err)
134+
}
135+
136+
root, err := r.Int(0)
137+
if err != nil {
138+
return [32]byte{}, 0, fmt.Errorf("error getting Int(0) - root: %w", err)
139+
}
140+
141+
validUntil, err := r.Int(1)
142+
if err != nil {
143+
return [32]byte{}, 0, fmt.Errorf("error getting Int(1) - validUntil: %w", err)
144+
}
145+
146+
return common.Hash(root.Bytes()), uint32(validUntil.Uint64()), nil
66147
}
67148

68149
func (i *Inspector) GetRootMetadata(ctx context.Context, _address string) (types.ChainMetadata, error) {
@@ -94,7 +175,7 @@ func (i *Inspector) GetRootMetadata(ctx context.Context, _address string) (types
94175
rs.LoadBigInt(256)
95176
rs.LoadAddr()
96177

97-
preOpCount, err = rs.LoadBigUInt(64)
178+
preOpCount, err = rs.LoadBigUInt(40)
98179
if err != nil {
99180
return types.ChainMetadata{}, fmt.Errorf("error getting preOpCount: %w", err)
100181
}

0 commit comments

Comments
 (0)