亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

以太坊基礎(chǔ)概念詳解

pingink / 1934人閱讀

摘要:主要講解以太坊中的一些基本元素,如區(qū)塊賬戶(hù)狀態(tài)交易費(fèi)用等。所以它表示的是整個(gè)以太坊系統(tǒng)所有賬戶(hù)當(dāng)前的狀態(tài)。賬戶(hù)以太坊中有兩種賬戶(hù)外部擁有賬戶(hù),一般指自然人擁有的賬戶(hù)。總結(jié)以上就是以太坊里的一些基礎(chǔ)元素,沒(méi)有講到復(fù)雜的交易執(zhí)行等,后續(xù)再寫(xiě)。

本文不講區(qū)塊鏈,也就意味著你有一些區(qū)塊鏈的基本認(rèn)知。
主要講解以太坊中的一些基本元素,如:區(qū)塊、賬戶(hù)、狀態(tài)、交易、費(fèi)用等。因這些概念之間相互緊密聯(lián)系,雖描述的時(shí)候盡量分出層級(jí),但提醒看官看得時(shí)候可以前后翻閱。

對(duì)以太坊的解剖按從整體到局部的思路進(jìn)行:

1、以太坊

以太坊可以用幾句話(huà)道出其本質(zhì):

以太坊是一個(gè)基于交易的狀態(tài)機(jī)。

全球就這一臺(tái)單機(jī)(但分布存在),【系統(tǒng)狀態(tài)】不停的改變。系統(tǒng)狀態(tài)是一個(gè)術(shù)語(yǔ),即后面講到的world state。

這臺(tái)單機(jī)主要由區(qū)塊鏈組成,區(qū)塊鏈上保存著狀態(tài)和交易。

當(dāng)我們與以太坊交互時(shí),其實(shí)就是在執(zhí)行交易、改變系統(tǒng)狀態(tài)。

用一個(gè)簡(jiǎn)潔優(yōu)美的公式表示就是:

σ′ =Υ(σ,T)

Υ是狀態(tài)轉(zhuǎn)換函數(shù),T是交易,σ是狀態(tài),σ′轉(zhuǎn)換后的狀態(tài)。

借用一張圖吧

從創(chuàng)世區(qū)塊開(kāi)始,無(wú)盡的交易不斷的刷新著系統(tǒng)當(dāng)前狀態(tài),每產(chǎn)生一個(gè)區(qū)塊就對(duì)當(dāng)前狀態(tài)做一次快照(patricia trie根)存入?yún)^(qū)塊頭中。

patricia trie是merkle tree的變體,請(qǐng)自行了解merkle tree。
2、區(qū)塊結(jié)構(gòu)

再看一個(gè)公式

B≡ (BH,BT,BU)

意思是區(qū)塊恒等于(區(qū)塊頭,交易列表,叔塊)

所以,區(qū)塊是由三大部分組成:
區(qū)塊頭,叔塊,交易列表。請(qǐng)看圖:

1)區(qū)塊頭由15個(gè)字段組成。
2)叔塊其實(shí)就是孤塊,因以太坊出塊速度很快平均十幾秒就會(huì)打包生成一個(gè)塊,所以礦工挖礦的競(jìng)爭(zhēng)性很高,可能同時(shí)產(chǎn)出幾個(gè)都合法的區(qū)塊,以太坊為了一些安全性起見(jiàn),允許競(jìng)爭(zhēng)塊也掛在到主鏈上,同時(shí)給與挖出這些孤塊的礦工們少許獎(jiǎng)勵(lì)增加工作的公平性。這些孤塊最多允許6個(gè)高度,這也是6個(gè)區(qū)塊確認(rèn)主鏈說(shuō)法的來(lái)源。
3)交易列表,存儲(chǔ)的是本區(qū)塊中所有的交易內(nèi)容。

圖中的公式后面說(shuō)。

看一下一個(gè)實(shí)際的區(qū)塊信息:

"blocks" : [
            {
                "blockHeader" : {
                    "bloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                    "coinbase" : "0x3535353535353535353535353535353535353535",
                    "difficulty" : "0x020000",
                    "extraData" : "",
                    "gasLimit" : "0x05f5e100",
                    "gasUsed" : "0x014fa1",
                    "hash" : "0x39f4659b079e257df8fd7e699528531e97a6b8a442ca0d11200c4a2f7433c483",
                    "mixHash" : "0x7379f33af4ae2db7e293f808a165135d0b1a99572cc96fb9f7d17ef64a751969",
                    "nonce" : "0x8e08d7aabeee8773",
                    "number" : "0x01",
                    "parentHash" : "0xadbef3bf0b3b7b14f6e7b1a45d240ecc863543a279a86c23f60170e8e7a6bcc3",
                    "receiptTrie" : "0xb21660268480338c0cd0613358315359b619bd527d5850949c4863cddaec316b",
                    "stateRoot" : "0xde4ce9b5b2f88ab1680962c64281224b1743bdf94bd6a9e390ea779ff616c1f7",
                    "timestamp" : "0x03e8",
                    "transactionsTrie" : "0x56445ba866f3e41851154fb8700dcec8556a178f1833021e030b8a47b494769d",
                    "uncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
                },
                "rlp" : "0xf90308f901f9a0adbef3bf0b3b7b14f6e7b1a45d240ecc863543a279a86c23f60170e8e7a6bcc3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347943535353535353535353535353535353535353535a0de4ce9b5b2f88ab1680962c64281224b1743bdf94bd6a9e390ea779ff616c1f7a056445ba866f3e41851154fb8700dcec8556a178f1833021e030b8a47b494769da0b21660268480338c0cd0613358315359b619bd527d5850949c4863cddaec316bb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f5e10083014fa18203e880a07379f33af4ae2db7e293f808a165135d0b1a99572cc96fb9f7d17ef64a751969888e08d7aabeee8773f90108f90105460183030d4094c305c901078781c232a2a521c2af7980f8385ee980b8a430c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000001ba021a28cc82b40931239f8653ffa5300e1a506c0ef7fb79a663772cafe6558ab44a075af23441f7f176a2770af41142c77b671391209b15d59144e7a1332179b5e14c0",
                "transactions" : [
                    {
                        "data" : "0x30c8d1da000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000230644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000",
                        "gasLimit" : "0x030d40",
                        "gasPrice" : "0x01",
                        "nonce" : "0x46",
                        "r" : "0x21a28cc82b40931239f8653ffa5300e1a506c0ef7fb79a663772cafe6558ab44",
                        "s" : "0x75af23441f7f176a2770af41142c77b671391209b15d59144e7a1332179b5e14",
                        "to" : "0xc305c901078781c232a2a521c2af7980f8385ee9",
                        "v" : "0x1b",
                        "value" : "0x00"
                    }
                ],
                "uncleHeaders" : [
                ]
            }
        ]
3、區(qū)塊頭

區(qū)塊頭包含15個(gè)字段,介紹如下:

type Header struct {
        ParentHash  common.Hash    //Hp,上一區(qū)塊全部?jī)?nèi)容的hash,區(qū)塊因它而成鏈!
        UncleHash   common.Hash    //Ho,本區(qū)塊的ommers(所有叔塊)列表的hash
        Coinbase    common.Address //Hc,成功挖出本區(qū)塊的礦工地址,用于接收礦工費(fèi)
        Root        common.Hash    //Hr,本區(qū)塊所有交易的狀態(tài)tree的根hash
        TxHash      common.Hash    //Ht,本區(qū)塊所有交易tree的根hash
        ReceiptHash common.Hash    //He,本區(qū)塊所有交易的收據(jù)的tree的根hash
        Bloom       Bloom          //Hb,交易收據(jù)日志組成的Bloom過(guò)濾器 
        Difficulty  *big.Int       //Hd,本區(qū)塊難度級(jí)別
        Number      *big.Int       //Hi,區(qū)塊序號(hào),從創(chuàng)世塊0遞增
        GasLimit    uint64         //Hl,每個(gè)區(qū)塊當(dāng)前的gas limit
        GasUsed     uint64         //Hg,本區(qū)塊交易消耗的總gas
        Time        *big.Int       //Hs,本區(qū)塊創(chuàng)建時(shí)的Unix時(shí)間戳
        Extra       []byte         //Hx,區(qū)塊附加數(shù)據(jù),<=32字節(jié)
        MixDigest   common.Hash    //Hm,256位的hash,與nonce組合證明出塊執(zhí)行了足夠的計(jì)算
        Nonce       BlockNonce     //Hn,64位的hash,與MixDigest組合證明出塊執(zhí)行了足夠的計(jì)算
}

首先,ParentHash是上一個(gè)區(qū)塊全部?jī)?nèi)容的hash值,下一個(gè)區(qū)塊總是包含上一個(gè)區(qū)塊全部?jī)?nèi)容的hash值,這就使得區(qū)塊成鏈。

再次,有三個(gè)特別的字段保存的是patricia trie的根,Root(狀態(tài)hash)、TxHash(交易列表hash)、ReceiptHash(收據(jù)列表hash)。這個(gè)Root就是系統(tǒng)狀態(tài)hash。系統(tǒng)狀態(tài)就是以太坊整個(gè)網(wǎng)絡(luò)中所有賬戶(hù)的狀態(tài),就是world state,它是一個(gè)merkle patricia trie結(jié)構(gòu)。這個(gè)樹(shù)(包括所有patricia trie)并不存在于區(qū)塊,而存在于節(jié)點(diǎn)的levelDB中。只有它的根hash存在于區(qū)塊頭Root中,每一個(gè)區(qū)塊頭里的Root都是區(qū)塊被挖出確認(rèn)時(shí)的快照,而world state指現(xiàn)在所有賬戶(hù)的狀態(tài)。

world state是跨塊存在的,另外兩棵樹(shù)只存儲(chǔ)本區(qū)塊的交易和收據(jù)。

4、world state

再說(shuō)一下world state:
world state是一顆全局狀態(tài)樹(shù),在以太坊里只有一個(gè),它被持續(xù)地更新。
這棵樹(shù)包含了以太坊網(wǎng)絡(luò)里每一個(gè)賬戶(hù)的key/value映射。
所以它表示的是整個(gè)以太坊系統(tǒng)所有賬戶(hù)當(dāng)前的狀態(tài)。

其折疊函數(shù)是:

LS(σ) ≡ {p(a) : σ[a]≠ ?}

意味著非空p(a)的集合,p(a)就是patrcia 葉子節(jié)點(diǎn)的內(nèi)容:

p(a) ≡  (KEC(a), RLP((σ[a]n, σ[a]b, σ[a]s, σ[a]c)))

這表示一個(gè)葉子節(jié)點(diǎn)是一個(gè)key/value映射,key是KEC(a)即160位的賬戶(hù)地址的哈希(Keccak-256算法),value是賬戶(hù)(nonce、balance、storageRoot、codeHash)的RLP格式序列化字節(jié)。

5、賬戶(hù)

以太坊中有兩種賬戶(hù)
1、外部擁有賬戶(hù)(EOA),一般指自然人擁有的賬戶(hù)。
2、合約賬戶(hù)(CA),為智能合約分配的賬戶(hù)。

看一下賬戶(hù)的源碼定義:

type Account struct {
    Nonce    uint64      // σ[a]n ,若為EOA是發(fā)送的交易序號(hào),如為CA是合約創(chuàng)建的序號(hào)。
    Balance  *big.Int    // σ[a]b ,這個(gè)地址的余額。
     //merkle root of the storage trie
    Root     common.Hash // σ[a]s ,賬戶(hù)自身內(nèi)容RPL編碼組成的Merkle Trie的根哈希
    CodeHash []byte      // σ[a]c ,賬戶(hù)綁定的EVM Code,賬戶(hù)一經(jīng)創(chuàng)建不可修改。
}

EOA特征
codeHash為空
storageRoot為空
通過(guò)私鑰控制
發(fā)起交易(轉(zhuǎn)移以太幣或觸發(fā)合約代碼)

CA特征
不能發(fā)起交易,可以被觸發(fā)執(zhí)行合約代碼(通過(guò)EOA發(fā)起的交易或者從其他CA接收的消息調(diào)用激活)

怎么判斷一個(gè)賬戶(hù)是空賬戶(hù)?

EMPTY(σ,a)≡ σ[a]c =KEC(()) ∧ σ[a]n =0 ∧ σ[a]b =0

從公式看,一個(gè)賬戶(hù)的Root為空且nonce為0且余額為0,則說(shuō)明這是一個(gè)空賬戶(hù)。

6、交易

再回顧一個(gè)公式

σ′ =Υ(σ,T)

以太坊是一個(gè)基于交易的狀態(tài)機(jī)。
任意兩個(gè)賬戶(hù)之間的交易都會(huì)引起world state的改變。
兩個(gè)相鄰區(qū)塊之間的狀態(tài)差別很小,patricia trie這種數(shù)據(jù)結(jié)構(gòu)能高效的處理整個(gè)系統(tǒng)賬戶(hù)變化的部分。

交易基本定義:【從外部擁有賬戶(hù)】發(fā)送的加密簽名序列化指令。換句話(huà)說(shuō)交易必須是從EOA發(fā)起的才能叫交易,CA之間的通信叫消息也有叫內(nèi)部交易的,現(xiàn)在是有區(qū)別,以后這個(gè)區(qū)別會(huì)不會(huì)模糊化不知道。

交易類(lèi)型有兩種:
1、消息調(diào)用(Td
2、合約創(chuàng)建(Ti

從EOA到EOA的交易僅是轉(zhuǎn)賬。
EOA到CA可以激活各種操作。

看交易的源碼定義:

type txdata struct {
    AccountNonce uint64          //Tn
    Price        *big.Int        //Tp
    GasLimit     uint64          //Tg
    Recipient    *common.Address //Tt
    Amount       *big.Int        //Tv
    Payload      []byte          //Td || Ti 
    V *big.Int
    R *big.Int
    S *big.Int
    // This is only used when marshaling to JSON.
    Hash *common.Hash
}

Tn必須等于發(fā)起交易的賬戶(hù)的nonce(翻閱前面說(shuō)法可知,賬戶(hù)nonce是該賬戶(hù)發(fā)起的第幾筆交易的序號(hào),如果是創(chuàng)建合約則代表第幾次創(chuàng)建合約的序號(hào))
Tp是這筆交易消耗的gas單價(jià)
Tg是你愿意為這筆交易最多可以支付的上限
Tt是接收賬戶(hù)的地址,如果為空說(shuō)明接受賬戶(hù)是一個(gè)CA,否則是EOA
Tv是到接收者的額度
Td或Ti,如果交易類(lèi)型是消息調(diào)用則Palload寫(xiě)為T(mén)d,表示輸入數(shù)據(jù),例如消息的參數(shù),假設(shè)有一個(gè)注冊(cè)域名的合約服務(wù),則Td就是該服務(wù)需要的參數(shù)如IP等。如果交易類(lèi)型是創(chuàng)建合約,則Payload寫(xiě)為T(mén)i,表示一段代碼,這段代碼用于創(chuàng)建合約賬戶(hù),這段初始化代碼只會(huì)被執(zhí)行一次就丟棄掉,第二次執(zhí)行的是創(chuàng)建完的合約代碼體。

交易的公式:

可以看到當(dāng)接收賬戶(hù)不同時(shí),區(qū)別僅僅是Td和Ti的區(qū)別。

另外,一個(gè)區(qū)塊里交易的順序由裝配這個(gè)區(qū)塊的礦工決定。

7、費(fèi)用

以太坊網(wǎng)絡(luò)里任何計(jì)算都要支付gas(燃料),
思考為什么不直接用eth做費(fèi)用?
答案是用兩個(gè)概念gas和eth區(qū)別價(jià)值和價(jià)格,gas是一種固定衡量的價(jià)值,而eth是市場(chǎng)上快速變化的價(jià)格,很多EVM(以太坊虛擬機(jī))的操作指令都需要消耗固定的費(fèi)用就用gas來(lái)計(jì)價(jià),gas的最小單位是wei,1eth = 1018wei = 109gwei。所以eth和gas之間是有匯率的。

GasPrice:燃料單價(jià)
GasLimit:愿意支付的燃料上限

GasLimit × GasPrice = 愿意支付的最大費(fèi)用
10000 × 100gwei = 1015wei = 0.001eth

這圖要說(shuō)明的是:
一筆交易中,你設(shè)置的最大費(fèi)用如果沒(méi)有消耗完,多出的會(huì)返回給你。如果最大費(fèi)用不夠計(jì)算的花費(fèi),那么交易會(huì)終止、已改變的狀態(tài)會(huì)回滾、但是錢(qián)被消耗不會(huì)退回了。這些已消耗的費(fèi)用都獎(jiǎng)勵(lì)給礦工了。

計(jì)算都是有費(fèi)用的,初次之外還有一些東西需要繳費(fèi):

費(fèi)用的三種不同構(gòu)成:
1)計(jì)算操作的固定費(fèi)用
2)交易(合約創(chuàng)建或消息調(diào)用)費(fèi)用
3)存儲(chǔ)(內(nèi)存、存儲(chǔ)賬戶(hù)合約數(shù)據(jù))費(fèi)用

著重說(shuō)一下存儲(chǔ)費(fèi)用:
存儲(chǔ)收費(fèi)是因?yàn)榧偃缒愕暮霞s使得狀態(tài)數(shù)據(jù)庫(kù)存儲(chǔ)增大,所有節(jié)點(diǎn)都會(huì)增加存儲(chǔ)。
以太幣是鼓勵(lì)盡量保持少量存儲(chǔ)的。
但是如果有操作是清除一個(gè)存儲(chǔ)條目,這個(gè)操作的費(fèi)用不但會(huì)被免除,而且由于釋放空間還會(huì)獲得退款。

總結(jié)

以上就是以太坊里的一些基礎(chǔ)元素,沒(méi)有講到復(fù)雜的交易執(zhí)行、EVM等,后續(xù)再寫(xiě)。

下面是一個(gè)區(qū)塊鏈小程序,供大家參考:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/24001.html

相關(guān)文章

  • Java開(kāi)發(fā)區(qū)塊鏈的三大sdk庫(kù)

    摘要:是企業(yè)與區(qū)塊鏈相遇的地方。的框架旨在成為開(kāi)發(fā)區(qū)塊鏈解決方案的支柱。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。 如果你想將區(qū)塊鏈合并到一個(gè)Java項(xiàng)目中,現(xiàn)在我們來(lái)看看就是這個(gè)細(xì)分領(lǐng)域中三個(gè)最大的OSS玩家。 好的伙計(jì)們,我們都聽(tīng)說(shuō)過(guò)比特幣,以太坊或其他加密貨幣,其中有一些時(shí)髦的名字圍繞著我們常見(jiàn)的新聞,但我們作為Java開(kāi)發(fā)人員知道如何輕松地與這些區(qū)塊鏈技術(shù)進(jìn)行交互嗎?以...

    iKcamp 評(píng)論0 收藏0
  • 區(qū)塊鏈開(kāi)發(fā)中使用的最流行的編程語(yǔ)言

    摘要:我們目前正處于一個(gè)新興的區(qū)塊鏈開(kāi)發(fā)行業(yè)中。,一種在以太坊開(kāi)發(fā)人員中流行的新的簡(jiǎn)單編程語(yǔ)言,因?yàn)樗怯糜陂_(kāi)發(fā)以太坊智能合約的語(yǔ)言。它是全球至少萬(wàn)開(kāi)發(fā)人員使用的世界上最流行的編程語(yǔ)言之一。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。 我們目前正處于一個(gè)新興的區(qū)塊鏈開(kāi)發(fā)行業(yè)中。區(qū)塊鏈技術(shù)處于初期階段,然而這種顛覆性技術(shù)已經(jīng)成功地風(fēng)靡全球,并且最近經(jīng)歷了一場(chǎng)與眾不同的繁榮。由于許多...

    2shou 評(píng)論0 收藏0
  • 以太將成為新互聯(lián)網(wǎng)的支柱

    摘要:以太坊將成為新互聯(lián)網(wǎng)的支柱,我為什么這么說(shuō)正在以太坊上構(gòu)建我們的第層,而不是其他區(qū)塊鏈平臺(tái)這就是原因。以太坊不會(huì)犧牲去中心化的原則而下沉權(quán)力在區(qū)塊鏈方面,有一項(xiàng)稱(chēng)為可擴(kuò)展性三難的基本法則。 以太坊將成為新互聯(lián)網(wǎng)的支柱,我為什么這么說(shuō)?Loom Network正在以太坊上構(gòu)建我們的第2層,而不是其他區(qū)塊鏈平臺(tái)——這就是原因。 每個(gè)月都有其他的公司發(fā)布白皮書(shū),聲稱(chēng)已經(jīng)解決了以太坊所面臨的可...

    liuhh 評(píng)論0 收藏0
  • solidity語(yǔ)言開(kāi)發(fā)智能合約中的繼承

    摘要:你首先編寫(xiě)基本智能合約并告知你的新智能合約將從基礎(chǔ)合約繼承。這些函數(shù)和狀態(tài)變量只能在內(nèi)部訪問(wèn)即從當(dāng)前合約或從中派生的合約中,而其他情況不使用它。私有函數(shù)和狀態(tài)變量?jī)H對(duì)定義它們的智能合約可見(jiàn),而不是在派生合約中可見(jiàn)。這里是原文語(yǔ)言開(kāi)發(fā)中的繼承 我們已經(jīng)探索了很多主題,在編寫(xiě)智能合約時(shí)我們發(fā)現(xiàn)經(jīng)常使用相同的模式:例如,智能合約具有在構(gòu)造函數(shù)中設(shè)置的所有者,然后生成修改器以便僅讓所有者使用一...

    lifesimple 評(píng)論0 收藏0
  • 如何理解比特幣和區(qū)塊鏈?

    摘要:比特幣區(qū)塊鏈無(wú)疑是當(dāng)今業(yè)界的最熱門(mén)的。目前,每個(gè)成功的礦工獲得可能每年更換一次或通過(guò)比特幣社區(qū)決策作為成功向區(qū)塊鏈添加一塊交易的獎(jiǎng)勵(lì)。填寫(xiě)其他詳細(xì)信息,例如比特幣金額和可選說(shuō)明。 比特幣區(qū)塊鏈無(wú)疑是當(dāng)今業(yè)界的最熱門(mén)的。通過(guò)這篇博客,我將盡力向大家介紹加密貨幣比特幣的概念,以及它如何創(chuàng)造我們稱(chēng)之為區(qū)塊鏈的革命性技術(shù)。 這個(gè)問(wèn)題經(jīng)常引起混淆。這篇文章可以快速解釋和清理這方面的混亂! 什么是...

    Kosmos 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<