name: mvx_sdk_go_core description: 用于 MultiversX Go SDK 的核心网络操作 - 代理, VM 查询。
MultiversX SDK-Go 核心网络操作
本技能涵盖 blockchain 包和网络交互。
代理 (网络客户端)
设置代理以与区块链交互:
import (
"github.com/multiversx/mx-sdk-go/blockchain"
"github.com/multiversx/mx-sdk-go/core/http"
)
// 配置代理
args := blockchain.ArgsProxy{
ProxyURL: "https://devnet-gateway.multiversx.com",
Client: http.NewHttpClientWrapper(nil, ""),
SameScState: false,
ShouldBeSynced: false,
FinalityCheck: false,
CacheExpirationTime: time.Minute,
EntityType: core.Proxy,
}
proxy, err := blockchain.NewProxy(args)
数据读取
// 获取账户
address := data.NewAddressFromBech32String("erd1...")
account, err := proxy.GetAccount(ctx, address)
// account.Nonce, account.Balance
// 获取网络配置
config, err := proxy.GetNetworkConfig(ctx)
// 获取交易
tx, err := proxy.GetTransaction(ctx, "txHash", true)
VM 查询 (智能合约读取)
从智能合约读取状态,无需发送交易。
argsQuery := blockchain.ArgsVmQueryGetter{
Proxy: proxy,
Timeout: 10 * time.Second,
}
vmQueryGetter, err := blockchain.NewVmQueryGetter(argsQuery)
// 执行查询
response, err := vmQueryGetter.ExecuteQueryReturningBytes(
contractAddress,
"getFunctionName",
[][]byte{arg1, arg2}, // 参数作为字节切片
)
// response 是 [][]byte
分片协调
使用分片地址。
// 创建协调器
coordinator, err := blockchain.NewShardCoordinator(3, 0) // 3 个分片,当前 0
// 获取地址的分片
shardID := coordinator.ComputeId(address)
最佳实践
- 重用代理: 它维护连接池/缓存
- 上下文: 始终传递带有超时的上下文,避免挂起
- VM 查询: 推荐用于读取状态(即时、免费)
- 错误处理: 检查特定的网络错误