用户工具

站点工具


zh:renter:contracts



合约

存储合约是Sia网络中最重要的安全特性之一。该合同使得安全地和其他未知的host交互成为可能。与传统的合约不同,这些合约通过区块链加密强化,这意味着没有文书工作,没有司法冲突,没有诉讼。这是一种更干净和高效的生意模式。

Sia存储合约中最重要的部分就是宿主抵押。合约生成时,租用人在合约中支付给宿主。托管主机也在合约中支付,当托管主机丢失数据的时候作为赔偿。托管主机不能提前推出合约—假如他们答应保存数据12周,他们必须在这12周内保留数据,否则将会受到惩罚。经济上的刺激使得大家可以和未知的托管主机进行交易。

这些合约对托管主机也是友好的。租用者必须预先把钱放在合同中。如果托管主机在规定的时间内保存了数据,那么他将被保证的到支付,即便是租用者想改主意。

Sia借助了区块链的核心优势—使得陌生实体可以信任对方。

生成合同

合约是区块链上的一种交易。这里是一个区块链上生成合约的一个例子:Sia explorer

Siacoin Inputs

Parent ID 1d80012fa8b608e363b90afb6fc51a8fdec7dbc4aacb0c8d19712ca5ccab4ea6
Address   9bf8a3832f5393ee75c207f4e11917d3a3dcb7e048217f3cf769e4fbc8547acb1d1a534a72a0
Value     65 siacoins

Parent ID 1dc246cd80ff0f80aa3836944e8330e5ee94079045465a7e21ff59b163c65dc1
Address   57350439442e3fe06b1c5fc6b369941d25eef200b7fc930ab273b9253302bdd461940e8fe6b0
Value     31 siacoins

File Contracts

ID               95e96414bd0685e1caa915f47d55f0170d2b950c07996515ac0e9a2e10237257
File Size        0 bytes
File Merkle Root 0000000000000000000000000000000000000000000000000000000000000000
Payout           85 siacoins
Revision Number  0

这个交易有两个钱币输入,但输出的不是一个钱币而是文件合约。第一个输入是托管主机的,并且包含了抵押金额来确保数据不会丢失,第二个输入是租用者为上船,下载和存储花费的金额。如果托管主机没能做到合约规定,她的抵押无将会没收从而受到经济损失。

托管主机和租用者一起创造一个交易,并一起签署。当租用者上传,下载和保存内容时,合约中的资金将会动态分配给托管主机。

所有合约中没有使用的资金将会在合约结束时返回。相对的,如果合约中的钱都花完了,那么租用者在新建合约之前将无法上传,下载和下载。

合约中另一件有意思的事情时,和Sia中大多数的合约一样,最开始只有0字节且有一个空Merkle根。合约中的版本号为0。数据每次上传时4MB。每次上传,Merkle根就变换一次,版本号加一,合约中的资金就从租用者转到托管主机。

所以在合约期间,资金在合约中流动,而不在区块链上。当合约结束,总数将提交到区块链,并且此时租用者付款,托管主机得到收益和抵押。

更多内容在Revisions章节。

版本号

Sia中的文件合约版本号和比特币中的支付通道很像。所有托管主机和租用者之间的通信通过版本号记账,很像区块链中没有记录的交易。通过不对区块链暴露中间交易来允许大量交易安全的快速的在两个实体间进行,在这个例子中就是租用者和托管主机。唯一需要告知区块链的交易是初始交易(就是最初的文件合约)和最后的版本(通常是在托管主机执行了存储证明前几个小时的广播)。

每个文件合约的版本都有一个版本号。如果在区块链中已经有一个版本,那么新的广播只有当这个版本号更高时才会被接受。如果被接受,那新的将会完全取代旧的。

通过这样,当租用者和托管主机建立了合约,他们就可以每秒进行上百次的安全交易。一个文件合约可以认为存储无上限的数据,意味着真正的合约限制来自于托管主机拥有的存储空间。

存贮证明

在合约到期之前的几个小时,托管主机将会发布文件合约的最终版本。通常来说,直到这个点区块链的合约会说“0字节”。(如果托管主机下线了,租用者将会发布最近的版本,保证托管主机因丢失的数据受到惩罚。)一旦这个版本发布,所有托管主机和租用者之间的家里将会被记为一个区块链交易。

这个合约将会到,而托管主机将在一段时间内(通常是24小时,或者更短)来证明确实拥有数据。这就是存储证明。如果在这段时间内得到证明,托管主机将会收到支付。如果这段时间内没有得到证明,托管主机就会收到惩罚。

证明通过文件大小和Merkle根进行。区块链认为文件包含一系列64字节的数据段。区块链会随机挑选一个(使用对合约期限块时间的哈希)并要求托管主机显示这个段的数据以及Merkle树证明这个数据在Merkle树中。这是一个概率上的证明,只要求托管主机提供一小部分的数据。托管主机对究竟要提供哪段数据没有控制。

如果托管主机尝试欺骗,那区块链会有可能选择一块托管主机不包含的数据,这样托管主机就没通过存储证明。托管主机因此会失去收入和抵押,对他来说是一个不划算的交易。只保存一半的数据意味着有50%的概率托管主机收不到钱还损失所有的抵押。从长远来看,托管主机还是保存所有的数据来的更划算。只要托管主机放了抵押物,欺骗的希望经济收益是负的。

zh/renter/contracts.txt · 最后更改: 2017/06/22 13:20 由 WeiYang