钱包与账户

circle-info

在 Stacks 中,“地址”和“主体(principal)”这两个术语可以互换使用。

介绍

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

Stacks 钱包的用途

  • 建立用户身份

  • 存储资产

  • 显示余额

  • 签署交易

  • 签署消息

  • 参与比特币经济

Stacks 中的钱包由账户组成,使用基于账户的模型,而不是像比特币那样的 UTXO 模型。该模型比 UTXO 模型更简单,并具有更传统的“余额”概念,类似于银行中的账户。在此模型中,每个地址对给定代币只有一个“余额”数字,随着交易发送到/从该账户发送而增加/减少。这也是大多数 Web3 生态系统使用的方式。在 UTXO 模型中,网络作为分类账运行,每个 UTXO 类似于一张现金票据。

Stacks 账户的组成部分

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

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

  • 地址(主体) - 地址是从公钥派生的更短、更易于用户识别的表示。它是您在 Stacks 上接收 sBTC、STX、代币或 NFT 时共享的内容,并且作为用户的链上标识符。 Stacks 中的示例公开地址(c32check 编码): SPM9G3CNGSCTB4956290NESM0MR9W9CCEPVEPSQC

circle-info

私/公钥生成使用的密码学为 secp256k1 曲线。

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

地址的创建方式是先生成 RIPEMD-160SHA256 公钥进行哈希。BTC 地址使用 Base58Check编码。对于 Stacks 地址, c32checkarrow-up-right 被使用。

Stacks 账户是拥有资产(例如 Stacks (STX) 代币)的实体。一个账户具有地址、私钥、nonce 和一个或多个资产余额。未经账户所有者的操作,资产无法离开账户。对资产(以及账户余额)的所有更改都需要相应的交易。

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

地址格式

Stacks 地址使用不同的前缀来指示它们所属的网络,便于区分主网和测试网地址。


如何创建 Stacks 账户?

钱包的账户是从符合 BIP39 标准的 24 个单词助记词短语生成的。这通常称为 种子短语(seed phrase)。种子短语提供对 Stacks 账户的访问。

triangle-exclamation

开发者和非开发者都可以通过几种不同的方法来创建 Stacks 账户。

1

使用 Stacks.js

对于以程序方式生成钱包或从备份恢复账户,您可以从助记词种子短语派生地址。每个钱包可以包含多个账户,这些账户都从同一助记词通过不同的派生路径派生出来。

有关以编程方式生成密钥和账户的更多方法,请查看指南 此处.

2

使用 Stacks CLI 工具

使用 Stacks CLI 工具可让您在命令行上管理钱包。

make_keychain

get_address

有关更多使用示例,请查看 Stacks CLI 仓库 此处arrow-up-right.

3

使用比特币 L2 钱包扩展/应用

有许多支持比特币层和元协议的流行比特币钱包。Leather 和 Xverse 是开始使用 Stacks 的流行选项。

4

使用其他社区构建的工具

查看 Stacks 开发工具目录 以获取用于创建和管理 Stacks 钱包的其他创意开发工具。


Clarity 合约地址如何格式化?

在 Stacks 上, 合约地址/主体 唯一标识已部署的智能合约,其结构为账户主体加上合约命名空间,形成唯一的链上标识:

结构解析

  1. 部署者地址 一个标准的 Stacks 主体(由公钥的 hash160 派生),例如:

    • SP... → 主网

    • ST... → 测试网

  2. 合约名称 在部署时选择的 ASCII 标识符(例如, my-token, amm-v1, nft-market).

为什么采用这种结构

因为合约标识符是按部署者地址进行命名空间划分的:

  • 两个不同的账户可以部署同名合约。

  • 单个账户不能部署两个同名合约。

  • 该标识符是确定性的并且全局唯一。


处理不同的格式

新接触 Stacks 的开发者在指定 Stacks 的主体(即地址)时常常会被不同的表示方式所困扰。

下面是应对三种不同使用场景中主体处理方式的说明。


Stacks 与比特币地址之间的关联

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

以编程方式,你也可以使用一种称为 b58ToC32的方法,来自 c32check javascript 库,它可以为你抽象处理转换。


附加资源

最后更新于

这有帮助吗?