@@ -2,14 +2,12 @@ package ton
22
33import (
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
3936func (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
10656func (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
13371func (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
16691func (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}
0 commit comments