钱包与账户

circle-info

有关钱包/账户在 Stacks 中如何生成的技术细节和标准,请查看 SIP-005 标准arrow-up-right 其中概述了所有这些内容。

介绍

Stacks 钱包是用于存储加密货币、NFT 及其他数字资产的软件或硬件工具。它们也用于在去中心化应用(dApp)中建立链上身份。这些钱包通过单一区块链地址以公钥加密的方式对每个用户的身份和资金进行加密存储和管理。

Stacks 钱包的目的

  • 建立用户身份

  • 存储资产

  • 显示余额

  • 签署交易

  • 签署消息

  • 参与比特币经济

Stacks 中的钱包由账户组成,使用基于账户的模型,而不是像比特币那样的 UTXO 模型。该模型比 UTXO 模型更简单,并具有更传统的“余额”概念,类似于银行中的形式。在该模型中,每个地址对于某一代币有一个单一的“余额”数值,当交易发送至/从该账户发出时该数值会增加/减少。这也是大多数 Web3 生态系统所采用的。在 UTXO 模型中,网络以账本形式运行,每个 UTXO 类比为一张现金票据。

Stacks 账户的组成部分

  • 私钥 - 私钥是一个字母数字代码,与单个公钥成 1:1 配对。切勿与任何人分享你的私钥。私钥用于证明对公钥的所有权,以及如何花费由该密钥对持有的资产。 Stacks 中的示例私钥(32 字节后附加 0x01 字节): 5a4133fec2cf923d37238d3ba2fcd2ee9c8dce882c22218fd210d8a02ceb2c7401

  • 公钥 - 公钥是通过数学方式从私钥导出的。它可以安全地共享,并被网络用来验证由私钥创建的签名,而不会泄露私钥本身。 Stacks 中的示例公钥(压缩格式): 02e8eb87862945d369511fdcce326ffef9a01b68c7d070e3ce685a5cbb9b1ecfc5

  • 地址(Principal) - 地址是从公钥派生出的更短、用户友好的表示形式。它是你用来接收 sBTC、STX、代币或 NFT 的地址,并作为用户的链上标识符。 Stacks 中的示例公链地址(c32check 编码): SPM9G3CNGSCTB4956290NESM0MR9W9CCEPVEPSQC

circle-info

私钥/公钥生成使用了加密学中的 secp256k1 曲线。

Stacks 中使用的加密签名算法是 ECDSA 基于 secp256k1.

Stacks 账户是拥有资产(如 Stacks (STX) 代币)的实体。一个账户有地址、私钥、nonce 以及一个或多个资产余额。资产不能在没有账户所有者操作的情况下离开账户。对资产(以及账户余额)的所有更改都需要相应的交易。

所有 Stacks 钱包也支持比特币地址,从而实现跨 Stacks 和比特币生态系统的无缝参与。


创建

钱包的账户由符合 BIP39 标准的 24 个单词助记词生成。这通常被称为 种子短语。种子短语提供了对 Stacks 账户的访问权限。

triangle-exclamation

生成新的 Stacks 账户最简单的方法是使用 Stacks CLIarrow-up-right:

make_keychain 会创建以下文件:

circle-info

查看 Stacks CLI 参考arrow-up-right 以获取更多详细信息

字段
描述

mnemonic

用于访问账户的 24 个单词种子短语,使用 BIP39arrow-up-right 并具有 256 位熵生成

keyInfo.privateKey

账户的私钥。进行代币转移时需要,通常被称为 senderKey

keyInfo.address

账户的 Stacks 地址

keyInfo.btcAddress

账户对应的 BTC 地址。

keyInfo.wif

btcAddress 的私钥(压缩格式)。

keyInfo.index

账户的 nonce,从 0 开始

注意每个新的私钥都会自动生成一个新账户。无需在 Stacks 区块链上手动实例化账户。

circle-info

地址是通过生成公钥的以下哈希而创建的: RIPEMD-160 哈希arrow-up-rightSHA256arrow-up-right 的结果。BTC 地址采用 Base58Checkarrow-up-right编码。对于 Stacks 地址,使用 c32checkarrow-up-right 。从公钥推导地址可以在离线情况下完成,例如使用 c32check 的 c32addressDecode 方法。

除了使用 CLI 创建之外,还可以使用 Stacks Transactions JSarrow-up-right 库:

最后,你可以使用支持 Stacks 的钱包生成新账户,例如 Leatherarrow-up-right, Xversearrow-up-right,或 Asignaarrow-up-right.


处理不同格式

对于新的 Stacks 开发者来说,在开发时指定 Stacks 的 principals(即地址)的不同方式常常会令人困惑。

下面是处理三种不同用例中 principals 的解析。


Stacks 与比特币地址的关联

使 Stacks 与其一级结算层比特币紧密相连的特点之一是它们的许多共同点。其中之一是两者都基于 P2PKH 格式使用类似的地址生成方案,这允许比特币地址和 Stacks 地址共享相同的公钥哈希。如果你对一个传统比特币地址进行 base58check 解码,就可以揭示公钥哈希,然后可以用它来生成相应的 c32check 编码的 Stacks 地址。

在程序上,你也可以使用一个名为 b58ToC32的方法,来自 c32check javascript 库,该方法可以为你抽象转换过程。


其他资源

最后更新于

这有帮助吗?