如何解码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
相关产品推荐
相关产品推荐

