相信大家都有去银行开设帐户的体验,感觉开设账户挺麻烦的,从而认为这是一件很严肃的事。
区块链世界里也有账户,下面大家可以先体验一下 CITA 的账户,然后我再和大家简单分享一下 CITA 账户背后的数字签名。
生成 CITA 账户
使用 cita-cli 生成一个区块链账户:
cita-cli key create
{
"address": "0x34cf5832c76df8c772526f99454a7cdba8821a3e",
"private": "0xae300ea6153027ffda80efb741b88cedc24dbee5e324b5268fbf3833e2c03418",
"public": "0x476f296900e180571f07270f5a4810ad42c565fd2d4eb16ffe0869ff5a201bd5d3c2f68834e7e19a096b5ae1cb91b1c63695c9c68b650390a2bad73e44c20398"
}
至此,你已经在 CITA 上开户完成,你需要保管好你的私钥 (private
),而 address
就是你的账户地址。
啊!这么简单!!这账户到底有没有用?
那接下来我们就在 CITA 的测试链 (https://testnet.citahub.com) 上体验一下这个账户的使用。
体验 CITA 账户
- 使用 cita-cli 连接 CITA 测试链
$ cita> switch --url https://testnet.citahub.com
[ url ]: https://testnet.citahub.com
[ pwd ]: /root/rivtower/code/github/digital-sign
[ color ]: true
[ debug ]: false
[ json ]: true
[ encryption ]: secp256k1
[ completion_style ]: List
[ edit_style ]: Emacs
[ save_private ]: false
- 尝试查看账户的 Token 余额
cita> rpc getBalance --address 0x34cf5832c76df8c772526f99454a7cdba8821a3e
{
"id": 1,
"jsonrpc": "2.0",
"result": "0x0"
}
可以发现,测试链已经认识了这个帐户,并告诉你账户的 Token 为 0 。
- 到 CITA 测试链 水龙头 去为账户领取一定的 Token
按提示输入地址领取便可。
- 确认 Token 到账
再次使用 cita-cli 查看账户 Token 余额.
$ cita> rpc getBalance --address 0x34cf5832c76df8c772526f99454a7cdba8821a3e
{
"id": 1,
"jsonrpc": "2.0",
"result": "0x21e19e0c9bab24"
}
可以看到余额已经发生了变化。账户有了余额,那你到底能不能 动它 呢?接下来就用你的账户私钥 动动看 。
- 将本账户下的 Token 转账一部分到另一个账户
- 生成新账户
cita> key create
{
"address": "0xb0a5f0f2c5d88e83b91d31086cde2ded4f2ff829",
"private": "0x36b77e8ef0fde2a1ed7521403b9cc42a38fedf64f72abe559ea7bdd524db5634",
"public": "0x6eb4e533ecb7b00bad8d023dce040332e923091d70858066805d6fdb3e2b4d51a355c646e92709b2087fbc394732585e23051b9af936848bb8669534fdc50ea8"
}
- 转账 50 到 账户
0xae300ea6153027ffda80efb741b88cedc24dbee5e324b5268fbf3833e2c03418
cita> transfer --address 0xb0a5f0f2c5d88e83b91d31086cde2ded4f2ff829 --private-key 0xae300ea6153027ffda80efb741b88cedc24dbee5e324b5268fbf3833e2c03418 --value
50
{
"id": 4,
"jsonrpc": "2.0",
"result": {
"hash": "0x3bb643abbb90b43040e59a3d8b620baafb9f98b1042e7cb946c34c6854eccd87",
"status": "OK"
}
}
- 查看目标账户 Token 余额
cita> rpc getBalance --address 0xb0a5f0f2c5d88e83b91d31086cde2ded4f2ff829
{
"id": 1,
"jsonrpc": "2.0",
"result": "0x32"
}
可以看到账户0xae300ea6153027ffda80efb741b88cedc24dbee5e324b5268fbf3833e2c03418
已经收到了 50 的余额。
CITA 账户背后的技术 - 数字签名
在上面的转账过程,CITA 是怎么通过私钥 (private
)来动用你的数字资产的呢?其奥妙就在 数字签名 。当你发出 转账交易 时,cita-cli 会用你的私钥对交易进行数据签名,然后把交易与签名一起发送到测试链上。
测试链可以在不需要知道你的私钥情况下,使用你发的交易信息及数据签名恢复出你的账户地址。这是非对称加密算法与哈希算法提供的技术能力,大家可以注意到,CITA 每次新版本发布 的时候,都会发三个版本。其实就是其采用的非对称加密算法与哈希算法的不同,它们的账户系统也就不同。
为了让大家能直观感受一下 数字签名 , 我写了个简单的 demo , 有对技术感兴趣可以自行阅读其中的代码。也可以使用我做好的 docker 镜像来试用。
- 使用你的私钥签名一段数据
abcdefg
$ docker run leeyr/digital-sign sign --data "abcdefg" --private-key "0xae300ea6153027ffda80efb741b88cedc24dbee5e324b5268fbf3833e2c03418"
Signature is : c05e106d5b1598ae6ef50ed17b1ae9b100d17e8e1ba4b2b45bf5627b836dc18c1b86e7d7937a42fbee532f1fb903c1f17ac49b826c135f6bfded05a6cac12ece00
你将获取一段签名数据。
- 使用签名数据恢复你的账户
$ docker run leeyr/digital-sign recover --data "abcdefg" --sign "c05e106d5b1598ae6ef50ed17b1ae9b100d17e8e1ba4b2b45bf5627b836dc18c1b86e7d7937a42fbee532f1fb903c1f17ac49b826c135f6bfded05a6cac12ece00"
Address: 0x34cf5832c76df8c772526f99454a7cdba8821a3e
Public key: 0x476f296900e180571f07270f5a4810ad42c565fd2d4eb16ffe0869ff5a201bd5d3c2f68834e7e19a096b5ae1cb91b1c63695c9c68b650390a2bad73e44c20398
你可以发现,这里恢复出来的地址与你的账户是完全一致的。
上一篇 : 链数据的高可用杀手
下一篇 : 聊聊 CITA 的配置