05 · Suite v2 + v3 实操 —— 较早 EVM 代际(IPFS)
状态:手册章节。读者:用户与开发者。最后更新:2026-10-05。
Suite v3 是 igit 首个已发布的 EVM 代际。其控制平面与 v4 一样是不可升级的
九合约套件,但其数据平面是 IPFS:每个 ref 存储一个提交 SHA 加一个有序
的 ipfs://CID pack URI 列表,pack 经 IPFS 网关读取。
该代际按设计冻结(ADR 0002): 不再获得新的存储特性,全部新开发都发生在 Suite v4 上。 它仍然完全可读可写,既有的 v3 仓库也永远通过其原始路径可达。
为什么叫"v2 + v3"? "EVM V2" 是产品代际名称——把控制平面从 CosmWasm 迁到 Injective EVM 这件事。Suite v2 从未作为 EVM 套件部署; Suite v3 才是首个 EVM 发布。若真出现 v2 套件,其 ref 早于后继 ABI,会按 v3 形态读取。这就是该代际的 Web 徽章显示 EVM V2 + V3、套件徽章显示 Suite v3 · IPFS 的原因。
本章通篇使用的实操示例:
| 字段 | 值 |
|---|---|
| 所有者(Injective 地址) | inj1sh4v00qgzjy25a73mqheew8q200punaglrzec5 |
| 所有者(EVM 地址) | 0x85EAC7BC081488AA77D1D82F9CB8E053DE1E4FA8 |
| 账户标签 | igit-dev |
| 仓库 | demo-showcase |
| SuiteDirectory(测试网) | 0xf8844F90887731FFd607E1f59e39a3918F6eAb35 |
| EVM 链 ID | 1439 |
| Web URL | https://www.igit.xyz/inj1sh4v00qgzjy25a73mqheew8q200punaglrzec5/demo-showcase?suite=3 |
v3 有什么不同
1. ref 是 URL 列表,不是承诺。 链上 ref 形态为:
struct GitRef {
string commitSha; // 40 或 64 位十六进制
string[] packUris; // 1..128 项,每项一个 ipfs://CID,最长 512 字节
uint64 updatedAt;
address updatedBy;
bool exists;
}
链记录的是 pack 在哪里(IPFS CID),而不是对其字节的密码学承诺。v3 的 pack 没有链上 raw SHA-256 与大小:本地对下载重新计算哈希可以验证传输 完整性,却无法凭空造出缺失的链上承诺。旧读取端会明确声明这一验证边界。
2. 推送需要本地 Kubo 守护进程;克隆不需要。 v3 推送经固定版本的本地
Kubo 固定(pin)pack(由 igit setup push 安装并校验和验证)。克隆、
fetch 与 pull 以普通 HTTPS 从只读网关读取 pack——无本地守护进程、无 IPFS
账户。
3. 并发控制是 expectedSha,而 force 会跳过它。 非强制的 updateRef
必须把已存储的 commitSha 作为 expectedSha 传入;不匹配即 revert
ShaMismatch。force == true 时跳过该比较。这是与 Suite v4
的一个真实且有据可查的差异——v4 的 revision CAS 即使对强制推送也适用。
在 v3 上,非强制更新会合并 pack URI(不存在则追加);强制更新则替换
整个数组。
其余一切——仓库身份、协作者、所有权转移、守护人恢复、审核、赞助、分成、
用户名、徽章、发布校验和——都是同一个模块面,见
第 07 章 · 链上合约与协议,由同一个
SuiteDirectory 分派。
v3 特有的前置条件
| 项目 | 要求 |
|---|---|
| Kubo | 仅推送需要。 由 igit setup push 自动安装(固定版本、SHA-256 校验)到 ~/.igit/deps |
| 读网关 | 默认 hk / us 网关加公共 ipfs.io 回退;可配置 |
| 上传服务 | 受控的美国复制 endpoint;随网络 profile 自动配置 |
injectived | 不需要 |
| WSL2 | 不需要 |
推送期间使用的 Kubo RPC API 仅限回环地址。克隆与 fetch 从不需要 Kubo: helper 从已验证的 Suite 读取 ref,并经 HTTPS 网关下载 pack。
第 1 步 —— 确认你在 v3 套件上
$ igit config set network injective-testnet
network = injective-testnet
$ igit config set evm_suite_directory_address 0xf8844F90887731FFd607E1f59e39a3918F6eAb35
evm_suite_directory_address = 0xf8844F90887731FFd607E1f59e39a3918F6eAb35
$ igit suite verify
suite verification passed
$ igit suite info --json
{
"directory": "0xf8844f90887731ffd607e1f59e39a3918f6eab35",
"version": 3,
"chain_id": 1439,
"state": 1,
...
}
你要的是 "version": 3 加 "state": 1。版本 4 则说明你配置的是后继
Directory。切换代际永远是这一个配置值——客户端随后依据链上
suiteVersion() 自动分派到 IPFS 路径或 BYOS 路径。
CLI 一次只指向一个 SuiteDirectory。Web 应用同时列出两个测试网地址并 用
?suite=在其间选择;CLI 不是——改evm_suite_directory_address。
第 2 步 —— 准备推送环境
$ igit setup push
igit will install pinned push dependencies under ~/.igit/deps.
Existing working Kubo installations will be preserved; EVM suite setup does not install injectived.
Continue? [y/N] y
igit setup push 从 cli/internal/bootstrap/deps.json 中固定的镜像清单下载
固定的 Kubo 二进制与校验和;每个下载字节都必须匹配固定 SHA-256。非交互
运行用 --yes,重装用 --force。
然后运行诊断:
$ igit doctor --push
igit doctor (push)
与 v4 不同,v3 上 Kubo 检查必须为 OK:
| 检查项 | 证明什么 |
|---|---|
Kubo CLI | 固定的 Kubo 二进制可解析 |
local Kubo API | POST <ipfs_api>/api/v0/version 在回环地址应答 |
upload authorization | 存在显式令牌,或授权 endpoint 可签发 |
read gateway | 至少一个已配置读网关应答 /healthz |
随时可检查网关健康与选择顺序:
$ igit gateway status
hk ok https://igit-hk.haohanyh.ovh 213ms
us ok https://igit-us.haohanyh.ovh 402ms
$ igit gateway select
1 hk https://igit-hk.haohanyh.ovh
2 us https://igit-us.haohanyh.ovh
默认读路径是按延迟健康排序的项目 hk / us 网关,公共回退为
https://ipfs.io。helper 启动时还会(尽力而为)直连 HK swarm peer,使该
节点已持有的 pack 无需缓慢的 DHT 发现即可获取。以上行为都可通过
~/.igit/config.json 中的 gateways、public_gateway_fallbacks 与
peers 配置。