Hyperledger Fabric詞匯表

原文:https://hyperledgercn.github.io/hyperledgerDocs/glossary/

Terminology is important, so that all Fabric users and developers agree on what we mean by each specific term. What is chaincode, for example. So we’ll point you there, whenever you want to reassure yourself. Of course, feel free to read the entire thing in one sitting if you like, it’s pretty enlightening!

專業(yè)術(shù)語很重要跨新,所以所有”Fabric”項目用戶和開發(fā)人員同意我們所說的每個特定術(shù)語的含義穿撮,舉個例子:如什么是鏈碼冶共,因此我們將引導(dǎo)你到術(shù)語說明寂祥,讓你隨時可以消除對術(shù)語理解的疑慮,當(dāng)然衰腌,如果你愿意的話可以自由的閱讀整個文檔誉裆,非常有啟發(fā)!

Anchor Peer - 錨節(jié)點(diǎn)

A peer node on a channel that all other peers can discover and communicate with. Each Memberon a channel has an anchor peer (or multiple anchor peers to prevent single point of failure), allowing for peers belonging to different Members to discover all existing peers on a channel.

錨節(jié)點(diǎn)是通道中能被所有對等節(jié)點(diǎn)探測滩报、并能與之進(jìn)行通信的一種對等節(jié)點(diǎn)。通道中的每個成員都有一個(或多個播急,以防單點(diǎn)故障)錨節(jié)點(diǎn)脓钾,允許屬于不同成員身份的節(jié)點(diǎn)來發(fā)現(xiàn)通道中存在的其它節(jié)點(diǎn)。

Block - 區(qū)塊

An ordered set of transactions that is cryptographically linked to the preceding block(s) on a channel.

在一個通道上桩警,(區(qū)塊是)一組有序交易的集合可训。區(qū)塊往往通過密碼學(xué)手段(Hash 值)連接到前導(dǎo)區(qū)塊。

Zhu Jiang:區(qū)塊是一組有序的交易集合生真,在通道中經(jīng)過加密(哈希加密)后與前序區(qū)塊連接沉噩。

Chain - 鏈

The ledger’s chain is a transaction log structured as hash-linked blocks of transactions. Peers receive blocks of transactions from the ordering service, mark the block’s transactions as valid or invalid based on endorsement policies and concurrency violations, and append the block to the hash chain on the peer’s file system.

chain就是block之間以hash連接為結(jié)構(gòu)的交易日志。peer從order service接收交易block柱蟀,并根據(jù)背書策略和并發(fā)沖突標(biāo)記block上的交易是否有效,然后將該block追加到peer文件系統(tǒng)中的hash chain上蚜厉。

Zhu Jiang:賬本的鏈?zhǔn)且粋€交易區(qū)塊經(jīng)過“哈希連接”結(jié)構(gòu)化的交易日志长已。對等節(jié)點(diǎn)從排序服務(wù)收到交易區(qū)塊,基于背書策略和并發(fā)沖突來標(biāo)注區(qū)塊的交易為有效或者無效狀態(tài)昼牛,并且將區(qū)塊追加到對等節(jié)點(diǎn)文件系統(tǒng)的哈希鏈中术瓮。

Chaincode - 鏈碼

Chaincode is software, running on a ledger, to encode assets and the transaction instructions (business logic) for modifying the assets.

鏈碼是一個運(yùn)行在賬本上的軟件,它可以對資產(chǎn)進(jìn)行編碼贰健,其中的交易指令(或者叫業(yè)務(wù)邏輯)也可以用來修改資產(chǎn)胞四。

Channel - 通道

A channel is a private blockchain overlay on a Fabric network, allowing for data isolation and confidentiality. A channel-specific ledger is shared across the peers in the channel, and transacting parties must be properly authenticated to a channel in order to interact with it. Channels are defined by a Configuration-Block.

通道是構(gòu)建在“Fabric”網(wǎng)絡(luò)上的私有區(qū)塊鏈,實現(xiàn)了數(shù)據(jù)的隔離和保密伶椿。通道特定的賬本在通道中是與所有對等節(jié)點(diǎn)共享的辜伟,并且交易方必須通過該通道的正確驗證才能與賬本進(jìn)行交互氓侧。通道是由一個“配置塊”來定義的。

Commitment - 提交

Each Peer on a channel validates ordered blocks of transactions and then commits (writes-appends) the blocks to its replica of the channel Ledger. Peers also mark each transaction in each block as valid or invalid.

一個通道中的每個對等節(jié)點(diǎn)都會驗證交易的有序區(qū)塊导狡,然后將區(qū)塊提交(寫或追加)至該通道上賬本的各個副本约巷。對等節(jié)點(diǎn)也會標(biāo)記每個區(qū)塊中的每筆交易的狀態(tài)是有效或者無效。

Concurrency Control Version Check - 并發(fā)控制版本檢查(CCVC)

Concurrency Control Version Check is a method of keeping state in sync across peers on a channel. Peers execute transactions in parallel, and before commitment to the ledger, peers check that the data read at execution time has not changed. If the data read for the transaction has changed between execution time and commitment time, then a Concurrency Control Version Check violation has occurred, and the transaction is marked as invalid on the ledger and values are not updated in the state database.

CCVC是保持通道中各對等節(jié)點(diǎn)間狀態(tài)同步的一種方法旱捧。對等節(jié)點(diǎn)并行的執(zhí)行交易独郎,在交易提交至賬本之前,對等節(jié)點(diǎn)會檢查交易在執(zhí)行期間讀到的數(shù)據(jù)是否被修改枚赡。如果讀取的數(shù)據(jù)在執(zhí)行和提交之間被改變氓癌,就會引發(fā)CCVC沖突,該交易就會在賬本中被標(biāo)記為無效贫橙,而且值不會更新到狀態(tài)數(shù)據(jù)庫中贪婉。

Configuration Block - 配置區(qū)塊

Contains the configuration data defining members and policies for a system chain (ordering service) or channel. Any configuration modifications to a channel or overall network (e.g. a member leaving or joining) will result in a new configuration block being appended to the appropriate chain. This block will contain the contents of the genesis block, plus the delta.

包含為系統(tǒng)鏈(排序服務(wù))或通道定義成員和策略的配置數(shù)據(jù)。對某個通道或整個網(wǎng)絡(luò)的配置修改(比如料皇,成員離開或加入)都將導(dǎo)致生成一個新的配置區(qū)塊并追加到適當(dāng)?shù)逆溕衔剿伞_@個配置區(qū)塊會包含創(chuàng)始區(qū)塊的內(nèi)容加上增量。

Consensus - 共識

A broader term overarching the entire transactional flow, which serves to generate an agreement on the order and to confirm the correctness of the set of transactions constituting a block.

共識是貫穿整個交易流程的廣義術(shù)語践剂,其用于產(chǎn)生一個對于排序的同意書和確認(rèn)構(gòu)成區(qū)塊的交易集的正確性鬼譬。

Current State - 當(dāng)前狀態(tài)

The current state of the ledger represents the latest values for all keys ever included in its chain transaction log. Peers commit the latest values to ledger current state for each valid transaction included in a processed block. Since current state represents all latest key values known to the channel, it is sometimes referred to as World State. Chaincode executes transaction proposals against current state data.

ledger的current state表示其chain交易log中所有key的最新值。peer會將處理過的block中的每個交易對應(yīng)的修改value提交到ledger的current state逊脯,由于current state表示channel所知的所有最新的k-v优质,所以current state也被稱為World State。Chaincode執(zhí)行交易proposal就是針對的current state军洼。

Dynamic Membership - 動態(tài)成員

Fabric supports the addition-removal of members, peers, and ordering service nodes, without compromising the operationality of the overall network. Dynamic membership is critical when business relationships adjust and entities need to be added-removed for various reasons.

Fabric支持動態(tài)添加-移除members巩螃、peers和ordering服務(wù)節(jié)點(diǎn),而不會影響整個網(wǎng)絡(luò)的操作性匕争。當(dāng)業(yè)務(wù)關(guān)系調(diào)整或因各種原因需添加-移除實體時避乏,Dynamic Membership至關(guān)重要。

Endorsement - 背書

Refers to the process where specific peer nodes execute a transaction and return a YES-NO response to the client application that generated the transaction proposal. Chaincode applications have corresponding endorsement policies, in which the endorsing peers are specified.

Endorsement 是指一個peer執(zhí)行一個交易并返回YES-NO給生成交易proposal的client app 的過程甘桑。chaincode具有相應(yīng)的endorsement policies拍皮,其中指定了endorsing peer。

Endorsement policy - 背書策略

Defines the peer nodes on a channel that must execute transactions attached to a specific chaincode application, and the required combination of responses (endorsements). A policy could require that a transaction be endorsed by a minimum number of endorsing peers, a minimum percentage of endorsing peers, or by all endorsing peers that are assigned to a specific chaincode application. Policies can be curated based on the application and the desired level of resilience against misbehavior (deliberate or not) by the endorsing peers. A distinct endorsement policy for install and instantiate transactions is also required.

Endorsement policy定義了依賴于特定chaincode執(zhí)行交易的channel上的peer和響應(yīng)結(jié)果(endorsements)的必要組合條件(即返回Yes或No的條件)跑杭。Endorsement policy可指定對于某一chaincode铆帽,可以對交易背書的最小背書節(jié)點(diǎn)數(shù)或者最小背書節(jié)點(diǎn)百分比。背書策略由背書節(jié)點(diǎn)基于應(yīng)用程序和對抵御不良行為的期望水平來組織管理德谅。在install和instantiate Chaincode(deploy tx)時需要指定背書策略爹橱。

Fabric-ca

Fabric-ca is the default Certificate Authority component, which issues PKI-based certificates to network member organizations and their users. The CA issues one root certificate (rootCert) to each member, one enrollment certificate (eCert) to each authorized user, and a number of transaction certificates (tCerts) for each eCert.

Fabric-ca是默認(rèn)的證書管理組件,它向網(wǎng)絡(luò)成員及其用戶頒發(fā)基于PKI的證書窄做。CA為每個成員頒發(fā)一個根證書(rootCert)愧驱,為每個授權(quán)用戶頒發(fā)一個注冊證書(eCert)慰技,為每個注冊證書頒發(fā)大量交易證書(tCerts)。

Genesis Block - 初始區(qū)塊

The configuration block that initializes a blockchain network or channel, and also serves as the first block on a chain.

Genesis Block是初始化區(qū)塊鏈網(wǎng)絡(luò)或channel的配置區(qū)塊冯键,也是鏈上的第一個區(qū)塊惹盼。

Gossip Protocol - Gossip協(xié)議

The gossip data dissemination protocol performs three functions: 1) manages peer discovery and channel membership; 2) disseminates ledger data across all peers on the channel; 3) syncs ledger state across all peers on the channel. Refer to the Gossip topic for more details.

Gossip數(shù)據(jù)傳輸協(xié)議有三項功能:1)管理peer發(fā)現(xiàn)和channel成員;2)channel上的所有peer間廣播賬本數(shù)據(jù)惫确;3)channel上的所有peer間同步賬本數(shù)據(jù)手报。

Initialize - 初始化

A method to initialize a chaincode application.

一個初始化chaincode程序的方法。

Install - 安裝

The process of placing a chaincode on a peer’s file system.

將chaincode放到peer的文件系統(tǒng)的過程改化。(譯注:即將ChaincodeDeploymentSpec信息存到chaincodeInstallPath-chaincodeName.chainVersion文件中)

Instantiate - 實例化

The process of starting a chaincode container.

啟動chaincode容器的過程掩蛤。(譯注:在lccc中將ChaincodeData保存到state中,然后deploy Chaincode并執(zhí)行Init方法)

Invoke - 調(diào)用

Used to call chaincode functions. Invocations are captured as transaction proposals, which then pass through a modular flow of endorsement, ordering, validation, committal. The structure of invoke is a function and an array of arguments.

用于調(diào)用chaincode內(nèi)的函數(shù)陈肛。Chaincode invoke就是一個交易proposal揍鸟,然后執(zhí)行模塊化的流程(背書、共識句旱、 驗證阳藻、 提交)。invoke的結(jié)構(gòu)就是一個函數(shù)和一個參數(shù)數(shù)組谈撒。

Leading Peer - 主導(dǎo)節(jié)點(diǎn)

Each Member can own multiple peers on each channel that it subscribes to. One of these peers is serves as the leading peer for the channel, in order to communicate with the network ordering service on behalf of the member. The ordering service “delivers” blocks to the leading peer(s) on a channel, who then distribute them to other peers within the same member cluster.

每一個Member在其訂閱的channel上可以擁有多個peer腥泥,其中一個peer會作為channel的leading peer代表該Member與ordering service通信。ordering service將block傳遞給leading peer啃匿,該peer再將此block分發(fā)給同一member下的其他peer蛔外。

Ledger - 賬本

A ledger is a channel’s chain and current state data which is maintained by each peer on the channel.

Ledger是個channel的chain和由channel中每個peer維護(hù)的world state。(這個解釋有點(diǎn)怪)

Member - 成員

A legally separate entity that owns a unique root certificate for the network. Network components such as peer nodes and application clients will be linked to a member.

擁有網(wǎng)絡(luò)唯一根證書的合法獨(dú)立實體溯乒。像peer節(jié)點(diǎn)和app client這樣的網(wǎng)絡(luò)組件會鏈接到一個Member夹厌。

Membership Service Provider - MSP

The Membership Service Provider (MSP) refers to an abstract component of the system that provides credentials to clients, and peers for them to participate in a Hyperledger Fabric network. Clients use these credentials to authenticate their transactions, and peers use these credentials to authenticate transaction processing results (endorsements). While strongly connected to the transaction processing components of the systems, this interface aims to have membership services components defined, in such a way that alternate implementations of this can be smoothly plugged in without modifying the core of transaction processing components of the system.

MSP是指為client和peer提供證書的系統(tǒng)抽象組件。Client用證書來認(rèn)證他們的交易裆悄;peer用證書認(rèn)證其交易背書矛纹。該接口與系統(tǒng)的交易處理組件密切相關(guān),旨在使已定義的成員身份服務(wù)組件以這種方式順利插入而不會修改系統(tǒng)的交易處理組件的核心光稼。

Membership Services - 成員服務(wù)

Membership Services authenticates, authorizes, and manages identities on a permissioned blockchain network. The membership services code that runs in peers and orderers both authenticates and authorizes blockchain operations. It is a PKI-based implementation of the Membership Services Provider (MSP) abstraction.

成員服務(wù)在許可的區(qū)塊鏈網(wǎng)絡(luò)上認(rèn)證崖技、授權(quán)和管理身份。在peer和order中運(yùn)行的成員服務(wù)的代碼都會認(rèn)證和授權(quán)區(qū)塊鏈操作钟哥。它是基于PKI的MSP實現(xiàn)。

The fabric-ca component is an implementation of membership services to manage identities. In particular, it handles the issuance and revocation of enrollment certificates and transaction certificates.

fabric-ca組件實現(xiàn)了成員服務(wù)瞎访,來管理身份腻贰。特別的,它處理ECert和TCert的頒發(fā)和撤銷扒秸。

An enrollment certificate is a long-term identity credential; a transaction certificate is a short-term identity credential which is both anonymous and un-linkable.

ECert是長期的身份憑證播演;TCert是短期的身份憑證冀瓦,是匿名和不可鏈接的。

Ordering Service - 排序服務(wù)或共識服務(wù)

A defined collective of nodes that orders transactions into a block. The ordering service exists independent of the peer processes and orders transactions on a first-come-first-serve basis for all channel’s on the network. The ordering service is designed to support pluggable implementations beyond the out-of-the-box SOLO and Kafka varieties. The ordering service is a common binding for the overall network; it contains the cryptographic identity material tied to each Member.

將交易排序放入block的節(jié)點(diǎn)的集合写烤。ordering service獨(dú)立于peer流程之外翼闽,并以先到先得的方式為網(wǎng)絡(luò)上所有的channel作交易排序。ordering service支持可插拔實現(xiàn)洲炊,目前默認(rèn)實現(xiàn)了SOLO和Kafka感局。ordering service是整個網(wǎng)絡(luò)的公用binding,包含與每個Member相關(guān)的加密材料暂衡。

Peer - 節(jié)點(diǎn)

A network entity that maintains a ledger and runs chaincode containers in order to perform read-write operations to the ledger. Peers are owned and maintained by members.

一個網(wǎng)絡(luò)實體询微,維護(hù)ledger并運(yùn)行Chaincode容器來對ledger執(zhí)行read-write操作。peer由Member擁有和維護(hù)狂巢。

Policy - 策略

There are policies for endorsement, validation, block committal, chaincode management and network-channel management.

有背書策略撑毛,校驗策略,區(qū)塊提交策略唧领,Chaincode管理策略和網(wǎng)絡(luò)-通道管理策略藻雌。

Proposal - 提案

A request for endorsement that is aimed at specific peers on a channel. Each proposal is either an instantiate or an invoke (read-write) request.

一種針對channel中某peer的背書請求。每個proposal要么是Chaincode instantiate要么是Chaincode invoke斩个。

Query - 查詢

A query requests the value of a key(s) against the current state.

對于current state中某個key的value的查詢請求胯杭。

Software Development Kit - SDK

The Hyperledger Fabric client SDK provides a structured environment of libraries for developers to write and test chaincode applications. The SDK is fully configurable and extensible through a standard interface. Components, including cryptographic algorithms for signatures, logging frameworks and state stores, are easily swapped in and out of the SDK. The SDK API uses protocol buffers over gRPC for transaction processing, membership services, node traversal and event handling applications to communicate across the fabric. The SDK comes in multiple flavors - Node.js, Java. and Python.

SDK為開發(fā)人員提供了一個結(jié)構(gòu)化的庫環(huán)境,用于編寫和測試鏈碼應(yīng)用程序萨驶。SDK完全可以通過標(biāo)準(zhǔn)接口實現(xiàn)配置和擴(kuò)展歉摧,像簽名的加密算法、日志框架和state存儲這樣的組件都可以輕松地實現(xiàn)替換腔呜。SDK API使用gRPC進(jìn)行交易處理叁温,成員服務(wù)、節(jié)點(diǎn)遍歷以及事件處理都是據(jù)此與fabric通信核畴。目前SDK支持Node.js膝但、Java和Python。

State Database - stateDB

Current state data is stored in a state database for efficient reads and queries from chaincode. These databases include levelDB and couchDB.

為了從Chaincode中高效的讀寫谤草,Current state 數(shù)據(jù)存儲在stateDB中跟束,包括levelDB和couchDB。

System Chain - 系統(tǒng)鏈

Contains a configuration block defining the network at a system level. The system chain lives within the ordering service, and similar to a channel, has an initial configuration containing information such as: MSP information, policies, and configuration details. Any change to the overall network (e.g. a new org joining or a new ordering node being added) will result in a new configuration block being added to the system chain.

包含在系統(tǒng)級定義網(wǎng)絡(luò)的配置區(qū)塊丑孩。系統(tǒng)鏈存在于ordering service中冀宴,與channel類似,具有包含以下信息的初始配置:MSP信息温学、策略和信息配置略贮。對整個網(wǎng)絡(luò)的任何變化(例如新的Org加入或者添加新的Ordering節(jié)點(diǎn))將導(dǎo)致新的配置區(qū)塊被添加到系統(tǒng)鏈。

The system chain can be thought of as the common binding for a channel or group of channels. For instance, a collection of financial institutions may form a consortium (represented through the system chain), and then proceed to create channels relative to their aligned and varying business agendas.

系統(tǒng)鏈可看做是一個channel或一組channel的公用binding。例如逃延,金融機(jī)構(gòu)的集合可以形成一個財團(tuán)(以system chain表示)览妖,然后根據(jù)其相同或不同的業(yè)務(wù)創(chuàng)建channel。

Transaction - 交易

An invoke or instantiate operation. Invokes are requests to read-write data from the ledger. Instantiate is a request to start a chaincode container on a peer.

Chaincode的invoke或instantiate操作揽祥。Invoke是從ledger中請求read-write set讽膏;Instantiate是請求在peer上啟動Chaincode容器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拄丰,一起剝皮案震驚了整個濱河市府树,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愈案,老刑警劉巖挺尾,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異站绪,居然都是意外死亡遭铺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門恢准,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂挂,“玉大人,你說我怎么就攤上這事馁筐⊥空伲” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵敏沉,是天一觀的道長果正。 經(jīng)常有香客問我,道長盟迟,這世上最難降的妖魔是什么秋泳? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮攒菠,結(jié)果婚禮上迫皱,老公的妹妹穿的比我還像新娘。我一直安慰自己辖众,他們只是感情好卓起,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凹炸,像睡著了一般戏阅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啤它,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天饲握,我揣著相機(jī)與錄音私杜,去河邊找鬼。 笑死救欧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锣光。 我是一名探鬼主播笆怠,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼誊爹!你這毒婦竟也來了蹬刷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤频丘,失蹤者是張志新(化名)和其女友劉穎办成,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搂漠,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迂卢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了桐汤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片而克。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怔毛,靈堂內(nèi)的尸體忽然破棺而出员萍,到底是詐尸還是另有隱情,我是刑警寧澤拣度,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布碎绎,位于F島的核電站,受9級特大地震影響抗果,放射性物質(zhì)發(fā)生泄漏筋帖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一窖张、第九天 我趴在偏房一處隱蔽的房頂上張望幕随。 院中可真熱鬧,春花似錦宿接、人聲如沸赘淮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梢卸。三九已至,卻和暖如春副女,著一層夾襖步出監(jiān)牢的瞬間蛤高,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戴陡,地道東北人塞绿。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像恤批,于是被迫代替她去往敵國和親异吻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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