Skip to content

Commit

Permalink
Merge branch 'develop' into jtw/increase-instant-finality-depth
Browse files Browse the repository at this point in the history
  • Loading branch information
silaslenihan authored Jun 3, 2024
2 parents 03d7546 + 5ff32bd commit f20cfc3
Show file tree
Hide file tree
Showing 59 changed files with 694 additions and 479 deletions.
5 changes: 5 additions & 0 deletions .changeset/cyan-items-lie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

#breaking_change Remove the `xdai` `ChainType` config option. Moving forward, only `gnosis` can be used.
5 changes: 5 additions & 0 deletions .changeset/fast-kings-compete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

#internal keystone: handle local target transmission logic in capability wrapper
5 changes: 5 additions & 0 deletions .changeset/lazy-ravens-hide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

bump chainlink-starknet so it builds reports with median gas price #updated
5 changes: 5 additions & 0 deletions .changeset/neat-zebras-fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

#updated Remove deprecated app.shortcut links
5 changes: 5 additions & 0 deletions .changeset/olive-knives-happen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": patch
---

#internal Generic Plugin `onchainSigningStrategy` support
2 changes: 1 addition & 1 deletion common/config/chaintype.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func ChainTypeFromSlug(slug string) ChainType {
return ChainArbitrum
case "celo":
return ChainCelo
case "gnosis", "xdai":
case "gnosis":
return ChainGnosis
case "kroma":
return ChainKroma
Expand Down
2 changes: 1 addition & 1 deletion contracts/test/v0.8/automation/CronUpkeep.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ describe('CronUpkeep', () => {
it('has a limited public ABI [ @skip-coverage ]', () => {
// Casting cron is necessary due to a tricky versioning mismatch issue, likely between ethers
// and typechain. Remove once the version issue is resolved.
// https://app.shortcut.com/chainlinklabs/story/21905/remove-contract-cast-in-cronupkeep-test-ts
// https://smartcontract-it.atlassian.net/browse/ARCHIVE-22094
h.publicAbi(cron as unknown as Contract, [
's_maxJobs',
'performUpkeep',
Expand Down
30 changes: 24 additions & 6 deletions core/capabilities/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,20 @@ import (
"sync"

"github.com/smartcontractkit/chainlink-common/pkg/capabilities"
"github.com/smartcontractkit/chainlink/v2/core/capabilities/transmission"
"github.com/smartcontractkit/chainlink/v2/core/logger"
p2ptypes "github.com/smartcontractkit/chainlink/v2/core/services/p2p/types"
)

// Registry is a struct for the registry of capabilities.
// Registry is safe for concurrent use.
type Registry struct {
m map[string]capabilities.BaseCapability
mu sync.RWMutex
lggr logger.Logger
lggr logger.Logger
peerID p2ptypes.PeerID
don capabilities.DON

m map[string]capabilities.BaseCapability
mu sync.RWMutex
}

// Get gets a capability from the registry.
Expand Down Expand Up @@ -134,6 +139,17 @@ func (r *Registry) Add(ctx context.Context, c capabilities.BaseCapability) error
if !ok {
return fmt.Errorf("target capability does not satisfy TargetCapability interface")
}

capInfo, err := c.Info(ctx)
if err != nil {
return fmt.Errorf("failed to get info of target capability: %w", err)
}

// If the DON is nil this is a local capability and requires wrapping in a local target transmission capability
if capInfo.DON == nil {
c = transmission.NewLocalTargetCapability(r.lggr, r.peerID, r.don, c.(capabilities.TargetCapability))
}

default:
return fmt.Errorf("unknown capability type: %s", info.CapabilityType)
}
Expand All @@ -150,9 +166,11 @@ func (r *Registry) Add(ctx context.Context, c capabilities.BaseCapability) error
}

// NewRegistry returns a new Registry.
func NewRegistry(lggr logger.Logger) *Registry {
func NewRegistry(lggr logger.Logger, peerID p2ptypes.PeerID, don capabilities.DON) *Registry {
return &Registry{
m: map[string]capabilities.BaseCapability{},
lggr: lggr.Named("CapabilityRegistry"),
m: map[string]capabilities.BaseCapability{},
lggr: lggr.Named("CapabilityRegistry"),
peerID: peerID,
don: don,
}
}
53 changes: 50 additions & 3 deletions core/capabilities/registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@ import (

"github.com/smartcontractkit/chainlink-common/pkg/capabilities"
"github.com/smartcontractkit/chainlink-common/pkg/capabilities/triggers"
"github.com/smartcontractkit/chainlink-common/pkg/values"
coreCapabilities "github.com/smartcontractkit/chainlink/v2/core/capabilities"
"github.com/smartcontractkit/chainlink/v2/core/capabilities/transmission"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
p2ptypes "github.com/smartcontractkit/chainlink/v2/core/services/p2p/types"
)

type mockCapability struct {
Expand All @@ -34,7 +37,7 @@ func (m *mockCapability) UnregisterFromWorkflow(ctx context.Context, request cap
func TestRegistry(t *testing.T) {
ctx := testutils.Context(t)

r := coreCapabilities.NewRegistry(logger.TestLogger(t))
r := coreCapabilities.NewRegistry(logger.TestLogger(t), p2ptypes.PeerID{}, capabilities.DON{})

id := "capability-1"
ci, err := capabilities.NewCapabilityInfo(
Expand Down Expand Up @@ -62,7 +65,7 @@ func TestRegistry(t *testing.T) {

func TestRegistry_NoDuplicateIDs(t *testing.T) {
ctx := testutils.Context(t)
r := coreCapabilities.NewRegistry(logger.TestLogger(t))
r := coreCapabilities.NewRegistry(logger.TestLogger(t), p2ptypes.PeerID{}, capabilities.DON{})

id := "capability-1"
ci, err := capabilities.NewCapabilityInfo(
Expand Down Expand Up @@ -173,7 +176,7 @@ func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
}

ctx := testutils.Context(t)
reg := coreCapabilities.NewRegistry(logger.TestLogger(t))
reg := coreCapabilities.NewRegistry(logger.TestLogger(t), p2ptypes.PeerID{}, capabilities.DON{})
for _, tc := range tcs {
t.Run(tc.name, func(t *testing.T) {
id, err := tc.newCapability(ctx, reg)
Expand All @@ -184,3 +187,47 @@ func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
})
}
}

func TestRegistry_ReturnsLocalTargetCapabilityForLocalTargets(t *testing.T) {
ctx := testutils.Context(t)
r := coreCapabilities.NewRegistry(logger.TestLogger(t), p2ptypes.PeerID{}, capabilities.DON{})

id := "capability-1"
ci, err := capabilities.NewRemoteCapabilityInfo(
id,
capabilities.CapabilityTypeTarget,
"capability-1-description",
"v1.0.0",
nil,
)
require.NoError(t, err)

c := &mockCapability{CapabilityInfo: ci}
err = r.Add(ctx, c)
require.NoError(t, err)

targetCapability, err := r.GetTarget(ctx, id)
require.NoError(t, err)

duffTransmissionSchedule, err := values.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10banana",
})
require.NoError(t, err)

_, err = targetCapability.Execute(ctx, capabilities.CapabilityRequest{
Config: duffTransmissionSchedule,
})
assert.NotNil(t, err)

validTransmissionSchedule, err := values.NewMap(map[string]any{
"schedule": transmission.Schedule_OneAtATime,
"deltaStage": "10ms",
})
require.NoError(t, err)

_, err = targetCapability.Execute(ctx, capabilities.CapabilityRequest{
Config: validTransmissionSchedule,
})
assert.NoError(t, err)
}
Loading

0 comments on commit f20cfc3

Please sign in to comment.