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

如何解码Algorand智能合约返回的编码公钥地址?

解码Algorand智能合约返回的编码公钥为标准地址

你拿到的字符串是原始32字节Algorand公钥的Base64编码,要转换成标准的Algorand地址,需要两步:Base64解码得到原始公钥字节,再将其编码为带校验和的Base32格式地址。

具体实现步骤

  • Base64解码获取原始公钥:Base64字符串解码后会得到32字节的二进制数据,这就是Algorand账户的原始公钥。
  • 编码为标准Algorand地址:Algorand标准地址采用带4字节校验和的Base32编码,需要将原始公钥与校验和拼接后再做Base32编码。校验和由公钥通过SHA-512/256哈希后取最后4字节得到。

代码示例

Python实现

依赖py-algorand-sdk库的便捷实现:

import base64
from algosdk import encoding

# 输入的Base64编码字符串
base64_pubkey = "9HUG4x4wVzHmXRedwA6b9ygZbN/KGeDfmRDLgGZtLmI="

# Base64解码得到原始公钥字节
raw_pubkey = base64.b64decode(base64_pubkey)
# 编码为标准Algorand地址
address = encoding.encode_address(raw_pubkey)
print(address)

无依赖手动实现:

import base64
import hashlib

base64_pubkey = "9HUG4x4wVzHmXRedwA6b9ygZbN/KGeDfmRDLgGZtLmI="
raw_pubkey = base64.b64decode(base64_pubkey)

# 计算SHA-512/256哈希并取最后4字节作为校验和
checksum = hashlib.sha512(raw_pubkey).digest()[:4]
# 拼接后做Base32编码,去除末尾等号并转为大写
address = base64.b32encode(raw_pubkey + checksum).decode('utf-8').upper().replace('=', '')
print(address)

JavaScript/TypeScript实现

依赖algosdk库的实现:

const algosdk = require('algosdk');
const base64 = require('base64-js');

const base64Pubkey = "9HUG4x4wVzHmXRedwA6b9ygZbN/KGeDfmRDLgGZtLmI=";
// Base64解码为Uint8Array格式的原始公钥
const rawPubkey = base64.toByteArray(base64Pubkey);
// 编码为标准Algorand地址
const address = algosdk.encodeAddress(rawPubkey);
console.log(address);

验证方法

解码得到的地址可通过Algorand区块浏览器查询有效性,确认是否为目标账户地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 01:06:17