成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)

Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)

熱門標簽:鄭州亮點科技用的什么外呼系統(tǒng) 汕頭小型外呼系統(tǒng) 阿里云ai電話機器人 惠州電銷防封電話卡 濱州自動電銷機器人排名 浙江高頻外呼系統(tǒng)多少錢一個月 建造者2地圖標注 黃岡人工智能電銷機器人哪個好 釘釘有地圖標注功能嗎

區(qū)塊鏈開發(fā)用什么語言?通過本文你將使用Go語言開發(fā)自己的區(qū)塊鏈(或者說用go語言搭建區(qū)塊鏈)、理解哈希函數(shù)是如何保持區(qū)塊鏈的完整性、掌握如何用Go語言編程創(chuàng)造并添加新的塊、實現(xiàn)多個節(jié)點通過競爭生成塊、通過瀏覽器來查看整個鏈、了解所有其他關(guān)于區(qū)塊鏈的基礎(chǔ)知識。

但是,文章中將不會涉及工作量證明算法(PoW)以及權(quán)益證明算法(PoS)這類的共識算法,同時為了讓你更清楚得查看區(qū)塊鏈以及塊的添加,我們將網(wǎng)絡(luò)交互的過程簡化了,關(guān)于 P2P 網(wǎng)絡(luò)比如“全網(wǎng)廣播”這個過程等內(nèi)容將在后續(xù)文章中補上。

開發(fā)環(huán)境

我們假設(shè)你已經(jīng)具備一點 Go 語言的開發(fā)經(jīng)驗。在安裝和配置 Go 開發(fā)環(huán)境后之后,我們還要獲取以下一些依賴:

~$ go get github.com/davecgh/go-spew/spew

spew可以幫助我們在終端中中直接查看 struct 和 slice 這兩種數(shù)據(jù)結(jié)構(gòu)。

~$ go get github.com/gorilla/mux

Gorilla 的 mux 包非常流行, 我們用它來寫 web handler。

~$ go get github.com/joho/godotenv

godotenv可以幫助我們讀取項目根目錄中的.env 配置文件,這樣就不用將 http端口之類的配置硬編碼進代碼中了。比如像這樣:

ADDR=8080

接下來,我們創(chuàng)建一個 main.go 文件。之后的大部分工作都圍繞這個文件,開始寫代碼吧!

導(dǎo)入依賴包

我們將所有的依賴包以聲明的方式導(dǎo)入進去:

package main
import (
 "crypto/sha256"
 "encoding/hex"
 "encoding/json"
 "io"
 "log"
 "net/http"
 "os"
 "time"

 "github.com/davecgh/go-spew/spew"
 "github.com/gorilla/mux"
 "github.com/joho/godotenv"
)

數(shù)據(jù)模型

接著我們來定義一個結(jié)構(gòu)體,它代表組成區(qū)塊鏈的每一個塊的數(shù)據(jù)模型:

type Block struct {
 Index  int
 Timestamp string
 BPM  int
 Hash  string
 PrevHash string
}

Index 是這個塊在整個鏈中的位置
Timestamp 顯而易見就是塊生成時的時間戳
Hash 是這個塊通過 SHA256 算法生成的散列值
PrevHash 代表前一個塊的 SHA256 散列值
BPM 每分鐘心跳數(shù),也就是心率
接著,我們再定義一個結(jié)構(gòu)表示整個鏈,最簡單的表示形式就是一個 Block 的 slice:

var Blockchain []Block

我們使用散列算法(SHA256)來確定和維護鏈中塊和塊正確的順序,確保每一個塊的 PrevHash 值等于前一個塊中的 Hash 值,這樣就以正確的塊順序構(gòu)建出鏈:

散列和生成新塊

我們?yōu)槭裁葱枰⒘校恐饕莾蓚€原因:

  • 在節(jié)省空間的前提下去唯一標識數(shù)據(jù)。散列是用整個塊的數(shù)據(jù)計算得出,在我們的例子中,將整個塊的數(shù)據(jù)通過 SHA256 計算成一個定長不可偽造的字符串。
  • 維持鏈的完整性。通過存儲前一個塊的散列值,我們就能夠確保每個塊在鏈中的正確順序。任何對數(shù)據(jù)的篡改都將改變散列值,同時也就破壞了鏈。以我們從事的醫(yī)療健康領(lǐng)域為例,比如有一個惡意的第三方為了調(diào)整“人壽險”的價格,而修改了一個或若干個塊中的代表不健康的 BPM 值,那么整個鏈都變得不可信了。

我們接著寫一個函數(shù),用來計算給定的數(shù)據(jù)的 SHA256 散列值:

func calculateHash(block Block) string {
 record := string(block.Index) + block.Timestamp + string(block.BPM) + block.PrevHash
 h := sha256.New()
 h.Write([]byte(record))
 hashed := h.Sum(nil)
 return hex.EncodeToString(hashed)
}

這個 calculateHash 函數(shù)接受一個塊,通過塊中的 Index,Timestamp,BPM,以及 PrevHash 值來計算出 SHA256 散列值。接下來我們就能編寫一個生成塊的函數(shù):

func generateBlock(oldBlock Block, BPM int) (Block, error) {
 var newBlock Block
 t := time.Now()
 newBlock.Index = oldBlock.Index + 1
 newBlock.Timestamp = t.String()
 newBlock.BPM = BPM
 newBlock.PrevHash = oldBlock.Hash
 newBlock.Hash = calculateHash(newBlock)
 return newBlock, nil
}

其中,Index 是從給定的前一塊的 Index 遞增得出,時間戳是直接通過 time.Now() 函數(shù)來獲得的,Hash 值通過前面的 calculateHash 函數(shù)計算得出,PrevHash 則是給定的前一個塊的 Hash 值。

校驗塊

搞定了塊的生成,接下來我們需要有函數(shù)幫我們判斷一個塊是否有被篡改。檢查 Index 來看這個塊是否正確得遞增,檢查 PrevHash 與前一個塊的 Hash 是否一致,再來通過 calculateHash 檢查當前塊的 Hash 值是否正確。通過這幾步我們就能寫出一個校驗函數(shù):

func isBlockValid(newBlock, oldBlock Block) bool {
 if oldBlock.Index+1 != newBlock.Index {
  return false
 }
 if oldBlock.Hash != newBlock.PrevHash {
  return false
 }
 if calculateHash(newBlock) != newBlock.Hash {
  return false
 }
 return true
}

除了校驗塊以外,我們還會遇到一個問題:兩個節(jié)點都生成塊并添加到各自的鏈上,那我們應(yīng)該以誰為準?這里的細節(jié)我們留到下一篇文章,這里先讓我們記住一個原則:始終選擇最長的鏈:

通常來說,更長的鏈表示它的數(shù)據(jù)(狀態(tài))是更新的,所以我們需要一個函數(shù)能幫我們將本地的過期的鏈切換成最新的鏈:

func replaceChain(newBlocks []Block) {
 if len(newBlocks) > len(Blockchain) {
  Blockchain = newBlocks
 }
}

到這一步,我們基本就把所有重要的函數(shù)完成了。接下來,我們需要一個方便直觀的方式來查看我們的鏈,包括數(shù)據(jù)及狀態(tài)。通過瀏覽器查看 web 頁面可能是最合適的方式!

Web 服務(wù)

我猜你一定對傳統(tǒng)的 web 服務(wù)及開發(fā)非常熟悉,所以這部分你肯定一看就會。

借助 Gorilla/mux 包,我們先寫一個函數(shù)來初始化我們的 web 服務(wù):

func run() error {
 mux := makeMuxRouter()
 httpAddr := os.Getenv("ADDR")
 log.Println("Listening on ", os.Getenv("ADDR"))
 s := http.Server{
  Addr:   ":" + httpAddr,
  Handler:  mux,
  ReadTimeout: 10 * time.Second,
  WriteTimeout: 10 * time.Second,
  MaxHeaderBytes: 1  20,
 }
 if err := s.ListenAndServe(); err != nil {
  return err
 }
 return nil
}

其中的端口號是通過前面提到的 .env 來獲得,再添加一些基本的配置參數(shù),這個 web 服務(wù)就已經(jīng)可以 listen and serve 了!

接下來我們再來定義不同 endpoint 以及對應(yīng)的 handler。例如,對“/”的 GET 請求我們可以查看整個鏈,“/”的 POST 請求可以創(chuàng)建塊。

func makeMuxRouter() http.Handler {
 muxRouter := mux.NewRouter()
 muxRouter.HandleFunc("/", handleGetBlockchain).Methods("GET")
 muxRouter.HandleFunc("/", handleWriteBlock).Methods("POST")
 return muxRouter
}

GET 請求的 handler:

func handleGetBlockchain(w http.ResponseWriter, r *http.Request) {
 bytes, err := json.MarshalIndent(Blockchain, "", " ")
 if err != nil {
  http.Error(w, err.Error(), http.StatusInternalServerError)
  return
 }
 io.WriteString(w, string(bytes))
}

為了簡化,我們直接以 JSON 格式返回整個鏈,你可以在瀏覽器中訪問 localhost:8080 或者 127.0.0.1:8080 來查看(這里的8080就是你在 .env 中定義的端口號 ADDR)。

POST 請求的 handler 稍微有些復(fù)雜,我們先來定義一下 POST 請求的 payload:

type Message struct {
 BPM int
}

再看看 handler 的實現(xiàn):

func handleWriteBlock(w http.ResponseWriter, r *http.Request) {
 var m Message
 decoder := json.NewDecoder(r.Body)
 if err := decoder.Decode(m); err != nil {
  respondWithJSON(w, r, http.StatusBadRequest, r.Body)
  return
 }
 defer r.Body.Close()
 newBlock, err := generateBlock(Blockchain[len(Blockchain)-1], m.BPM)
 if err != nil {
  respondWithJSON(w, r, http.StatusInternalServerError, m)
  return
 }
 if isBlockValid(newBlock, Blockchain[len(Blockchain)-1]) {
  newBlockchain := append(Blockchain, newBlock)
  replaceChain(newBlockchain)
  spew.Dump(Blockchain)
 }
 respondWithJSON(w, r, http.StatusCreated, newBlock)
}

我們的 POST 請求體中可以使用上面定義的 payload,比如:

{"BPM":75}

還記得前面我們寫的 generateBlock 這個函數(shù)嗎?它接受一個“前一個塊”參數(shù),和一個 BPM 值。POST handler 接受請求后就能獲得請求體中的 BPM 值,接著借助生成塊的函數(shù)以及校驗塊的函數(shù)就能生成一個新的塊了!

除此之外,你也可以:

使用spew.Dump 這個函數(shù)可以以非常美觀和方便閱讀的方式將 struct、slice 等數(shù)據(jù)打印在控制臺里,方便我們調(diào)試。
測試 POST 請求時,可以使用 POSTMAN 這個 chrome 插件,相比 curl它更直觀和方便。
POST 請求處理完之后,無論創(chuàng)建塊成功與否,我們需要返回客戶端一個響應(yīng):

func respondWithJSON(w http.ResponseWriter, r *http.Request, code int, payload interface{}) {
  response, err := json.MarshalIndent(payload, "", " ")
  if err != nil {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("HTTP 500: Internal Server Error"))
    return
  }
  w.WriteHeader(code)
  w.Write(response)
}

快要大功告成了。

接下來,我們把這些關(guān)于區(qū)塊鏈的函數(shù),web 服務(wù)的函數(shù)“組裝”起來:

func main() {
  err := godotenv.Load()
  if err != nil {
    log.Fatal(err)
  }
  go func() {
    t := time.Now()
    genesisBlock := Block{0, t.String(), 0, "", ""}
    spew.Dump(genesisBlock)
    Blockchain = append(Blockchain, genesisBlock)
  }()
  log.Fatal(run())
}

這里的 genesisBlock (創(chuàng)世塊)是 main 函數(shù)中最重要的部分,通過它來初始化區(qū)塊鏈,畢竟第一個塊的 PrevHash 是空的。

哦耶!完成了

可以從這里獲得完整的代碼:Github repo

讓我們來啟動它:

~$ go run main.go

在終端中,我們可以看到 web 服務(wù)器啟動的日志信息,并且打印出了創(chuàng)世塊的信息:

接著我們打開瀏覽器,訪問 localhost:8080 這個地址,我們可以看到頁面中展示了當前整個區(qū)塊鏈的信息(當然,目前只有一個創(chuàng)世塊):

接著,我們再通過 POSTMAN 來發(fā)送一些 POST 請求:

刷新剛才的頁面,現(xiàn)在的鏈中多了一些塊,正是我們剛才生成的,同時你們可以看到,塊的順序和散列值都正確。

總結(jié)

剛剛我們完成了一個自己的區(qū)塊鏈,雖然很簡單(陋),但它具備塊生成、散列計算、塊校驗等基本能力。接下來你就可以繼續(xù)深入的學(xué)習(xí)區(qū)塊鏈的其他重要知識,比如工作量證明、權(quán)益證明這樣的共識算法,或者是智能合約、Dapp、側(cè)鏈等等。

以上所述是小編給大家介紹的Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • Python實現(xiàn)類似比特幣的加密貨幣區(qū)塊鏈的創(chuàng)建與交易實例
  • JavaScript實現(xiàn)區(qū)塊鏈
  • 普通人如何在區(qū)塊鏈行業(yè)賺錢
  • Oracle 區(qū)塊鏈表創(chuàng)建過程詳解

標簽:昭通 阿壩 東營 滄州 駐馬店 晉中 泰安 瀘州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)》,本文關(guān)鍵詞  語言,開發(fā),區(qū)塊,鏈,只需,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    午夜影院日韩| 555www色欧美视频| 亚洲精品日韩激情在线电影| fc2成人免费人成在线观看播放| av播放官网| 欧美6一10sex性hd| 91大神在线网站| 麻豆91免费| 日韩免费精品| 久久精品aⅴ无码中文字字幕重口| 亚洲成色最大综合在线| 美女视频黄频大全不卡视频在线播放| 成人看片黄a免费看视频| 另类少妇人与禽zozz0性伦| 国产精品久久久久久福利一牛影视| 红桃成人av在线播放| 欧美日韩在线一区| 国产视频一区二区视频| 青草久久视频| 国产精品免费福利| 久草福利资源在线观看| 国产成人a视频高清在线观看| 国产一级大片| 欧美国产专区| h视频网站在线观看| 91伊人久久大香线蕉| 亚洲国产精品第一区二区| 国产精品色婷婷| 日韩在线一区二区三区四区| 国产欧美日韩视频在线观看| 最近免费中文字幕中文高清百度| 在线黄色av| 日韩精品久久久久久免费| 噜噜噜狠狠夜夜躁精品仙踪林| 欧洲av一区| 日本欧美高清| 亚洲理论在线| 国产精品揄拍一区二区| 天天操天天干天天| 色综合久久久久网| 精品人妻无码一区二区三区| 日本午夜精华| 亚洲 欧美 变态 另类 综合| 中文字幕av久久爽一区| 一区二区三区国产豹纹内裤在线| 日韩欧美综合一区| 欧美一区精品| 国产精品成人一区二区| 成人影院在线| 在线播放国产精品| 欧美亚洲网站| 松下纱荣子在线观看| 国产精品黄页网站在线播放免费| 国产成人av一区二区三区| 九九九久久久久久久| 国产精品久久一区二区三区| 国产一区二区三区不卡视频网站| 黄色免费的网站| 亚洲天堂成人在线视频| jizzjizz少妇亚洲水多| 日韩美女毛茸茸| 亚洲男人天堂手机在线| 国产精成人品localhost| 五月天av在线| 精品人在线二区三区| 色www永久免费视频首页在线| 欧美亚洲另类在线| 国产一区二区三区视频在线观看| 欧美日韩一区二区三区高清| 中文字幕欧美专区| 女同性恋一区二区三区| 一区二区三区www污污污网站| 日本在线天堂| 国产视频999| 国产91色在线|免| 日日骚欧美日韩| 91午夜视频在线观看| 女同视频在线观看| 日韩在线观看| 日韩视频不卡| 亚洲午夜激情网站| 熟妇熟女乱妇乱女网站| 黄页网站大全一区二区| 人人天天夜夜| 日韩成人在线资源| 国产麻豆精品theporn| 亚洲精品自拍| 黄色工厂这里只有精品| 精品亚洲男同gayvideo网站| 九色国产蝌蚪视频| 黄色a**址| 免费成人在线观看| 中文字幕一区二区人妻在线不卡| 国产婷婷一区二区三区| 99精品久久久久| 日韩一区免费| 韩漫成人漫画| 亚洲bbw性色大片| 色综合天天视频在线观看| 制服黑丝国产在线| 久久99视频精品| 亚洲国产99精品国自产| 影音先锋中文字幕在线观看| 色综合久久中文综合久久牛| 91美女精品网站| 欧美日韩黄视频| 日本一区影院| 色狠狠av一区二区三区香蕉蜜桃| 国产午夜视频在线| 欧美艹逼视频| 老熟妇仑乱视频一区二区| 日本黄色三级网站| 国产一级性生活| 亚洲欧美自拍偷拍色图| 午夜性福利视频| 无遮挡爽大片在线观看视频| 激情小视频在线| www99xav| 一级爱爱免费视频| 最新在线观看av| 综合久久2023| 美女在线观看视频一区二区| 亚洲国产成人一区| 日本泡妞xxxx免费视频软件| 韩日av一区二区| 性中国xxx极品hd| 国产乱码精品一区二区三区五月婷| 伊人久久亚洲综合| 亚洲乱妇老熟女爽到高潮的片| 日韩av在线电影| 户外露出一区二区三区| 天天躁日日躁狠狠躁伊人| 老司机精品视频网站| 日本一区二区三区四区在线观看| 真不卡电影网| 亚洲精品高清视频在线观看| 毛葺葺老太做受视频| 国产无遮挡在线观看| 1024亚洲合集| 精品久久久久国产| 久久99久久亚洲国产| 欧美三级不卡| 在线欧美三区| 麻豆视频在线观看免费网站黄| 黄色片大全在线观看| 六月婷婷综合网| 波多野结衣电影在线播放| 玖玖玖免费嫩草在线影院一区| 性欧美超级视频| 佐佐木明希电影| 日本美女在线中文版| 天天射天天综合网| 亚洲欧美乱综合| 一级二级黄色片| 精品免费av在线| 天天爱天天做色综合| 超碰在线免费av| 欧美88av| 亚在线播放中文视频| 性一交一乱一透一a级| 99九九99九九九视频精品| 国产免费一区二区三区网站免费| 日韩中文字幕免费| 午夜精彩视频在线观看不卡| 在线免费国产视频| 亚洲の无码国产の无码步美| 天堂一本之道| 午夜精品久久久久影视| 日韩精品在线免费| 亚洲国产综合91精品麻豆| 另类专区欧美蜜桃臀第一页| 久久93精品国产91久久综合| 精品国产a一区二区三区v免费| 欧美性猛片xxxxx免费中国| 久久这里有精品| 欧美日韩在线播放三区| 青青在线免费视频| 欧美性猛交xxxx免费看久久久| 在线免费观看成年人视频| 二人午夜免费观看在线视频| 日韩一级二级三级| 在线天堂中文www视软件| 中文字幕一区二区人妻痴汉电车| 日韩欧美一区视频| 在线观看中文字幕网站| 国产精品一级无码| 黄色亚洲网站| 超碰97成人| wwwww在线观看免费视频| 欧美一级免费在线| av电影在线观看完整版一区二区| 毛片一级免费一级| 日韩不卡高清视频| 美女视频一区免费观看| www激情五月| 91视频论坛| 亚洲天天综合网| 天天看天天摸天天操| 亚洲欧洲日本一区二区三区| 欧美精品人人做人人爱视频| 国产成人精品毛片| 欧美大片免费播放器| 国产午夜福利100集发布| 天天艹天天操| 国内精品国产三级国产在线专| 久久久久国产精品麻豆ai换脸| 免费在线播放第一区高清av| 成人黄色国产精品网站大全在线免费观看| 日韩精品一区二区三区三区免费| freehdxxxx| 成年丰满熟妇午夜免费视频| 四虎亚洲成人| 超碰激情在线| 亚洲一区二区三区午夜| 免费福利电影| 国产午夜免费视频| 亚洲区精品久久一区二区三区| 亚洲成人777| 久久国产一级片| 91精品国产九九九久久久亚洲| 成人国产精品一区二区免费麻豆| 亚洲色图在线看| xxxx在线免费观看| 精品久久久久中文字幕小说| www.99热这里只有精品| 99精品视频免费全部在线| 欧美在线播放高清精品| 亚洲图片在线综合| 精品一二三区| 成人中文字幕av| 国内精品视频在线播放| 四虎电影网址| 国产超级av| 国产剧情av在线| 不卡区在线中文字幕| 一区二区三区久久久| 国产色综合久久| 国产99久久久精品| 欧美精品午夜| 中文字幕另类日韩欧美亚洲嫩草| av动漫精品一区二区| 日本在线不卡视频| 最近中文字幕一区二区| 亚洲av片不卡无码久久| 久久国产在线观看| 精品美女视频在线观看免费软件| 亚洲成人最新网站| 国产九色精品成人porny| 蜜臀av一区二区三区有限公司| 国产精品久久久久久久久久精爆| 黑人与娇小精品av专区| 香蕉视频在线免费看| 黄视频免费在线看| 日本裸体美女视频| 亚洲一二三级电影| 久久免费在线观看视频| jizzjizzjizz国产| 国产一区二区三区站长工具| 国产91国语对白在线| 大肉大捧一进一出好爽动态图| 欧美国产在线观看| 97在线观视频免费观看| 色综合av在线| 手机看片国产日韩| 日本xxxxxx| 亚洲美女性生活| 亚洲综合成人在线视频| 欧美日韩水蜜桃| av免费网站在线观看| 杨钰莹一级淫片aaaaaa播放| 日韩综合网站| 黑人巨大精品欧美一区二区免费| 自拍视频国产精品| 极品久久久久久久| 亚洲另类图片色| 黄网站免费在线观看| 亚洲精品ady| 国产女女做受ⅹxx高潮| 国产精成人品localhost| japanesexxxx在线播放| 欧美亚洲精品一区二区| 天天操夜夜操国产精品| 欧美日韩不卡在线视频| 偷拍精品一区二区三区| 日韩在线成人| 色婷婷激情一区二区三区| 中文乱码字幕午夜无线观看| 久久久国产视频91| 特级毛片在线| 国产亚洲精品久久久久久| 手机av免费在线| 午夜在线播放| 欧美先锋资源| 亚洲怡红院av| 高h视频免费观看| 黄网站在线免费看| 日韩大片免费观看| 国产精品一级黄| 久久久久久av| 狠狠人妻久久久久久综合| 最近免费看av| 亚洲成人精品一区二区| 亚洲视频免费在线观看| 亚洲高清视频一区| 国产在线免费视频| 不卡av电影在线| 日本一区二区免费高清| 欧美精品video| 妞干网在线视频观看| 国产精品区一区二区三区| 欧美在线精品免播放器视频| 中文字幕在线观看不卡视频| 国产精品自产拍高潮在线观看| www.-级毛片线天内射视视| 动漫精品视频| 日韩专区一区二区| 欧美顶级少妇做爰| www.国产精| 欧美日韩一本| 欧美精品三级在线观看| 毛片无码国产| 亚洲涩涩av| 国产精品第五页| 欧美xxxx精品| 久久午夜宅男免费网站| 五月天亚洲一区| 国产精品一卡二卡在线观看| 国产精品综合视频|