Skip to content

Commit 77b7adf

Browse files
committed
use datastore
1 parent c8aded2 commit 77b7adf

File tree

3 files changed

+128
-108
lines changed

3 files changed

+128
-108
lines changed

deployment/evm/deploy_contracts.go

Lines changed: 92 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,53 @@ import (
1010

1111
"github.com/smartcontractkit/chainlink-common/pkg/logger"
1212
cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm"
13+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
1314
"github.com/smartcontractkit/chainlink-deployments-framework/deployment"
1415
deploy "github.com/smartcontractkit/chainlink/deployment"
1516

1617
firedrill_entrypoint_v1_5 "github.com/smartcontractkit/ccip-firedrill-deployment/chains/evm/generated/v1_5/gethwrappers/firedrill_entrypoint"
1718
"github.com/smartcontractkit/ccip-firedrill-deployment/chains/evm/generated/v1_6/gethwrappers/firedrill_entrypoint"
1819
"github.com/smartcontractkit/ccip-firedrill-deployment/deployment/shared"
20+
21+
"github.com/smartcontractkit/chainlink-deployments-framework/operations"
22+
"github.com/smartcontractkit/chainlink/deployment/common/opsutils"
23+
)
24+
25+
type DeployFiredrillInput struct {
26+
ChainSelector uint64
27+
}
28+
29+
var (
30+
DeployFiredrillV1_5 = opsutils.NewEVMDeployOperation[DeployFiredrillInput](
31+
"DeployFiredrill",
32+
&deploy.Version1_5_0,
33+
"",
34+
shared.FiredrillEntrypointType,
35+
firedrill_entrypoint_v1_5.FiredrillEntrypointMetaData,
36+
&opsutils.ContractOpts{
37+
Version: &deploy.Version1_5_0,
38+
EVMBytecode: common.FromHex(firedrill_entrypoint_v1_5.FiredrillEntrypointMetaData.Bin),
39+
ZkSyncVMBytecode: []byte{},
40+
},
41+
func(input DeployFiredrillInput) []any {
42+
return []any{input.ChainSelector}
43+
},
44+
)
45+
DeployFiredrillV1_6 = opsutils.NewEVMDeployOperation[DeployFiredrillInput](
46+
"DeployFiredrill",
47+
&deploy.Version1_6_0,
48+
"",
49+
shared.FiredrillEntrypointType,
50+
firedrill_entrypoint.FiredrillEntrypointMetaData,
51+
&opsutils.ContractOpts{
52+
Version: &deploy.Version1_6_0,
53+
EVMBytecode: common.FromHex(firedrill_entrypoint.FiredrillEntrypointMetaData.Bin),
54+
ZkSyncVMBytecode: []byte{},
55+
},
56+
func(input DeployFiredrillInput) []any {
57+
return []any{input.ChainSelector}
58+
},
59+
)
1960
)
2061

2162
type FiredrillEntrypoint interface {
@@ -31,15 +72,11 @@ var _ deployment.ChangeSetV2[shared.FiredrillConfig] = FiredrillDeployRegisterCh
3172
type FiredrillDeployRegisterChangeSet struct{}
3273

3374
func (c FiredrillDeployRegisterChangeSet) Apply(e deployment.Environment, config shared.FiredrillConfig) (deployment.ChangesetOutput, error) {
34-
changesetOutput, err := DeployFiredrillContracts(e, config)
75+
firedrillRef, changesetOutput, err := DeployFiredrillContracts(e, config)
3576
if err != nil {
3677
return deployment.ChangesetOutput{}, err
3778
}
38-
err = e.ExistingAddresses.Merge(changesetOutput.AddressBook)
39-
if err != nil {
40-
return deployment.ChangesetOutput{}, err
41-
}
42-
err = FiredrillRegisterContracts(e.Logger, changesetOutput.AddressBook, e.BlockChains.EVMChains()[config.ChainSelector])
79+
err = FiredrillRegisterContracts(e.Logger, firedrillRef, e.BlockChains.EVMChains()[config.ChainSelector])
4380
if err != nil {
4481
return deployment.ChangesetOutput{}, err
4582
}
@@ -67,56 +104,66 @@ func (c FiredrillDeployRegisterChangeSet) VerifyPreconditions(e deployment.Envir
67104
return nil
68105
}
69106

70-
func DeployFiredrillContracts(e deployment.Environment, config shared.FiredrillConfig) (deployment.ChangesetOutput, error) {
71-
ds := deployment.NewMemoryAddressBook()
72-
evmChains := e.BlockChains.EVMChains()
107+
func DeployFiredrillContracts(e deployment.Environment, config shared.FiredrillConfig) (datastore.AddressRef, deployment.ChangesetOutput, error) {
108+
ds := datastore.NewMemoryDataStore()
109+
var ref datastore.AddressRef
73110
switch config.Version {
74111
case deploy.Version1_5_0:
75-
_, err := deployment.DeployContract(e.Logger, evmChains[config.ChainSelector], ds, deployFiredrillEntrypointV1_5)
112+
op, err := operations.ExecuteOperation(
113+
e.OperationsBundle,
114+
DeployFiredrillV1_5,
115+
e.BlockChains.EVMChains()[config.ChainSelector],
116+
opsutils.EVMDeployInput[DeployFiredrillInput]{
117+
ChainSelector: config.ChainSelector,
118+
DeployInput: DeployFiredrillInput{
119+
ChainSelector: config.ChainSelector,
120+
},
121+
},
122+
)
76123
if err != nil {
77-
return deployment.ChangesetOutput{}, err
124+
return datastore.AddressRef{}, deployment.ChangesetOutput{}, err
125+
}
126+
ref = datastore.AddressRef{
127+
Address: op.Output.Address.Hex(),
128+
ChainSelector: config.ChainSelector,
129+
Type: datastore.ContractType(shared.FiredrillEntrypointType),
130+
Version: &deploy.Version1_5_0,
78131
}
79132
case deploy.Version1_6_0:
80-
_, err := deployment.DeployContract(e.Logger, evmChains[config.ChainSelector], ds, deployFiredrillEntrypoint)
133+
op, err := operations.ExecuteOperation(
134+
e.OperationsBundle,
135+
DeployFiredrillV1_6,
136+
e.BlockChains.EVMChains()[config.ChainSelector],
137+
opsutils.EVMDeployInput[DeployFiredrillInput]{
138+
ChainSelector: config.ChainSelector,
139+
DeployInput: DeployFiredrillInput{
140+
ChainSelector: config.ChainSelector,
141+
},
142+
},
143+
)
81144
if err != nil {
82-
return deployment.ChangesetOutput{}, err
145+
return datastore.AddressRef{}, deployment.ChangesetOutput{}, err
146+
}
147+
ref = datastore.AddressRef{
148+
Address: op.Output.Address.Hex(),
149+
ChainSelector: config.ChainSelector,
150+
Type: datastore.ContractType(shared.FiredrillEntrypointType),
151+
Version: &deploy.Version1_6_0,
83152
}
84153
default:
85-
return deployment.ChangesetOutput{}, fmt.Errorf("unknown version %s", config.Version.String())
154+
return datastore.AddressRef{}, deployment.ChangesetOutput{}, fmt.Errorf("unknown version %s", config.Version.String())
86155
}
87-
return deployment.ChangesetOutput{
88-
AddressBook: ds,
89-
}, nil
90-
}
91-
92-
func deployFiredrillEntrypointV1_5(chain cldf_evm.Chain) deployment.ContractDeploy[*firedrill_entrypoint_v1_5.FiredrillEntrypoint] {
93-
address, tx, inst, err := firedrill_entrypoint_v1_5.DeployFiredrillEntrypoint(chain.DeployerKey, chain.Client, chain.Selector)
94-
return deployment.ContractDeploy[*firedrill_entrypoint_v1_5.FiredrillEntrypoint]{
95-
Address: address,
96-
Contract: inst,
97-
Tx: tx,
98-
Tv: deployment.NewTypeAndVersion(shared.FiredrillEntrypointType, deploy.Version1_5_0),
99-
Err: err,
100-
}
101-
}
102-
103-
func deployFiredrillEntrypoint(chain cldf_evm.Chain) deployment.ContractDeploy[*firedrill_entrypoint.FiredrillEntrypoint] {
104-
address, tx, inst, err := firedrill_entrypoint.DeployFiredrillEntrypoint(chain.DeployerKey, chain.Client, chain.Selector)
105-
return deployment.ContractDeploy[*firedrill_entrypoint.FiredrillEntrypoint]{
106-
Address: address,
107-
Contract: inst,
108-
Tx: tx,
109-
Tv: deployment.NewTypeAndVersion(shared.FiredrillEntrypointType, deploy.Version1_6_0),
110-
Err: err,
156+
err := ds.AddressRefStore.Add(ref)
157+
if err != nil {
158+
return datastore.AddressRef{}, deployment.ChangesetOutput{}, err
111159
}
160+
return ref, deployment.ChangesetOutput{
161+
DataStore: ds,
162+
}, nil
112163
}
113164

114-
func FiredrillRegisterContracts(lggr logger.Logger, addressBook deployment.AddressBook, chain cldf_evm.Chain) error {
115-
firedrillEntrypointAddr, err := deployment.SearchAddressBook(addressBook, chain.Selector, shared.FiredrillEntrypointType)
116-
if err != nil {
117-
return err
118-
}
119-
firedrillEntrypoint, err := firedrill_entrypoint.NewFiredrillEntrypoint(common.HexToAddress(firedrillEntrypointAddr), chain.Client)
165+
func FiredrillRegisterContracts(lggr logger.Logger, firedrillRef datastore.AddressRef, chain cldf_evm.Chain) error {
166+
firedrillEntrypoint, err := firedrill_entrypoint.NewFiredrillEntrypoint(common.HexToAddress(firedrillRef.Address), chain.Client)
120167
if err != nil {
121168
return err
122169
}
@@ -150,6 +197,6 @@ func FiredrillRegisterContracts(lggr logger.Logger, addressBook deployment.Addre
150197
if err != nil {
151198
return err
152199
}
153-
lggr.Infof("FiredrillEntrypoint register events mined. Address: %s, tx: %s, blockNum: %d", firedrillEntrypointAddr, tx.Hash(), blockNum)
200+
lggr.Infof("FiredrillEntrypoint register events mined. Address: %s, tx: %s, blockNum: %d", firedrillRef.Address, tx.Hash(), blockNum)
154201
return nil
155202
}

deployment/evm/deploy_contracts_test.go

Lines changed: 35 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
package evm
22

33
import (
4-
"context"
5-
"maps"
6-
"slices"
74
"testing"
85
"time"
96

107
"github.com/ethereum/go-ethereum/common"
118
chainsel "github.com/smartcontractkit/chain-selectors"
12-
"github.com/smartcontractkit/chainlink-common/pkg/utils/tests"
9+
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
11+
1312
cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain"
14-
"github.com/smartcontractkit/chainlink-deployments-framework/deployment"
13+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
14+
"github.com/smartcontractkit/chainlink-deployments-framework/engine/test/environment"
1515
deploy "github.com/smartcontractkit/chainlink/deployment"
1616
"github.com/smartcontractkit/chainlink/v2/core/logger"
17-
"github.com/stretchr/testify/assert"
18-
"github.com/stretchr/testify/require"
1917

2018
firedrill_entrypoint_v1_5 "github.com/smartcontractkit/ccip-firedrill-deployment/chains/evm/generated/v1_5/gethwrappers/firedrill_entrypoint"
2119
"github.com/smartcontractkit/ccip-firedrill-deployment/chains/evm/generated/v1_5/gethwrappers/firedrill_off_ramp"
@@ -24,81 +22,56 @@ import (
2422

2523
func TestDeployFiredrillContracts(t *testing.T) {
2624
lggr := logger.TestLogger(t)
27-
chains, _ := memory.NewMemoryChains(t, 2, 1)
28-
29-
blockChains := make(map[uint64]cldf_chain.BlockChain)
30-
for _, chain := range chains {
31-
blockChains[chain.ChainSelector()] = chain
32-
}
33-
34-
env := *deployment.NewEnvironment(
35-
memory.Memory,
36-
lggr,
37-
deployment.NewMemoryAddressBook(),
38-
nil,
39-
[]string{},
40-
nil,
41-
func() context.Context { return tests.Context(t) },
42-
deployment.XXXGenerateTestOCRSecrets(),
43-
cldf_chain.NewBlockChains(blockChains),
25+
env, err := environment.New(t.Context(),
26+
environment.WithEVMSimulated(t,
27+
[]uint64{chainsel.TEST_90000001.Selector, chainsel.TEST_90000002.Selector}),
28+
environment.WithLogger(lggr),
4429
)
30+
require.NoError(t, err)
31+
4532
chainSels := env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chainsel.FamilyEVM))
4633
require.Len(t, chainSels, 2)
4734
chainSel := chainSels[0]
4835
sourceChainSel := chainSels[1]
49-
firedrillChangeset, err := DeployFiredrillContracts(env, shared.FiredrillConfig{
36+
_, firedrillChangeset, err := DeployFiredrillContracts(*env, shared.FiredrillConfig{
5037
Version: deploy.Version1_5_0,
5138
ChainSelector: chainSel,
5239
SourceChainSelector: sourceChainSel,
5340
})
5441
require.NoError(t, err)
55-
sourceChainAddr, err := firedrillChangeset.AddressBook.AddressesForChain(sourceChainSel)
56-
require.Error(t, err)
57-
assert.Empty(t, sourceChainAddr)
58-
chainAddr, err := firedrillChangeset.AddressBook.AddressesForChain(chainSel)
59-
require.NoError(t, err)
60-
assert.Len(t, chainAddr, 1)
61-
typeAndVersionList := slices.Collect(maps.Values(chainAddr))
62-
assert.Contains(t, typeAndVersionList, deployment.NewTypeAndVersion(shared.FiredrillEntrypointType, deploy.Version1_5_0))
42+
refs := firedrillChangeset.DataStore.Addresses().Filter(func(refs []datastore.AddressRef) []datastore.AddressRef {
43+
res := make([]datastore.AddressRef, 0, len(refs))
44+
for _, ref := range refs {
45+
if ref.Type.String() == shared.FiredrillEntrypointType.String() && ref.Version.Equal(&deploy.Version1_5_0) {
46+
res = append(res, ref)
47+
}
48+
}
49+
return res
50+
})
51+
assert.Len(t, refs, 1)
6352
}
6453

6554
func TestRegisterFiredrill(t *testing.T) {
6655
lggr := logger.TestLogger(t)
67-
chains, _ := memory.NewMemoryChains(t, 2, 1)
68-
69-
blockChains := make(map[uint64]cldf_chain.BlockChain)
70-
for _, chain := range chains {
71-
blockChains[chain.ChainSelector()] = chain
72-
}
73-
74-
env := *deployment.NewEnvironment(
75-
memory.Memory,
76-
lggr,
77-
deployment.NewMemoryAddressBook(),
78-
nil,
79-
[]string{},
80-
nil,
81-
func() context.Context { return tests.Context(t) },
82-
deployment.XXXGenerateTestOCRSecrets(),
83-
cldf_chain.NewBlockChains(blockChains),
56+
env, err := environment.New(t.Context(),
57+
environment.WithEVMSimulated(t,
58+
[]uint64{chainsel.TEST_90000001.Selector, chainsel.TEST_90000002.Selector}),
59+
environment.WithLogger(lggr),
8460
)
61+
require.NoError(t, err)
62+
8563
chainSels := env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chainsel.FamilyEVM))
8664
require.Len(t, chainSels, 2)
8765
chainSel := chainSels[0]
8866
sourceChainSel := chainSels[1]
89-
firedrillChangeset, err := DeployFiredrillContracts(env, shared.FiredrillConfig{
67+
firedrillRef, _, err := DeployFiredrillContracts(*env, shared.FiredrillConfig{
9068
Version: deploy.Version1_5_0,
9169
ChainSelector: chainSel,
9270
SourceChainSelector: sourceChainSel,
9371
})
9472
require.NoError(t, err)
95-
err = env.ExistingAddresses.Merge(firedrillChangeset.AddressBook)
96-
require.NoError(t, err)
97-
firedrillEntrypointAddrStr, err := deployment.SearchAddressBook(firedrillChangeset.AddressBook, chainSel, shared.FiredrillEntrypointType)
98-
firedrillEntrypointAddr := common.HexToAddress(firedrillEntrypointAddrStr)
99-
require.NoError(t, err)
10073
evmChains := env.BlockChains.EVMChains()
101-
firedrillEntrypoint, err := firedrill_entrypoint_v1_5.NewFiredrillEntrypoint(firedrillEntrypointAddr, evmChains[chainSel].Client)
74+
firedrillEntrypoint, err := firedrill_entrypoint_v1_5.NewFiredrillEntrypoint(common.HexToAddress(firedrillRef.Address), evmChains[chainSel].Client)
10275
require.NoError(t, err)
10376
firedrillOnRampAddr, err := firedrillEntrypoint.OnRamp(nil)
10477
require.NoError(t, err)
@@ -110,7 +83,7 @@ func TestRegisterFiredrill(t *testing.T) {
11083
subscription, err := firedrillOffRamp.WatchConfigSet(nil, offRampSetSink)
11184
require.NoError(t, err)
11285
defer subscription.Unsubscribe()
113-
err = FiredrillRegisterContracts(env.Logger, env.ExistingAddresses, env.BlockChains.EVMChains()[chainSel])
86+
err = FiredrillRegisterContracts(env.Logger, firedrillRef, env.BlockChains.EVMChains()[chainSel])
11487
require.NoError(t, err)
11588
timer := time.NewTimer(1 * time.Second)
11689
for {
@@ -120,10 +93,10 @@ func TestRegisterFiredrill(t *testing.T) {
12093
assert.Equal(t, ev.StaticConfig.SourceChainSelector, chainSel)
12194
assert.Equal(t, ev.StaticConfig.OnRamp, firedrillOnRampAddr)
12295
assert.Equal(t, ev.StaticConfig.CommitStore, firedrillOffRampAddr)
123-
assert.Equal(t, ev.StaticConfig.RmnProxy, firedrillEntrypointAddr)
124-
assert.Equal(t, ev.StaticConfig.TokenAdminRegistry, firedrillEntrypointAddr)
125-
assert.Equal(t, ev.DynamicConfig.Router, firedrillEntrypointAddr)
126-
assert.Equal(t, ev.DynamicConfig.PriceRegistry, firedrillEntrypointAddr)
96+
assert.Equal(t, ev.StaticConfig.RmnProxy.String(), firedrillRef.Address)
97+
assert.Equal(t, ev.StaticConfig.TokenAdminRegistry.String(), firedrillRef.Address)
98+
assert.Equal(t, ev.DynamicConfig.Router.String(), firedrillRef.Address)
99+
assert.Equal(t, ev.DynamicConfig.PriceRegistry.String(), firedrillRef.Address)
127100
return
128101
case <-timer.C:
129102
require.Fail(t, "haven't received all events")

deployment/view_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func TestCCIPViewFiredrill(t *testing.T) {
3131
require.Len(t, chainSels, 3)
3232
chainSel := chainSels[0]
3333
sourceChainSel := chainSels[1]
34-
changeset, err := evm_deployment.DeployFiredrillContracts(*env, shared.FiredrillConfig{
34+
_, changeset, err := evm_deployment.DeployFiredrillContracts(*env, shared.FiredrillConfig{
3535
Version: deploy.Version1_5_0,
3636
ChainSelector: chainSel,
3737
SourceChainSelector: sourceChainSel,

0 commit comments

Comments
 (0)