历史验收记录:CosmWasm V1 钱包赞助
[!WARNING] 本文只保留 2026-07 CosmWasm V1 Web、Keplr/CosmJS 和 Cosmos EIP-712 赞助路径的 历史验收证据。当前 EVM V2 Web 使用 viem 和 EVM wallet,不包含 这里描述的 Keplr、CosmJS、LCD 查询或
MsgExecuteContract交易路径。 不要按本文验收当前产品,也不要把下方旧交易当作 EVM Suite 回执。当前验收 要求见 release.md 和 acceptance-evidence.md。
以下步骤保持原样,供审计历史部署与迁移输入使用。
技术选型说明
- 用经过审计的 CosmJS(
@cosmjs/cosmwasm-stargate)+ Keplr 原生 signer,不用@injectivelabs/sdk-ts(该包 2026-07 曾被供应链投毒 v1.20.21 窃取私钥)。 - Injective 账户是
ethsecp256k1,Keplr 内建支持 injective-888,自动处理公钥类型。 - 查询走 LCD(REST),交易走 RPC(
k8s.testnet.tm.injective.network)。
准备(约 3 分钟)
- 浏览器安装 Keplr 扩展。
- 在 Keplr 里新建一个账户(不要用日常钱包;助记词妥善保存)。
- 首次连接时若 Keplr 没有 injective-888,页面会自动请求添加该链 —— 在弹窗点 Approve。
- 复制该账户的
inj1…地址,去 testnet faucet 领测试 INJ(付 gas + 赞助金额)。
验收步骤
cd web && npm run dev,打开 http://localhost:5173 。- 顶栏点 Connect Keplr → Keplr 弹窗点 Approve。
- ✅ 按钮变成
<余额> INJ · inj1xxx…xxxx(绿色等宽字体)。
- ✅ 按钮变成
- 打开任意不是你自己的仓库的 sponsors 页,例如:
#/inj1sh4v00qgzjy25a73mqheew8q200punaglrzec5/demo-showcase/sponsors- 顶部绿框卡片出现金额输入框(默认 0.1)+ 留言框 + Sponsor 按钮。
- (若连的是仓库 owner 本人,会显示"这是你自己的仓库",属正常保护。)
- 输入金额(如
0.05)、留言(如great work),点 Sponsor。 - Keplr 弹出签名窗 → 确认。
- ✅ 出现
✅ sponsored! tx <hash>…提示。 - ✅ 顶栏余额下降(赞助额 + gas)。
- ✅ 出现
- 刷新页面 → sponsor wall 出现你这条记录(金额 / 你的地址 / 留言);Lifetime sponsorship 累加。
- 去浏览器区块浏览器核对该 tx:一笔交易内含合约执行 + 3 笔 BankSend(金库 3% / 分成对象 / owner 余额)。
常见问题
- "Keplr extension not found":扩展没装或没启用。
- 连接卡住/无弹窗:确认 Keplr 已解锁;刷新页面重试。
- 签名报 insufficient funds:faucet 领的 INJ 不够付 gas,再领一次。
- RPC 连不上(大陆网络):Settings 目前只配了 LCD;RPC 端点硬编码在
web/src/lib/wallet.ts的RPC常量,可改为自建节点(见 docs/pinning-infrastructure.md §6)。
反馈给我
把第 5 步的 tx hash(或任何报错文案)发我,我据此确认闭环或修问题。
历史验收记录:MetaMask Cosmos EIP-712 赞助
MetaMask 走的是完全不同的路径(EIP-712,不是 Cosmos 签名),这部分我无法自动验证, 只能靠你手动测。用
@injectivelabs/sdk-ts@1.20.27(投毒事件后的干净版;恶意版 1.20.21 已被 npm 弃用) 生成 EIP-712 类型数据,直连window.ethereum的eth_signTypedData_v4签名。SDK 通过动态 import 拆成独立 chunk,不影响已验证的 Cosmos 钱包路径。
准备
- 浏览器装 MetaMask,新建/选一个账户。
- 该账户对应的 Injective 地址:MetaMask 是
0x...以太坊地址,Injective 会推导出对应的inj1...。 页面点 “Sponsor with MetaMask” 时会自动推导;你也可以先转点测试 INJ 到那个 inj 地址(付 gas)。- 拿 inj 地址:连接后控制台会显示,或用别的工具把
0x转 bech32;实在不确定就先跑一次,报错会带出地址,再让我转测试币。
- 拿 inj 地址:连接后控制台会显示,或用别的工具把
验收步骤
- 打开某个不是你自己的仓库 sponsors 页,如
#/inj1sh4v.../demo-showcase/sponsors。 - 绿框卡片里除了 Cosmos 的 Sponsor 按钮,应多一个 “Sponsor with MetaMask”(仅当检测到
window.ethereum)。 - 填金额(如
0.05)+ 留言,点 Sponsor with MetaMask。 - MetaMask 弹出 签名请求(Signature request,EIP-712 类型数据),确认签名。
- 期望:出现
✅ sponsored! tx …;刷新后赞助墙出现该笔。
V1 历史状态:✅ 已验证(VERIFIED on injective-888)
2026-07-29 实测打通,tx 3BD391ED289642723CA1D884D529D43857DA8190512D0004A715B65778F18002(code=0)。
链上铁证:
extension_options=/injective.types.v1beta1.ExtensionOptionsWeb3Tx—— 只有 EIP-712/MetaMask 交易才有sign_mode=SIGN_MODE_EIP712_V2public_key=/injective.crypto.v1beta1.ethsecp256k1.PubKey
验证脚本:bash scripts/verify-metamask-tx.sh <txhash-prefix>。
踩过的坑(按递进顺序,均已修复)
- EIP712_v1 is not supported for MsgExecuteContract → 用
getEip712TypedDataV2+signMode: SIGN_EIP712_V2。 - Provided chainId "888" must match the active chainId "1439" → domain 与 web3 扩展用
EvmChainId.TestnetEvm(1439),非 888。 - signature verification failed (unauthorized) → 签名的 typed-data
context必须与 tx 逐字一致:必须把相同的fee和memo传给getEip712TypedDataV2。 - 报错显示
[object Object]→ 用formatError()提取真实信息。