跳到主要内容

账户

信息

在StarkNet 中并没有EOA 的存在,所有帐户都是CA。一个合约帐户想要被部属在StarkNet 上,他必须在自己的地址上有Ether,之后自己部属自己。

什么是账户?

帐户代表链上的用户,并使该用户能够与区块链进行交互。

通过账户,您可以发送交易并与其他合约交互。为了让您拥有链上资产,例如 ERC-20 代币或 NFT,该资产必须与您的账户地址相关联。

部署一个账户的流程

为了在 StarkNet 上部署新帐户,您需要完成以下步骤:

  • 决定您要部署的账户合约
  • 链下计算您的潜在账户地址
  • 发送资金至此地址
  • 旦该地址有足够的资金来支付部署费用,您就可以发送交易deploy_account。

默认情况下,madara已经集成了一个账户合约

该合约的类哈希(Class Hash)为: 0x6280083f8c2a2db9f737320d5e3029b380e0e820fe24b8d312a6a34fdba0cd

什么是Class Hash

信息

在 StarkNet 中,Class Hash 是一个重要的概念。Class Hash 是一种哈希值,用于唯一标识 StarkNet 合约的代码。StarkNet 将合约的代码哈希为一个固定长度的值,并使用这个值来表示合约。这样做有助于确保合约的唯一性和安全性,并允许在链上进行有效的状态更新和验证。

更多关于合约class_hash的说明可以查看 starknet文档

创建账户

初始化第一个账户

在开发环境中运行 madara 时,按照以下步骤启动第一个账户

sncast --url http://127.0.0.1:9944 \
account add \
--name 0x3 \
--address 0x3 \
--private-key 0x00c1cf1490de1352865301bb8705143f3ef938f97fdf892f1090dcb5ac7bcd1d

通过公钥部署账户

sncast \
--account 0x3 \
--url http://127.0.0.1:9944 \
deploy \
--class-hash "0x6280083f8c2a2db9f737320d5e3029b380e0e820fe24b8d312a6a34fdba0cd" \
--constructor-calldata "<PublicKey>"

例子

PublicKey 0x254020ae8af1612e53737a32275ad03b91e55467924a9c7de7915cba856d61

您可以使用自己的公钥替换此公钥

部署账户

合约地址 就是您的账户地址

获取账户余额

Token合约默认madara已经集成。合约地址 contract-address 为 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7

信息

此Token合约的地址 --contract-address 为 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 默认集成到 Madara 中

sncast -u http://127.0.0.1:9944 \
call --contract-address 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 \
--function "balanceOf" --calldata <YourAddress>

如你所见,这个新部署的账户余额为 0

GetAccountBalance

调用转账

现在我们使用第一个初始账户 0x3 将一些余额转移到这个新部署的账户中

sncast -u http://127.0.0.1:9944 --account 0x3 \
invoke --contract-address 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 \
--function "transfer" \
--calldata "<YourAddress> 1 100000"

AccountTransfer

再次检查余额,可以看到账户现在有余额了

AccountTransfer