You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过程序调用Keyring访问Cosmos链私钥时遇多次密码尝试失败问题

问题排查与解决

核心原因

你当前的代码只提供了一次密码输入,但file类型的keyring在首次解锁或部分场景下,会要求两次输入密码(用于确认),而你的输入流仅提供了一次带换行的密码,导致第二次验证时无有效输入,触发失败次数过多的panic。

修复方案

根据file类型keyring的逻辑,需要向输入流提供两次相同密码+换行符,调整后的代码如下:

import (
    "bytes"
    "fmt"
    "log"

    "github.com/cosmos/cosmos-sdk/types/sdk"
    "github.com/cosmos/cosmos-sdk/crypto/keyring"
)

func main() {
    passwd := "your-actual-passphrase"
    // 构造包含两次密码的输入流,每次密码后加换行
    input := fmt.Sprintf("%s\n%s\n", passwd, passwd)
    reader := bytes.NewBufferString(input)

    kr, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendFile, cliDir, reader)
    if err != nil {
        // 必须显式处理错误,避免未捕获的panic
        log.Fatalf("创建keyring失败: %v", err)
    }
    // 后续使用kr操作keyring
}

额外注意事项

  • 错误处理:原代码未捕获keyring.New的返回错误,panic源于内部错误未被处理,务必显式检查并处理错误。
  • 密码准确性:确保传入的passwd与创建keyring时设置的密码完全一致,包括大小写、特殊字符。
  • 路径正确性:确认cliDir指向Cosmos链的正确配置目录(通常为~/.your-chain-name),file类型keyring存储在该目录下的keyring-file子目录中。

内容的提问来源于stack exchange,提问作者Ashwin Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:59:51