blockchain

package
v0.13.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 27, 2026 License: MIT Imports: 19 Imported by: 29

Documentation

Index

Constants

View Source
const (
	DefaultAnvilPrivateKey = `ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80`
	AnvilPrivateKey1       = `0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d`
	AnvilPrivateKey2       = `0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a`
	AnvilPrivateKey3       = `0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6`
	AnvilPrivateKey4       = `0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a`
	DefaultAnvilPublicKey  = `0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266`
	AnvilPublicKey1        = `0x70997970C51812dc3A010C7d01b50e0d17dc79C8`
	AnvilPublicKey2        = `0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC`
	AnvilPublicKey3        = `0x90F79bf6EB2c4f870365E785982E1f101E93b906`
	AnvilPublicKey4        = `0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65`
)
View Source
const (
	DefaultAptosAPIPort     = "8080"
	DefaultAptosFaucetPort  = "8081"
	DefaultAptosArm64Image  = "ghcr.io/friedemannf/aptos-tools:aptos-node-v1.38.7"
	DefaultAptosX86_64Image = "aptoslabs/tools:aptos-node-v1.38.7"
)
View Source
const (
	DefaultBesuPrivateKey1 = "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63"
	DefaultBesuPrivateKey2 = "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3"
	DefaultBesuPrivateKey3 = "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f"
	DefaultBesuPublicKey1  = "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"
	DefaultBesuPublicKey2  = "0x627306090abaB3A6e1400e9345bC60c78a8BEf57"
	DefaultBesuPublicKey3  = "0xf17f52151EbEF6C7334FAD080c5704D77216b732"
)
View Source
const (
	TypeAnvil       = "anvil"
	TypeAnvilZKSync = "anvil-zksync"
	TypeGeth        = "geth"
	TypeBesu        = "besu"
	TypeSolana      = "solana"
	TypeAptos       = "aptos"
	TypeSui         = "sui"
	TypeTron        = "tron"
	TypeTon         = "ton"
	TypeCanton      = "canton"
)

Blockchain node type

View Source
const (
	FamilyEVM    = "evm"
	FamilySolana = "solana"
	FamilyAptos  = "aptos"
	FamilySui    = "sui"
	FamilyTron   = "tron"
	FamilyTon    = "ton"
	FamilyCanton = "canton"
)

Blockchain node family

View Source
const (
	// DefaultCantonPort is a default Canton container port
	DefaultCantonPort = "8080"
	// TokenExpiry is JWT token expiry
	TokenExpiry = time.Hour * 24 * 365 * 10 // 10 years
)
View Source
const (
	RootFundingAddr   = `0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266`
	RootFundingWallet = `` /* 491-byte string literal not displayed */
	GenesisClique     = `` /* 919-byte string literal not displayed */

	DefaultGethPrivateKey = `ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80`
	DefaultGethPublicKey  = `0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266`
)
View Source
const (
	DefaultFaucetPort    = "9123/tcp"
	DefaultFaucetPortNum = "9123"
	DefaultSuiNodePort   = "9000"
)
View Source
const (
	// NOTE: Prefunded high-load wallet from MyLocalTon pre-funded wallet, that can send up to 254 messages per 1 external message
	// https://docs.ton.org/v3/documentation/smart-contracts/contracts-specs/highload-wallet#highload-wallet-v2
	DefaultTonHlWalletAddress  = "-1:5ee77ced0b7ae6ef88ab3f4350d8872c64667ffbe76073455215d3cdfab3294b"
	DefaultTonHlWalletMnemonic = "" /* 157-byte string literal not displayed */

)
View Source
const (
	DefaultTronPort = "9090"
)
View Source
const DefaultUbuntuCACertificatePath = "/etc/ssl/certs/ca-certificates.crt"

Variables

View Source
var (
	DefaultAptosAccount    = "0xa337b42bd0eecf8fb59ee5929ea4541904b3c35a642040223f3d26ab57f59d6e"
	DefaultAptosPrivateKey = "0xd477c65f88ed9e6d4ec6e2014755c3cfa3e0c44e521d0111a02868c5f04c41d4"
)
View Source
var AnvilZKSyncRichAccountPks = []string{
	"ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
	"59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d",
	"5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a",
	"7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6",
	"47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a",
	"8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba",
	"92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e",
	"4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356",
	"dbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97",
	"2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6",
}
View Source
var TRONAccounts = Accounts{
	HDPath:   "m/44'/195'/0'/0/",
	Mnemonic: "resemble birth wool happy sun burger fatal trumpet globe purity health ritual",
	PrivateKeys: []string{
		"932a39242805a1b1095638027f26af9664d1d5bf8ab3b7527ee75e7efb2946dd",
		"1c17c9c049d36cde7e5ea99df6c86e0474b04f0e258ab619a1e674f397a17152",
		"458130a239671674746582184711a6f8d633355df1a491b9f3b323576134c2e9",
		"2676fd1427968e07feaa9aff967d4ba7607c5497c499968c098d0517cd75cfbb",
		"d26b24a691ff2b03ee6ab65bf164def216f73574996b9ca6299c43a9a63767ac",
		"55df6adf3d081944dbe4688205d94f236fb4427ac44f3a286a96d47db0860667",
		"8a9a60ddd722a40753c2a38edd6b6fa38e806d681c9b08a520ba4912e62b6458",
		"75eb182fb623acf5e53d9885c4e8578f2530533a96c753481cc4277ecc6022de",
		"6c4b22b1d9d68ef7a8ecd151cd4ffdd4ecc2a7b3a3f8a9f9f9bbdbcef6671f10",
		"e578d66453cb41b6c923b9caa91c375a0545eeb171ccafc60b46fa834ce5c200",
	},

	More: []string{},
}

Functions

func VerifyContract added in v0.1.17

func VerifyContract(out *Output, address, foundryDir, contractFile, contractName, compilerVersion string) error

VerifyContract wraps the forge verify-contract command.

Types

type Accounts added in v0.1.17

type Accounts struct {
	HDPath      string   `json:"hdPath"`
	Mnemonic    string   `json:"mnemonic"`
	PrivateKeys []string `json:"privateKeys"`
	More        []string `json:"more"`
}

type CantonEndpoints added in v0.13.0

type CantonEndpoints struct {
	// ScanAPIURL https://docs.sync.global/app_dev/scan_api/index.html
	ScanAPIURL string `toml:"scan_api_url" comment:"https://docs.sync.global/app_dev/scan_api/index.html"`
	// RegistryAPIURL https://docs.sync.global/app_dev/token_standard/index.html#api-references
	RegistryAPIURL string `toml:"registry_api_url" comment:"https://docs.sync.global/app_dev/token_standard/index.html#api-references"`

	// SuperValidator The endpoints for the super validator
	SuperValidator CantonParticipantEndpoints `toml:"super_validator" comment:"Canton network super validator"`
	// Participants The endpoints for the participants, in order from participant1 to participantN - depending on the number of validators requested
	Participants []CantonParticipantEndpoints `toml:"participants" comment:"Canton participant endpoints"`
}

type CantonParticipantEndpoints added in v0.13.0

type CantonParticipantEndpoints struct {
	// JSONLedgerAPIURL https://docs.digitalasset.com/build/3.5/reference/json-api/json-api.html
	JSONLedgerAPIURL string `toml:"json_ledger_api_url" comment:"https://docs.digitalasset.com/build/3.5/reference/json-api/json-api.html"`
	// GRPCLedgerAPIURL https://docs.digitalasset.com/build/3.5/reference/lapi-proto-docs.html
	GRPCLedgerAPIURL string `toml:"grpc_ledger_api_url" comment:"https://docs.digitalasset.com/build/3.5/reference/lapi-proto-docs.html"`
	// AdminAPIURL https://docs.digitalasset.com/operate/3.5/howtos/configure/apis/admin_api.html
	AdminAPIURL string `toml:"admin_api_url" comment:"https://docs.digitalasset.com/operate/3.5/howtos/configure/apis/admin_api.html"`
	// ValidatorAPIURL https://docs.sync.global/app_dev/validator_api/index.html
	ValidatorAPIURL string `toml:"validator_api_url" comment:"https://docs.sync.global/app_dev/validator_api/index.html"`

	// HTTPHealthCheckURL responds on GET /health
	HTTPHealthCheckURL string `toml:"http_health_check_url" comment:"HTTP health check endpoint, responds on GET /health"`
	// GRPCHealthCheckURL grpc.health.v1.Health/Check
	GRPCHealthCheckURL string `toml:"grpc_health_check_url" comment:"GRPC health check endpoint, responds to grpc.health.v1.Health/Check"`

	// JWT JSON Web Token for this participant
	JWT string `toml:"jwt" comment:"JSON Web Token for this participant"`
}

type ChainFamily added in v0.10.31

type ChainFamily string

func TypeToFamily added in v0.10.31

func TypeToFamily(t string) (ChainFamily, error)

type ExposeWs added in v0.1.17

type ExposeWs = bool
const (
	WithWsEndpoint    ExposeWs = true
	WithoutWsEndpoint ExposeWs = false
)

type Input

type Input struct {
	// Common EVM fields
	Type          string `` /* 266-byte string literal not displayed */
	Image         string `toml:"image" comment:"Blockchain node image in format: $registry:$image, ex.: ghcr.io/foundry-rs/foundry:stable"`
	PullImage     bool   `toml:"pull_image" comment:"Whether to pull image or not when creating Docker container"`
	Port          string `toml:"port" comment:"The port Docker container will expose"`
	ContainerName string `toml:"container_name" comment:"Docker container name"`
	// Not applicable to Solana, ws port for Solana is +1 of port
	WSPort                   string   `toml:"port_ws" comment:"WebSocket port container will expose"`
	ChainID                  string   `toml:"chain_id" comment:"Blockchain chain ID"`
	DockerCmdParamsOverrides []string `toml:"docker_cmd_params" comment:"Docker command parameters override, ex. for Anvil: [\"-b\", \"1\", \"--mixed-mining\"]"`
	Out                      *Output  `toml:"out" comment:"blockchain deployment output"`

	// Solana fields
	// publickey to mint when solana-test-validator starts
	PublicKey    string `toml:"public_key" comment:"Public key to mint when solana-test-validator starts"`
	ContractsDir string `toml:"contracts_dir" comment:"Solana's contracts directory"`
	// programs to deploy on solana-test-validator start
	// a map of program name to program id
	// there needs to be a matching .so file in contracts_dir
	SolanaPrograms     map[string]string             `` /* 141-byte string literal not displayed */
	ContainerResources *framework.ContainerResources `toml:"resources" comment:"Docker container resources"`
	CustomPorts        []string                      `toml:"custom_ports" comment:"Custom ports pairs in format $host_port_number:$docker_port_number"`

	// Sui specific: faucet port for funding accounts
	FaucetPort string `toml:"faucet_port" comment:"Sui blockchain network faucet port"`

	// Canton specific
	NumberOfCantonValidators int `toml:"number_of_canton_validators" comment:"Number of Canton network validators"`

	// GAPv2 specific params
	HostNetworkMode  bool   `` /* 131-byte string literal not displayed */
	CertificatesPath string `toml:"certificates_path" comment:"GAPv2 specific parameter: path to default Ubuntu's certificates"`

	// Optional params
	ImagePlatform *string `toml:"image_platform" comment:"Docker image platform, default is 'linux/amd64'"`
	// Custom environment variables for the container
	CustomEnv map[string]string `toml:"custom_env" comment:"Docker container environment variables in TOML format key = value"`
}

Input is a blockchain network configuration params

type NetworkSpecificData added in v0.1.17

type NetworkSpecificData struct {
	SuiAccount      *SuiWalletInfo   `toml:"sui_account" comment:"Sui network account info"`
	CantonEndpoints *CantonEndpoints `toml:"canton_endpoints" comment:"Canton network endpoints info"`
}

type Node

type Node struct {
	ExternalWSUrl   string `toml:"ws_url" comment:"External blockchain node WebSocket URL"`
	ExternalHTTPUrl string `toml:"http_url" comment:"External blockchain node HTTP URL"`
	InternalWSUrl   string `toml:"internal_ws_url" comment:"Internal blockchain node WebSocket URL"`
	InternalHTTPUrl string `toml:"internal_http_url" comment:"Internal blockchain node HTTP URL"`
}

Node represents blockchain node output, URLs required for connection locally and inside docker network

type Output

type Output struct {
	UseCache            bool                     `toml:"use_cache" comment:"Whether to respect caching or not, if cache = true component won't be deployed again"`
	Type                string                   `` /* 170-byte string literal not displayed */
	Family              string                   `toml:"family" comment:"Blockchain family, can be one of: evm solana aptos sui tron ton canton"`
	ContainerName       string                   `toml:"container_name" comment:"Blockchain Docker container name"`
	NetworkSpecificData *NetworkSpecificData     `toml:"network_specific_data" comment:"Blockchain network-specific data"`
	Container           testcontainers.Container `toml:"-"`
	ChainID             string                   `toml:"chain_id" comment:"Chain ID"`
	Nodes               []*Node                  `toml:"nodes" comment:"Blockchain nodes info"`
}

Output is a blockchain network output, ChainID and one or more nodes that forms the network

func NewBlockchainNetwork

func NewBlockchainNetwork(in *Input) (*Output, error)

func NewWithContext added in v0.11.6

func NewWithContext(ctx context.Context, in *Input) (*Output, error)

NewBlockchainNetwork this is an abstraction that can spin up various blockchain network simulators

type SuiWalletInfo added in v0.1.17

type SuiWalletInfo struct {
	Alias           *string `toml:"alias" json:"alias" comment:"Alias key name, usually null"`                   // Alias key name, usually "null"
	Flag            int     `toml:"flag" json:"flag" comment:"-"`                                                // Flag is an integer
	KeyScheme       string  `toml:"key_scheme" json:"keyScheme" comment:"Sui key scheme"`                        // Key scheme is a string
	Mnemonic        string  `toml:"mnemonic" json:"mnemonic" comment:"Sui key mnemonic"`                         // Mnemonic is a string
	PeerId          string  `toml:"peer_id" json:"peerId" comment:"Sui key peer ID"`                             // Peer ID is a string
	PublicBase64Key string  `toml:"public_base64_key" json:"publicBase64Key" comment:"Sui key in base64 format"` // Public key in Base64 format
	SuiAddress      string  `toml:"sui_address" json:"suiAddress" comment:"Sui key address"`                     // Sui address is a 0x prefixed hex string
}

SuiWalletInfo info about Sui account/wallet

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL