Documentation
¶
Overview ¶
Package addrconv provides utilities for converting blockchain addresses to bytes across different chain families.
This package implements the Strategy pattern to handle address conversion for various blockchain networks including EVM, Solana, Aptos, Sui, TON, and TRON. It automatically detects the appropriate converter based on the chain family and handles the conversion seamlessly.
Basic Usage ¶
The package provides a single function for address conversion:
- ToBytes - converts addresses using a family string
Converting with Blockchain Interface ¶
When you have a blockchain object that implements the chain.BlockChain interface, you can extract the family and use it with ToBytes:
package main
import (
"fmt"
"log"
"github.com/smartcontractkit/chainlink-deployments-framework/chain/evm"
"github.com/smartcontractkit/chainlink-deployments-framework/chain/solana"
"github.com/smartcontractkit/chainlink-deployments-framework/chain/utils/addrconv"
chain_selectors "github.com/smartcontractkit/chain-selectors"
)
func main() {
// Create blockchain objects
ethChain := evm.Chain{Selector: chain_selectors.ETHEREUM_MAINNET.Selector}
solChain := solana.Chain{Selector: chain_selectors.SOLANA_MAINNET.Selector}
// Convert addresses using the blockchain family
ethAddress := "0x742d35Cc6634C0532925a3b8D4c8C1B8c4c8C1B8"
bytes, err := addrconv.ToBytes(ethChain.Family(), ethAddress)
if err != nil {
log.Fatal(err)
}
fmt.Printf("EVM Address: %s\n", ethAddress)
fmt.Printf("Bytes: %x\n", bytes)
fmt.Printf("Length: %d bytes\n\n", len(bytes))
// Convert Solana address
solAddress := "11111111111111111111111111111112"
bytes, err = addrconv.ToBytes(solChain.Family(), solAddress)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Solana Address: %s\n", solAddress)
fmt.Printf("Bytes: %x\n", bytes)
fmt.Printf("Length: %d bytes\n", len(bytes))
}
Converting with Family Strings ¶
package main
import (
"fmt"
"log"
"github.com/smartcontractkit/chainlink-deployments-framework/chain/utils/addrconv"
chain_selectors "github.com/smartcontractkit/chain-selectors"
)
func main() {
examples := []struct {
family string
addr string
desc string
}{
{
family: chain_selectors.FamilyEVM,
addr: "0x742d35Cc6634C0532925a3b8D4c8C1B8c4c8C1B8",
desc: "Ethereum address",
},
{
family: chain_selectors.FamilySolana,
addr: "11111111111111111111111111111112",
desc: "Solana System Program",
},
{
family: chain_selectors.FamilyAptos,
addr: "0x1",
desc: "Aptos framework account",
},
}
for _, example := range examples {
bytes, err := addrconv.ToBytes(example.family, example.addr)
if err != nil {
log.Printf("Error converting %s: %v", example.desc, err)
continue
}
fmt.Printf("%s (%s):\n", example.desc, example.family)
fmt.Printf(" Address: %s\n", example.addr)
fmt.Printf(" Bytes: %x\n", bytes)
fmt.Printf(" Length: %d bytes\n\n", len(bytes))
}
}
Supported Chain Families ¶
The package supports the following blockchain families:
EVM (Ethereum Virtual Machine): - Family: chain_selectors.FamilyEVM - Address format: 0x prefixed hex (20 bytes) - Examples: Ethereum, Polygon, BSC, Avalanche - Sample: "0x742d35Cc6634C0532925a3b8D4c8C1B8c4c8C1B8" Solana: - Family: chain_selectors.FamilySolana - Address format: Base58 encoded (32 bytes) - Sample: "11111111111111111111111111111112" Aptos: - Family: chain_selectors.FamilyAptos - Address format: 0x prefixed hex, variable length (32 bytes normalized) - Samples: "0x1", "0x0000...0001" Sui: - Family: chain_selectors.FamilySui - Address format: 0x prefixed hex (32 bytes) - Sample: "0xa402ce953053607dffcdfec89406c579c8d8ddb9c90e01b7aa28f5f1538ac289" TON: - Family: chain_selectors.FamilyTon - Address format: Base64 encoded (32 bytes) - Sample: "EQAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHx2j" TRON: - Family: chain_selectors.FamilyTron - Address format: Base58 encoded (21 bytes) - Sample: "TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH"
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Converter ¶
type Converter interface {
// ConvertToBytes converts an address string to bytes according to the chain's format
ConvertToBytes(address string) ([]byte, error)
// Supports returns true if this converter supports the given chain family
Supports(family string) bool
}
Converter defines the strategy interface for address conversion. Each chain family implements this interface to provide its specific address conversion logic.