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
4253func (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