Skip to content

Commit 1e97f79

Browse files
committed
core/web: support pprof for loop plugins
1 parent d1ef343 commit 1e97f79

28 files changed

Lines changed: 569 additions & 205 deletions

File tree

.changeset/slow-deer-walk.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"chainlink": patch
3+
---
4+
5+
Expanded `admin profile` to collect PPROF profiles from LOOP Plugins. Added `-vitals` flag for more granular profiling.

core/cmd/admin_commands.go

Lines changed: 110 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package cmd
22

33
import (
44
"bytes"
5+
"context"
56
"encoding/json"
67
"errors"
78
"fmt"
89
"io"
10+
"math"
911
"net/http"
1012
"os"
1113
"path/filepath"
@@ -20,6 +22,7 @@ import (
2022

2123
"github.com/smartcontractkit/chainlink/v2/core/sessions"
2224
"github.com/smartcontractkit/chainlink/v2/core/utils"
25+
"github.com/smartcontractkit/chainlink/v2/core/web"
2326
"github.com/smartcontractkit/chainlink/v2/core/web/presenters"
2427
)
2528

@@ -65,6 +68,10 @@ func initAdminSubCmds(s *Shell) []cli.Command {
6568
Usage: "output directory of the captured profile",
6669
Value: "/tmp/",
6770
},
71+
cli.StringSliceFlag{
72+
Name: "vitals, v",
73+
Usage: "vitals to collect, can be specified multiple times. Options: 'allocs', 'block', 'cmdline', 'goroutine', 'heap', 'mutex', 'profile', 'threadcreate', 'trace'",
74+
},
6875
},
6976
},
7077
{
@@ -324,30 +331,114 @@ func (s *Shell) Profile(c *cli.Context) error {
324331

325332
genDir := filepath.Join(baseDir, "debuginfo-"+time.Now().Format(time.RFC3339))
326333

327-
if err := os.Mkdir(genDir, 0o755); err != nil {
334+
vitals := c.StringSlice("vitals")
335+
if len(vitals) == 0 {
336+
vitals = []string{
337+
"allocs", // A sampling of all past memory allocations
338+
"block", // Stack traces that led to blocking on synchronization primitives
339+
"cmdline", // The command line invocation of the current program
340+
"goroutine", // Stack traces of all current goroutines
341+
"heap", // A sampling of memory allocations of live objects.
342+
"mutex", // Stack traces of holders of contended mutexes
343+
"profile", // CPU profile.
344+
"threadcreate", // Stack traces that led to the creation of new OS threads
345+
"trace", // A trace of execution of the current program.
346+
}
347+
}
348+
349+
plugins, err := s.discoverPlugins(ctx)
350+
if err != nil {
328351
return s.errorOut(err)
329352
}
330-
var wgPprof sync.WaitGroup
331-
vitals := []string{
332-
"allocs", // A sampling of all past memory allocations
333-
"block", // Stack traces that led to blocking on synchronization primitives
334-
"cmdline", // The command line invocation of the current program
335-
"goroutine", // Stack traces of all current goroutines
336-
"heap", // A sampling of memory allocations of live objects.
337-
"mutex", // Stack traces of holders of contended mutexes
338-
"profile", // CPU profile.
339-
"threadcreate", // Stack traces that led to the creation of new OS threads
340-
"trace", // A trace of execution of the current program.
353+
var names []string
354+
for _, group := range plugins {
355+
if name := group.Labels[web.LabelMetaPluginName]; name != "" {
356+
names = append(names, name)
357+
}
358+
}
359+
360+
if len(names) == 0 {
361+
s.Logger.Infof("Collecting profiles: %v", vitals)
362+
} else {
363+
s.Logger.Infof("Collecting profiles from host and %d plugins: %v", len(names), vitals)
341364
}
342-
wgPprof.Add(len(vitals))
343-
s.Logger.Infof("Collecting profiles: %v", vitals)
344365
s.Logger.Infof("writing debug info to %s", genDir)
345366

367+
var wg sync.WaitGroup
368+
errs := make([]error, len(names)+1)
369+
wg.Add(len(names) + 1)
370+
go func() {
371+
defer wg.Done()
372+
errs[0] = s.profile(ctx, genDir, "", vitals, seconds)
373+
}()
374+
for i, name := range names {
375+
go func() {
376+
defer wg.Done()
377+
errs[i] = s.profile(ctx, genDir, name, vitals, seconds)
378+
}()
379+
}
380+
wg.Wait()
381+
382+
err = errors.Join(errs...)
383+
if err != nil {
384+
return s.errorOut(err)
385+
}
386+
return nil
387+
}
388+
func (s *Shell) discoverPlugins(ctx context.Context) (
389+
got []struct {
390+
Targets []string `yaml:"targets"`
391+
Labels map[string]string `yaml:"labels"`
392+
},
393+
err error,
394+
) {
395+
resp, err := s.HTTP.Get(ctx, "/discovery")
396+
if err != nil {
397+
return
398+
}
399+
defer func() {
400+
if resp.Body != nil {
401+
resp.Body.Close()
402+
}
403+
}()
404+
data, err := io.ReadAll(resp.Body)
405+
if err != nil {
406+
return
407+
}
408+
409+
if err = json.Unmarshal(data, &got); err != nil {
410+
s.Logger.Errorf("failed to unmarshal discovery response: %s", string(data))
411+
return
412+
}
413+
return
414+
}
415+
416+
func (s *Shell) profile(ctx context.Context, genDir string, name string, vitals []string, seconds uint) error {
417+
lggr := s.Logger
418+
path := "/v2"
419+
if name != "" {
420+
genDir = filepath.Join(genDir, "plugins", name)
421+
path += "/plugins/" + name
422+
lggr = lggr.With("plugin", name)
423+
}
424+
if err := os.MkdirAll(genDir, 0o755); err != nil {
425+
return fmt.Errorf("failed to create directory: %w", err)
426+
}
427+
428+
timeout := seconds + max(10, seconds>>2) // +25%
429+
if timeout > math.MaxInt64 {
430+
return fmt.Errorf("profile timeout %d seconds overflows max int64: %d", seconds, math.MaxInt64)
431+
}
432+
346433
errs := make(chan error, len(vitals))
434+
var wgPprof sync.WaitGroup
435+
wgPprof.Add(len(vitals))
347436
for _, vt := range vitals {
348-
go func(vt string) {
437+
go func(ctx context.Context, vt string) {
349438
defer wgPprof.Done()
350-
uri := fmt.Sprintf("/v2/debug/pprof/%s?seconds=%d", vt, seconds)
439+
ctx, cancel := context.WithTimeout(ctx, time.Duration(timeout)*time.Second) //nolint:gosec // G115 false positive
440+
defer cancel()
441+
uri := fmt.Sprintf(path+"/debug/pprof/%s?seconds=%d", vt, seconds)
351442
resp, err := s.HTTP.Get(ctx, uri)
352443
if err != nil {
353444
errs <- fmt.Errorf("error collecting %s: %w", vt, err)
@@ -403,12 +494,12 @@ func (s *Shell) Profile(c *cli.Context) error {
403494
errs <- fmt.Errorf("error closing file for %s: %w", vt, err)
404495
return
405496
}
406-
}(vt)
497+
}(ctx, vt)
407498
}
408499
wgPprof.Wait()
409500
close(errs)
410-
// Atmost one err is emitted per vital.
411-
s.Logger.Infof("collected %d/%d profiles", len(vitals)-len(errs), len(vitals))
501+
// At most one err is emitted per vital.
502+
lggr.Infof("collected %d/%d profiles", len(vitals)-len(errs), len(vitals))
412503
if len(errs) > 0 {
413504
var merr error
414505
for err := range errs {

core/cmd/shell_local.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ func initLocalSubCmds(s *Shell, safe bool) []cli.Command {
148148
Usage: "output directory of the captured profile",
149149
Value: "/tmp/",
150150
},
151+
cli.StringSliceFlag{
152+
Name: "vitals, v",
153+
Usage: "vitals to collect, can be specified multiple times. Options: 'allocs', 'block', 'cmdline', 'goroutine', 'heap', 'mutex', 'profile', 'threadcreate', 'trace'",
154+
},
151155
},
152156
Hidden: true,
153157
Before: func(_ *cli.Context) error {

core/scripts/go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ require (
480480
github.com/smartcontractkit/ccip-contract-examples/chains/evm v0.0.0-20260129135848-c86808ba5cb9 // indirect
481481
github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect
482482
github.com/smartcontractkit/chain-selectors v1.0.91 // indirect
483-
github.com/smartcontractkit/chainlink-aptos v0.0.0-20251212131933-e5e85d6fa4d3 // indirect
483+
github.com/smartcontractkit/chainlink-aptos v0.0.0-20260217180710-bede4f4bb233 // indirect
484484
github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260216170932-c8081efc1ae5 // indirect
485485
github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260121163256-85accaf3d28d // indirect
486486
github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 // indirect
@@ -498,22 +498,22 @@ require (
498498
github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-discovery v0.0.0-20251211142334-5c3421fe2c8d // indirect
499499
github.com/smartcontractkit/chainlink-protos/chainlink-ccv/verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect
500500
github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b // indirect
501-
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b // indirect
501+
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260211172625-dff40e83b3c9 // indirect
502502
github.com/smartcontractkit/chainlink-protos/orchestrator v0.10.0 // indirect
503503
github.com/smartcontractkit/chainlink-protos/ring/go v0.0.0-20260128151123-605e9540b706 // indirect
504504
github.com/smartcontractkit/chainlink-protos/rmn/v1.6/go v0.0.0-20250131130834-15e0d4cde2a6 // indirect
505505
github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect
506506
github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3 // indirect
507507
github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260217043601-5cc966896c4f // indirect
508-
github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260211115641-f96bb4343198 // indirect
508+
github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260217175957-8f1af02c5075 // indirect
509509
github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260209164410-3aec83b0246f // indirect
510-
github.com/smartcontractkit/chainlink-sui v0.0.0-20260205175622-33e65031f9a9 // indirect
510+
github.com/smartcontractkit/chainlink-sui v0.0.0-20260217210647-11c42009ec1f // indirect
511511
github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260124000807-bff5e296dfb7 // indirect
512512
github.com/smartcontractkit/chainlink-testing-framework/framework/components/fake v0.10.0 // indirect
513513
github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect
514-
github.com/smartcontractkit/chainlink-ton v0.0.0-20260211155338-cd4708d2b938 // indirect
514+
github.com/smartcontractkit/chainlink-ton v0.0.0-20260218144352-f8d460be6125 // indirect
515515
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260211155338-cd4708d2b938 // indirect
516-
github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20251014143056-a0c6328c91e9 // indirect
516+
github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260218133534-cbd44da2856b // indirect
517517
github.com/smartcontractkit/cre-sdk-go v1.3.0 // indirect
518518
github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e // indirect
519519
github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect

core/scripts/go.sum

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,8 +1596,8 @@ github.com/smartcontractkit/ccip-owner-contracts v0.1.0 h1:GiBDtlx7539o7AKlDV+9L
15961596
github.com/smartcontractkit/ccip-owner-contracts v0.1.0/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY=
15971597
github.com/smartcontractkit/chain-selectors v1.0.91 h1:Aip7IZTv40RtbHgZ9mTjm5KyhYrpPefG7iVMzLZ27M4=
15981598
github.com/smartcontractkit/chain-selectors v1.0.91/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w=
1599-
github.com/smartcontractkit/chainlink-aptos v0.0.0-20251212131933-e5e85d6fa4d3 h1:bbVSKb++R+rpLkydNvyS4nZPNkcjtolUuFC8YVwtMVk=
1600-
github.com/smartcontractkit/chainlink-aptos v0.0.0-20251212131933-e5e85d6fa4d3/go.mod h1:OywVThRaVXwknATT2B8QAwjOJ1LoYBB9bTsmRpf6RPw=
1599+
github.com/smartcontractkit/chainlink-aptos v0.0.0-20260217180710-bede4f4bb233 h1:V/XhiRpvnsJ4Cq4tohja/fvMgUIOy8zmphqhUslTP8M=
1600+
github.com/smartcontractkit/chainlink-aptos v0.0.0-20260217180710-bede4f4bb233/go.mod h1:dTKyBdwtx1OXzVBwglpB0zRCFW0sG4JZkhMqv4yyFLU=
16011601
github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU=
16021602
github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08=
16031603
github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260203202624-5101f4d33736 h1:h2r/UWIJI1zP/I8IwmmJ44aAfPZZcRgfFjHAzehqqGQ=
@@ -1656,8 +1656,8 @@ github.com/smartcontractkit/chainlink-protos/job-distributor v0.17.0 h1:xHPmFDhf
16561656
github.com/smartcontractkit/chainlink-protos/job-distributor v0.17.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE=
16571657
github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b h1:QuI6SmQFK/zyUlVWEf0GMkiUYBPY4lssn26nKSd/bOM=
16581658
github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b/go.mod h1:qSTSwX3cBP3FKQwQacdjArqv0g6QnukjV4XuzO6UyoY=
1659-
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b h1:36knUpKHHAZ86K4FGWXtx8i/EQftGdk2bqCoEu/Cha8=
1660-
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b/go.mod h1:dkR2uYg9XYJuT1JASkPzWE51jjFkVb86P7a/yXe5/GM=
1659+
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260211172625-dff40e83b3c9 h1:hhevsu8k7tlDRrYZmgAh7V4avGQDMvus1bwIlial3Ps=
1660+
github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260211172625-dff40e83b3c9/go.mod h1:dkR2uYg9XYJuT1JASkPzWE51jjFkVb86P7a/yXe5/GM=
16611661
github.com/smartcontractkit/chainlink-protos/op-catalog v0.0.4 h1:AEnxv4HM3WD1RbQkRiFyb9cJ6YKAcqBp1CpIcFdZfuo=
16621662
github.com/smartcontractkit/chainlink-protos/op-catalog v0.0.4/go.mod h1:PjZD54vr6rIKEKQj6HNA4hllvYI/QpT+Zefj3tqkFAs=
16631663
github.com/smartcontractkit/chainlink-protos/orchestrator v0.10.0 h1:0eroOyBwmdoGUwUdvMI0/J7m5wuzNnJDMglSOK1sfNY=
@@ -1672,12 +1672,12 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c
16721672
github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo=
16731673
github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260217043601-5cc966896c4f h1:3+vQMwuWL6+OqNutFqo/+gkczJwcr+MBPqeSxcjfI1Y=
16741674
github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260217043601-5cc966896c4f/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc=
1675-
github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260211115641-f96bb4343198 h1:wWLBlbexHxP87lEdGR022Ve+2OW/MxvfWxg2U+uoMis=
1676-
github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260211115641-f96bb4343198/go.mod h1:/cw67XEnsP9wjQQH4BhL347Qy9HDg51+ETrMpdRTPIo=
1675+
github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260217175957-8f1af02c5075 h1:NdgNty9Jd/YwrYVmCSaHKnuyvSL+EA6I1bsjE+AH1t8=
1676+
github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260217175957-8f1af02c5075/go.mod h1:krefLZ7max8nXPrDIoKEDv2f5pflBbVTayQQMWJ4oy0=
16771677
github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260209164410-3aec83b0246f h1:XlAfD2E1/xrHRgMp8TwB8sdbbLZc+TzhGAeDDKqtLk0=
16781678
github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260209164410-3aec83b0246f/go.mod h1:1UT/D2BS/a54Vr/vRXxIgcJtsbCWPxR55NVh2QZ78wA=
1679-
github.com/smartcontractkit/chainlink-sui v0.0.0-20260205175622-33e65031f9a9 h1:KyPROV+v7P8VdiU7JhVuGLcDlEBsURSpQmSCgNBTY+s=
1680-
github.com/smartcontractkit/chainlink-sui v0.0.0-20260205175622-33e65031f9a9/go.mod h1:KpEWZJMLwbdMHeHQz9rbkES0vRrx4nk6OQXyhlHb9/8=
1679+
github.com/smartcontractkit/chainlink-sui v0.0.0-20260217210647-11c42009ec1f h1:itSU9nCBtbtmJEDlgVjk53AH6cJaZZzg3gMeEPQrbPU=
1680+
github.com/smartcontractkit/chainlink-sui v0.0.0-20260217210647-11c42009ec1f/go.mod h1:U3XStbEnbx/+L22n1/8aOIdgcGVxtsZB7p59xJGngAs=
16811681
github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260124000807-bff5e296dfb7 h1:nC/FJN5iwh/zD5u8R6qwhkx60c/83E9f6EnRonr/RG8=
16821682
github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260124000807-bff5e296dfb7/go.mod h1:FbqbTFP9aBvE/2GDmfcFr/03HEWkzjP7OMmxdib26aY=
16831683
github.com/smartcontractkit/chainlink-testing-framework/framework v0.13.14-0.20260202230832-eb33f42188d1 h1:JijOMT/94w/mt2q69vBQodliDlVfe+jqeaSTQJP3uxo=
@@ -1692,12 +1692,12 @@ github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 h1:cWUHB6Q
16921692
github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2/go.mod h1:Z4K5VJLjsfqIIaBcZ1Sfccxu0xsCxBjPa6zF+5gtQaM=
16931693
github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.3 h1:TZ0Yk+vjAJpoWnfsPdftWkq/NwZTrk734a/H4RHKnY8=
16941694
github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.3/go.mod h1:kHYJnZUqiPF7/xN5273prV+srrLJkS77GbBXHLKQpx0=
1695-
github.com/smartcontractkit/chainlink-ton v0.0.0-20260211155338-cd4708d2b938 h1:xv4Dfqqoxoph6bOnwklJyNckEHwiDO2z3jRdKtfthcI=
1696-
github.com/smartcontractkit/chainlink-ton v0.0.0-20260211155338-cd4708d2b938/go.mod h1:IZvH2r16xcQvVLB7AtjU112wnHfEku+29OlI1vCQHCQ=
1695+
github.com/smartcontractkit/chainlink-ton v0.0.0-20260218144352-f8d460be6125 h1:ptVEMET7sCJg6ToNkDwiqu3PqtceTHTlePQZxCeYHMg=
1696+
github.com/smartcontractkit/chainlink-ton v0.0.0-20260218144352-f8d460be6125/go.mod h1:FDDjLuc4vrfclu3JHkMaREg0XZz7Lw1MK47Z4jJ4U5Q=
16971697
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260211155338-cd4708d2b938 h1:F9mLFrH+Q8iZbs9ZFdduB1TciLA5HKSdb0jPdRCVlck=
16981698
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260211155338-cd4708d2b938/go.mod h1:P7Mnq3k9nY9+BK3LuZRLclmCGI8ptC7hHh5G2OT1/mM=
1699-
github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20251014143056-a0c6328c91e9 h1:7Ut0g+Pdm+gcu2J/Xv8OpQOVf7uLGErMX8yhC4b4tIA=
1700-
github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20251014143056-a0c6328c91e9/go.mod h1:h9hMs6K4hT1+mjYnJD3/SW1o7yC/sKjNi0Qh8hLfiCE=
1699+
github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260218133534-cbd44da2856b h1:0XLtETkgkzwnEgUIIgyO/oydkUpzDVVuuFLf6aBeNPg=
1700+
github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260218133534-cbd44da2856b/go.mod h1:XMp5GoxJzF/L5xoA2Og5uAMIUK0WDnZIHzhIilCV8zM=
17011701
github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20251014124537-af6b1684fe15 h1:idp/RjsFznR48JWGfZICsrpcl9JTrnMzoUNVz8MhQMI=
17021702
github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20251014124537-af6b1684fe15/go.mod h1:ea1LESxlSSOgc2zZBqf1RTkXTMthHaspdqUHd7W4lF0=
17031703
github.com/smartcontractkit/cre-sdk-go v1.3.0 h1:zzbNf8CDjadz4xLZPmv0UQIphxs8ChXs4ow+bmF+2OI=

0 commit comments

Comments
 (0)