Skip to content

Commit

Permalink
Merge branch 'main' into badge-pkg-docs
Browse files Browse the repository at this point in the history
  • Loading branch information
jmank88 authored Jan 17, 2025
2 parents 899370b + b6694fa commit 23bab31
Show file tree
Hide file tree
Showing 13 changed files with 440 additions and 17 deletions.
11 changes: 9 additions & 2 deletions genchains_solana.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (
"sort"
"strconv"
"strings"
"unicode"

"github.com/mr-tron/base58"
chain_selectors "github.com/smartcontractkit/chain-selectors"
)

Expand Down Expand Up @@ -104,7 +104,14 @@ func toVarName(name string, chainSel uint64) string {
const unnamed = "TEST"
x := strings.ReplaceAll(name, "-", "_")
x = strings.ToUpper(x)
if len(x) > 0 && unicode.IsDigit(rune(x[0])) {

// if len(x) > 0 && unicode.IsDigit(rune(x[0]))
// for evm, the above condition is used to detect if name == chainId == (some number) -> which means its a test chain
// for solana, as chainId is not a number but a base58 encoded hash, we cannot use the above condition
// we need to check if the name == chainId == a valid base58 encoded hash

_, err := base58.Decode(name)
if err == nil {
x = unnamed + "_" + x
}
if len(x) == 0 {
Expand Down
119 changes: 119 additions & 0 deletions genchains_tron.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
//go:build ignore

package main

import (
"bytes"
"fmt"
"go/format"
"html/template"
"os"
"sort"
"strconv"
"strings"
"unicode"

chain_selectors "github.com/smartcontractkit/chain-selectors"
)

const filename = "generated_chains_tron.go"

type chain struct {
ChainID uint64
Selector uint64
Name string
VarName string
}

var chainTemplate, _ = template.New("").Parse(`// Code generated by go generate please DO NOT EDIT
package chain_selectors
type TronChain struct {
ChainID uint64
Selector uint64
Name string
VarName string
}
var (
{{ range . }}
{{.VarName}} = TronChain{ChainID: {{ .ChainID }}, Selector: {{ .Selector }}, Name: "{{ .Name }}"}{{ end }}
)
var TronALL = []TronChain{
{{ range . }}{{ .VarName }},
{{ end }}
}
`)

func main() {
src, err := genChainsSourceCode()
if err != nil {
panic(err)
}

formatted, err := format.Source([]byte(src))
if err != nil {
panic(err)
}

existingContent, err := os.ReadFile(filename)
if err != nil {
if os.IsNotExist(err) {
fmt.Println("tron: no existing generations found")
existingContent = nil
} else {
panic(err)
}
}

if string(existingContent) == string(formatted) {
fmt.Println("tron: no changes detected")
return
}
fmt.Println("tron: updating generations")

err = os.WriteFile(filename, formatted, 0644)
if err != nil {
panic(err)
}
}

func genChainsSourceCode() (string, error) {
var wr = new(bytes.Buffer)
chains := make([]chain, 0)

for ChainID, chainSel := range chain_selectors.TronChainIdToChainSelector() {
name, err := chain_selectors.TronNameFromChainId(ChainID)
if err != nil {
return "", err
}

chains = append(chains, chain{
ChainID: ChainID,
Selector: chainSel,
Name: name,
VarName: toVarName(name, chainSel),
})
}

sort.Slice(chains, func(i, j int) bool { return chains[i].VarName < chains[j].VarName })
if err := chainTemplate.ExecuteTemplate(wr, "", chains); err != nil {
return "", err
}
return wr.String(), nil
}

func toVarName(name string, chainSel uint64) string {
const unnamed = "TEST"
x := strings.ReplaceAll(name, "-", "_")
x = strings.ToUpper(x)
if len(x) > 0 && unicode.IsDigit(rune(x[0])) {
x = unnamed + "_" + x
}
if len(x) == 0 {
x = unnamed + "_" + strconv.FormatUint(chainSel, 10)
}
return x
}
16 changes: 16 additions & 0 deletions generated_chains_evm.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 9 additions & 3 deletions generated_chains_solana.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions generated_chains_tron.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 37 additions & 2 deletions selectors.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const (
FamilyStarknet = "starknet"
FamilyCosmos = "cosmos"
FamilyAptos = "aptos"
FamilyTron = "tron"
)

type chainInfo struct {
Expand Down Expand Up @@ -52,7 +53,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)
}
Expand Down Expand Up @@ -87,6 +88,28 @@ func getChainInfo(selector uint64) (chainInfo, error) {
}, nil
}

// check tron
_, exist = tronChainIdBySelector[selector]
if exist {
family := FamilyTron

chainID, err := TronChainIdFromSelector(selector)
if err != nil {
return chainInfo{}, fmt.Errorf("failed to get %v chain ID from selector %d: %w", chainID, selector, err)
}

details, exist := tronSelectorsMap[chainID]
if !exist {
return chainInfo{}, fmt.Errorf("invalid chain id %d for %s", chainID, family)
}

return chainInfo{
Family: family,
ChainID: fmt.Sprintf("%d", chainID),
ChainDetails: details,
}, nil
}

return chainInfo{}, fmt.Errorf("unknown chain selector %d", selector)
}

Expand Down Expand Up @@ -123,7 +146,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)
}
Expand All @@ -140,6 +163,18 @@ func GetChainDetailsByChainIDAndFamily(chainID string, family string) (ChainDeta
return ChainDetails{}, fmt.Errorf("invalid chain id %s for %s", chainID, family)
}

return details, nil
case FamilyTron:
tronChainId, err := strconv.ParseUint(chainID, 10, 64)
if err != nil {
return ChainDetails{}, fmt.Errorf("invalid chain id %s for %s", chainID, family)
}

details, exist := tronSelectorsMap[tronChainId]
if !exist {
return ChainDetails{}, fmt.Errorf("invalid chain id %s for %s", chainID, family)
}

return details, nil
default:
return ChainDetails{}, fmt.Errorf("family %s is not yet support", family)
Expand Down
Loading

0 comments on commit 23bab31

Please sign in to comment.