dcrtime: 基于区块链的时间戳

zyc 发布
Bb03ec6d4f2375710766a80c684cc3b0?s=156&d=retro

zyc

dcrtime: 基于区块链的时间戳

依照2017年的 Decred 的路线图,主要的可交付成果之一就是一个提议系统,
这个提议系统要允许用户们来参与 Decred 的管理。
这个提议系统将由两个主要部分组成:
一个是基于区块链的时间戳服务,
另一个是公共的带版本控制的仓库,这个仓库是要存储提议数据的。
这篇文章的主题是dcrtime,就是时间戳的部分。
dcrtime 是Marco Peereboom这个人在过去几个月中编写的,
同时Jake Yocom-Piatt和Dave Collins也参与和Marco的协作。
dcrtime 的主要动机是提议系统渴望有最大化的透明度和可计量性,
同时保持最小的链上空间占用。
就链上空间占用和整体设计而言,dcrtime 利用了Peter Todd的作品 opentimestamps,
这个 opentimestamps 通过在一笔交易中包含一个单独的 merkle树的根,
能够允许几乎无限数量的哈希值在链上被标记上时间戳。
dcrtime 的处理过程可以被总结为以下几点:

  • 允许用户提交32字节的哈希值,这些哈希值被积累起来,组织成一个merkle树并且映射到merkle根。
  • 创造一个松散的包含merkle根的链上转账。
  • 关联merkle根的哈希值、转账的哈希值、转账被挖矿时那个哈希值的merkle路径,通过查询这几样东西的响应,用户可以验证他们的数据是否被打上时间戳。

虽然 dcrtime 被设计成提案系统的一个组件,但是它也被期待有通用的功能,去作为一个公共的时间戳服务。任何有兴趣使用 dcrtime来生成外部可验证时间戳的机构,都可以通过使用我们的公共主网服务器来免费做到。我们期待这在一些场景里会特别有用,比如不管在公共还是私有环境里透明度、可审计、时间顺序都非常重要的一些场景里,像计算机安全、数据集成和各种各样复杂的场景。一份关于 dcrtime 更详细的讨论能在下面看到。

dcrtime 架构

dcrtime 服务由四部分组成

代理是一个简单的守护进程,把dcrtime的API调用代理到非公共的dcrtime服务器上。
代理和服务器实际上是相同的守护进程,但是一个运行在代理模式,一个运行在服务器模式。
分开这两个守护进程的一个原因是防止钱包密码在内存里的守护进程放在因特网上,另一个原因是为了能够扩展前端。代理接受一个JSON REST API调用并且确保它能够被解码,然后立即传到干活的后端守护进程那里去。从dcrtime服务器来的响应也会传到调用者那里。dcrtime服务器中确实发生了魔法,同时对这次行动的其他人,我们将不会对代理做更多的提及。

现在dcrtime怎样和dcrd以及dcrwallet联合工作是清楚的,懂得它怎样融入更大的提案系统是有用的。提案系统的第二部分,一个带版本控制的仓库,将会松散地放入一些已经打上时间戳的“锚”。随着数据被加到提案仓库中,每个提交都有一个关联的哈希值,并且提交哈希值将会用dcrtime打上时间戳。一旦包含merkle根的转账被挖矿,被锚定的哈希值将有他们的关联的merkle路径以及存储在提案仓库中的转账哈希值。通过在提案仓库中存储锚数据,提案系统能够让所有的提交和锚被验证,而不是有一份Decred区块链的复制。

dcrtime 例子

服务器收集发送到它那里的摘要,并且每小时这些摘要被reduce到一个单独的merkle根。
在一次转账中这个merkle根被锚到decred链上。在测试网上的像这样转账的一个例子可以在这里看到。merkle根能够在一个记录中被看到,这个记录是一个OP_RETURN紧跟着一个摘要。
在我们的例子里它是这样的:

OP_RETURN
9788d5d7b85f2b68ec21d26e738dce6cdd367ee0ec58b53ad6bd4d46b0bc3018

我们引入了为了方便被叫做dcrtime的客户端参考应用程序。上传一个摘要到服务器是向下面这样完成的:

$ dcrtime --testnet -v myfile.txt
8496855341883fdc90cc532f8304d1c46a60586fb15d99f07e41bb5ab19c79c6 Upload myfile.txt
8496855341883fdc90cc532f8304d1c46a60586fb15d99f07e41bb5ab19c79c6 OK     myfile.txt
Collection timestamp: 1497009600

如果我们立即向服务器请求它,服务器将会返回信息显示出它还没有被锚定。例如

$ dcrtime --testnet -v
cd90cc268d9ceef6e276bfa7a615c5f85b5a27b0d917ee3f1f1e5d5598f2fa00
cd90cc268d9ceef6e276bfa7a615c5f85b5a27b0d917ee3f1f1e5d5598f2fa00 Verify
cd90cc268d9ceef6e276bfa7a615c5f85b5a27b0d917ee3f1f1e5d5598f2fa00 Not anchored

一旦摘要被锚定我们就行取回它,同时能够找出merkle根被锚定的转账。注意,客户端校验了服务器返回的merkle路径。

$ dcrtime --testnet -v 8496855341883fdc90cc532f8304d1c46a60586fb15d99f07e41bb5ab19c79c6
8496855341883fdc90cc532f8304d1c46a60586fb15d99f07e41bb5ab19c79c6 Verify
8496855341883fdc90cc532f8304d1c46a60586fb15d99f07e41bb5ab19c79c6 OK
  Chain Timestamp: 1497013614
  Merkle Root    : 8496855341883fdc90cc532f8304d1c46a60586fb15d99f07e41bb5ab19c79c6
  TxID           : 4172a560a7035c169c4da60cba2cb1fbac686bd01224e09a1a56ce5e6f31cff0

结论

dcrtime 代表了Decred的提案系统的前两部分。感兴趣的第三方机构可以利用免费公开的时间戳服务,这个服务由dcrtime来提供,按小时运行,就在写这篇文章的这个小时里也在运行。
如果你对应用dcrtime来打时间戳感兴趣,请在Slack上联系我们来获取一些协助。如果你想评论这篇文章,加入我们的Decred论坛。

原文:https://blog.decred.org/2017/06/14/Dcrtime/

打赏:Dsb9UgMMG6XvGqANFGtT99XeKKaxBqayneS