Web3.0應(yīng)用程序的架構(gòu)

Web 3.0應(yīng)用程序(或“DApps”)的體系結(jié)構(gòu)與Web 2.0應(yīng)用程序完全不同。

以Medium為例武通,這是一個(gè)簡單的博客網(wǎng)站,允許用戶發(fā)布自己的內(nèi)容芽丹,并與他人的內(nèi)容進(jìn)行交互将塑。

作為一個(gè)web 2.0應(yīng)用程序脉顿,它聽起來可能很簡單,但Medium的架構(gòu)中有很多東西使這一切成為可能:

首先抬旺,必須有一個(gè)地方存儲(chǔ)必要的數(shù)據(jù)弊予,如用戶、帖子开财、標(biāo)簽汉柒、評(píng)論、喜歡等等责鳍。這需要不斷更新數(shù)據(jù)庫碾褂。

其次,后端代碼(用像Node.js历葛、Java或Python這樣的語言編寫)必須定義Medium的業(yè)務(wù)邏輯正塌。例如,當(dāng)一個(gè)新用戶注冊(cè)恤溶、發(fā)布一個(gè)新博客或在其他人的博客上發(fā)表評(píng)論時(shí)乓诽,會(huì)發(fā)生什么?

第三,前端代碼(通常用JavaScript咒程、HTML和CSS編寫)必須定義Medium的UI邏輯鸠天。例如,站點(diǎn)是什么樣子的帐姻,當(dāng)用戶與頁面上的每個(gè)元素交互時(shí)會(huì)發(fā)生什么?

當(dāng)您在Medium上寫一篇博客文章時(shí)稠集,您將與它的前端交互,前端與后端交互饥瓷,后端與數(shù)據(jù)庫交互剥纷。所有這些代碼都駐留在中心化的服務(wù)器上,并通過瀏覽器呈現(xiàn)給用戶呢铆。這是對(duì)當(dāng)今大多數(shù)Web 2.0應(yīng)用程序如何工作的一個(gè)很好的高級(jí)總結(jié)晦鞋。


image.png

但這一切都在改變。

區(qū)塊鏈技術(shù)為Web 3.0應(yīng)用程序開辟了一個(gè)令人興奮的新方向棺克。在本文中鳖宾,我們將重點(diǎn)討論以太坊區(qū)塊鏈帶來了什么。

是什么讓W(xué)eb 3.0與眾不同?

與像Medium這樣的Web 2.0應(yīng)用程序不同逆航,Web 3.0消除了中間人。沒有存儲(chǔ)應(yīng)用程序狀態(tài)的集中式數(shù)據(jù)庫渔肩,也沒有后端邏輯駐留的集中式web服務(wù)器因俐。

相反,您可以利用區(qū)塊鏈在分布式的狀態(tài)機(jī)上構(gòu)建應(yīng)用程序,該狀態(tài)機(jī)由互聯(lián)網(wǎng)上的匿名節(jié)點(diǎn)維護(hù)抹剩。

通過“狀態(tài)機(jī)”撑帖,我指的是維護(hù)某些給定程序狀態(tài)和該機(jī)器上允許的未來狀態(tài)的機(jī)器。區(qū)塊鏈?zhǔn)且环N狀態(tài)機(jī)澳眷,用一些初始狀態(tài)實(shí)例化胡嘿,并且有非常嚴(yán)格的規(guī)則(即共識(shí))來定義該狀態(tài)如何轉(zhuǎn)換。

更好的是钳踊,沒有一個(gè)實(shí)體控制這個(gè)分布式的狀態(tài)機(jī)——它是由網(wǎng)絡(luò)中的每個(gè)人共同維護(hù)的衷敌。

那么后端服務(wù)器呢? 在Web 3.0中,您可以編寫智能合約來定義應(yīng)用程序的邏輯拓瞪,并將它們部署到去中心化的狀態(tài)機(jī)上缴罗,而不是如何控制Medium的后端。這意味著每個(gè)想要構(gòu)建區(qū)塊鏈應(yīng)用程序的人都會(huì)在這個(gè)共享狀態(tài)機(jī)上部署他們的代碼祭埂。

前端呢?它幾乎保持不變面氓,除了一些例外,我們將在后面討論蛆橡。

這個(gè)架構(gòu)是這樣的:


image.png

更進(jìn)一步

現(xiàn)在舌界,讓我們更深入地研究一下是什么讓這成為可能。

1)區(qū)塊鏈

以太坊區(qū)塊鏈經(jīng)常被吹捧為“世界計(jì)算機(jī)”泰演。這是因?yàn)樗且粋€(gè)全局可訪問的呻拌、由點(diǎn)對(duì)點(diǎn)節(jié)點(diǎn)網(wǎng)絡(luò)維護(hù)的確定性狀態(tài)機(jī)。此狀態(tài)機(jī)上的狀態(tài)更改由網(wǎng)絡(luò)中的對(duì)等點(diǎn)遵循的共識(shí)規(guī)則進(jìn)行管理粥血。

換句話說柏锄,它被設(shè)計(jì)成世界上任何人都可以訪問和寫入的狀態(tài)機(jī)。因此复亏,這臺(tái)機(jī)器不屬于任何單一實(shí)體趾娃,而是由網(wǎng)絡(luò)中的每個(gè)人共同擁有。

還有一件事需要知道:數(shù)據(jù)只能寫入以太坊區(qū)塊鏈—您永遠(yuǎn)不能更新已經(jīng)存在的數(shù)據(jù)缔御。

2)智能合約

智能合約是一個(gè)運(yùn)行在以太坊區(qū)塊鏈上的程序抬闷,它定義了發(fā)生在區(qū)塊鏈上的狀態(tài)變化背后的邏輯。智能合約是用高級(jí)語言編寫的耕突,比如Solidity或Vyper笤成。

由于智能合約代碼存儲(chǔ)在以太坊區(qū)塊鏈上,任何人都可以檢查網(wǎng)絡(luò)上所有智能合約的應(yīng)用邏輯眷茁。

3)以太坊虛擬機(jī)(EVM)

接下來炕泳,您將擁有以太坊虛擬機(jī),它執(zhí)行智能合約中定義的邏輯上祈,并處理在這個(gè)全局可訪問狀態(tài)機(jī)上發(fā)生的狀態(tài)更改培遵。

EVM不理解Solidity和Vyper等用于編寫智能合約的高級(jí)語言浙芙。相反,您必須將高級(jí)語言編譯為字節(jié)碼籽腕,然后由EVM執(zhí)行嗡呼。

4)前端

最后是前端。正如我們前面提到的皇耗,它定義了UI邏輯南窗,但前端也與智能合約中定義的應(yīng)用程序邏輯進(jìn)行通信。

前端和智能合約之間的通信比上圖中顯示的要復(fù)雜一些郎楼。讓我們接下來仔細(xì)看看這個(gè)問題万伤。

前端代碼如何與以太坊上的智能合約通信?

我們希望我們的前端與我們的智能合約通信,這樣它們就可以調(diào)用功能箭启,但請(qǐng)記住壕翩,以太坊是一個(gè)去中心化的網(wǎng)絡(luò)。以太坊網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都在以太坊狀態(tài)機(jī)上保存所有狀態(tài)的副本傅寡,包括與每個(gè)智能合約相關(guān)的代碼和數(shù)據(jù)放妈。

當(dāng)我們希望與區(qū)塊鏈上的數(shù)據(jù)和代碼交互時(shí),我們需要與這些節(jié)點(diǎn)中的一個(gè)進(jìn)行交互荐操。這是因?yàn)槿魏喂?jié)點(diǎn)都可以廣播要在EVM上執(zhí)行的交易請(qǐng)求芜抒。然后,礦工將執(zhí)行交易托启,并將結(jié)果狀態(tài)更改廣播到網(wǎng)絡(luò)的其他部分宅倒。

有兩種方式來廣播一個(gè)新的交易:

  1. 啟動(dòng)自己的運(yùn)行以太坊區(qū)塊鏈軟件的節(jié)點(diǎn)。
  2. 使用第三方服務(wù)提供的節(jié)點(diǎn)屯耸,如Infura, Alchemy和Quicknode拐迁。

如果您使用第三方服務(wù),就不必自己處理運(yùn)行完整節(jié)點(diǎn)的所有麻煩疗绣。畢竟线召,在您自己的服務(wù)器上設(shè)置一個(gè)新的以太坊節(jié)點(diǎn)可能需要幾天時(shí)間。(有很多數(shù)據(jù)需要同步——它甚至可以占用比普通筆記本電腦更多的帶寬和存儲(chǔ)空間多矮。)

此外缓淹,存儲(chǔ)完整以太坊區(qū)塊鏈的成本隨著DApp的擴(kuò)展而增加,您需要添加更多的節(jié)點(diǎn)來擴(kuò)展您的基礎(chǔ)設(shè)施塔逃。這就是為什么當(dāng)你的基礎(chǔ)架構(gòu)變得更加復(fù)雜時(shí)讯壶,你需要全職的DevOps工程師。它們將幫助您維護(hù)基礎(chǔ)設(shè)施湾盗,以確狈茫可靠的正常運(yùn)行時(shí)間和快速的響應(yīng)時(shí)間。

也就是說格粪,為了避免這些麻煩丙挽,許多DApps選擇使用像Infura或Alchemy這樣的服務(wù)來管理它們的節(jié)點(diǎn)基礎(chǔ)設(shè)施肺孵。當(dāng)然,這是有代價(jià)的颜阐,因?yàn)檫@會(huì)創(chuàng)建一個(gè)集中的阻塞點(diǎn)。

接下來吓肋,讓我們談?wù)勌峁┱叩试埂.?dāng)您需要與區(qū)塊鏈交互時(shí)所連接的節(jié)點(diǎn)(無論您自己設(shè)置它們還是使用來自第三方服務(wù)的現(xiàn)有節(jié)點(diǎn))通常被稱為“提供者”。


image.png

每個(gè)以太坊客戶端(即提供者)都實(shí)現(xiàn)了一個(gè)JSON-RPC規(guī)范是鬼。這確保了當(dāng)前端應(yīng)用程序想要與區(qū)塊鏈交互時(shí)肤舞,有一組統(tǒng)一的方法。如果您需要了解JSON-RPC的基礎(chǔ)知識(shí)均蜜,它是一種無狀態(tài)的輕量級(jí)遠(yuǎn)程過程調(diào)用(RPC)協(xié)議李剖,它定義了幾種數(shù)據(jù)結(jié)構(gòu)及其處理規(guī)則。它與傳輸無關(guān)囤耳,因此可以在同一個(gè)進(jìn)程中篙顺、在套接字上、在HTTP上或在許多不同的消息傳遞環(huán)境中使用這些概念充择。它使用JSON (RFC 4627)作為數(shù)據(jù)格式德玫。

一旦通過提供程序連接到區(qū)塊鏈,就可以讀取存儲(chǔ)在區(qū)塊鏈上的狀態(tài)椎麦。但是宰僧,如果您想寫入狀態(tài),在將交易提交給區(qū)塊鏈之前观挎,還需要做一件事—使用您的私鑰對(duì)交易進(jìn)行“簽名”琴儿。

例如,假設(shè)我們有一個(gè)DApp嘁捷,它允許用戶向區(qū)塊鏈讀取或發(fā)布博客文章造成。在前端可能有一個(gè)按鈕,允許任何人查詢特定用戶撰寫的博客文章普气。(回想一下谜疤,從區(qū)塊鏈讀取并不需要用戶對(duì)交易進(jìn)行簽名。)

然而现诀,當(dāng)用戶想要在鏈上發(fā)布一個(gè)新的帖子時(shí)夷磕,我們的DApp會(huì)要求用戶使用他們的私鑰“簽名”該交易——只有這樣,DApp才會(huì)將該交易轉(zhuǎn)發(fā)給區(qū)塊鏈仔沿。否則坐桩,節(jié)點(diǎn)將不會(huì)接受交易。

這種交易的“簽名”是Metamask通常使用的地方封锉。


image.png

Metamask是一個(gè)工具绵跷,它使應(yīng)用程序可以輕松地處理密鑰管理和交易簽名膘螟。這非常簡單:Metamask將用戶的私鑰存儲(chǔ)在瀏覽器中,每當(dāng)前端需要用戶簽署交易時(shí)碾局,它就會(huì)調(diào)用Metamask荆残。

Metamask還提供了一個(gè)到區(qū)塊鏈的連接(作為一個(gè)“提供者”),因?yàn)樗呀?jīng)有一個(gè)到Infura提供的節(jié)點(diǎn)的連接净当,又因?yàn)樾枰鼇砗炇鸾灰啄谒埂Mㄟ^這種方式,Metamask既是提供者又是簽名者像啼。

區(qū)塊鏈上的存儲(chǔ)

當(dāng)然俘闯,如果您正在構(gòu)建一個(gè)應(yīng)用程序,其中所有的智能合約和數(shù)據(jù)都完全存在于以太坊區(qū)塊鏈上忽冻,那么這種架構(gòu)是有意義的真朗。但任何在以太坊上構(gòu)建應(yīng)用程序的人都知道,在區(qū)塊鏈上存儲(chǔ)所有東西會(huì)很快變得非常昂貴僧诚。

請(qǐng)記住遮婶,在以太坊中,用戶每次向區(qū)塊鏈添加新數(shù)據(jù)時(shí)都要付費(fèi)振诬。這是因?yàn)橄蚍植际綘顟B(tài)機(jī)添加一個(gè)狀態(tài)會(huì)增加節(jié)點(diǎn)維護(hù)該狀態(tài)機(jī)的成本蹭睡。

每次交易需要添加新狀態(tài)時(shí),要求用戶為使用DApp支付額外費(fèi)用并不是最好的用戶體驗(yàn)赶么。解決這個(gè)問題的一種方法是使用去中心化的鏈下存儲(chǔ)解決方案肩豁,如IPFS或Swarm。

IPFS是一種用于存儲(chǔ)和訪問數(shù)據(jù)的分布式文件系統(tǒng)辫呻。因此清钥,IPFS系統(tǒng)不是將數(shù)據(jù)存儲(chǔ)在中心化的數(shù)據(jù)庫中,而是將數(shù)據(jù)分布和存儲(chǔ)在對(duì)等網(wǎng)絡(luò)中放闺。這使您可以在需要時(shí)輕松地獲取它祟昭。

IPFS還有一個(gè)激勵(lì)層,稱為“Filecoin”怖侦。這一層激勵(lì)世界各地的節(jié)點(diǎn)存儲(chǔ)和檢索這些數(shù)據(jù)篡悟。您可以使用像Infura(它為您提供了一個(gè)IPFS節(jié)點(diǎn))或Pinata(它提供了一個(gè)易于使用的服務(wù),您可以將您的文件“固定”到IPFS匾寝,并獲取IPFS hash并將其存儲(chǔ)在區(qū)塊鏈上)這樣的提供商搬葬。

Swarm的相似之處在于它是一個(gè)去中心化的存儲(chǔ)網(wǎng)絡(luò),但有一個(gè)顯著的區(qū)別艳悔。雖然Filecoin是一個(gè)單獨(dú)的系統(tǒng)急凰,但Swarm的激勵(lì)系統(tǒng)是內(nèi)置的,并通過以太坊區(qū)塊鏈上的智能合約來執(zhí)行猜年,用于存儲(chǔ)和檢索數(shù)據(jù)抡锈。

所以現(xiàn)在,有了IPFS或Swarm床三,我們的應(yīng)用架構(gòu)看起來是這樣的:


image.png

精明的讀者可能還注意到在下面的圖中一罩,前端代碼沒有存儲(chǔ)在區(qū)塊鏈上撇簿。我們可以在AWS上托管這些代碼,就像我們通常在Web 2.0中所做的那樣补疑,但這為您的DApp創(chuàng)建了一個(gè)集中化的阻塞點(diǎn)。如果AWS癱瘓了怎么辦?如果它審查你的應(yīng)用呢?

這就是為什么歹撒,如果你想構(gòu)建一個(gè)真正去中心化的應(yīng)用程序,你可能會(huì)選擇在一個(gè)去中心化的存儲(chǔ)解決方案上托管你的前端暖夭,如IPFS或Swarm锹杈。

所以現(xiàn)在你的應(yīng)用程序架構(gòu)看起來更像這樣:


image.png

查詢區(qū)塊鏈上的數(shù)據(jù)

到目前為止迈着,我們已經(jīng)討論了如何通過簽署交易并將它們發(fā)送到區(qū)塊鏈來寫入?yún)^(qū)塊鏈竭望。但是從區(qū)塊鏈上的智能合約讀取數(shù)據(jù)呢?有兩種主要的方法:

1)智能合約事件
你可以使用Web3.js庫來查詢和監(jiān)聽智能合約事件裕菠。您可以監(jiān)聽特定的事件,并在每次事件觸發(fā)時(shí)指定回調(diào)奴潘。例如旧烧,如果你有一個(gè)智能合約,它在每個(gè)區(qū)塊中發(fā)送一個(gè)從A到人B的連續(xù)支付流掘剪,那么你可以在每次向B進(jìn)行新的支付時(shí)發(fā)出一個(gè)事件。你的前端代碼可以偵聽由智能合約觸發(fā)的事件奈虾,并基于它執(zhí)行特定的操作。

2)圖
上述方法是可行的肉微,但它有一些局限性匾鸥。例如,如果您部署了一個(gè)智能合約扫腺,但后來發(fā)現(xiàn)需要觸發(fā)一個(gè)最初沒有包含的事件,該怎么辦?不幸的是村象,您必須使用該事件和數(shù)據(jù)重新部署一個(gè)新的智能合約笆环。此外,使用回調(diào)來處理各種UI邏輯很快就會(huì)變得非常復(fù)雜躁劣。

這就是“圖”發(fā)揮作用的地方迫吐。

圖(Graph)是一個(gè)鏈下索引解決方案,使其更容易查詢以太坊區(qū)塊鏈上的數(shù)據(jù)账忘。圖允許您定義要索引哪些智能合約志膀,要偵聽哪些事件和函數(shù)調(diào)用,以及如何將傳入的事件轉(zhuǎn)換為前端邏輯(或使用API的任何東西)可以使用的實(shí)體鳖擒。它使用GraphQL作為查詢語言溉浙,許多前端工程師喜歡這種語言,因?yàn)榕c傳統(tǒng)REST api相比蒋荚,它的表達(dá)能力很強(qiáng)戳稽。

通過索引區(qū)塊鏈數(shù)據(jù),Graph允許我們以低延遲查詢應(yīng)用程序邏輯中的鏈上數(shù)據(jù)期升。

現(xiàn)在惊奇,你的DApp架構(gòu)看起來像這樣:

image.png

擴(kuò)展你的DApp

正如您可能已經(jīng)聽說的,以太坊無法擴(kuò)展——至少現(xiàn)在還不行播赁。

很明顯颂郎,我們有麻煩了。在以太坊上構(gòu)建DApp需要支付高額的gas費(fèi)用以及完整的區(qū)塊會(huì)導(dǎo)致非常糟糕的用戶體驗(yàn)容为。值得慶幸的是乓序,有一些解決方案正在開發(fā)中。

一個(gè)流行的擴(kuò)展解決方案是Polygon舟奠,一個(gè)L2擴(kuò)展解決方案竭缝。Polygon使用“側(cè)鏈”來處理和執(zhí)行交易,而不是在主區(qū)塊鏈上執(zhí)行交易沼瘫。側(cè)鏈?zhǔn)桥c主鏈交互的二級(jí)區(qū)塊鏈抬纸。每隔一段時(shí)間,側(cè)鏈就會(huì)向主鏈提交最近區(qū)塊的聚合耿戚。

image.png

L2解決方案的其他例子是Optimistic Rollups and zkRollups.
湿故。這里的想法是類似的:我們使用“rollup”智能合約來批量處理鏈下的事務(wù),然后定期將這些事務(wù)提交到主鏈膜蛔。

最重要的想法是:L2解決方案在鏈下執(zhí)行交易(即慢的部分)坛猪,只有交易數(shù)據(jù)存儲(chǔ)在鏈上。這使我們能夠擴(kuò)展區(qū)塊鏈皂股,因?yàn)槲覀儾槐貓?zhí)行鏈上的每個(gè)交易墅茉。這也使得交易更快、更便宜,并且在必要時(shí)他們?nèi)匀豢梢耘c主以太坊區(qū)塊鏈通信就斤。

image.png

拼湊在一起

如果所有這些都讓你頭暈?zāi)垦:纺迹悴皇且粋€(gè)人。拼湊所有這些工具是復(fù)雜的洋机,可能會(huì)導(dǎo)致痛苦的開發(fā)人員體驗(yàn)坠宴。但是別擔(dān)心——我們已經(jīng)開始看到新的開發(fā)人員框架,它們確實(shí)改善了開發(fā)人員的體驗(yàn)绷旗。

例如,Hardhat是一個(gè)開發(fā)者框架衔肢,它使以太坊開發(fā)者更容易構(gòu)建庄岖、部署和測(cè)試他們的智能合約角骤。Hardhat提供了“Hardhat Network”,開發(fā)人員可以使用它將智能合約部署到本地網(wǎng)絡(luò)上启搂,而不需要處理實(shí)時(shí)環(huán)境。更好的是胳赌,它提供了一個(gè)很棒的插件生態(tài)系統(tǒng),讓開發(fā)者的生活更加輕松匙隔。為了調(diào)試目的,Hardhat還提供了類似于javascript的console.log()功能纷责。

翻譯自:
https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市再膳,隨后出現(xiàn)的幾起案子挺勿,更是在濱河造成了極大的恐慌喂柒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾杰,死亡現(xiàn)場離奇詭異,居然都是意外死亡艳吠,警方通過查閱死者的電腦和手機(jī)麦备,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黍匾,“玉大人,你說我怎么就攤上這事鞋诗。” “怎么了削彬?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長融痛。 經(jīng)常有香客問我壶笼,道長雁刷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任沛励,我火速辦了婚禮责语,結(jié)果婚禮上目派,老公的妹妹穿的比我還像新娘。我一直安慰自己企蹭,他們只是感情好白筹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布谅摄。 她就那樣靜靜地躺著,像睡著了一般送漠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闽寡,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天棒厘,我揣著相機(jī)與錄音下隧,去河邊找鬼。 笑死淆院,一個(gè)胖子當(dāng)著我的面吹牛何乎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播支救,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼各墨!你這毒婦竟也來了指孤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤恃轩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后黎做,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒸殿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏所。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酥艳。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玖雁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盖腕,到底是詐尸還是另有隱情浓镜,我是刑警寧澤溃列,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布膛薛,位于F島的核電站,受9級(jí)特大地震影響哄啄,放射性物質(zhì)發(fā)生泄漏雅任。R本人自食惡果不足惜如输,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一腔召、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禽车,春花似錦、人聲如沸殉摔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栓撞。三九已至碗硬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肛响,已是汗流浹背岭粤。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工特笋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猎物。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓虎囚,卻偏偏與公主長得像蔫磨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堤如,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348