Skip to content

Commit 1f6e7d1

Browse files
committed
Add GetFeeContractRef(...) to Solana 1.6 adapter
1 parent 168baae commit 1f6e7d1

File tree

1 file changed

+21
-6
lines changed
  • chains/solana/deployment/v1_6_0/adapters

1 file changed

+21
-6
lines changed

chains/solana/deployment/v1_6_0/adapters/fees.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/Masterminds/semver/v3"
88
"github.com/gagliardetto/solana-go"
99
"github.com/gagliardetto/solana-go/rpc"
10+
fee_quoter_operations "github.com/smartcontractkit/chainlink-ccip/chains/solana/deployment/v1_6_0/operations/fee_quoter"
1011
solseq "github.com/smartcontractkit/chainlink-ccip/chains/solana/deployment/v1_6_0/sequences"
1112
"github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/fee_quoter"
1213
"github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/state"
@@ -30,13 +31,23 @@ func NewFeesAdapter(solAdapter *solseq.SolanaAdapter) *FeesAdapter {
3031
}
3132
}
3233

33-
func (a *FeesAdapter) getFeeQuoterAddress(ds datastore.DataStore, src uint64) (solana.PublicKey, error) {
34-
fqAddr, err := a.sol.GetFQAddress(ds, src)
34+
func (a *FeesAdapter) GetFeeContractRef(e cldf.Environment, src uint64, dst uint64) (datastore.AddressRef, error) {
35+
fqAddr, err := a.sol.GetFQAddress(e.DataStore, src)
3536
if err != nil {
36-
return solana.PublicKey{}, fmt.Errorf("failed to get FeeQuoter address for chain selector %d: %w", src, err)
37+
return datastore.AddressRef{}, fmt.Errorf("failed to get FeeQuoter address for chain selector %d: %w", src, err)
3738
}
3839

39-
return solana.PublicKeyFromBytes(fqAddr), nil
40+
feecontractref := e.DataStore.Addresses().Filter(
41+
datastore.AddressRefByAddress(solana.PublicKeyFromBytes(fqAddr).String()),
42+
datastore.AddressRefByType(datastore.ContractType(fee_quoter_operations.ContractType)),
43+
datastore.AddressRefByChainSelector(src),
44+
)
45+
46+
if len(feecontractref) == 0 {
47+
return datastore.AddressRef{}, fmt.Errorf("no address ref found for FeeQuoter contract at address %s on chain selector %d", fqAddr, src)
48+
}
49+
50+
return feecontractref[0], nil
4051
}
4152

4253
func (a *FeesAdapter) GetDefaultTokenTransferFeeConfig(src uint64, dst uint64) fees.TokenTransferFeeArgs {
@@ -49,11 +60,13 @@ func (a *FeesAdapter) GetOnchainTokenTransferFeeConfig(e cldf.Environment, src u
4960
return fees.TokenTransferFeeArgs{}, fmt.Errorf("solana chain not found for selector %d", src)
5061
}
5162

52-
fqAddr, err := a.getFeeQuoterAddress(e.DataStore, src)
63+
fqRef, err := a.GetFeeContractRef(e, src, dst)
5364
if err != nil {
5465
return fees.TokenTransferFeeArgs{}, fmt.Errorf("failed to get FeeQuoter address for chain selector %d: %w", src, err)
5566
}
5667

68+
fqAddr := solana.MustPublicKeyFromBase58(fqRef.Address)
69+
5770
token, err := solana.PublicKeyFromBase58(address)
5871
if err != nil {
5972
return fees.TokenTransferFeeArgs{}, fmt.Errorf("invalid base58 token address: %s", address)
@@ -91,11 +104,13 @@ func (a *FeesAdapter) SetTokenTransferFee(e cldf.Environment) *operations.Sequen
91104
var result sequences.OnChainOutput
92105
src := input.Selector
93106

94-
fqAddr, err := a.getFeeQuoterAddress(e.DataStore, src)
107+
fqRef, err := a.GetFeeContractRef(e, src, 0)
95108
if err != nil {
96109
return sequences.OnChainOutput{}, fmt.Errorf("failed to get FeeQuoter address for chain selector %d: %w", src, err)
97110
}
98111

112+
fqAddr := solana.MustPublicKeyFromBase58(fqRef.Address)
113+
99114
remoteChainConfigs := map[uint64]map[solana.PublicKey]fee_quoter.TokenTransferFeeConfig{}
100115
for dst, dstCfg := range input.Settings {
101116
remoteChainConfigs[dst] = map[solana.PublicKey]fee_quoter.TokenTransferFeeConfig{}

0 commit comments

Comments
 (0)