Derick
816 words
4 minutes
Solana 架构与开发环境搭建

一、为什么选择 Solana?#

如果说以太坊是“智能合约的起点”,

那么 Solana 就是“高性能并行区块链的典范”。

  • EVM 世界:所有交易线性执行,TPS 通常低于 100。
  • Solana 世界:通过 并行执行 (Parallel Execution)历史证明 (Proof of History, PoH),TPS 可轻松破万。

Solana 的理念是——

“每一台计算机都能成为高频交易级的去中心化服务器。”

这使得它在 DeFi、GameFi、NFT、L2 桥接等场景中表现极为出色。


二、Solana 的整体架构#

Solana 的底层架构由以下几个核心组件组成:

1. Validator(验证节点)#

执行区块生成与交易验证。

每个 Validator 都运行完整的链逻辑,包括账户存储与交易执行。

2. Leader 与 Slot#

时间在 Solana 中被离散化为 Slot(时隙)

每个 Slot 指派一个 Leader 节点 负责产出区块。

  • 1 Slot ≈ 400ms
  • Leader 顺序由 PoH + PoS 混合机制决定

3. Proof of History(PoH)#

PoH 是一种时间序列加密证明。

它确保所有节点能就事件的顺序达成一致,而无需等待区块共识。

这就是 Solana 能并行执行的关键。

4. Bank#

每个 Bank 代表一个 Slot 的账户状态快照。

所有交易都在 Bank 内执行,完成后生成下一个状态。

5. Account 模型#

与 EVM 不同,Solana 没有“合约账户”和“外部账户”的区分,

每个账户都可存储数据,并由特定 Program 控制。


三、Solana 账户模型 vs Ethereum 账户模型#

特性EthereumSolana
账户类型EOA / Contract通用 Account
状态存储StorageAccount Data
执行入口callInstruction
余额单位WeiLamports
Gas 模型gasPrice + gasLimit固定费率 + Rent 租金
日志机制Event LogProgram Log

Solana 的设计更加接近操作系统的概念——

账户像文件,Program 像系统调用

每个合约只是一个“可执行文件”,被多个账户共享使用。


四、搭建本地开发环境#

我们将搭建一个可运行的 Solana + Golang SDK 环境。

1️⃣ 安装 Solana CLI#

Solana 官方 CLI 工具是与链交互的基础。

sh -c "$(curl -sSfL https://release.solana.com/stable/install)"

安装完成后,确认版本:

solana --version

推荐版本:v1.18.0 及以上


2️⃣ 配置开发网络#

solana config set --url https://api.devnet.solana.com

查看当前配置:

solana config get

Devnet 是 Solana 的公共测试网络,数据可随时重置。


3️⃣ 创建钱包#

solana-keygen new --outfile ~/.config/solana/devnet.json

设置默认钱包:

solana config set --keypair ~/.config/solana/devnet.json

查看地址与余额:

solana address
solana balance

请求测试代币空投/去Solana水龙头网点击获取:

solana airdrop 2

4️⃣ 验证网络状态#

solana validators

查看当前区块高度:

solana slot

五、安装 Go SDK 环境#

在 Go 环境中,我们使用 gagliardetto/solana-go 作为主要 SDK。

初始化项目#

mkdir solana-demo && cd solana-demo
go mod init solana-demo

安装依赖#

go get github.com/gagliardetto/[email protected]
go get github.com/gagliardetto/[email protected]

六、第一个 Solana 程序:查询账户余额#

我们使用 Go SDK 查询刚创建的钱包余额。

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/gagliardetto/solana-go"
	"github.com/gagliardetto/solana-go/rpc"
)

func main() {
	client := rpc.New(rpc.DevNet_RPC)
	ctx := context.Background()

	pubKey := solana.MustPublicKeyFromBase58("替换为你的公钥")

	balance, err := client.GetBalance(ctx, pubKey, rpc.CommitmentFinalized)
	if err != nil {
		log.Fatalf("查询失败: %v", err)
	}

	fmt.Printf("账户 %s 的余额为: %.9f SOL\n", pubKey, float64(balance.Value)/1e9)
}

执行:

go run main.go

输出类似:

账户 7X5T4T8FvDytM7Abz2uqegh6PqnsWWf29Rh7PGzFMp1u 的余额为: 2.000000000 SOL
Solana 架构与开发环境搭建
https://blog.ithuo.net/posts/solana-tutorial-01-architecture-and-setup/
Author
Derick
Published at
2024-12-12