前一篇我们对区块链的账户体系有了简单的理解,下面我们详细了解下账户保存与流转过程
我们都知道在银行开户,直接拿身份证,去银行柜台,或者在线上开一个账户就可以了,银行给我们一个账号,然后我们就可以针对这个账号对存取钱,或者开证明。那在区块链中的账户是怎么开的呢?
上一篇中我们了解了账户是由私钥生成的,私钥是任何人都可以根据算法随机生成的,我们用SHA256生成一个256位的数字就可以了,这样我们就有了私钥,前面我们讲到,私钥可以产生地址,这样我们就相当于有了银行账号,不同的是我们的这个地址在区块链网络上是没有登记的(没有登记也是可以查询的欧),那么如何才能把你的账号登记在区块链网络上呢,只需要成为一个有用的地址,如:有了余额、成为合约地址。那么你的地址就在区块链上公开登记了,其它人都可以查询你的地址信息。
通过上面我们知道了私钥生成的原理,下面我们来看一个私钥6954ac6d0402d7239f1cc150da224d0ef08fd1226f245f06fe4d6d68accfce8a这么长的一个数字,是不是很不方便记忆,机器好记忆,人记起来可就麻烦了,所以就有了便于记忆的私钥生成保存方案
助记词:它是这个样子的
hunt reason couple jaguar umbrella absent jungle warrior renew photo achieve bleak crack brisk gift
翻 灾 须 玉 郎 了 殖 霍 芽 泡 个 展 连 将 银
ずさんにやりきこうせなかめざすあきるせんくりえきぬすむてんすうあずきうまれるきさまえほうまきしいく
看到上面的示例,想起了啥,欧美大片中激活智能机器人的时候说的一个个单词是什么鬼,明白了吧,它就是助记词,用于生成私钥,在一定意义上可以说助记词等于私钥。助记词由12-24个单词组成,助记词可以生成私钥,它一共有2048个,也就是从这2048个汉字或者英文单词甚至韩语、日语等等,随你喜欢,挑选你喜欢的语言12、15、18、21、24个都可以,把它背过,记录在小本本上都可以,当需要的时候,我们就可以通过输入它去恢复我们的私钥,这样,我们更方便记忆。
现在又有人说了,哎,助记词12-24个单词如果每次我操作都要输入一下,也是很麻烦,于是以太坊网络又有了一种方案:
Keystroe:它是这个样子的
{"version":3,"id":"b7467fcb-3c8b-41be-bccf-73d43a08c1b7","address":"540f18196da5a533fa36577a81de55f0a2f4e751","Crypto":{"ciphertext":"78ed11b8b6bf29b00f52b42b8542df0e4a6ac078e626af7edcf885c3b68154a4","cipherparams":{"iv":"4516579601d96695fe30ace985a9066f"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"6276cfda7d40872352c801db5871e5a3368a8d0994cea39ed936760db78d1cdc","n":1024,"r":8,"p":1},"mac":"d889a5dc609c3f312a41394cc47640676d2612501a6f8c837ed55598158336db"}}
相对于上面的助记词便于记忆,是不是一上来就蒙了,这是什么鬼,首先我们先说下,这个东西,不需要记忆,不用害怕了吧,它存在一个地方就可以了。 Keystore是加密的私钥,需要用一串密码来解密,而这个密码,就是我们熟知的密码了,可以是 123456,也可以是@#¥¥%%,怎么设置就随你了,这样,在你用你的私钥的时候,你就可以直接用keystore加密码去恢复私钥来操作区块链网络了。是不是更简单了呢。
两种私钥的方便存储方案:方便人的记忆和使用。
下面我们再简单串一下账户的生成使用过程:
首先我们要有私钥:可以是助记词生成。为了方便管理私钥还可以用keystore +密码验证。
要用私钥导出公钥和地址备用
要想操作我们的账户,需要先来构造我们的交易,可以是提取,持行合约等等。
对我们的交易用私钥签名:把交易和私钥算出一个hash
把我们准备好的数据交易、签名、公钥,打包成一个数据结构并编码成一个hash
把hash发送给临近的区块链节点。
好了,执行完上面的步骤我们借用一句经典的电影台词,“让子弹飞一会”,过一会(每个区块链时间都不同,比特币要半个小时,以太坊要一分钟,但是现有的联盟链比方泰岳联盟链确认只需要1秒,这是因为它们的共识机制不同造成。后面我们讲到共识的时候再说这一块)就会看到你要的结果了。你就上链了,同时你的操作,所有的节点(或者证书节点)就都可以查到了。