账户
在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

调用转账
现在我们使用第一个初始账户 0x3 将一些余额转移到这个新部署的账户中
sncast -u http://127.0.0.1:9944 --account 0x3 \
invoke --contract-address 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 \
--function "transfer" \
--calldata "<YourAddress> 1 100000"

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