@@ -146,6 +146,7 @@ type Secrets struct {
146146 Threshold ThresholdKeyShareSecrets `toml:",omitempty"`
147147 EVM EthKeys `toml:",omitempty"` // choose EVM as the TOML field name to align with relayer config convention
148148 Solana SolKeys `toml:",omitempty"` // choose Solana as the TOML field name to align with relayer config convention
149+ Aptos AptosKeys `toml:",omitempty"` // choose Aptos as the TOML field name to align with relayer config convention
149150
150151 P2PKey P2PKey `toml:",omitempty"`
151152 DKGRecipientKey DKGRecipientKey `toml:",omitempty"`
@@ -164,6 +165,16 @@ type SolKey struct {
164165 Password * models.Secret
165166}
166167
168+ type AptosKeys struct {
169+ Keys []* AptosKey
170+ }
171+
172+ type AptosKey struct {
173+ JSON * models.Secret
174+ ID * uint64
175+ Password * models.Secret
176+ }
177+
167178func (s * SolKeys ) SetFrom (f * SolKeys ) error {
168179 err := s .validateMerge (f )
169180 if err != nil {
@@ -245,6 +256,85 @@ func (e *SolKey) ValidateConfig() (err error) {
245256 return err
246257}
247258
259+ func (a * AptosKeys ) SetFrom (f * AptosKeys ) error {
260+ err := a .validateMerge (f )
261+ if err != nil {
262+ return err
263+ }
264+ if f == nil || len (f .Keys ) == 0 {
265+ return nil
266+ }
267+ a .Keys = make ([]* AptosKey , len (f .Keys ))
268+ copy (a .Keys , f .Keys )
269+ return nil
270+ }
271+
272+ func (a * AptosKeys ) validateMerge (f * AptosKeys ) (err error ) {
273+ have := make (map [uint64 ]struct {})
274+ if a != nil && f != nil {
275+ for _ , aptosKey := range a .Keys {
276+ have [* aptosKey .ID ] = struct {}{}
277+ }
278+ for _ , aptosKey := range f .Keys {
279+ if _ , ok := have [* aptosKey .ID ]; ok {
280+ err = errors .Join (err , configutils.ErrOverride {Name : fmt .Sprintf ("AptosKeys: %d" , * aptosKey .ID )})
281+ }
282+ }
283+ }
284+ return err
285+ }
286+
287+ func (a * AptosKeys ) ValidateConfig () (err error ) {
288+ for i , aptosKey := range a .Keys {
289+ if err2 := aptosKey .ValidateConfig (); err2 != nil {
290+ err = errors .Join (err , configutils.ErrInvalid {Name : fmt .Sprintf ("AptosKeys[%d]" , i ), Value : aptosKey , Msg : "invalid AptosKey" })
291+ }
292+ }
293+ return err
294+ }
295+
296+ func (p * AptosKey ) SetFrom (f * AptosKey ) (err error ) {
297+ err = p .validateMerge (f )
298+ if err != nil {
299+ return err
300+ }
301+ if v := f .JSON ; v != nil {
302+ p .JSON = v
303+ }
304+ if v := f .ID ; v != nil {
305+ p .ID = v
306+ }
307+ if v := f .Password ; v != nil {
308+ p .Password = v
309+ }
310+ return nil
311+ }
312+
313+ func (p * AptosKey ) validateMerge (f * AptosKey ) (err error ) {
314+ if p .JSON != nil && f .JSON != nil {
315+ err = errors .Join (err , configutils.ErrOverride {Name : "JSON" })
316+ }
317+ if p .ID != nil && f .ID != nil {
318+ err = errors .Join (err , configutils.ErrOverride {Name : "ID" })
319+ }
320+ if p .Password != nil && f .Password != nil {
321+ err = errors .Join (err , configutils.ErrOverride {Name : "Password" })
322+ }
323+ return err
324+ }
325+
326+ func (p * AptosKey ) ValidateConfig () (err error ) {
327+ if (p .JSON != nil ) != (p .Password != nil ) || (p .Password != nil ) != (p .ID != nil ) {
328+ err = errors .Join (err , configutils.ErrInvalid {Name : "AptosKey" , Value : p .JSON , Msg : "all fields must be nil or non-nil" })
329+ }
330+ if p .ID != nil {
331+ if _ , ok := chain_selectors .AptosChainIdToChainSelector ()[* p .ID ]; ! ok {
332+ err = errors .Join (err , configutils.ErrInvalid {Name : "ID" , Value : p .ID , Msg : "invalid chain id" })
333+ }
334+ }
335+ return err
336+ }
337+
248338type EthKeys struct {
249339 Keys []* EthKey
250340}
0 commit comments