区块链钱包

区块链钱包

一,关于钱包

关于钱包的加密货币中常见的误解是它们存储Token。 钱包不存储Token。 钱包的作用是将私钥存储在加密文件中并签署交易。

钱包只含有密钥,而包含钱币。 每个用户有一个包含多个密钥的钱包。 钱包只包含私钥/公钥对的密钥链。因此不要误解为钱包里面包含的是钱,钱包只是私钥的集合,你的钱币存储中区块链的区块中。

用户通常通过接口构建事务对象,将该对象发送到要签名的钱包,然后钱包返回具有签名的该事务对象,然后该签名被广播到网络。 如果网络确认交易有效,则将其包含在区块链的块中。

钱包相关术语

  • 助记词:通过算法从词库里面产生12-24个单词,目前支持多种语言。
  • 随机种子:使用助记词通过算法产生的一个随机字符串。
  • 私钥:钱包中最重要的东西,钱包实际上就对私钥进行管理,现在私钥有主私钥和派生私钥的说法。
  • 主私钥:钱包私钥,由助记词产生的随机种子生成,主私钥被盗的话,你的整个钱包的钱将全部被盗。
  • 派生私钥:由主私钥通过bip分层协议生成的私钥,派生私钥丢失,只会丢失单一账户上的数字资产。
  • 备份钱包:其实也叫备份助记词,现在的钱包基本上都是用助记词恢复的。
  • 备份私钥:对钱包的主私钥或者派生私钥进行备份,通过主私钥可以找回钱包中所有的账户,通过派生私钥只能找回其中的一个账户。
  • 导入钱包:通过导入助记词或者私钥的方式生成以前的钱包。
  • 导入私钥:通过导入私钥生成多链多账户钱包,或者单链单账户钱包。
  • 单链钱包:只支持一条链的钱包,比方说比特币钱包。
  • 多链钱包:支持所有币种的钱包。
  • 单账户钱包:每种币只支持一个账户。
  • 多账户钱包:每种币支持多个账户。
  • 地址:类似于银行卡账户,通过地址可以查询到目前账户上的余额。
  • 公钥:对所有人公开的秘钥。
  • 签名:在发起数字资产转账时,所有的币种都要对转账的数据进行签名,签名的数据量对于不同的币种不一样。
  • 空投:就是批量打币。
  • bip协议簇:HD分层钱包中的一个重要的规定,是数字货币发展的必然产物。
  • 非确定性钱包:每个账户对应一个私钥,私钥不好管理。
  • 确定性钱包:有主私钥,通过主私钥可以生产其他所有币种的私钥,单不能支持多账户。
  • 确定性分层钱包:有主私钥,通过主私钥可以生产其他所有币种的私钥,支持多账户。

钱包分类

非确定性钱包

在最早的一批区块链钱包中,钱包只是私有的集合,这些私钥之间相互独立,没有任何关联,这种类型的钱包咱们把他称为非确定性钱包。举个例子,比 特币核心客户端预先生成100个随机私钥,从最开始就生成足够多的私钥并且每个密钥只使用一次。这种钱包现在正在被确定性钱包替换,因为它们难以管理、 备份以及导入。随机密钥的缺点就是如果你生成很多私钥,你必须保存它们所有的副本。这就意味着这个钱包必须被经常性 地备份。每一个密钥都必须备份,否则一旦钱包不可访问时,钱包所控制的资金就付之东流。这种情况直接与避免地址重复使用的原则相冲突——每个比特币地址只能用一次交易。地址重复使用将多个交易和地址关联在一起,这会减少隐私。当你想避免重复使用地址时,零型非确定性钱包并不是好的选择,因为你要创造过多的私钥并且要保存它们。虽然比特币核心客户端包含零型钱包,但比特币的核心开发者并不鼓励大家使用。

确定性钱包

其中所有的密钥都是从一个主密钥派生出来,这个主密钥即为种子(seed)。该类型钱包中所有密钥都相互关联,如果有原始种子,则可以再次生成全部密钥。确定性钱包中使用了许多不同的密钥推导方法。最常用的推导方法是使用树状结构,称为分级确定性钱包或HD钱包

确定性钱包

确定性,或者“种子”钱包包含通过使用单项离散函数而可从公共的种子生成的私钥。种子是随机生成的数字。这个数字也含有比如索引号码或者可生成私钥的“链码”(参见“ 分层确定性钱包(BIP0032/BIP0044)”一节)。在确定性钱包中,种子足够恢复所有的已经产生的私钥,所以只用在初始创建时的一个简单备份就足以搞定。并且种子也足够让钱包导入或者导出。这就很容易允许使用者的私钥在钱包之间轻松转移。

分层确定性钱包

确定性钱包被开发成更容易从单个“种子”中生成许多密钥。确定性钱包的最高级形式是通过BIP0032标准定义的HD钱包。HD钱包包含以树状结构衍生的密钥,使得父密钥可以衍生一系列子密钥,每个子密钥又可以衍生出一系列孙密钥,以此类推,无限衍生。

HD钱包的优势:

相比较随机(不确定性)密钥,HD钱包有两个主要的优势。第一,树状结构可以被用来表达额外的组织含义。比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。不同分支的密钥都可以被用在企业环境中,这就可以支配不同的分支部门、子公司、具体功能以及会计类别。

HD钱包的第二个好处就是它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。这可允许HD钱包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。公共钥匙不需要被预先加载或者提前衍生,而在服务器中不需要可用来支付的私钥。

二,助记词

现在区块链市场上的大部分钱包,都是通过助记词来备份钱包的。当然也有不少的钱包是通过私钥来备份钱包的。不管是通过助记词备份钱包,还是痛私钥备份钱包,其实在原理上都是大同小异。一般的钱包都是通过助记词生成随机数种子,然后再通过随机数种子生成根私钥,再通过BIP分层协议生成各个币种账户的私钥。因而助记词是一个钱包的起始段,也是一个钱包的重要技术组成部分。本章咱们将详细地讲解助记词相关的知识。

助记词开源库:https://github.com/bitcoinjs/bip39

助记词原理

助记词并不是一个新概念,早在很多行业,就出现了助记词的概念。发音为“ne-manik”的最纯粹形式的助记符是一种字母,单词或关联模式,可让您轻松记住信息,并已被人类使用了数千年。换句话说,它可以是一个非常有用的工具,帮助我们记住我们需要记住的重要信息。

在比特币中,助记符采用相同的基本原则,即使用一组单词生成一个独特的钱包短语,为您提供一个人类可读的单词格式,以备份您的钱包进行恢复。用于生成这些短语的助记符代码在2013年通过比特币改进提案或BIP引入比特币。BIP描述了助记符代码或助记句的实现,一组容易记忆的单词,用于生成确定性钱包。它由两部分组成:生成助记符,并将其转换为二进制种子。 该种子可以稍后用于使用BIP-0032或类似方法生成确定性钱包。

一般来说私钥都有256位,以64个字母数字构成的16进制字符串表示。备份私钥的时候直接抄录64个字符显然是很容易产生错误的,而且易读性也很差,用户体验度显然就会降低,而助记词的出现刚好解决了这个尴尬的局面,助记词是明文私钥的另一种表现形式。助记词出现的目的是为了帮助用户记忆复杂的私钥 (64位的哈希值)。助记词一般由12、15、18、21个单词构成, 这些单词都取自一个固定词库, 其生成顺序也是按照一定算法而来, 所以用户没必要担心随便输入12个单词就会生成一个地址。虽然助记词和 Keystore 都可以作为私钥的另一种表现形式, 但与 Keystore 不同的是, 助记词是未经加密的私钥, 没有任何安全性可言, 任何人得到了你的助记词, 可以不费吹灰之力的夺走你的资产。

目前钱包分为两种:非确定性钱包和确定性钱包,非确定钱包就是随机生成多个私钥,钱包管理这些私钥。这种钱包私钥不易于管理。但如果设计钱包的人水平过高的话,也可以设计得很好。确定性钱包是通过种子来生成不同账户的私钥,我们只要记住助记词就行,用助记词生成种子,再去生成钱包相关的地址和私钥。

种子生产流程:

在这里插入图片描述

  1. 从熵到助记词

    随机生成一个128到258位的数字,叫做熵; 熵通过SHA256哈希得一个值,取前面的几位(熵长/32),记为y; 熵和y组成一个新的序列,将新序列以11位为一部分,已经预先定义2048个单词的字典做对应; 生成的有顺序的单词组就是助记词

  2. 从助记词生成种子

    助记词表示长度为128至256位的熵。 通过使用密钥延伸函数PBKDF2,熵被用于导出较长的(512位)种子。 PBKDF2的基本原理是通过一个伪随机函数(例如HMAC函数),把明文和一个盐值作为输入参数,然后重复进行运算,并最终产生密钥。如果重复的次数足够大,破解的成本就会变得很高。而盐值的添加也会增加“彩虹表”攻击的难度。 比特币钱包中,PBKDF2函数的第一个参数是助记词,第二个参数盐,由字符串常数“助记词”与可选的用户提供的密码字符串连接组成。使用HMAC-SHA512算法,使用2048次哈希来延伸助记符和盐参数,产生一个512位的值作为其最终输出。 这个512位的值就是种子。

  3. 从种子到母密钥

    512位分成平均分成两部分,左边的256位为母私钥,右边的256位为链码。母私钥、链码和索引号,CKD(child key derivation)函数去从母密钥衍生出子密钥。

  4. 从母密钥到子密钥

    母密钥、链码、索引合并在一起并且用HMAC-SHA512函数散列之后可以产生512位的散列。所得的散列可被拆分为两部分。散列右半部分的256位产出可以给子链当链码。左半部分256位散列以及索引码被加载在母私钥上来衍生子私钥。在图中,我们看到这个说明——索引集被设为0去生产母密钥的第0个子密钥(第一个通过索 引)。

  5. 扩展密钥

    母密钥和链码结合叫做扩展密钥,拥有扩展私钥可以推导出子私钥,扩展公钥可以推导出子公钥。拥有扩展公钥就可以推导出子公钥,在服务器不需要母私钥也可以,这样就更安全更方便。但是还有一个问题,那就是扩展公钥包含有链码,如果子私钥被知道或者被泄漏的话,链码就可以被用来衍生所有的其他子私钥。简单地泄露的私钥以及一个母链码,可以暴露所有的子密钥。更糟糕的是,子私钥与母链码可以用来推断母私钥。 为此,HD钱包使用一种叫做硬化衍生(hardened derivation)的替代衍生函数。这就“打破”了母公钥以及子链码之间的关系。这个硬化衍生函数使用了母私钥去推导子链码,而不是母公钥。这就在母/子顺序中创造了一道“防火墙”——有链码但并不能够用来推算子链码或者姊妹私钥。强化衍生函数看起来几乎与一般的衍生的子私钥相同,不同的是母私钥被用来输入散列函数中而不是母公钥。

三,以太坊钱包开发

目前的公链项目,影响力最大的应该就数以太坊和比特币了,其他的多数公链,基本上都是借鉴了以太坊和比特币公链项目而设计开发的。了解区块链的人都知道,比特币和以太坊这两个公链项目的差距还是挺大的,故而他们的钱包开发也是特别不一样的。本章我们将详细讲解以太坊钱包原理和开发流程,涉及到的内容有以下这些:

  • 依托钱包节点方式开发钱包,但这种方式的缺点就keystore生成存放到区块的节点上;
  • 非确定性以太坊钱包开发,实现本地存储私钥,但每个账户对应一个私钥,私钥的管理比较难;
  • 分层确定性以太坊钱包开发流程,实现本地存储,实现多链多账户和私钥关联性钱包。

以太坊简介

以太坊是一个开放的区块链平台,任何人都可以使用区块链技术构建和使用分散的应用程序。 像比特币一样,没有人控制或拥有以太坊,它是由世界各地的许多人建立的开源项目。 但与比特币协议不同,以太坊的设计具有适应性和灵活性。 在以太坊平台上创建新应用程序很容易,任何人都可以安全地使用这些应用程序。基于以太坊的一套生态也越来越强大,目前在以太坊上发Token的公司已经有将近800家了,质量比较高的数字资产占Token量的20%以上,基于以太的数字货币资产的发展直接导致了进入的资金越来越庞大。

以太坊产生背景

区块链技术是比特币的技术基础,首先由其神秘作者中本聪(Satoshi Nakamoto)在2008年出版的白皮书“比特币:点对点电子现金系统”中描述。虽然区块链用于更广泛的用途已经是在原始论文中讨论过,直到几年后,区块链技术才成为一个通用术语。区块链是一种分布式计算架构,其中每个网络节点执行并记录相同的事务,这些事务被分组为块。一次只能添加一个块,并且每个块都包含一个数学证明,用于验证它是否依次跟随前一个块。通过这种方式,区块链的“分布式数据库”在整个网络中保持一致。个人用户与分类帐(交易)的交互由强密码术保护。维护和验证网络的节点受到编码到协议中的数学强制经济激励的激励。

在比特币的情况下,分布式数据库被设想为账户余额表,分类账,交易是比特币代币的转移,以促进个人之间的无信任融资。但随着比特币开始引起开发人员和技术人员的更多关注,新的项目开始将比特币网络用于除了价值代币转移之外的其他目的。其中许多采取“替代硬币”的形式 - 单独的区块链与他们自己的加密货币,改进了原有的比特币协议,以增加新的功能或功能。 2013年底,以太坊的发明者Vitalik Buterin提出,一个能够重新编程以执行任意复杂计算的区块链可以包含这些许多其他项目。

2014年,以太坊创始人Vitalik Buterin,Gavin Wood和Jeffrey Wilcke开始研究下一代区块链,该区块链有望实施一个完全无信任的通用智能合约平台。

以太坊虚拟机

以太坊是一个可编程的区块链。 Ethereum不是为用户提供一组预定义的操作(例如比特币交易),而是允许用户创建他们希望的任何复杂度的自己的操作。通过这种方式,它可以作为许多不同类型的分散式区块链应用程序的平台,包括但不限于加密货币。

狭义上的以太坊是指为分散应用程序定义平台的一套协议。其核心是以太坊虚拟机(“EVM”),它可以执行任意算法复杂度的代码。在计算机科学术语中,以太坊是“图灵完整”。开发人员可以使用以JavaScript和Python等现有语言为模型的友好编程语言创建在EVM上运行的应用程序。

与任何区块链一样,以太坊也包括点对点网络协议。以太坊区块链数据库由连接到网络的许多节点维护和更新。网络的每个节点都运行EVM并执行相同的指令。出于这个原因,以太坊有时被描述为“世界计算机”。

在整个以太坊网络中进行大规模的计算并行化并不是为了提高计算效率。实际上,这个过程使得以太坊上的计算比传统的“计算机”慢得多,也更昂贵。相反,每个以太坊节点都运行EVM,以便在区块链中保持一致。分散的共识为以太坊提供了极端的容错能力,确保零停机时间,并使存储在区块链上的数据永远不变且具有审查能力。

以太坊平台本身没有特色或与价值无关。与编程语言类似,由企业家和开发人员决定应该使用什么。但是,很明显某些应用程序类型比以太坊的功能更有益。具体而言,以太坊适用于自动化同伴之间直接交互或促进跨网络协调的群组行动的应用程序。例如,用于协调点对点市场的应用程序,或复杂金融合同的自动化。比特币允许个人交换现金而不涉及金融机构,银行或政府等任何中间人。以太坊的影响可能更为深远。从理论上讲,任何复杂性的金融交互或交换都可以使用在以太坊上运行的代码自动可靠地执行。除了金融应用程序之外,任何信任,安全性和持久性都很重要的环境(例如,资产注册,投票,治理和物联网)都可能受到以太坊平台的严重影响。

以太坊工作机制

以太坊融合了比特币用户所熟悉的许多功能和技术,同时还引入了许多自己的修改和创新。

虽然比特币区块链纯粹是一个交易清单,但以太坊的基本单位是账户。以太坊区块链跟踪每个账户的状态,以太坊区块链上的所有状态转换都是账户之间价值和信息的转移。有两种类型的帐户:

  • 外部拥有帐户(EOA),由私钥控制
  • 合约账户,由合约代码控制,只能由EOA“激活”

对于大多数用户而言,这些用户之间的基本区别在于人类用户控制EOA,因为他们可以控制控制EOA的私钥。另一方面,合同账户由其内部代码管理。如果它们被人类用户“控制”,那是因为它们被编程为由具有特定地址的EOA控制,该地址又由持有控制该EOA的私钥的任何人控制。流行的术语“智能合约”是指合约账户中的代码 - 在将交易发送到该账户时执行的程序。用户可以通过将代码部署到区块链来创建新合同。

合同账户仅在EOA指示时执行操作。因此,合同帐户不可能执行本机操作(如随机数生成或API调用),只有在EOA提示时才能执行这些操作。这是因为以太坊要求节点能够就计算结果达成一致,这需要保证严格确定性的执行。

与比特币一样,用户必须向网络支付小额交易费用。这可以保护以太坊区块链免受无聊或恶意的计算任务,如DDoS攻击或无限循环。事务的发送者必须为他们激活的“程序”的每一步付费,包括计算和内存存储。这些费用以以太坊的本地价值标记,以太币的金额支付。

这些交易费用由验证网络的节点收集。这些“矿工”是以太坊网络中接收,传播,验证和执行交易的节点。然后矿工将交易分组,其中包括对以太坊区块链中账户“状态”的许多更新,进入所谓的“区块”,然后矿工互相竞争,使他们的区块成为下一个要添加的区块。区块链。对于他们开采的每个成功区块,矿工都会获得以太奖励。这为人们将以太网和电力专用于以太坊网络提供了经济激励。

正如在比特币网络中一样,矿工的任务是解决复杂的数学问题,以便成功“挖掘”一个区块。这被称为“工作证明”。任何计算问题都需要数量级更多的资源才能在算法上解决,而不是验证解决方案,这是一个很好的候选工作证明。为了阻止由于使用专用硬件(例如ASIC)而导致的集中化,如比特币网络中所发生的那样,以太坊选择了存储器硬计算问题。如果问题需要内存和CPU,理想的硬件实际上是通用计算机。这使得以太坊的工作证明具有ASIC抗性,允许比采用比特币等专用硬件占主导地位的区块链更安全地分散安全性。

以太坊钱包涉及的术语

gas,Gas Limit和Gas Price

在以太坊上,发送代币或调用智能合约,在区块链上执行写入操作,需要支付矿工计算费用,计费是按照Gas计算的,Gas使用ETH来支付。无论您的调用的方法是成功还是失败,都需要支付计算费用。即使失败,矿工也验证并执行您的交易(计算),因此必须和成功交易一样支付矿工费。

简单的说Gas Limit相当于汽车需要加多少汽油,Gas Price相当于每升汽油的价格。

Gas Limit之所以称为限额,因为它是您愿意在一笔交易中花费Gas的最大数量。交易所需的Gas是通过调用智能合约执行多少代码来定义。 如果您不想花太多的Gas,通过降低Gas Limit将不会有太大的帮助。 因为您必须包括足够的Gas来支付的计算资源,否则由于Gas不够导致交易失败,您所设置的所有Gas limit也将消耗光。建议您在有充足ETH情况下,将Gas Limit尽量设高,所有未使用的Gas将在转账结束时退还给您。

通过降低Gas Price可以节省矿工费用,但是也会减慢矿工打包的速度。矿工会优先打包 Gas Price设置高的交易,如果您想加快转账,您可以把Gas Price设置得更高,这样您就可以排队靠前。如果您不急,您只需要设置一个安全的 Gas Price,矿工也会打包您的交易。

以太币单位

以太坊最小的单位是wei,最常用的单位是ether

  • Kwei(Babbage)= 10的3次方Wei
  • Mwei(Lovelace)= 10的6次方Wei
  • Gwei(Shannon)= 10的9次方Wei
  • MicroEther(Szabo)= 10的12次方Wei
  • MilliEther(Finney)= 10的15次方Wei
  • Ether = 10的18次方Wei
keystore

keystore是以太坊账户的一种表现形式,里面包含了以太坊账户的地址,账户密文的私钥和MAC地址等等一系列的信息,下面是一个keystore的完整信息。

{
  "address":"2ffe6e3816b6a84f509ea3be1b8e8bb024c894d8",
  "crypto":
  {
    "cipher":"aes-128-ctr",
    "ciphertext":"c302e468ad640ad6c43d51754caa60964ece820ad98ad0d5aa72a785a93d7a59",
    "cipherparams": {"iv":"f4609a583b28e48a6bda7b6bf1229a26"},
    "mac":"ef8872a3ad0a92a410b15b0e2e662d5cbfc98360d72b190a7b3189bd4151ebcf",
    "kdf":"pbkdf2",
    "kdfparams":
    {
      "c":262144,
      "dklen":32,
      "prf":"hmac-sha256",
      "salt":"5a757ae33c08a46c8a50f34a2a514503fd66481ea56aeab31e25da45ae3f1c39"
    }
 },
 "id":"49a53e88-4f8a-4858-80a4-02ad230da1d3",
 "version":3
}
矿工费
"prf":"hmac-sha256",
  "salt":"5a757ae33c08a46c8a50f34a2a514503fd66481ea56aeab31e25da45ae3f1c39"
}

},
“id”:“49a53e88-4f8a-4858-80a4-02ad230da1d3”,
“version”:3
}


#### 矿工费

 转账或调用智能合约,在区块链上执行写入操作,需要支付矿工计算费用,计费是按照Gas计算的,Gas使用ETH来支付。 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值