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

求助:如何用cosmrs库将公钥转成cosmosvalcons前缀的共识地址

使用cosmrs将Ed25519共识公钥转换为cosmosvalcons前缀地址

需求说明

需要通过cosmrs库将Ed25519类型的共识公钥转换为带cosmosvalcons前缀的Bech32编码地址,此前尝试未得到正确前缀的结果,以下是可运行的示例代码及关键说明。

示例公钥

{
    "consensus_pubkey": {
      "@type": "/cosmos.crypto.ed25519.PubKey",
      "key": "bDO9bUrbyg0f1pTpmjjZU5cgsweCWdwL6HUVnsKJi7k="
    }
}

示例代码(Rust)

use cosmrs::{crypto::PublicKey, hrp::Hrp, prelude::*};
use base64::{engine::general_purpose, Engine as _};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 提取示例公钥中的base64编码内容
    let base64_pubkey = "bDO9bUrbyg0f1pTpmjjZU5cgsweCWdwL6HUVnsKJi7k=";
    
    // 解码base64为原始字节数组
    let pubkey_bytes = general_purpose::STANDARD.decode(base64_pubkey)?;
    
    // 将原始字节转换为cosmrs的Ed25519公钥实例
    let pubkey = PublicKey::from_raw_ed25519(&pubkey_bytes)?;
    
    // 指定HRP前缀为cosmosvalcons,生成对应地址
    let hrp = Hrp::try_from("cosmosvalcons")?;
    let address = pubkey.address(&hrp)?;
    
    // 输出结果
    println!("共识地址: {}", address);
    
    Ok(())
}

关键说明

  • 公钥类型匹配:示例公钥为Ed25519类型,需调用from_raw_ed25519方法转换;若为Secp256k1等其他类型,需使用对应from_raw_*方法。
  • HRP前缀指定:cosmrs默认HRP前缀为cosmos,必须显式设置为cosmosvalcons才能生成目标格式地址,这是此前转换失败的核心原因。
  • 核心方法翻译(基于官方文档):
    • PublicKey结构体:用于表示Cosmos生态的各类公钥,支持Ed25519、Secp256k1等主流算法。
    • from_raw_*系列方法:从原始字节数组创建公钥实例,需保证字节长度与算法匹配(如Ed25519公钥固定为32字节)。
    • address(&self, hrp: &Hrp)方法:根据传入的HRP前缀生成Bech32编码地址,返回的Addr实例可直接转为字符串输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:56:11