不到 1500 行代码的加密货币实现
不到 1500 行代码的加密货币实现

动机
加密货币和区块链 T2 之上的智能合约不是最容易理解的琐碎概念,像钱包、地址、工作证明、交易和他们的签名这样的东西,在更广泛的背景下更有意义。受帖子,了解更多关于区块链如何运作的细节。
交易是未确认交易的列表。没什么特别的。在该实现中,交易列表仅包含未确认的交易。一旦交易得到确认,区块链就会将其从清单中删除。
[
transaction 1,
transaction 2,
transaction 3
]
如果出现以下情况,交易将被添加到交易列表中:
- 它不在交易列表中;
- 事务哈希正确(计算的事务哈希= = transaction . hash);
- 所有输入交易的签名都是正确的(交易数据由地址的公钥签名);
- 投入交易的总和大于产出交易,这就需要给交易费留有余地;
- 这笔交易还没有在区块链进行
- 所有投入交易都在区块链中未使用;
块结构:
一个块代表一组事务,包含将其链接到前一个块的信息。
关于 nonce 和用于生成块的工作证明算法的细节将在前面的某个地方描述。
交易结构:
交易包含表示硬币所有者和地址之间的硬币转移的输入和输出列表。输入列表包含现有未用输出交易的列表,并由地址所有者签名。输出列表包含其他地址的金额,包括或不包括所有者地址的更改。
操作员
操作员处理钱包和地址以及交易创建。它大部分操作都与 CRUD 有关。每个运营商都有自己的钱包和地址列表,这意味着它们在节点之间不同步。
钱包结构:
钱包包含一个随机 id 号、密码散列和从该密码生成的秘密。它包含一个密钥对列表,每个密钥对代表一个地址。
地址结构:
地址是以确定性的方式创建的,这意味着对于给定的密码,下一个地址是基于上一个地址(如果是第一个地址,则是密码秘密)创建的。
它使用 EdDSA 算法生成一个秘密公钥对,该密钥对使用一个种子,该种子可以来自密码散列(也是以确定的方式)中随机生成的值,或者来自最后一个秘密密钥。
只有公钥作为用户的地址公开。
矿工
挖掘器获得未决事务的列表,并创建一个包含这些事务的新块。根据配置,每个块中最多有 2 个事务。
组装新积木:
- 从未确认交易列表中选择不在区块链中或尚未被选择的候选交易;
- 从候选事务列表中获取前两个事务;
- 向矿工地址添加包含费用值的新交易,每笔交易 1 satoshi
- 将包含 50 个硬币的奖励交易添加到矿工的地址;
- 证明为本区块工作;
工作证明:
工作证明是通过计算给定事务哈希的前 14 个十六进制值来完成的,并增加 nonce,直到它达到所需的最低难度级别。每创建 5 个方块,难度增加一个指数值(5 的幂)。大约在创建第 70 个块时,它开始用大约 50 秒的时间生成一个具有此配置的新块。所有这些值都可以调整。
this.blockchain.getDifficulty()返回当前区块链指数难度的十六进制值。这个值是通过每隔 5 个街区给初始难度增加 5 倍来计算的。
block.getDifficulty()返回块散列的前 14 个字节的十六进制值,并将其与当前接受的难度进行比较。
当生成的散列达到所需的难度级别时,它会按原样返回该块。
结节
该节点包含已连接对等体的列表,并在节点之间进行所有数据交换,包括:
- 接收新的同伴,并检查如何处理
- 接收新块并检查如何处理它
- 接收新交易并检查如何处理
该节点重新广播它接收到的每个信息,除非它对此不做任何事情,例如,如果它已经具有对等体/事务/区块链。
一个额外的责任是为一个给定的交易获得许多确认。它通过询问每个节点在其区块链中是否有该事务来做到这一点。
看看这个:
naive coin——不到 1500 行代码的加密货币实现
github.com](https://github.com/conradoqg/naivecoin)
就是这样。



