【轉(zhuǎn)載】EOS.IO 技術(shù)白皮書

EOS.IO 技術(shù)白皮書

草案:2017 年 6 月 26 日 (@dayzh (https://steemit.com/@dayzh))

摘要:?EOS.IO 軟件引入一種新的區(qū)塊鏈架構(gòu)設(shè)計,它使得去中心化的應(yīng)用可以橫向和縱向的擴展。 這通過構(gòu)建一個仿操作系統(tǒng)的方式來實現(xiàn),在它之上可以構(gòu)建應(yīng)用程序。 該軟件提供帳戶、身份驗證、數(shù)據(jù)庫、異步通信和跨越數(shù)百個 CPU 內(nèi)核或集群的應(yīng)用程序調(diào)度。 由此產(chǎn)生的技術(shù)是一種區(qū)塊鏈架構(gòu),它可以擴展至每秒處理百萬級交易,消除用戶的手續(xù)費,并且允許快速和輕松的部署去中心化的應(yīng)用。

PLEASE NOTE: CRYPTOGRAPHIC TOKENS REFERRED TO IN THIS WHITE PAPER REFER TO CRYPTOGRAPHIC TOKENS ON A LAUNCHED BLOCKCHAIN THAT ADOPTS THE EOS.IO SOFTWARE. THEY DO NOT REFER TO THE ERC-20 COMPATIBLE TOKENS BEING DISTRIBUTED ON THE ETHEREUM BLOCKCHAIN IN CONNECTION WITH THE EOS TOKEN DISTRIBUTION.

Copyright ? 2017 block.one

未經(jīng)允許,在非用于商業(yè)和教育用途的前提下 (即,除了收取費用或商業(yè)目的),如果注明原始出處并適用聲明的版權(quán),任何人可以使用、復(fù)制或發(fā)布本白皮書內(nèi)的任何內(nèi)容。

免責(zé)聲明:?本 EOS.IO 技術(shù)白皮書草案僅供參考。 block.one does not guarantee the accuracy of or the conclusions reached in this white paper, and this white paper is provided “as is”. block.one does not make and expressly disclaims all representations and warranties, express, implied, statutory or otherwise, whatsoever, including, but not limited to: (i) warranties of merchantability, fitness for a particular purpose, suitability, usage, title or noninfringement; (ii) that the contents of this white paper are free from error; and (iii) that such contents will not infringe third-party rights. block.one and its affiliates shall have no liability for damages of any kind arising out of the use, reference to, or reliance on this white paper or any of the content contained herein, even if advised of the possibility of such damages. In no event will block.one or its affiliates be liable to any person or entity for any damages, losses, liabilities, costs or expenses of any kind, whether direct or indirect, consequential, compensatory, incidental, actual, exemplary, punitive or special for the use of, reference to, or reliance on this white paper or any of the content contained herein, including, without limitation, any loss of business, revenues, profits, data, use, goodwill or other intangible losses.

背景

區(qū)塊鏈應(yīng)用的要求

支持成百上千的用戶

免費的使用

簡單升級和 bug 修復(fù)

低延時

時序性能

并發(fā)性能

共識算法 (DPOS)

交易確認(rèn)

股權(quán)證明的交易 (TaPoS)

帳戶

消息 & 處理

基于角色的權(quán)限管理

命名的權(quán)限級別

命名的消息處理群組

權(quán)限映射

評估權(quán)限

默認(rèn)權(quán)限群組

權(quán)限并行評估

帶強制性延時的消息

恢復(fù)被盜竊的密鑰

應(yīng)用程序的確定性并行執(zhí)行

最小化通信延遲

只讀信息的處理

多帳戶的原子化交易

區(qū)塊鏈狀態(tài)的部分評估

自主最優(yōu)調(diào)度

Token 模型與資源使用

客觀與主觀的度量

接收方付費

委托能力

分離交易成本與 Token 價值

狀態(tài)存儲成本

區(qū)塊獎勵

社區(qū)效益應(yīng)用

治理

凍結(jié)帳戶

更改帳戶代碼

憲法

升級協(xié)議 & 憲法

緊急變更

腳本 & 虛擬機

模式定義的消息

模式定義的數(shù)據(jù)庫

分離授權(quán)與應(yīng)用

虛擬機獨立架構(gòu)

Web 組建 (WASM)

以太訪虛擬機 (EVM)

跨鏈通信

用于輕客戶端的 Merkle 證明 (LCV)

跨鏈通信的延時

完備性證明

結(jié)論

背景

區(qū)塊鏈技術(shù)是通過 2008 年誕生的比特幣貨幣得以被認(rèn)知,自從那之后企業(yè)家和開發(fā)者就不斷的嘗試推廣這一技術(shù),以便在單一的區(qū)塊鏈平臺上支持更為廣泛的應(yīng)用程序。

而一些區(qū)塊鏈平臺努力的支持可運作的去中心化應(yīng)用,具體的應(yīng)用比如 BitShares 去中心化交易所 (2014) 和 Steem 社交媒體平臺 (2016) 已經(jīng)成為每天被成千上萬活躍用戶重度使用的區(qū)塊鏈。 他們能做到這些,是通過性能的提升達(dá)到每秒處理上千交易,消除手續(xù)費和提供堪比已經(jīng)存在的中心化服務(wù)的用戶體驗。

已存在的區(qū)塊鏈平臺承擔(dān)著大量的交易費和有限的可計算能力,這都阻礙了區(qū)塊鏈技術(shù)的大面積應(yīng)用。

區(qū)塊鏈應(yīng)用的要求

為了贏得廣泛的應(yīng)用,構(gòu)建在區(qū)塊鏈之上的應(yīng)用需要一個靈活性足以滿足以下要求的平臺:

支持成百上千的用戶

像 Ebay、Uber、AirBnB 和 Facebook 這樣企業(yè),他們需要區(qū)塊鏈技術(shù)能處理每日數(shù)以千萬的活躍用戶。 在某些情況下,除非用戶群體達(dá)到一個極龐大的量級否則應(yīng)用并無用武之地,因此一個可以處理極其龐大用戶的平臺是至關(guān)重要的。

免費的使用

Application developers need the flexibility to offer users free services; users should not have to pay in order to use the platform or benefit from its services. 一個可以免費供用戶使用的區(qū)塊鏈平臺或許將贏得更為廣泛的使用。 開發(fā)者和企業(yè)可以制訂有效的貨幣化戰(zhàn)略。

簡單升級和 bug 修復(fù)

企業(yè)構(gòu)建區(qū)塊鏈基礎(chǔ)的應(yīng)用需要能夠為應(yīng)用增加新特性的靈活性。

所有非同凡響的軟件都會受到 bug 的影響,即便是經(jīng)過了最嚴(yán)格意義上的驗證。這個平臺必須具有足夠的魯棒性以便應(yīng)對不可避免出現(xiàn)的 bug。

低延時

一個好的用戶體驗需要延時時間在數(shù)秒內(nèi)就能收到可靠的反饋。 高延時會阻礙用戶,并且會讓構(gòu)建在區(qū)塊鏈上的應(yīng)用比已有的非區(qū)塊鏈應(yīng)用缺乏競爭力。

時序性能

一些應(yīng)用因為順序依賴關(guān)系的執(zhí)行步驟而不能使用并發(fā)算法實現(xiàn)。 比如交易所就需要足夠的時序性能來處理很高的交易量,因此高時序性能處理的平臺是必須的。

并發(fā)性能

大型可擴展應(yīng)用需要將工作量分配到多 CPU 和計算機之上。

共識算法 (DPOS)

EOS.IO 軟件使用唯一能滿足區(qū)塊鏈之上應(yīng)用性能需求的去中心化共識算法,委托股權(quán)證明 (DPOS)。 Under this algorithm, those who hold tokens on a blockchain adopting the EOS.IO software may select block producers through a continuous approval voting system and anyone may choose to participate in block production and will be given an opportunity to produce blocks proportional to the total votes they have received relative to all other producers. For private blockchains the management could use the tokens to add and remove IT staff.

EOS.IO 軟件使得區(qū)塊準(zhǔn)確的每 3 秒生成一個并且在任何時間點都只有一個被授權(quán)的生產(chǎn)者來生成區(qū)塊。 如果一個區(qū)塊在規(guī)定時間之內(nèi)未被生產(chǎn)出來則這一區(qū)塊將被跳過。 當(dāng)一個或多個區(qū)塊被跳過發(fā)生時,在區(qū)塊鏈中會有一個 6 秒及以上的間隔。

在 EOS.IO 軟件中,區(qū)塊通過 21 名生產(chǎn)者輪流產(chǎn)生。 在每一輪的開始時,21 個唯一的區(qū)塊生產(chǎn)者被選出。 獲票最高的前 20 名自動在沒輪被選中,剩余的一個生產(chǎn)者通過得票比例選出。 被選中的生產(chǎn)者通過從區(qū)塊取到的時間作為偽隨機數(shù)來打亂其順序。 打亂順序是為確保這些生產(chǎn)者與其他生產(chǎn)者保持均衡的連通性。

如果一個生產(chǎn)者錯過了一個區(qū)塊并且在過去的 24 小時內(nèi)沒有生產(chǎn)任何的區(qū)塊,那么它將被從候選中移除,直到它在區(qū)塊鏈中通知它要開始再次生產(chǎn)區(qū)塊的意圖。 這樣通過最小化區(qū)塊丟失數(shù)量(因被證實不可靠的節(jié)點不作為導(dǎo)致)來確保網(wǎng)絡(luò)操作的穩(wěn)定性。

在一般情況下,一個 DPOS 區(qū)塊鏈不會經(jīng)歷任何的分叉,因為區(qū)塊生產(chǎn)者是通過合作而非競爭的方式來生產(chǎn)區(qū)塊。 即便真的出現(xiàn)了分叉,共識也將自動的切換到最長的鏈上。 之所以會這樣運作,是因為區(qū)塊添加到一個區(qū)塊鏈分叉的速率與公用同一共識的區(qū)塊生產(chǎn)者比例是相關(guān)的。 換句話說,具有更多生產(chǎn)者的區(qū)塊鏈分叉會比擁有較少生產(chǎn)的那一個條增長的速度更快。 而且,沒有一個生產(chǎn)者會同時在兩個分叉上同時生產(chǎn)區(qū)塊。 如果一個區(qū)塊生產(chǎn)者被抓到做這樣的事兒,那么這個生產(chǎn)者將很可能被投票投出。 這些雙重生產(chǎn)行為對應(yīng)密碼學(xué)憑證可以用來自動的刪除這些濫用者。

交易確認(rèn)

通常 DPOS 區(qū)塊鏈 100% 會有區(qū)塊生產(chǎn)者參與。一個交易從廣播開始后平均 1.5 秒就可以 99.9% 被認(rèn)為是確認(rèn)了。

在一些特殊情況下例外,軟件出現(xiàn) bug,網(wǎng)絡(luò)擁塞,或一個惡意的區(qū)塊生產(chǎn)者制造了兩個或更多的分叉。 為了確保一個交易絕對是不可逆的,一個節(jié)點可以選擇等待 21 個區(qū)塊生產(chǎn)者中的 15 個給出確認(rèn)。 基于通常的 EOS.IO 軟件配置,在一般情況下這需要平均 45 秒的時間。 默認(rèn)情況下,所有的節(jié)點將認(rèn)為當(dāng) 21 個生產(chǎn)者中有 15 個給出確認(rèn)后這一區(qū)塊就是不可逆的了,并且不管長度如何都不會切換到?jīng)]有這一區(qū)塊的分叉。

在分叉開始的 9 秒內(nèi),一個節(jié)點就可以警告用戶他們極可能正處于分叉中。 在連續(xù)丟失 2 個區(qū)塊后,有 95% 的概率可以確認(rèn)一個節(jié)點處于分叉中。 在連續(xù)丟失 3 個區(qū)塊后就有 99% 的概率確認(rèn)。 可以通過節(jié)點丟失、近期參與比率和其他參數(shù)來構(gòu)建魯棒性預(yù)測模型,從而快速的警告操作者出現(xiàn)了問題。

對于這種警告的反應(yīng)完全取決于商業(yè)交易的性質(zhì),但最簡單的做法就是等待 15/21 的確認(rèn)直到警告消失。

股權(quán)證明的交易 (TaPoS)

EOS.IO 軟件需要每一個交易包含最近一個區(qū)塊頭的哈希值。這個哈希值有兩個目的:

防止不包含區(qū)塊引用的交易在分叉時重放發(fā)生;和

通知網(wǎng)絡(luò)對應(yīng)的用戶和他們的股份當(dāng)前在某個具體的分叉上。

隨著時間的推移,所有的用戶直接確認(rèn)區(qū)塊鏈,在這一鏈條上難以偽造假的鏈條,因為假的鏈條根本無法從合法鏈條上遷移交易。

帳戶

EOS.IO 軟件允許所有的帳戶使用一個唯一的人類可讀的名稱來索引,長度在 2 到 32 個字符之間。 這個名稱由帳戶創(chuàng)建者自己選擇。 所有的帳戶必須在創(chuàng)建時用極少的帳戶余額來注資,從而覆蓋存儲帳戶信息的成本。 帳戶名稱也支持命名空間,比如 @domain 這個帳戶的擁有者是唯一可以創(chuàng)建 @user.domain 帳戶的人。

在一個去中心化的場景中,應(yīng)用開發(fā)者將會為新用戶注冊成本買單。 Traditional businesses already spend significant sums of money per customer they acquire in the form of advertising, free services, etc. 比起來,資助一個新的區(qū)塊鏈帳戶的花費簡直微不足道。 值得慶幸的是,對一個已經(jīng)在另一個應(yīng)用注冊過的用戶并不需要再創(chuàng)建新的帳戶。

消息 & 處理

每個帳戶可以發(fā)送結(jié)構(gòu)化的消息給其他的帳戶,并且可以定義腳本來處理他們接收到的消息。 EOS.IO 軟件給每個帳戶提供了只有自己的消息處理腳本能訪問的私有數(shù)據(jù)庫。 消息處理腳本同樣可以給其他帳戶發(fā)送消息。 消息和自動化的消息處理的結(jié)合決定了 EOS.IO 如何定義智能合約的。

基于角色的權(quán)限管理

權(quán)限管理涉及判定一條消息是否被正確的授權(quán)。 權(quán)限管理最簡單的形式就是檢查一個交易包含必須的簽名,但這意味著必須的簽名是已知的。 一般情況下,權(quán)威必然是獨立的個體或者個體組成的群體,并且是被劃分開的。 EOS.IO 軟件提供了聲明式的權(quán)限管理系統(tǒng),通過管理誰可以在什么時間做什么來給用戶細(xì)力度和高維度的控制。

授權(quán)和權(quán)限管理被標(biāo)準(zhǔn)化和脫離應(yīng)用的商業(yè)邏輯是不可取的。 這使得管理權(quán)限的工具得以被開發(fā),既滿足常規(guī)的需求又為性能優(yōu)化提供了重要的可能性。

每一個帳戶可以被任何權(quán)重組合的其他帳戶和私鑰管控。 這創(chuàng)建了分層級的權(quán)利結(jié)構(gòu),這反映了現(xiàn)實中的權(quán)限分配方式,并且讓多用戶共同管理資產(chǎn)變得從未如此簡單。 多用戶控制是安全最大的貢獻(xiàn)者,并且,當(dāng)用戶使用得當(dāng),它可以極大的消除因被黑而導(dǎo)致被盜竊的風(fēng)險。

EOS.IO software allows accounts to define what combination of keys and/or accounts can send a particular message type to another account. 舉個例子,可以指定一個密鑰給一個用戶的社交媒體賬號,同時另一個密鑰訪問交易所。 甚至可以給其他帳戶權(quán)限來代表自己而無需分配給他們密鑰。

命名的權(quán)限級別

在 EOS.IO 軟件中,帳戶可以定義命名的權(quán)限級別,每一個是由更高級別的命名權(quán)限派生而來。 每一個命名的權(quán)限級別定義了一個權(quán)威;一個權(quán)威是多重簽名閾值校驗,它包含密鑰和/或其他帳戶的命名權(quán)限級別。 打個比方,一個帳戶的“朋友”權(quán)限級別可以被設(shè)置為由該帳戶的任何一個朋友無差別的控制。

另一個例子在 Steem 區(qū)塊鏈中,它包含三個硬編碼的命名權(quán)限級別:擁有,活躍和發(fā)帖。 發(fā)帖權(quán)限就只能進行如投票和發(fā)帖的社交活動,而活躍權(quán)限可以做除了變更擁有之外的所有的事情。 擁有權(quán)限的意思是冷存儲并且有能力做任何事。 The EOS.IO software generalizes this concept by allowing each account holder to define their own hierarchy as well as the grouping of actions.

命名的消息處理群組

EOS.IO 軟件允許每個帳戶將他們自己的消息組織到一個命名和嵌套的群組中。 這個命名的消息處理群組可以在其他帳戶配置他們權(quán)限級別時被引用。

最高級別的消息處理群組是帳戶名稱,最低級別的是一個帳戶接收到的單獨的消息類型。 這些群組可以被這樣的方式引用:?@accountname.groupa.subgroupb.MessageType.

在這樣的模型之下,交易所合約可以通過將掛單的創(chuàng)建和取消分組,從而與充值提現(xiàn)分離開。 交易所合約的這樣分組對用戶而言帶來了方便。

權(quán)限映射

EOS.IO 軟件允許每個帳戶定義從任意帳戶的一個命名的消息處理群組與自己的命名的權(quán)限級別之間建立映射。 舉個例子,一個帳戶所有者可以將自己社交媒體應(yīng)用與自己的“朋友”權(quán)限群組建立映射。 有了這個映射,任何朋友可以以這一帳戶的身份在這一帳戶的社交媒體上發(fā)帖。 盡管他們將以帳戶所有者的身份發(fā)帖,他們?nèi)匀皇褂米约旱拿荑€來簽名消息。 這意味著總是可以辨識出是哪一個朋友在以何種方式使用帳戶。

評估權(quán)限

當(dāng)?@alice?以 "Action" 類型發(fā)送一條消息給?@bob?時,EOS.IO 軟件首先會檢查?@alice?是否為?@bob.groupa.subgroup.Action?定義過權(quán)限映射。 如果什么都沒有找到,緊接著檢查?@bob.groupa.subgroup?映射,然后是?@bob.groupa,最后?@bob?將被檢查。 如果都沒有找到,那么假定映射為命名的權(quán)限群組?@alice.active

一旦一個映射被識別,則通過閾值多簽名流程驗證簽名權(quán)威,并且關(guān)聯(lián)權(quán)威與命名的權(quán)限。 如果失敗了,則躍遷至父權(quán)限,直至擁有者權(quán)限,@alice.owner

默認(rèn)權(quán)限群組

The EOS.IO technology also allows all accounts to have an "owner" group which can do everything, and an "active" group which can do everything except change the owner group. 所有其他的全新群組派生自“活動”群組。

權(quán)限并行評估

權(quán)限評估過程是“只讀”的,并且通過交易對權(quán)限的變更在一個區(qū)塊結(jié)束之前不會起作用。 這意味著對所有的交易對應(yīng)的密鑰和權(quán)限評估可以被并行執(zhí)行。 此外,這意味著一個快速的權(quán)限驗證是可行的,它無需啟動會引起回滾需求的高成本的應(yīng)用邏輯。 最后,這意味著交易權(quán)限可以被評估即便接收到等待的交易,并且之后無需再重新評估。

從各方面考慮,權(quán)限驗證占據(jù)了驗證交易計算量的很大比例。 讓其只讀和普遍的并發(fā)處理將會使得性能有一個質(zhì)的飛躍。

當(dāng)從消息日志中重新生成確定性狀態(tài)時不再需要重復(fù)的權(quán)限驗證。 事實是一個交易如果被包含近了一個被認(rèn)為不存在問題的區(qū)塊時它就有足夠的理由跳過這 步這將極大減少因為區(qū)塊鏈增長拉去過去記錄時的計算量。

帶強制性延時的消息

時間是安全中的一個關(guān)鍵組成部分。 在大多數(shù)情況下,一個私鑰在沒有被使用前都無從知曉它是否被偷竊。 當(dāng)人們有需要密鑰的應(yīng)用在每天聯(lián)網(wǎng)使用的電腦上運行時,基于時間的安全會更為重要。 EOS.IO 軟件讓應(yīng)用開發(fā)者可以指明消息必須在被加到一個區(qū)塊之前等待最小的時間間隙。 During this time they can be cancelled.

用戶可以在消息廣播出去后通過郵件或者文字消息的形式收到通知。 如果他們沒有授權(quán),那么他們可以使用帳戶恢復(fù)流程來恢復(fù)帳戶,并收回消息。

這個必須的延時由操作敏感性決定。 為一杯咖啡付款可以沒有任何的延時,幾秒之內(nèi)就不可逆了,而購買一個房子也許需要 72 消失的結(jié)算期。 轉(zhuǎn)移整個帳戶到一個新的控制可能需要長達(dá) 30 天。 具體的延時選擇由開發(fā)者和用戶自己來做選擇。

恢復(fù)被盜竊的密鑰

EOS.IO 軟件提供給用戶一種找回自己失竊密鑰控制權(quán)的方式。 一個帳戶的所有者可以使用過去 30 天任何活躍的擁有者密鑰與事先指定的合作者帳戶給出的批準(zhǔn)來重置自己帳戶的密鑰。 帳戶的恢復(fù)合作者在沒有所有人幫助的情況下無法重置帳戶的控制權(quán)。

黑客嘗試進行恢復(fù)流程是無意義的,因為他們已經(jīng)“控制”了帳戶。 此外,就算他們真的進行這一流程,恢復(fù)合作者也會詢問身份證明和多因素認(rèn)證 (手機和郵件)。 這會讓黑客脫作出讓步或者無功而返。

這一流程與簡單的多重簽名有很大差異。 在多重簽名中,另一個公司要參與所有轉(zhuǎn)賬的執(zhí)行,但在恢復(fù)流程中,它卻只在恢復(fù)時才起作用對每天的轉(zhuǎn)賬無從干預(yù)。 這大大的降低了參與者的成本和法律責(zé)任。

應(yīng)用程序的確定性并行執(zhí)行

區(qū)塊鏈共識取決于確定性 (可重現(xiàn)的) 的行為。 這意味著所有的并行計算必須是不能互斥或者具有其他鎖特性的。 沒有了鎖就必須有一些方式可以確保所有的帳戶只可以讀取和寫入他們自己的私有數(shù)據(jù)庫。 這也意味著每個帳戶處理消息是順序的,而并發(fā)只能在帳戶層面進行。

In an EOS.IO software-based blockchain, it is the job of the block producer to organize message delivery into independent threads so that they can be evaluated in parallel. 每個帳戶的狀態(tài)由且只由發(fā)送給它的消息決定。 進度表由區(qū)塊生產(chǎn)者輸出并且會被確定性的執(zhí)行,但是生成進度表的過程卻不一定是確定性的。 這意味著區(qū)塊生產(chǎn)者可以使用并發(fā)算法來調(diào)度交易。

并行執(zhí)行的一方面意味著當(dāng)一個腳本生成了一個新的消息,它不會立即被發(fā)送,而被安排在下一個輪訓(xùn)中發(fā)送。 不能立馬發(fā)出的原因是接受者可能在另一個線程中活躍的變更自己的狀態(tài)。

最小化通信延遲

延遲是一個帳戶從發(fā)出一條消息給另一個帳戶,直到收到回應(yīng)的這段時間。 我們的目標(biāo)是在一個單獨的區(qū)塊中包含兩個帳戶交換消息的來去信息,而不用在每條消息間等待 3 秒鐘。 為了做到這一點,EOS.IO 軟件將每個區(qū)塊劃分為循環(huán)。 每個循環(huán)劃分為線程,每個線程包含了交易的一個列表。 每一個交易包含了待發(fā)送的消息集合。 這個結(jié)構(gòu)可以被可視化為一個樹,其中交互層彼此并行,各自被順序的執(zhí)行。

? ? 區(qū)塊

? ? ? 循環(huán) (順序)

? ? ? ? 線程 (并行)

? ? ? ? ? 交易 (順序)

? ? ? ? ? ? 消息 (順序)

? ? ? ? ? ? ? 接受者和被通知帳戶 (并行)

在一個循環(huán)中生成的交易可以在后續(xù)的任何一個循環(huán)或者區(qū)塊中被發(fā)送。 區(qū)塊生產(chǎn)者會持續(xù)不斷的向區(qū)塊中添加循環(huán)直到最大的墻上時間到了或者沒有更多的新交易要發(fā)送。

可以對一個區(qū)塊使用靜態(tài)分析來驗證同一個循環(huán)內(nèi)不存在兩個線程包含同一帳戶下對交易的變更。 只要保持不變一個區(qū)塊就可以并行的運行所有的線程。

只讀消息的處理

有些帳戶可以在傳遞/失敗的基礎(chǔ)上處理消息而不修改內(nèi)部狀態(tài)。 如果是這樣的話,那么這些處理程序可以并行執(zhí)行,只要只有一個特定的帳戶的只讀消息處理程序包含在一個或多個線程在一個特定的周期。

多帳戶的原子化交易

有時我們需要確保消息自動的被多個賬戶傳遞和接收。 在這種情況下,消息會被放在同一個交易內(nèi),賬戶會被分配到同一個線程,并且消息被順序的添加。 這種情況對性能是不理想的,當(dāng)用戶使用涉及到“賬單”時,他們將在交易內(nèi)以賬戶唯一索引被列入其中。

基于性能和成本原因最好減少涉及兩個或多個重度帳戶的原子性操作。

區(qū)塊鏈狀態(tài)的部分評估

擴展區(qū)塊鏈技術(shù)使得組件化成為必要。每個人不應(yīng)該執(zhí)行所有的事務(wù),尤其是當(dāng)其只需要運行應(yīng)用的一個小的子集。

一個交易所應(yīng)用開發(fā)者運行一個完整節(jié)點位的是為其用戶展現(xiàn)所有的狀態(tài)。 這個交易所應(yīng)用沒有與社交網(wǎng)絡(luò)建立關(guān)聯(lián)的必要性。 EOS.IO 軟件允許任何的完整節(jié)點選擇應(yīng)用的任何子集來執(zhí)行。 傳遞給其他應(yīng)用的消息可以被安全的忽略掉,因為應(yīng)用程序的狀態(tài)完全由傳遞給它的消息派生。

這與其他帳戶的溝通有一些重要的影響。 最重要的是,不能假定其他帳戶的狀態(tài)可以在同一臺機器上訪問。 這也意味著,雖然很容易啟用“鎖”來允許一個帳戶同步調(diào)用另一個帳戶,如果其他帳戶不駐留在內(nèi)存中,這種設(shè)計模式就會出現(xiàn)問題。

所有賬戶帳戶間的狀態(tài)通信必須通過包含在區(qū)塊鏈中的消息進行。

自主最優(yōu)調(diào)度

EOS.IO 軟件并不能為區(qū)塊生產(chǎn)生者為任何其他帳戶送達(dá)的任何信息負(fù)責(zé)。 每個區(qū)塊生產(chǎn)者要對計算的發(fā)雜讀和處理一個消息的時間自己進行主觀上的預(yù)測。 這同時適用于用戶生成的和腳本自動生成的交易。

On a launched blockchain adopting the EOS.IO software, at a network level all transactions are billed a fixed computational bandwidth cost regardless of whether it took .01ms or a full 10 ms to execute it. 然而,每個單獨的區(qū)塊生產(chǎn)者要通過自己的算法來計算資源的消耗。 當(dāng)一個區(qū)塊生產(chǎn)者斷定一個交易或者帳戶消耗了不相稱的大量的計算資源時,他們可以在生成自己的區(qū)塊時拒絕該交易;但是,如果其他區(qū)塊生產(chǎn)者認(rèn)為交易是有效的,他們就仍需要處理交易。

一般而言,只要一個區(qū)塊生產(chǎn)者認(rèn)為交易在資源使用限度內(nèi)是有效的,那么其他區(qū)塊生產(chǎn)者就也要接受,但可能交易傳遞給生產(chǎn)者就要花費 1 分鐘。

在某些情況下,生產(chǎn)者可以創(chuàng)建包含可接受范圍之外的數(shù)量級的塊。 在這種情況下,下一個區(qū)塊生產(chǎn)者可能會選擇拒絕區(qū)塊和束縛將被第三個生產(chǎn)者打破。 這和因為區(qū)塊過大導(dǎo)致的網(wǎng)絡(luò)延時沒什么打不同。 社區(qū)會注意到模式的異常并最終會將票從流氓生產(chǎn)者哪里刪掉。

這種對計算成本的主觀評估將區(qū)塊鏈從必須精確和確定的預(yù)測一些東西要花多長時間來運行這一問題中解放出來。 有了這一設(shè)計就不需要精確的數(shù)指令,將極大的增加優(yōu)化的可能性又不必打破共識。

Token 模型與資源使用

PLEASE NOTE: CRYPTOGRAPHIC TOKENS REFERRED TO IN THIS WHITE PAPER REFER TO CRYPTOGRAPHIC TOKENS ON A LAUNCHED BLOCKCHAIN THAT ADOPTS THE EOS.IO SOFTWARE. THEY DO NOT REFER TO THE ERC-20 COMPATIBLE TOKENS BEING DISTRIBUTED ON THE ETHEREUM BLOCKCHAIN IN CONNECTION WITH THE EOS TOKEN DISTRIBUTION.

All blockchains are resource constrained and require a system to prevent abuse. With a blockchain that uses EOS.IO software, there are three broad classes of resources that are consumed by applications:

帶寬和日志存儲 (磁盤);

計算與計算儲備 (中央處理器);

狀態(tài)存儲 (內(nèi)存)。

帶寬和計算有兩部分,瞬時使用和長期使用。 一個區(qū)塊鏈維持著所有消息的日志,這些日志最終由完全節(jié)點存儲和下載。 通過消息日志可以重現(xiàn)所有應(yīng)用的狀態(tài)。

可計算債務(wù)是一個必須通過消息日志重新構(gòu)建狀態(tài)的計算結(jié)果。 如果可計算債務(wù)增長變得臃腫則有必要通過快照方式記錄區(qū)塊鏈狀態(tài),并丟棄區(qū)塊鏈歷史。 如果可計算債務(wù)增長過快,則它需要花費 6 個月時間來重放等值與 1 年的交易。 這很不可取,因此,可計算債務(wù)需要被細(xì)心的管理。

區(qū)塊鏈狀態(tài)存儲是通過訪問應(yīng)用邏輯獲取的信息。 它包括諸如掛單和賬戶余額等信息。 如果狀態(tài)從未被應(yīng)用讀取則它不會被存儲。 比如,博客發(fā)布的內(nèi)容和評論如未被應(yīng)用邏輯讀取則他們就不應(yīng)該存儲在區(qū)塊鏈狀態(tài)中。 同時,發(fā)布的內(nèi)容/評論的存在、投票的數(shù)量和其他屬性要作為區(qū)塊鏈狀態(tài)的部分被存儲下來。

區(qū)塊生產(chǎn)者對外發(fā)布她們可用的帶寬,計算能力和狀態(tài)。 EOS.IO 允許帳戶按比例消耗一個 3 天對賭合約中的可用資源。 舉個例子,如果一個基于 EOS.IO 的區(qū)塊鏈啟動了,一個帳戶持有所有 token 發(fā)行總量的 1%,那么帳號就具有使用 1% 狀態(tài)存儲空間的能力。

Adopting the EOS.IO software on a launched blockchain means bandwidth and computational capacity are allocated on a fractional reserve basis because they are transient (unused capacity cannot be saved for future use). The algorithm used by EOS.IO software is similar to the algorithm used by Steem to rate-limit bandwidth usage.

客觀與主觀的度量

如前所述,檢測計算使用的性能和優(yōu)化的影響很大;因此,所有資源的使用限制,最終都是主觀的,執(zhí)行依靠個人的算法和區(qū)塊生產(chǎn)者進行估計。

也就是說,有一些事情是微不足道的客觀衡量。 發(fā)送的消息數(shù)和存儲在內(nèi)部數(shù)據(jù)庫中的數(shù)據(jù)的大小是便宜的客觀衡量。 的 EOS.IO 軟件讓區(qū)塊生產(chǎn)者采用相同的算法應(yīng)對客觀的量,但可以在主觀量上選擇采用更嚴(yán)格的主觀測量算法。

接收方付費

傳統(tǒng)上來說,企業(yè)為辦公場地、計算力和其他為了運行企業(yè)而需要的成本買單。 客戶從企業(yè)購買具體的產(chǎn)品,產(chǎn)品銷售產(chǎn)生的利潤來蓋過企業(yè)運作的成本。 類似的,沒有哪個網(wǎng)站要求來訪者為蓋過運作成本而支付。 因此,去中心化應(yīng)用也不應(yīng)該強制用戶因為使用了區(qū)塊鏈而直接為區(qū)塊鏈支付。

A launched blockchain that uses the EOS.IO software does not require its users to pay the blockchain directly for its use and therefore does not constrain or prevent a business from determining its own monetization strategy for its products.

委托能力

A holder of tokens on a blockchain launched adopting the EOS.IO software who may not have an immediate need to consume all or part of the available bandwidth, can give or rent such unconsumed bandwidth to others; the block producers running EOS.IO software on such blockchain will recognize this delegation of capacity and allocate bandwidth accordingly.

分離交易成本與 Token 價值

EOS.IO 軟件的一個主要優(yōu)點就是應(yīng)用可用的帶寬完全獨立于 token 的價格。 If an application owner holds a relevant number of tokens on a blockchain adopting EOS.IO software, then the application can run indefinitely within a fixed state and bandwidth usage. In such case, developers and users are unaffected from any price volatility in the token market and therefore not reliant on a price feed. In other words, a blockchain that adopts the EOS.IO software enables block producers to naturally increase bandwidth, computation, and storage available per token independent of the token's value.

A blockchain using EOS.IO software also awards block producers tokens every time they produce a block. Token 的值將影響其能購買的帶寬、存儲和計算資源;這一模型會自然的利用 token 值的上漲來增加網(wǎng)絡(luò)的性能。

狀態(tài)存儲成本

由于帶寬和計算資源可以被委托,因此應(yīng)用的狀態(tài)存儲需要應(yīng)用程序的開發(fā)者持有 token 直到狀態(tài)被刪除。 如果狀態(tài)永遠(yuǎn)不會被刪除那么 token 實質(zhì)上從流通中被抹除。

每一個用戶帳戶需要一個確定數(shù)量的存儲;因此每一個帳戶必須保持一個最小的余額。隨著網(wǎng)絡(luò)存儲能力的不斷提升,余額的最小余額需求將會下降。

塊獎勵

A blockchain that adopts the EOS.IO software will award new tokens to a block producer every time a block is produced. In these circumstances, the number of tokens created is determined by the median of the desired pay published by all block producers. EOS.IO 軟件可以配置限定生產(chǎn)者回報的上限從而確保 token 的每年增長比例不會超過 5%。

社區(qū)效益應(yīng)用

In addition to electing block producers, pursuant to a blockchain based on the EOS.IO software, users can elect 3 community benefit applications also known as smart contracts. 這三個應(yīng)用將接收至多一個按照配置百分比對應(yīng)的 token 年供應(yīng)量減去每年提供給區(qū)塊生產(chǎn)者的 token 量。 這些智能合約將按照每個應(yīng)用接收到的 token 持有者的票的比例對應(yīng)的 token。 這些應(yīng)用或者智能合約可以被 token 持有者選出的新的應(yīng)用或智能合約所替代。

治理

治理是人們在主觀問題上達(dá)成共識的過程,而這無法完全用軟件算法來捕獲。 An EOS.IO software-based blockchain implements a governance process that efficiently directs the existing influence of block producers. 沒有了定義好的治理流程,之前的區(qū)塊鏈依賴臨時的、非正式和常常充滿爭議的方式治理,直接導(dǎo)致不可預(yù)知的結(jié)果。

A blockchain based on the EOS.IO software recognizes that power originates with the token holders who delegate that power to the block producers. 區(qū)塊生產(chǎn)者被授予有限的檢查權(quán)威來凍結(jié)帳戶,升級有缺陷的應(yīng)用程序,對底層協(xié)議提出硬分叉的改進建議。

Embedded into the EOS.IO software is the election of block producers. 在對區(qū)塊鏈沒有做任何變更之前他們必須認(rèn)可它。 如果區(qū)塊生產(chǎn)者拒絕 token 持有者所預(yù)期的變更他們就會被投出。 如果區(qū)塊生產(chǎn)者未經(jīng) token 持有者的授權(quán)作出變更,其他的非生產(chǎn)、完整驗證 (交易所等) 會拒絕這些變更。

凍結(jié)帳戶

有時一個智能合約的行為處于一種一場或不可預(yù)測的狀態(tài)并且無法按照預(yù)期執(zhí)行;另一些時候一個應(yīng)用或帳戶也許發(fā)現(xiàn)了一個可以銷毀不可想像數(shù)量資源的漏洞。 當(dāng)這些問題不可避免的發(fā)生時,區(qū)塊生產(chǎn)者有能力來扭轉(zhuǎn)這一局面。

所有區(qū)塊鏈上的區(qū)塊生產(chǎn)者都有能力來決定哪些交易被加到區(qū)塊中,這給了他們凍結(jié)帳戶的能力。 A blockchain using EOS.IO software formalizes this authority by subjecting the process of freezing an account to a 17/21 vote of active producers. 如果生產(chǎn)者濫用權(quán)利他們會被投出,而對應(yīng)凍結(jié)帳戶就將解凍。

更改帳戶代碼

When all else fails and an "unstoppable application" acts in an unpredictable manner, a blockchain using EOS.IO software allows the block producers to replace the account's code without hard forking the entire blockchain. 與凍結(jié)一個帳戶類似,更改帳戶代碼需要 17/21 這樣的生產(chǎn)者票形。

憲法

EOS.IO 應(yīng)用使得區(qū)塊鏈創(chuàng)建了一個點對點的服務(wù)條款協(xié)議或者綁定用戶到一個合約,這都需要用戶對其簽名,簡稱“憲法”。 憲法的內(nèi)容定義了僅僅依靠代碼無法在用戶間履行的義務(wù),同時通過建立管轄權(quán)和可選的法律來解決相互間的爭端。 每個在網(wǎng)絡(luò)廣播的交易都必須將憲法的哈希值作為簽名的一部分,從而顯性的將簽名者綁定在合約中。

憲法還定義了人類可讀意圖的源代碼協(xié)議。 這個意圖是用來識別錯誤和功能之間的差異,當(dāng)錯誤發(fā)生時,引導(dǎo)社區(qū)對什么是適當(dāng)或不當(dāng)修復(fù)。

升級協(xié)議 & 憲法

The EOS.IO software defines a process by which the protocol as defined by the canonical source code and its constitution, can be updated using the following process:

區(qū)塊生產(chǎn)者對憲法提出改建意見并獲得 17/21 批準(zhǔn)。

區(qū)塊生產(chǎn)者持續(xù) 17/21 品準(zhǔn)連續(xù) 30 天。

所有用戶需要使用新的憲法來做簽名。

區(qū)塊生產(chǎn)通過變更代碼的方式來影響憲法并且提交一個 git 記錄的哈希值。

區(qū)塊生產(chǎn)者持續(xù) 17/21 品準(zhǔn)連續(xù) 30 天。

7 天后改為會起影響的代碼,給所有完整節(jié)點 1 周時間在確認(rèn)源碼后進行升級。

所有未升級到最新代碼的節(jié)點被自動關(guān)掉。

按照 EOS.IO 的默認(rèn)配置,添加新特性升級區(qū)塊鏈的流程需要 2 到 3 個月,而修復(fù)一般的 bug 不需要更改憲法需要 1 到 2 個月時間。

緊急變更

區(qū)塊生產(chǎn)者可以推薦軟件的變更當(dāng) bug 是傷害性 bug 或安全溢出影響用戶使用的。 一般來說,這可能是對憲法的加速更新,引進新的功能或修復(fù)無害的錯誤。

腳本 & 虛擬機

EOS.IO 首先會是一個平臺用于協(xié)同用戶間認(rèn)證消息的傳遞。 腳本語言和虛擬機的具體實現(xiàn)與 EOS.IO 技術(shù)的設(shè)計是分離的。 任何語言或者虛擬主機,只要確定并適合沙盒,帶有足夠的運行效率均可以和 EOS.IO 軟件 API 對接。

模式定義的消息

所以用戶間發(fā)送的消息都是通過模式定義定義出來的,它是區(qū)塊鏈共識狀態(tài)的一部分。 這個模式允許消息在二進制與 JSON 格式之間無縫的轉(zhuǎn)換。

模式定義的數(shù)據(jù)庫

數(shù)據(jù)庫狀態(tài)也是通過類似的模式來定義。 這是為了確保所有應(yīng)用存儲的數(shù)據(jù)是可以轉(zhuǎn)化為人類可讀的 JSON 但存儲和控制時使用高效的二進制。

分離授權(quán)與應(yīng)用

To maximize parallelization opportunities and minimize the computational debt associated with regenerating application state from the transaction log, EOS.IO software separates validation logic into three sections:

驗證消息是否內(nèi)部一致;

驗證所有前提條件是否有效;

修改應(yīng)用程序狀態(tài)。

驗證消息的內(nèi)部一致性是只讀的并且無需訪問區(qū)塊鏈狀態(tài)。 這意味著它可以以最大并發(fā)來執(zhí)行。 驗證前提條件,比如需要的余額數(shù),是只讀的因此也可以受益與并行計算。 只有更改應(yīng)用狀態(tài)時需要寫入權(quán)限并且必須順序的執(zhí)行每個應(yīng)用。

身份認(rèn)證是一個驗證消息可被使用的只讀過程。 應(yīng)用程序?qū)嶋H上在發(fā)揮作用。 同一時間兩者都需要被計算,然而一旦消息被包含進區(qū)塊它就不再需要進行消息驗證的操作了。

虛擬機獨立架構(gòu)

It is the intention of the EOS.IO software-based blockchain that multiple virtual machines can be supported and new virtual machines added over time as necessary. 因此,本文并不討論任何特定的語言或者虛擬機。 That said, there are two virtual machines that are currently being evaluated for use with an EOS.IO software-based blockchain.

Web 組建 (WASM)

網(wǎng)絡(luò)組建是一種為了構(gòu)建高性能的 web 應(yīng)用而新興的 web 標(biāo)準(zhǔn)。 只需要進行少量的更改 Web 組建就可以被制作為確定性的和沙盒化的。 Web 組建的好處是它有著廣泛的產(chǎn)業(yè)支持并且它可以讓智能合約使用熟知的語言進行開發(fā),比如 C 或 C++。

以太訪開發(fā)者已經(jīng)開始更改 Web 組建來提供合適的沙盒與確定性在他們的以太訪式 Web 組建 (WASM)。 這種方式讓 EOS.IO 很容易的與之適配和對接。

以太訪虛擬機 (EVM)

這個虛擬機已經(jīng)被眾多已有的智能合約所采用并且可以通過適配應(yīng)用與 EOS.IO 區(qū)塊鏈中。 It is conceivable that EVM contracts could be run within their own sandbox inside an EOS.IO software-based blockchain and that with some adaptation EVM contracts could communicate with other EOS.IO software blockchain applications.

跨鏈通信

EOS.IO 軟件被設(shè)計為跨區(qū)塊鏈通信友好的。 這是通過生成消息存在證明與消息時序證明變的簡單而實現(xiàn)的。 這些證明與應(yīng)用架構(gòu)設(shè)計相結(jié)合,即圍繞消息細(xì)節(jié)的跨鏈傳輸和有效性驗證時隱藏應(yīng)用程序開發(fā)者的架構(gòu)設(shè)計。

用于輕客戶端的 Merkle 證明 (LCV)

如果客戶端不需要處理所有的交易會讓多區(qū)塊鏈間的整合更為輕松。 畢竟,一個交易所只需要關(guān)心交易所的入賬和出賬,別無他求。 如果交易所鏈條可以使用資金的輕量 merkle 證明,而不必非要完全依賴對它區(qū)塊生產(chǎn)者的信任會是一個不錯的主意。 至少一個鏈的區(qū)塊生產(chǎn)者在與其他區(qū)塊鏈同步時更樂意保持盡可能小的開銷。

LCV 的目標(biāo)能產(chǎn)生相對輕量存在性證明,使得任何追蹤相對輕量數(shù)據(jù)集的人可以驗證其有效性。 在這種情況下,目的是為了證明一個特定的交易是包含在一個特定的區(qū)塊中,區(qū)塊包含在一個特定的區(qū)塊鏈的已驗證歷史中。

比特幣支持通過全節(jié)點的完整記錄獲取每年 4MB 大小的區(qū)塊頭信息來驗證交易。 每秒 10 個交易,一個有效的證明需要 512 個字節(jié)。 這對于有 10 分鐘間隔的區(qū)塊鏈沒有問題,但是對于 3 秒間隔區(qū)塊鏈就顯得不那么“輕量”了。

EOS.IO 軟件使得任何一個人只要他擁有包含交易所對應(yīng)區(qū)塊之后的隨意一個不可逆的區(qū)塊頭,他就可以進行輕量證明。 使用下面展示的哈希鏈結(jié)構(gòu)就可以使用少于 1024 字節(jié)的大小來完成任意交易的存在性證明。 如果假設(shè)校驗節(jié)點在過去幾天內(nèi)所有的區(qū)塊頭一直增長 (2MB 的數(shù)據(jù)),那么驗證這些交易將只需要 200 字節(jié)就夠了。

將生產(chǎn)的區(qū)塊與恰當(dāng)?shù)墓f溩鲫P(guān)聯(lián)使得開銷增幅很小,這意味著沒有理由不使用這種方式來生成區(qū)塊。

當(dāng)需要驗證其他鏈時,有譬如 時間/ 空間/ 帶寬 的多樣化優(yōu)化可以做。 追蹤全部區(qū)塊頭 (420 MB/年) 將保持證明體積的輕巧。 只追蹤最近的頭可以提供最小長期存儲和證明大小來獲得。 另外,一個區(qū)塊鏈可以使用懶惰的評估方法,即它記住過去證明的中間值哈希。 新證明只需要包含指向已知稀疏樹的鏈接。 確切的方法將取決于那些包含對 Merkle 證明引用的交易所在的外部區(qū)塊的比例。

一定密度的聯(lián)系后,將變得更為高效,一個鏈會包含另一個鏈整個區(qū)塊的歷史和消除證據(jù)一起,這樣就不需要通信便可以驗證了。 出于性能原因,應(yīng)最小化的跨鏈證明的頻率。

跨鏈通信的延時

當(dāng)與外部區(qū)塊鏈進行通信時,區(qū)塊生產(chǎn)者必須等待直到 100% 確信一個交易已經(jīng)被另一個區(qū)塊鏈確認(rèn)為不可逆后才會接收它成為一個有效的輸入。 Using an EOS.IO software-based blockchain and DPOS with 3 second blocks and 21 producers, this takes approximately 45 seconds. If a chain's block producers do not wait for irreversibility it would be like an exchange accepting a deposit that was later reversed and could impact the validity of the blockchain's consensus.

完備性證明

當(dāng)使用來自外部區(qū)塊鏈的 Merkle 證明時,在已知所有交易均已驗證和已知沒有交易被跳過或遺忘之間有一個重要的差異。 雖然不可能證明所有最近的交易是已知的,但有沒有間隙的交易歷史是可以被證明的。 EOS.IO 軟件在每個用戶的每個傳遞的消息上分配了一個序列號。 一個用于可以使用這些序列號來證明所有的消息由某個特定帳戶處理,只需要看它是否是按序執(zhí)行的。

總結(jié)

EOS.IO 軟件是從證明概念的經(jīng)驗和最佳實踐設(shè)計而來,它代表了區(qū)塊鏈技術(shù)的重要進步。 該軟件是全球可擴展區(qū)塊鏈社會偉大藍(lán)圖中的一部分,它將應(yīng)用去中心化并得以輕松的發(fā)布和治理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內(nèi)容