diff --git a/generated_chains_solana.go b/generated_chains_solana.go index ba261dd..ac16614 100644 --- a/generated_chains_solana.go +++ b/generated_chains_solana.go @@ -9,13 +9,19 @@ type SolanaChain struct { } var ( - SOLANA_DEVNET = SolanaChain{ChainID: "EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG", Selector: 16423721717087811551, Name: "solana-devnet"} - SOLANA_MAINNET = SolanaChain{ChainID: "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", Selector: 124615329519749607, Name: "solana-mainnet"} - SOLANA_TESTNET = SolanaChain{ChainID: "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY", Selector: 6302590918974934319, Name: "solana-testnet"} + SOLANA_DEVNET = SolanaChain{ChainID: "EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG", Selector: 16423721717087811551, Name: "solana-devnet"} + SOLANA_MAINNET = SolanaChain{ChainID: "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", Selector: 124615329519749607, Name: "solana-mainnet"} + SOLANA_TESTNET = SolanaChain{ChainID: "4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY", Selector: 6302590918974934319, Name: "solana-testnet"} + TEST_22222222222222222222222222222222222222222222 = SolanaChain{ChainID: "22222222222222222222222222222222222222222222", Selector: 12463857294658392847, Name: "22222222222222222222222222222222222222222222"} + TEST_33333333333333333333333333333333333333333333 = SolanaChain{ChainID: "33333333333333333333333333333333333333333333", Selector: 9837465928374658293, Name: "33333333333333333333333333333333333333333333"} + TEST_44444444444444444444444444444444444444444444 = SolanaChain{ChainID: "44444444444444444444444444444444444444444444", Selector: 16574839267584930184, Name: "44444444444444444444444444444444444444444444"} ) var SolanaALL = []SolanaChain{ SOLANA_DEVNET, SOLANA_MAINNET, SOLANA_TESTNET, + TEST_22222222222222222222222222222222222222222222, + TEST_33333333333333333333333333333333333333333333, + TEST_44444444444444444444444444444444444444444444, } diff --git a/selectors.go b/selectors.go index 6f37e2e..4066128 100644 --- a/selectors.go +++ b/selectors.go @@ -52,7 +52,7 @@ func getChainInfo(selector uint64) (chainInfo, error) { return chainInfo{}, fmt.Errorf("failed to get %s chain ID from selector %d: %w", chainID, selector, err) } - details, exist := solanaSelectorsMap[chainID] + details, exist := solanaChainIdToChainSelector[chainID] if !exist { return chainInfo{}, fmt.Errorf("invalid chain id %s for %s", chainID, family) } @@ -123,7 +123,7 @@ func GetChainDetailsByChainIDAndFamily(chainID string, family string) (ChainDeta return details, nil case FamilySolana: - details, exist := solanaSelectorsMap[chainID] + details, exist := solanaChainIdToChainSelector[chainID] if !exist { return ChainDetails{}, fmt.Errorf("invalid chain id %s for %s", chainID, family) } diff --git a/solana.go b/solana.go index 2246976..cdc281a 100644 --- a/solana.go +++ b/solana.go @@ -13,15 +13,34 @@ import ( //go:embed selectors_solana.yml var solanaSelectorsYml []byte +//go:embed test_selectors_solana.yml +var testSelectorsSolanaYml []byte + var ( - solanaSelectorsMap = parseSolanaYml(solanaSelectorsYml) - solanaChainIdBySelector = make(map[uint64]string) + solanaSelectorsMap = parseSolanaYml(solanaSelectorsYml) + solanaTestSelectorsMap = parseSolanaYml(testSelectorsSolanaYml) + solanaChainIdToChainSelector = loadAllSolanaSelectors() + solanaChainIdBySelector = make(map[uint64]string) ) func init() { for k, v := range solanaSelectorsMap { solanaChainIdBySelector[v.ChainSelector] = k } + for k, v := range solanaTestSelectorsMap { + solanaChainIdBySelector[v.ChainSelector] = k + } +} + +func loadAllSolanaSelectors() map[string]ChainDetails { + output := make(map[string]ChainDetails, len(solanaSelectorsMap)+len(solanaTestSelectorsMap)) + for k, v := range solanaSelectorsMap { + output[k] = v + } + for k, v := range solanaTestSelectorsMap { + output[k] = v + } + return output } func parseSolanaYml(ymlFile []byte) map[string]ChainDetails { @@ -52,15 +71,15 @@ func validateSolanaChainID(data map[string]ChainDetails) { } func SolanaChainIdToChainSelector() map[string]uint64 { - copyMap := make(map[string]uint64, len(solanaSelectorsMap)) - for k, v := range solanaSelectorsMap { + copyMap := make(map[string]uint64, len(solanaChainIdToChainSelector)) + for k, v := range solanaChainIdToChainSelector { copyMap[k] = v.ChainSelector } return copyMap } func SolanaNameFromChainId(chainId string) (string, error) { - details, exist := solanaSelectorsMap[chainId] + details, exist := solanaChainIdToChainSelector[chainId] if !exist { return "", fmt.Errorf("chain name not found for chain %v", chainId) } diff --git a/solana_test.go b/solana_test.go index 6fda055..5da1f2f 100644 --- a/solana_test.go +++ b/solana_test.go @@ -84,3 +84,10 @@ func Test_SolanaGetChainIDByChainSelector(t *testing.T) { assert.Equal(t, chainID, fmt.Sprintf("%v", k)) } } + +func Test_SolanaNoOverlapBetweenRealAndTestChains(t *testing.T) { + for k, _ := range solanaSelectorsMap { + _, exist := solanaTestSelectorsMap[k] + assert.False(t, exist, "Chain %d is duplicated between real and test chains", k) + } +} diff --git a/test_selectors_solana.yml b/test_selectors_solana.yml new file mode 100644 index 0000000..822028d --- /dev/null +++ b/test_selectors_solana.yml @@ -0,0 +1,9 @@ +selectors: + # "11111111111111111111111111111111111111111111" -> system program address + "22222222222222222222222222222222222222222222": + selector: 12463857294658392847 + "33333333333333333333333333333333333333333333": + selector: 9837465928374658293 + "44444444444444444444444444444444444444444444": + selector: 16574839267584930184 +