第四次作业

比特币用例分析与类图设计(部分)

功能需求

区块

在区块链中,真正存储有效信息的是区块(block)。而在比特币中,真正有价值的信息就是交易(transaction)。实际上,交易信息是所有加密货币的价值所在。除此以外,区块还包含了一些技术实现的相关信息,比如版本,当前时间戳和前一个区块的哈希。

交易过程

比特币中没有账户的概念。因此,每次发生交易,用户需要将交易记录写到比特币网络账本中,等网络确认后即可认为交易完成。

除了挖矿获得奖励的 coinbase 交易只有输出,正常情况下每个交易需要包括若干输入和输出,未经使用(引用)的交易的输出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作为其合法的输入。被使用过的交易的输出(Spent Transaction Outputs,STXO),则无法被引用作为合法输入。比特币的区块链账本里记录的是一笔又一笔的交易。

挖矿

当用户向比特币网络中发布交易后,需要有人将交易进行确认,形成新的区块,串联到区块链中。网络中节点收到交易信息后,将进行如下检查:

  • 交易是否已经处理过;
  • 交易是否合法,包括地址是否合法、发起交易者是否是输入地址的合法拥有者、是否是 UTXO;
  • 对每一笔交易来说,总输入不能小于总输出。

挖矿时结合上一个区块的 Hash 值,上一个区块生成之后的新的验证过的交易内容,再加上自己猜测的一个随机数 nonce,一起打包到一个候选新区块,使得新区块的 Hash 值满足挖矿难度要求。矿工不断地向区块链中加入新块,然后获得相应的奖励。在这种机制的作用下,新生成的区块能够被安全地加入到区块链中,它维护了整个区块链数据库的稳定性。完成了这个工作的人必须要证明这一点,即他必须要证明他的确完成了这些工作。

用例图

钱包用户

钱包服务支持用户管理公私密钥对,创建交易,查询交易状态

矿工用户

矿工用户,运行挖矿程序,检测交易合法性,验证区块工作量,产出并链入新区块,可获得新块奖励。

数据模型

设计序列图

每次交易开始时,用户将输入、输出、交易金额写入交易信息,之后该交易被投入交易池等待被矿工打包。矿工从交易池中提取交易后,首先检测交易(语法和数据结构)合法性,通过校验后,将交易打包进新区块并完成工作量证明,新区块被区块链认可,矿工获取奖励。用户检测区块链,交易已被记录到 “账本”,至此即可认为交易成功完成。

设计类图

posted @ 2020-04-23 17:56  17Lapis  阅读(125)  评论(0编辑  收藏  举报