您当前的位置: > 山寨币 >
区块链钱包开发原理!!-有关区块链技术的知识
区块链钱包开发原理,大家刚开始使用钱包的时候都会被助记词、Keystore、私钥、地址、公钥等各种概念搞得云里雾里,这些概念和传统世界的银行卡和密码简单的两个概念完全不一样,只能按照钱包软件的提示需要怎么做就怎么做,却无法知道缘由,有点儿死背书的感觉,本篇的主旨就是帮大家捋一捋:作为一款区块链钱包,是如何工作的,如何生成密钥、助记词、Keystore等。先把结论置顶:区块链钱包实现的技术原理用一句话表示就是:钱包助记词生成了种子(Seed),种子(Seed)生成了私钥,私钥推导出公钥,公钥节选部分成了钱包地址。同时钱包提供了keystore,它也是私钥加密后的文件,可以配合正常的密码使用,便捷了用户的钱包使用。区块链钱包 软件开发 137-6067-4940
【背景】区块链的诞生,不仅仅是通过代码和智能合约来将生产组织进一步扁平化,从而达到优化中间过程、精简中介的作用,更是产生了一个新的经济模式,创建了一种新的生产关系,这种理念上的变革远远大于技术本身带来的影响,它最让人着迷的地方莫过于利用人性的特点,建立的一套自治的经济激励机制,并诞生了一个新型的价值载体cryptocurrency(笔者习惯区分Coin和Token,可参见文章区块链基础概念 - 理解COIN和TOKEN)。Cryptocurrency显然不同于传统的货币,它是通过一定的加密算法计算出来的数字货币,也就是说电子化会是它的本质属性,这样它的存储问题就会是一个热门的研究领域,具体来讲就是我们常说的区块链钱包。当然,这里需要强调的是,区块链钱包并不是存储着大家的cryptocurrency,它是在链上存储的,钱包主要存储的是私钥,它是用户对链上cryptocurrency的所有权凭证,这是一个不记名、不可挂失的凭证。从开发者的角度看,钱包的作用就是管理用户的私钥、通过私钥签名交易管理用户在区块链上的数字货币Cryptocurrency Address + Private key = Cryptocurrency Wallet。以上属于对钱包相对传统的一个定义,笔者最近结识到AlphaWallet的联合创始人&CEO Victor Zhang对钱包的理解非常的独树一帜和有见解:区块链钱包,其实更好叫做区块链客户端,其中钱只是其中一个应用场景。当然他们这个团队主要focus在带有智能合约的公链钱包,目前主要就是ETH了,以其作为基础衍生出众多应用场景供使用,而不是传统理解的钱包概念了。笔者以前一直觉得在未解决Cryptocurrency价值波动前,钱包的用户大规模朝潮还很久远,不能与交易所抗衡,但终究有一天王位会转移给钱包。在听了Victor的见解之后,笔者突然觉得视野更加开阔。BTW,他们团队还是ERC875的执笔,对技术的追求和开发很有造诣,是个值得关注的团队!
【区块链钱包基本类型和特点】区块链钱包的分类和描述依照所涉及的概念不同会有所区别,从其本质特点上来讲,可用下图来表示:区块链钱包本质特点划分区块链钱包和区块链一样,也可以分为去onchain钱包和offchain钱包(如今很多人习惯称之为中心化钱包和去中心化钱包,虽然方便无基础的人形象理解,但是整个概念和精髓却会被误解),它们本质区别在于钱包私钥的存储方式和地点,私钥存储在用户手中,钱包商无获取途径,用户可以实时使用链上资产的称之为onchain钱包;而私钥存储在钱包商或者交易所手中,用户不能直接使用链上资产而需要通过第三方才能动的称之为offchain钱包。具体来讲:1.onchain钱包全节点钱包私钥存储在用户手中,同时全节点钱包还保存了所有区块的数据,这样就可以在本地直接验证交易数据的有效性。大部分全节点钱包也具备挖矿功能,它自身也是区块链网络中的一个节点,如BTC的Bitcoin Core;ETH的Mist,Parity等。优点:一般属于官方为区块链设计的钱包,直接onchain,不需要经过第三方发起交易,保证了基本安全性;由于前节点下载到本地,所以会更快验证交易信息。缺点:也因为下载了所有节点,所以占用很多硬盘空间(Mist现在达到了80G,笔者下了好几天也失败了;Bitcoin Core据说是150G);每次使用前需要同步数据;新手的使用体验不够好;不支持多种数字资产;往往都是电脑版本。2.onchain钱包SPV轻钱包私钥存储在用户手中,但不保存所有区块的数据,只保存跟自己相关的数据,所以体积很小,可以运行在电脑,手机,网页等地方。如Blockchain, imtoken等。优点:用户体验很好,尤其对于新手很多轻钱包都支持多种数字资产体积小,不占空间缺点:交易验证会稍微慢一点3.offchain钱包通过中心服务器访问区块链网络的钱包该类型钱包的划分有一定争议,主要在于钱包数据传输的方式是可以扩展选择区块链节点还是必须通过钱包服务方的服务器,如果是后者就存在私钥存储在中心化服务器的风险,目前有很多区块链钱包体验都很不错,甚至很流畅,由于不开源无法排除该类风险。笔者推断比特购钱包应该属于此类。优点:同SPV轻钱包用户体验会比onchain钱包好缺点:存在安全风险(虽然真正致力做区块链的钱包企业哪怕即使通过自己的服务器将交易信息发送到节点上,即不会作恶,但是不能排除可能有作恶的人可以使用这种方式获得用户密钥)会比onchain钱包交易验证更慢,但是用户可能体会不到。4.offchain钱包第三方托管钱包完全依赖运行这个钱包的公司和服务器,存在某个组织或者个体的钱包地址里,中心化交易所里的Cryptocurrency就是在offchain钱包(交易所)里保存的。优点:私钥忘记了可以找回平台会把私钥安全做的不错一般以企业作为信用背书缺点:你的私钥控制在平台手上,平台做坏事你是无法阻止的,即作恶风险平台关闭后你的币就没有了,即跑路风险
当然,根据不同的表现形式,我们还可以有不同的划分:
这种划分理解就比较简单了,电脑单机版的钱包,如前面提到的全节点钱包基本以此类为主;手机钱包和在线钱包以SPV轻钱包为主,前者以手机APP为主要表现形式,后者是网页插件,如MyEtherWallet, metaMask等。硬件钱包是为了增强安全性,通过专门设计的安全硬件来离线保存储私钥,隔绝黑客入侵。所以,电脑钱包、手机钱包、在线钱包一般体现的都是实时可用性,它们更多被称之为热钱包,即实时在线,这样就存在被黑客攻击的风险;于是硬件钱包作为常年离线保存,更多称之为冷钱包,即离线保存。但是硬件钱包往往需要购置单独的硬件设备,所以在成本上会付出更多,同时使用的便利性也不如热钱包,因为实时在线可用。当然也有使用优盘来自己制作硬件钱包的,一方面制作过程比较繁琐,同时每次转账支出时会比较繁琐,适用于比较有基础的人士。优点:安全,私钥不触网,黑客无法通网络攻击。另外设备都有PIN码保护,即使在物理环境中设备被盗走,也无法打开你的钱包;易备份,设备在初始化配置的时候会生成助记词(一般为12个或者24个单词),而助记词就是你私钥的备份,当你的设备丢失或者损坏以后,可以够买新的设备然后通过助记词来恢复私钥;多币种同时管理,现在绝大多数的硬件钱包,不仅仅可以管理比特币,像莱特币、以太坊、比特现金等数字货币都可以同时管理。缺点:不免费,你要为硬件付费;无法独立使用,硬件钱包都是隔绝网络的,所以需要配合联网的客户端(Chrome 插件、桌面客户端、手机客户端等)来完成收币和发币。不过为了安全牺牲一些方便些也是值得的,毕竟一个比特币8000刀,丢半个都疼。
【区块链钱包实现技术原理】理解区块链钱包实现技术原理,先要理解:1.私钥、公钥和地址产生的方法,这是区块链的相关知识;2.接着理解如何使用API进行远程调用等基础概念,这是传统IT行业相关知识;3.最后就是钱包设计相关的助记词, keystore和密码的概念,它和区块链公钥、私钥和地址产生的方式思路一样,但是整个过程属于区块链钱包设计过程,不能与区块链的相关知识混淆。一、私钥、公钥和地址产生的方式(以BTC为例):1.比特币私钥其实是使用SHA-256生成的32字节(256位)的随机数,有效私钥的范围则取决于比特币使用的secp256k1 椭圆曲线数字签名标准。2.在私钥的前面加上版本号,后面添加压缩标志和附加校验码,(所谓附加校验码,就是对私钥经过2次SHA-256运算,取两次哈希结果的前四字节),然后再对其进行base58编码,就可以得到我们常见的WIF(Wallet import Format)格式的私钥。3.私钥经过椭圆曲线乘法运算,可以得到公钥。公钥是椭圆曲线上的点,并具有x和y坐标。公钥有两种形式:压缩的与非压缩的。早期比特币均使用非压缩公钥,现在大部分客户端默认使用压缩公钥。从私钥推导出公钥、再从公钥推导出公钥哈希都是单向的,也就是采用不可逆算法。椭圆曲线算法4.公钥产生后,将公钥通过SHA256哈希算法处理得到32字节的哈希值;后对得到的哈希值通过RIPEMD-160算法来得到20字节的哈希值 Hash1605.把版本号[2]+Hash160组成的21字节数组进行双次SHA256哈希运算,得到的哈希值的头4个字节作为校验和,放置21字节数组的末尾。6.对组成25位数组进行base58编码,最后得到地址。