交易(transaction)

1. Owner0 先查到 Owner1 的公钥。用 Owner1 的公钥(Public Key)把汇款详情加密。这样,只有 Owner1 本人用自己的私钥(Private Key),才能打开加了密的汇款详情。在图例中,没有画汇款详情。不过这个小小的叙述的疏忽无妨大雅。

2. 为了方便 Owner1 验证这笔汇款的确来自 Owner0,而不是别人,Owner0 发出的汇款单里,除了有加了密的汇款详情,还有 Owner0 的数字签名(Signature)。Owner1 拿到汇款时,为了验证这笔汇款的确来自 Owner0,他可以用 Owner0 的公钥,来验证汇款单中 Owner0 的数字签名。

3. Owner0 发出汇款单时,汇款单不仅仅投递到 Owner1,而且还要广而告之,任何人只要愿意参与 BitCoin 审计,都可以收到全球所有人发出的所有汇款单。

4. 沿用 1、2、3 的原理,Owner1 给 Owner2 汇款,然后 Owner2 给 Owner3 汇款。BitCoin 通过 Hash 机制,把涉及同一枚 BitCoin 的所有汇款交易(Tranaction)串连起来,目的是为了追查重复付款(double spending)的欺诈行为。

【2】 支付(payment)

当付款人(payer)向收款人(payee)发出汇款交易(transaction)后,支付过程(payment)并没有完成。直到收款人签收了汇款以后,支付过程才正式结束。

在收款人接受汇款以前,他必须确认汇款人没有重复付款(double spending)。这就类似于我们接受纸币前,最好验证一下纸币是不是假钞一样。

BitCoin 验证重复付款的办法,是靠群众检举。当收款人收到汇款时,他把汇款单广而告之。审计站点收到广而告之的汇款单时,会检查汇款单中涉及的 BitCoin,是否出现在其它汇款单中,是否被重复付款。如果出现这种重复付款,审计站点会检举,并通知收款人拒绝签收汇款。

为了提高审计效率,BitCoin 把多个交易(Transaction)合并成一个块(Block),同时用 Merkle Tree(又称 Hash Tree)[3],把这些交易详情组织起来。

   如果想检查一个 Block 里是否包含有某个 Transaction,最简单的办法是找到合适的私钥,把 Block,以及其中包含的 Transactions,解密打开,然后逐一核对。很显然,这样的做法,既浪费时间,又很不安全。

   使用 Merkle Tree 的好处在于,不需要解密开包,只需要把 Transaction 也 Hash 一下,然后把哈希结果与 Merkle Tree 中各个中间节点的哈希值,依次对比,就能够很轻松地确定 Merkle Tree 中,是否包含着指定的 Transaction,如果有,它是哪一个叶子节点。

Bitcoin钱包收款和转账

比特币钱包余额需要统计所有钱包地址对应的UTXO

Simplified Payment Verification (SPV):节点无需下载所有的区块数据,而只需要加载所有区块头数据(block header的大小为80B),即可验证这笔交易是否曾经被比特币网络认证过。

布隆过滤器(Bloom Filter):过滤掉那些不包含有目标地址的交易信息,这一步能避免掉大量不相关的数据下载

备份更容易。按照比特币的原则,尽量不要使用同一个地址,一个地址只使用一次,这样会导致频繁备份钱包。HD钱包只需要在创建时保存主密钥,通过主密钥可以派生出所有的子密钥。

2、私钥离线更安全。主私钥离线存储,主公钥在线使用,通过主公钥可以派生出所有的子公钥。例如:给每个商品提供一个收款地址。

3、利于管理,权限控制。树状结构类似于公司的组织架构,可以给各个部门指定一个密钥分支。

4、记账。只使用公钥即可记账。

钱包最佳实践

  • 使用助记词(BIP39)
  • 使用层级确定性钱包(HD Wallets)(BIP32)
  • 使用多目的HD Wallets(BIP43)
  • 使用多币种,多账号的HD Wallets (BIP44)

比特币钱包地址创建过程

1、生成128bit~256bit作为私钥

2、通过secp256k1椭圆曲线算法得到私钥对应的公钥

3、将公钥进行SHA-256,得到公钥Hash

4、将3的结果进行RIMEMD-160

5、将4中结果添加1个字节版本号

6、将5中结果进行两次SHA-256,取前4个字节作为checksum

7、将6中结果添加到5中结果的末尾

8、将7中结果进行Base58,结果为比特币地址

Block Chain:区块链

UTXO: Unspent Transaction Output,未花费的交易输出

Genesis Block: 块0,创世块

SPV: Simplified Payment Verification,简单支付验证

BIP: Bitcoin Improvement Proposal,比特币改进提案

Proof Of Work: 工作量证明
 

猜你喜欢

转载自blog.csdn.net/TuxedoLinux/article/details/86762116