区块链钱包实现

大多数区块链都离不开区块链钱包,那区块链钱包是干什么的呢?

区块链钱包主要有管理密钥、交易签名、管理数字资产等功能。钱包的形态一般有浏览器插件、硬件钱包、桌面钱包、App钱包等。最开始的浏览器插件钱包,有个好处是代码开源,就像Web网页一样,可以使用类似F12查看网页源码。

公链的钱包一般直接通过Web3.js与区块链进行交互,可查询账户资产,操作账户资产等。联盟链的钱包一般经由后端与区块链进行交互,后端通过RPC协议与链进行交互,如查询账户资产,操作资产转移,返回待签名数据,提交签名数据产生交易等。

钱包还可能会涉及助记词,那钱包助记词是什么,以及怎么使用呢?

钱包助记词是一组由单词组成的随机序列,通常由12、24或者其他个数的单词组成。这些单词被用作恢复和备份数字钱包的私钥。助记词通常由人类易于记忆和书写的单词组成,以便用户在需要时能够轻松恢复他们的钱包,而无需记住复杂的私钥。当用户创建数字钱包时,钱包会生成一组随机的私钥和公钥,并将其保存在本地设备上。如果用户丢失了本地设备,或者需要将钱包从一个设备转移到另一个设备,他们可以使用钱包助记词来恢复钱包。用户只需要输入他们的助记词,钱包就会自动恢复他们的私钥和公钥,并将其重新存储在本地设备上。

不过,助记词一般是公链钱包的玩法,联盟链很少使用助记词。

或许还有一个技术疑问,在浏览器钱包插件中,浏览器网页是如何调起钱包应用并执行签名的呢?

其实,浏览器中的钱包插件是可以通过在Web应用程序中调用相应的JavaScript API来唤起的。这些API允许Web应用程序与安装在用户浏览器中的钱包插件进行通信,从而实现各种数字资产相关的操作,例如发送或接收数字资产等。

那钱包中用户私钥应该存储在哪里呢?公链钱包的话,肯定是存储在本地的,平台方不会接触用户私钥。联盟链的话,前期教育市场成本很高,建议平台托管机制和用户持有机制都有,等市场成熟一些,可以慢慢过渡到用户自己托管,平台不参与私钥保管与恢复。

联盟链的钱包这样做或许是个不错的idea。首先钱包充当数字资产聚合功能,可以查询和浏览本平台的用户相关的所有资产,这些资产的交易记录尽可能附带交易hash,让用户可查证,如果还能支持其他平台接入就更好。其次钱包支持私钥管理,这个私钥可以平台托管,也可以用户自主管理,如果私钥用户保管的话,钱包必须支持在线签名或离线签名,保证私钥一定不提交到平台。如果平台托管私钥的话,交易签名可以在后台进行,用户无感完成交易。另外,市场板块和浏览器板块也可以考虑接入。

技术方面,联盟链钱包建议增加一个数据缓存层,如使用MySQL+Redis实现,这样查询数据会快很多,直接去链上查询的话会慢一些。但是需要注意链上链下数据的同步。