Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

USDC token pool changesets (+ token pool patches) #16062

Open
wants to merge 66 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
69d1ae0
Add changeset
kylesmartin Jan 9, 2025
b85e787
Add first working test
kylesmartin Jan 9, 2025
9abacee
Make fns private
kylesmartin Jan 10, 2025
04b9913
Add more use case tests
kylesmartin Jan 13, 2025
335b968
Unit tests for validations and deployment fns
kylesmartin Jan 13, 2025
02ee1f9
Linting
kylesmartin Jan 13, 2025
7864db8
More linting
kylesmartin Jan 13, 2025
db2d7c5
goimports formatting
kylesmartin Jan 13, 2025
820974a
Test fixes
kylesmartin Jan 13, 2025
10bc710
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 13, 2025
4127793
Refactor into 3 changesets
kylesmartin Jan 16, 2025
229ff21
Finish token pool configuration tests
kylesmartin Jan 16, 2025
3076551
Merge from develop
kylesmartin Jan 16, 2025
b203501
Align with test package conventions
kylesmartin Jan 17, 2025
8edc98d
Linting
kylesmartin Jan 17, 2025
a8b6a27
goimports
kylesmartin Jan 17, 2025
4839580
More tests & goimports
kylesmartin Jan 17, 2025
dd3bc58
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 17, 2025
6f90004
chain.Name to chain.String
kylesmartin Jan 17, 2025
7f33530
Update tests
kylesmartin Jan 17, 2025
d66f952
Goimports
kylesmartin Jan 17, 2025
18efab5
Use confirm if no error
kylesmartin Jan 17, 2025
a6be556
Comments
kylesmartin Jan 17, 2025
3ee1cda
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 20, 2025
d7ade58
Remove addresses as inputs
kylesmartin Jan 20, 2025
92ce147
Deployer group integration & improvements
kylesmartin Jan 20, 2025
8015099
Estimate gas limit
kylesmartin Jan 21, 2025
197c6e1
Comments
kylesmartin Jan 21, 2025
749dced
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 21, 2025
2dbdd3d
Remove unstable test
kylesmartin Jan 21, 2025
8b35cbf
Move fn to helpers
kylesmartin Jan 21, 2025
1f98c6d
Fix deployer group
kylesmartin Jan 21, 2025
549466b
Buildfix
kylesmartin Jan 21, 2025
b774023
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 21, 2025
19fe9b4
Sync ccip rmn test with develop
kylesmartin Jan 21, 2025
4637e30
goimports
kylesmartin Jan 21, 2025
e81639e
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 22, 2025
bb6e198
Clean up token admin registry changeset
kylesmartin Jan 22, 2025
3824227
Merge from develop
kylesmartin Jan 22, 2025
ffd7940
More comments
kylesmartin Jan 22, 2025
ed01ffe
Revert deployer group, add opCount offset capability
kylesmartin Jan 23, 2025
78e8bd8
goimports
kylesmartin Jan 23, 2025
488554c
Split out token admin reg changesets
kylesmartin Jan 23, 2025
94e6227
Revert propose.go
kylesmartin Jan 23, 2025
de243ba
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 24, 2025
afc13ca
Comments
kylesmartin Jan 24, 2025
12274a0
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 24, 2025
78885cb
Fix build
kylesmartin Jan 24, 2025
75052de
Add deployment changeset
kylesmartin Jan 24, 2025
c22645f
Lint, remove forceDeployment
kylesmartin Jan 24, 2025
3319050
Merge branch 'develop' into CCIP-4508
kylesmartin Jan 24, 2025
9e1065d
Merge branch 'CCIP-4508' into CCIP-4507
kylesmartin Jan 24, 2025
3ae0505
Add sync changeset
kylesmartin Jan 24, 2025
8ced0ef
Merge from develop
kylesmartin Jan 24, 2025
9b371f4
Merge branch 'develop' into CCIP-4507
kylesmartin Jan 27, 2025
b766a29
Deployment test
kylesmartin Jan 27, 2025
f3ac552
Set USDC token pool to correct version
kylesmartin Jan 27, 2025
a4bea64
Lint
kylesmartin Jan 27, 2025
7f40e8b
Add tests for sync changeset
kylesmartin Jan 28, 2025
2e97971
Merge branch 'develop' into CCIP-4507
kylesmartin Jan 28, 2025
c9ec8b8
Lint
kylesmartin Jan 28, 2025
705b311
Lint
kylesmartin Jan 28, 2025
6289035
Comments
kylesmartin Jan 28, 2025
9a68a11
Merge branch 'develop' into CCIP-4507
kylesmartin Jan 28, 2025
cb0fe56
Merge branch 'develop' into CCIP-4507
kylesmartin Jan 30, 2025
8d1f336
Comments
kylesmartin Jan 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions deployment/ccip/changeset/cs_accept_admin_role_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func TestAcceptAdminRoleChangeset_Validations(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: "InvalidType",
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand Down Expand Up @@ -91,7 +91,7 @@ func TestAcceptAdminRoleChangeset_Validations(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.BurnMintTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand Down Expand Up @@ -152,13 +152,13 @@ func TestAcceptAdminRoleChangeset_Execution(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.BurnMintTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
selectorB: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.BurnMintTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand All @@ -172,13 +172,13 @@ func TestAcceptAdminRoleChangeset_Execution(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.BurnMintTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
selectorB: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.BurnMintTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand Down
9 changes: 5 additions & 4 deletions deployment/ccip/changeset/cs_ccip_home.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,14 @@ func validateUSDCConfig(usdcConfig *pluginconfig.USDCCCTPObserverConfig, state C
if !ok {
return fmt.Errorf("chain %d does not exist in state but provided in USDCCCTPObserverConfig", sel)
}
if onchainState.USDCTokenPool == nil {
return fmt.Errorf("chain %d does not have USDC token pool deployed", sel)
if onchainState.USDCTokenPools == nil || onchainState.USDCTokenPools[CurrentTokenPoolVersion] == nil {
return fmt.Errorf("chain %d does not have a USDC token pool with the current version %s deployed", sel, CurrentTokenPoolVersion)
}
if common.HexToAddress(token.SourcePoolAddress) != onchainState.USDCTokenPool.Address() {
usdcTokenPool := onchainState.USDCTokenPools[CurrentTokenPoolVersion]
if common.HexToAddress(token.SourcePoolAddress) != usdcTokenPool.Address() {
return fmt.Errorf("chain %d has USDC token pool deployed at %s, "+
"but SourcePoolAddress %s is provided in USDCCCTPObserverConfig",
sel, onchainState.USDCTokenPool.Address().String(), token.SourcePoolAddress)
sel, usdcTokenPool.Address().String(), token.SourcePoolAddress)
}
}
return nil
Expand Down
18 changes: 10 additions & 8 deletions deployment/ccip/changeset/cs_configure_token_pools.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,13 @@ func (c TokenPoolConfig) Validate(ctx context.Context, chain deployment.Chain, s
if !ok {
return fmt.Errorf("token pool does not exist on %s with symbol %s, type %s, and version %s", chain.String(), tokenSymbol, c.Type, c.Version)
}
tokenPool, err := token_pool.NewTokenPool(tokenPoolAddress, chain.Client)
if err != nil {
return fmt.Errorf("failed to connect token pool with address %s on chain %s with token pool bindings: %w", tokenPoolAddress, chain, err)
}

// Validate that the token pool is owned by the address that will be actioning the transactions (i.e. Timelock or deployer key)
if err := commoncs.ValidateOwnership(ctx, useMcms, chain.DeployerKey.From, state.Timelock.Address(), state.TokenAdminRegistry); err != nil {
if err := commoncs.ValidateOwnership(ctx, useMcms, chain.DeployerKey.From, state.Timelock.Address(), tokenPool); err != nil {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue I found with the configure TP changeset, was validating ownership against wrong contract.

return fmt.Errorf("token pool with address %s on %s failed ownership validation: %w", tokenPoolAddress, chain.String(), err)
}

Expand Down Expand Up @@ -146,13 +150,11 @@ func (c ConfigureTokenPoolContractsConfig) Validate(env deployment.Environment)
if tokenAdminRegistry := chainState.TokenAdminRegistry; tokenAdminRegistry == nil {
return fmt.Errorf("missing tokenAdminRegistry on %s", chain.String())
}
if c.MCMS != nil {
if timelock := chainState.Timelock; timelock == nil {
return fmt.Errorf("missing timelock on %s", chain.String())
}
if proposerMcm := chainState.ProposerMcm; proposerMcm == nil {
return fmt.Errorf("missing proposerMcm on %s", chain.String())
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made this change in two places. We need the timelock to be non-nil regardless because we pass its address as input to ValidateOwnership.

if timelock := chainState.Timelock; timelock == nil {
kylesmartin marked this conversation as resolved.
Show resolved Hide resolved
return fmt.Errorf("missing timelock on %s", chain.String())
}
if proposerMcm := chainState.ProposerMcm; proposerMcm == nil {
kylesmartin marked this conversation as resolved.
Show resolved Hide resolved
return fmt.Errorf("missing proposerMcm on %s", chain.String())
}
if err := poolUpdate.Validate(env.GetContext(), chain, chainState, c.MCMS != nil, c.TokenSymbol); err != nil {
return fmt.Errorf("invalid pool update on %s: %w", chain.String(), err)
Expand Down
74 changes: 29 additions & 45 deletions deployment/ccip/changeset/cs_configure_token_pools_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/logger"
)

// createSymmetricRateLimits is a utility to quickly create a rate limiter config with equal inbound and outbound values.
func createSymmetricRateLimits(rate int64, capacity int64) changeset.RateLimiterConfig {
return changeset.RateLimiterConfig{
Inbound: token_pool.RateLimiterConfig{
IsEnabled: rate != 0 || capacity != 0,
Rate: big.NewInt(rate),
Capacity: big.NewInt(capacity),
},
Outbound: token_pool.RateLimiterConfig{
IsEnabled: rate != 0 || capacity != 0,
Rate: big.NewInt(rate),
Capacity: big.NewInt(capacity),
},
}
}

// validateMemberOfTokenPoolPair performs checks required to validate that a token pool is fully configured for cross-chain transfer.
func validateMemberOfTokenPoolPair(
t *testing.T,
Expand Down Expand Up @@ -177,7 +161,7 @@ func TestValidateTokenPoolConfig(t *testing.T) {
Msg: "Pool is not owned by required address",
TokenPoolConfig: changeset.TokenPoolConfig{
Type: changeset.BurnMintTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
ErrStr: "failed ownership validation",
},
Expand Down Expand Up @@ -321,47 +305,47 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
{
Msg: "Configure new pools on registry",
RegistrationPass: &regPass{
SelectorA2B: createSymmetricRateLimits(100, 1000),
SelectorB2A: createSymmetricRateLimits(100, 1000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(100, 1000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(100, 1000),
},
},
{
Msg: "Configure new pools on registry, update their rate limits",
RegistrationPass: &regPass{
SelectorA2B: createSymmetricRateLimits(100, 1000),
SelectorB2A: createSymmetricRateLimits(100, 1000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(100, 1000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(100, 1000),
},
UpdatePass: &updatePass{
UpdatePoolOnA: false,
UpdatePoolOnB: false,
SelectorA2B: createSymmetricRateLimits(200, 2000),
SelectorB2A: createSymmetricRateLimits(200, 2000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(200, 2000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(200, 2000),
},
},
{
Msg: "Configure new pools on registry, update both pools",
RegistrationPass: &regPass{
SelectorA2B: createSymmetricRateLimits(100, 1000),
SelectorB2A: createSymmetricRateLimits(100, 1000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(100, 1000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(100, 1000),
},
UpdatePass: &updatePass{
UpdatePoolOnA: true,
UpdatePoolOnB: true,
SelectorA2B: createSymmetricRateLimits(100, 1000),
SelectorB2A: createSymmetricRateLimits(100, 1000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(100, 1000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(100, 1000),
},
},
{
Msg: "Configure new pools on registry, update only one pool",
RegistrationPass: &regPass{
SelectorA2B: createSymmetricRateLimits(100, 1000),
SelectorB2A: createSymmetricRateLimits(100, 1000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(100, 1000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(100, 1000),
},
UpdatePass: &updatePass{
UpdatePoolOnA: false,
UpdatePoolOnB: true,
SelectorA2B: createSymmetricRateLimits(200, 2000),
SelectorB2A: createSymmetricRateLimits(200, 2000),
SelectorA2B: testhelpers.CreateSymmetricRateLimits(200, 2000),
SelectorB2A: testhelpers.CreateSymmetricRateLimits(200, 2000),
},
},
}
Expand Down Expand Up @@ -402,11 +386,11 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
state, err := changeset.LoadOnchainState(e)
require.NoError(t, err)

lockReleaseA, _ := token_pool.NewTokenPool(state.Chains[selectorA].LockReleaseTokenPools[testhelpers.TestTokenSymbol][deployment.Version1_5_1].Address(), e.Chains[selectorA].Client)
burnMintA, _ := token_pool.NewTokenPool(state.Chains[selectorA].BurnMintTokenPools[testhelpers.TestTokenSymbol][deployment.Version1_5_1].Address(), e.Chains[selectorA].Client)
lockReleaseA, _ := token_pool.NewTokenPool(state.Chains[selectorA].LockReleaseTokenPools[testhelpers.TestTokenSymbol][changeset.CurrentTokenPoolVersion].Address(), e.Chains[selectorA].Client)
burnMintA, _ := token_pool.NewTokenPool(state.Chains[selectorA].BurnMintTokenPools[testhelpers.TestTokenSymbol][changeset.CurrentTokenPoolVersion].Address(), e.Chains[selectorA].Client)

lockReleaseB, _ := token_pool.NewTokenPool(state.Chains[selectorB].LockReleaseTokenPools[testhelpers.TestTokenSymbol][deployment.Version1_5_1].Address(), e.Chains[selectorB].Client)
burnMintB, _ := token_pool.NewTokenPool(state.Chains[selectorB].BurnMintTokenPools[testhelpers.TestTokenSymbol][deployment.Version1_5_1].Address(), e.Chains[selectorB].Client)
lockReleaseB, _ := token_pool.NewTokenPool(state.Chains[selectorB].LockReleaseTokenPools[testhelpers.TestTokenSymbol][changeset.CurrentTokenPoolVersion].Address(), e.Chains[selectorB].Client)
burnMintB, _ := token_pool.NewTokenPool(state.Chains[selectorB].BurnMintTokenPools[testhelpers.TestTokenSymbol][changeset.CurrentTokenPoolVersion].Address(), e.Chains[selectorB].Client)

pools := map[uint64]tokenPools{
selectorA: tokenPools{
Expand Down Expand Up @@ -438,14 +422,14 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
PoolUpdates: map[uint64]changeset.TokenPoolConfig{
selectorA: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
ChainUpdates: changeset.RateLimiterPerChain{
selectorB: test.RegistrationPass.SelectorA2B,
},
},
selectorB: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
ChainUpdates: changeset.RateLimiterPerChain{
selectorA: test.RegistrationPass.SelectorB2A,
},
Expand All @@ -461,13 +445,13 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
selectorB: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand All @@ -481,13 +465,13 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
selectorB: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand All @@ -501,13 +485,13 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
selectorB: map[changeset.TokenSymbol]changeset.TokenPoolInfo{
testhelpers.TestTokenSymbol: {
Type: changeset.LockReleaseTokenPool,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
},
},
},
Expand Down Expand Up @@ -561,14 +545,14 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) {
PoolUpdates: map[uint64]changeset.TokenPoolConfig{
selectorA: {
Type: aType,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
ChainUpdates: changeset.RateLimiterPerChain{
selectorB: test.UpdatePass.SelectorA2B,
},
},
selectorB: {
Type: bType,
Version: deployment.Version1_5_1,
Version: changeset.CurrentTokenPoolVersion,
ChainUpdates: changeset.RateLimiterPerChain{
selectorA: test.UpdatePass.SelectorB2A,
},
Expand Down
6 changes: 3 additions & 3 deletions deployment/ccip/changeset/cs_deploy_token_pools.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ func (i DeployTokenPoolInput) Validate(ctx context.Context, chain deployment.Cha
}

// We should check if a token pool with this type, version, and symbol already exists
_, ok := getTokenPoolAddressFromSymbolTypeAndVersion(state, chain, tokenSymbol, i.Type, currentTokenPoolVersion)
_, ok := getTokenPoolAddressFromSymbolTypeAndVersion(state, chain, tokenSymbol, i.Type, CurrentTokenPoolVersion)
if ok {
return fmt.Errorf("token pool with type %s and version %s already exists for %s on %s", i.Type, currentTokenPoolVersion, tokenSymbol, chain)
return fmt.Errorf("token pool with type %s and version %s already exists for %s on %s", i.Type, CurrentTokenPoolVersion, tokenSymbol, chain)
}

return nil
Expand Down Expand Up @@ -207,7 +207,7 @@ func DeployTokenPool(
return deployment.ContractDeploy[*token_pool.TokenPool]{
Address: tpAddr,
Contract: tp,
Tv: deployment.NewTypeAndVersion(poolConfig.Type, currentTokenPoolVersion),
Tv: deployment.NewTypeAndVersion(poolConfig.Type, CurrentTokenPoolVersion),
Tx: tx,
Err: err,
}
Expand Down
4 changes: 2 additions & 2 deletions deployment/ccip/changeset/cs_deploy_token_pools_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ func TestValidateDeployTokenPoolInput(t *testing.T) {
TokenAddress: tokens[selectorA].Address,
LocalTokenDecimals: testhelpers.LocalTokenDecimals,
},
ErrStr: fmt.Sprintf("token pool with type BurnMintTokenPool and version %s already exists", deployment.Version1_5_1),
ErrStr: fmt.Sprintf("token pool with type BurnMintTokenPool and version %s already exists", changeset.CurrentTokenPoolVersion),
},
}

Expand Down Expand Up @@ -306,7 +306,7 @@ func TestDeployTokenPoolContracts(t *testing.T) {
burnMintTokenPools, ok := state.Chains[selectorA].BurnMintTokenPools[testhelpers.TestTokenSymbol]
require.True(t, ok)
require.Len(t, burnMintTokenPools, 1)
owner, err := burnMintTokenPools[deployment.Version1_5_1].Owner(nil)
owner, err := burnMintTokenPools[changeset.CurrentTokenPoolVersion].Owner(nil)
require.NoError(t, err)
require.Equal(t, e.Chains[selectorA].DeployerKey.From, owner)
}
Loading
Loading