亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 專題 > 區(qū)塊鏈 > 正文

用Python實(shí)現(xiàn)一個(gè)區(qū)塊鏈

2020-02-25 19:29:02
字體:
供稿:網(wǎng)友

  相信你和我一樣對數(shù)字貨幣的崛起感到新奇,并且想知道其背后的技術(shù)——區(qū)塊鏈?zhǔn)窃鯓訉?shí)現(xiàn)的。

  但是理解區(qū)塊鏈并非易事,至少對于我來說是如此?;逎y懂的視頻、漏洞百出的教程以及示例的匱乏令我倍受挫折。

  我喜歡在實(shí)踐中學(xué)習(xí),通過寫代碼來學(xué)習(xí)技術(shù)會掌握得更牢固。如果你也這樣做,那么讀完本文,你將獲得一個(gè)可用的區(qū)塊鏈以及對區(qū)塊鏈的深刻理解。

  開始之前...

  首先你需要知道區(qū)塊鏈?zhǔn)怯杀环Q為區(qū)塊的記錄構(gòu)成的不可變的、有序的鏈?zhǔn)浇Y(jié)構(gòu),這些記錄可以是交易、文件或任何你想要的數(shù)據(jù),最重要的是它們是通過 Hash 連接起來的。

  如果你不了解 Hash,這里有個(gè)例子

  其次,你需要安裝 Python3.6+,F(xiàn)lask,Request

  pip installFlask==0.12.2requests==2.18.4

  同時(shí)你還需要一個(gè) HTTP 客戶端,比如 Postman,cURL 或任何其它客戶端。

  最終的源代碼在這里:

  第一步: 打造一個(gè) Blockchain

  新建一個(gè)文件 blockchain.py,本文所有的代碼都寫在這一個(gè)文件中。首先創(chuàng)建一個(gè) Blockchain 類,在構(gòu)造函數(shù)中我們創(chuàng)建了兩個(gè)列表,一個(gè)用于儲存區(qū)塊鏈,一個(gè)用于儲存交易。

  classBlockchain(object):

  def__init__(self):

  self.chain=[]

  self.current_transactions=[]

  defnew_block(self):

  # Creates a new Block and adds it to the chain

  pass

  defnew_transaction(self):

  # Adds a new transaction to the list of transactions

  pass

  @staticmethod

  defhash(block):

  # Hashes a Block

  pass

  @property

  deflast_block(self):

  # Returns the last Block in the chain

  pass

  一個(gè)區(qū)塊有五個(gè)基本屬性:index,timestamp(in Unix time),transaction 列表,工作量證明(稍后解釋)以及前一個(gè)區(qū)塊的 Hash 值。

  block={

  'index':1,

  'timestamp':1506057125.900785,

  'transactions':[

  {

  'sender':"8527147fe1f5426f9dd545de4b27ee00",

  'recipient':"a77f5cdfa2934df3954a5c7c7da5df1f",

  'amount':5,

  }

  ],

  'proof':324984774000,

  'previous_hash':"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"

  }

  到這里,區(qū)塊鏈的概念應(yīng)該比較清楚了:每個(gè)新的區(qū)塊都會包含上一個(gè)區(qū)塊的 Hash 值。這一點(diǎn)非常關(guān)鍵,它是區(qū)塊鏈不可變性的根本保障。如果攻擊者破壞了前面的某個(gè)區(qū)塊,那么后面所有區(qū)塊的 Hash 都會變得不正確。不理解?慢慢消化~

  我們需要一個(gè)向區(qū)塊添加交易的方法:

  classBlockchain(object):

  ...

  defnew_transaction(self,sender,recipient,amount):

  """

  Creates a new transaction to go into the next mined Block

  :param sender: Address of the Sender

  :param recipient: Address of the Recipient

  :param amount: Amount

  :return: The index of the Block that will hold this transaction

  """

  self.current_transactions.append({

  'sender':sender,

  'recipient':recipient,

  'amount':amount,

  })

  returnself.last_block['index']+1

  new_transaction() 方法向列表中添加一個(gè)交易記錄,并返回該記錄將被添加到的區(qū)塊——下一個(gè)待挖掘的區(qū)塊——的索引,稍后在用戶提交交易時(shí)會有用。

  當(dāng) Blockchain 實(shí)例化后,我們需要創(chuàng)建一個(gè)初始的區(qū)塊(創(chuàng)世塊),并且給它預(yù)設(shè)一個(gè)工作量證明。

  除了添加創(chuàng)世塊的代碼,我們還需要補(bǔ)充 newblock(), newtransaction() 和 hash() 方法:

  importhashlib

  importjson

  fromtimeimporttime

  classBlockchain(object):

  def__init__(self):

  self.current_transactions=[]

  self.chain=[]

  # Create the genesis block

  self.new_block(previous_hash=1,proof=100)

  defnew_block(self,proof,previous_hash=None):

  block={

  'index':len(self.chain)+1,

  'timestamp':time(),

  'transactions':self.current_transactions,

  'proof':proof,

  'previous_hash':previous_hashorself.hash(self.chain[-1]),

  }

  # Reset the current list of transactions

  self.current_transactions=[]

  self.chain.append(block)

  returnblock

  defnew_transaction(self,sender,recipient,amount):

  self.current_transactions.append({

  'sender':sender,

  'recipient':recipient,

  'amount':amount,

  })

  returnself.last_block['index']+1

  @property

  deflast_block(self):

  returnself.chain[-1]

  @staticmethod

  defhash(block):

  block_string=json.dumps(block,sort_keys=True).encode()

  returnhashlib.sha256(block_string).hexdigest()

  上面的代碼應(yīng)該很直觀,我們基本上有了區(qū)塊鏈的雛形。但此時(shí)你肯定很想知道一個(gè)區(qū)塊究竟是怎樣被創(chuàng)建或挖掘出來的。

  新的區(qū)塊來自工作量證明(PoW)算法。PoW 的目標(biāo)是計(jì)算出一個(gè)符合特定條件的數(shù)字,這個(gè)數(shù)字對于所有人而言必須在計(jì)算上非常困難,但易于驗(yàn)證。這就是工作量證明的核心思想。

  舉個(gè)例子:

  假設(shè)一個(gè)整數(shù) x 乘以另一個(gè)整數(shù) y 的積的 Hash 值必須以 0 結(jié)尾,即 hash(x * y) = ac23dc...0。設(shè) x = 5,求 y?

  fromhashlibimportsha256

  x=5

  y=0# We don't know what y should be yet...

  whilesha256(f'{x*y}'.encode()).hexdigest()[-1]!="0":

  y+=1

  print(f'The solution is y = {y}')

  結(jié)果是 y = 21 // hash(5 * 21) = 1253e9373e...5e3600155e860

  在比特幣中,工作量證明算法被稱為 Hashcash,它和上面的問題很相似,只不過計(jì)算難度非常大。這就是礦工們?yōu)榱藸帄Z創(chuàng)建區(qū)塊的權(quán)利而爭相計(jì)算的問題。通常,計(jì)算難度與目標(biāo)字符串需要滿足的特定字符的數(shù)量成正比,礦工算出結(jié)果后,就會獲得一定數(shù)量的比特幣獎勵(通過交易)。

  網(wǎng)絡(luò)要驗(yàn)證結(jié)果,當(dāng)然非常容易。

  讓我們來實(shí)現(xiàn)一個(gè) PoW 算法,和上面的例子非常相似,規(guī)則是:尋找一個(gè)數(shù) p,使得它與前一個(gè)區(qū)塊的 proof 拼接成的字符串的 Hash 值以 4 個(gè)零開頭。

  importhashlib

  importjson

  fromtimeimporttime

  fromuuidimportuuid4

  classBlockchain(object):

  ...

  defproof_of_work(self,last_proof):

  proof=0

  whileself.valid_proof(last_proof,proof)isFalse:

  proof+=1

  returnproof

  @staticmethod

  defvalid_proof(last_proof,proof):

  guess=f'{last_proof}{proof}'.encode()

  guess_hash=hashlib.sha256(guess).hexdigest()

  returnguess_hash[:4]=="0000"

  衡量算法復(fù)雜度的辦法是修改零的個(gè)數(shù)。4 個(gè)零足夠用于演示了,你會發(fā)現(xiàn)哪怕多一個(gè)零都會大大增加計(jì)算出結(jié)果所需的時(shí)間。

  我們的 Blockchain 基本已經(jīng)完成了,接下來我們將使用 HTTP requests 來與之交互。

  第二步:作為 API 的 Blockchain

  我們將使用 Flask 框架,它十分輕量并且很容易將網(wǎng)絡(luò)請求映射到 Python 函數(shù)。

  我們將創(chuàng)建三個(gè)接口:

  /transactions/new創(chuàng)建一個(gè)交易并添加到區(qū)塊

  /mine告訴服務(wù)器去挖掘新的區(qū)塊

  /chain返回整個(gè)區(qū)塊鏈

  我們的服務(wù)器將扮演區(qū)塊鏈網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn)。我們先添加一些常規(guī)代碼:

  importhashlib

  importjson

  fromtextwrapimportdedent

  fromtimeimporttime

  fromuuidimportuuid4

  fromflaskimportFlask,jsonify,request

  classBlockchain(object):

  ...

  # Instantiate our Node

  app=Flask(__name__)

  # Generate a globally unique address for this node

  node_identifier=str(uuid4()).replace('-','')

  # Instantiate the Blockchain

  blockchain=Blockchain()

  @app.route('/mine',methods=['GET'])

  defmine():

  return"We'll mine a new Block"

  @app.route('/transactions/new',methods=['POST'])

  defnew_transaction():

  return"We'll add a new transaction"

  @app.route('/chain',methods=['GET'])

  deffull_chain():

  response={

  'chain':blockchain.chain,

  'length':len(blockchain.chain),

  }

  returnjsonify(response),200

  if__name__=='__main__':

  app.run(host='127.0.0.1',port=5000)

  這是用戶發(fā)起交易時(shí)發(fā)送到服務(wù)器的請求:

  {

  "sender":"my address",

  "recipient":"someone else's address",

  "amount":5

  }

  我們已經(jīng)有了向區(qū)塊添加交易的方法,因此剩下的部分就很簡單了:

  @app.route('/transactions/new',methods=['POST'])

  defnew_transaction():

  values=request.get_json()

  # Check that the required fields are in the POST'ed data

  required=['sender','recipient','amount']

  ifnotall(kinvaluesforkinrequired):

  return'Missing values',400

  # Create a new Transaction

  index=blockchain.new_transaction(values['sender'],values['recipient'],values['amount'])

  response={'message':f'Transaction will be added to Block {index}'}

  returnjsonify(response),201

  挖掘端正是奇跡發(fā)生的地方,它只做三件事:計(jì)算 PoW;通過新增一個(gè)交易授予礦工一定數(shù)量的比特幣;構(gòu)造新的區(qū)塊并將其添加到區(qū)塊鏈中。

  @app.route('/mine',methods=['GET'])

  defmine():

  # We run the proof of work algorithm to get the next proof...

  last_block=blockchain.last_block

  last_proof=last_block['proof']

  proof=blockchain.proof_of_work(last_proof)

  # We must receive a reward for finding the proof.

  # The sender is "0" to signify that this node has mined a new coin.

  blockchain.new_transaction(

  sender="0",

  recipient=node_identifier,

  amount=1,

  )

  # Forge the new Block by adding it to the chain

  block=blockchain.new_block(proof)

  response={

  'message':"New Block Forged",

  'index':block['index'],

  'transactions':block['transactions'],

  'proof':block['proof'],

  'previous_hash':block['previous_hash'],

  }

  returnjsonify(response),200

  需注意交易的接收者是我們自己的服務(wù)器節(jié)點(diǎn),目前我們做的大部分事情都只是圍繞 Blockchain 類進(jìn)行交互。到此,我們的區(qū)塊鏈就算完成了。

  第三步:交互演示

  使用 Postman 演示,略。

  第四步:一致性

  這真的很棒,我們已經(jīng)有了一個(gè)基本的區(qū)塊鏈可以添加交易和挖礦。但是,整個(gè)區(qū)塊鏈系統(tǒng)必須是分布式的。既然是分布式的,那么我們究竟拿什么保證所有節(jié)點(diǎn)運(yùn)行在同一條鏈上呢?這就是一致性問題,我們要想在網(wǎng)絡(luò)中添加新的節(jié)點(diǎn),就必須實(shí)現(xiàn)保證一致性的算法。

  在實(shí)現(xiàn)一致性算法之前,我們需要找到一種方式讓一個(gè)節(jié)點(diǎn)知道它相鄰的節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)都需要保存一份包含網(wǎng)絡(luò)中其它節(jié)點(diǎn)的記錄。讓我們新增幾個(gè)接口:

  1./nodes/register接收以URL的形式表示的新節(jié)點(diǎn)的列表

  2./nodes/resolve用于執(zhí)行一致性算法,用于解決任何沖突,確保節(jié)點(diǎn)擁有正確的鏈

  ...

  fromurllib.parseimporturlparse

  ...

  classBlockchain(object):

  def__init__(self):

  ...

  self.nodes=set()

  ...

  defregister_node(self,address):

  parsed_url=urlparse(address)

  self.nodes.add(parsed_url.netloc)

  注意到我們用 set 來儲存節(jié)點(diǎn),這是一種避免重復(fù)添加節(jié)點(diǎn)的簡便方法。

  前面提到的沖突是指不同的節(jié)點(diǎn)擁有的鏈存在差異,要解決這個(gè)問題,我們規(guī)定最長的合規(guī)的鏈就是最有效的鏈,換句話說,只有最長且合規(guī)的鏈才是實(shí)際存在的鏈。

  讓我們再添加兩個(gè)方法,一個(gè)用于添加相鄰節(jié)點(diǎn),另一個(gè)用于解決沖突。

  ...

  importrequests

  classBlockchain(object)

  ...

  defvalid_chain(self,chain):

  last_block=chain[0]

  current_index=1

  whilecurrent_index(chain):

  block=chain[current_index]

  print(f'{last_block}')

  print(f'{block}')

  print("n-----------n")

  # Check that the hash of the block is correct

  ifblock['previous_hash']!=self.hash(last_block):

  returnFalse

  # Check that the Proof of Work is correct

  ifnotself.valid_proof(last_block['proof'],block['proof']):

  returnFalse

  last_block=block

  current_index+=1

  returnTrue

  defresolve_conflicts(self):

  neighbours=self.nodes

  new_chain=None

  # We're only looking for chains longer than ours

  max_length=len(self.chain)

  # Grab and verify the chains from all the nodes in our network

  fornodeinneighbours:

  response=requests.get(f'http://{node}/chain')

  ifresponse.status_code==200:

  length=response.json()['length']

  chain=response.json()['chain']

  # Check if the length is longer and the chain is valid

  iflength>max_lengthandself.valid_chain(chain):

  max_length=length

  new_chain=chain

  # Replace our chain if we discovered a new, valid chain longer than ours

  ifnew_chain:

  self.chain=new_chain

  returnTrue

  returnFalse

  現(xiàn)在你可以新開一臺機(jī)器,或者在本機(jī)上開啟不同的網(wǎng)絡(luò)接口來模擬多節(jié)點(diǎn)的網(wǎng)絡(luò),或者邀請一些朋友一起來測試你的區(qū)塊鏈。

  我希望本文能激勵你創(chuàng)造更多新東西。我之所以對數(shù)字貨幣入迷,是因?yàn)槲蚁嘈艆^(qū)塊鏈會很快改變我們看待事物的方式,包括經(jīng)濟(jì)、政府、檔案管理等。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
精品一区二区亚洲| 欧美视频免费在线| 亚洲视频一区| 在线电影院国产精品| www.亚洲在线| 九九热线视频只有这里最精品| 里番在线播放| 欧美午夜电影一区| 欧美国产精品一区二区三区| 日日夜夜精品视频免费观看| 亚洲女人视频| 亚洲国产天堂av| 色一色在线观看视频网站| 国产富婆一区二区三区| 午夜精品久久久久久久99水蜜桃| 色偷偷成人一区二区三区91| 欧美最猛性xxxx免费| 国产亚洲欧美一级| 精品国产aaa| 日本视频一区二区在线观看| 小说区图片区图片区另类灬| 可以免费在线看黄的网站| 四虎影视免费永久在线| 欧美日韩激情小视频| 一呦二呦三呦国产精品| av天在线播放| 久久新电视剧免费观看| 亚洲美女在线免费观看| 波多野结衣电车痴汉| 久久色在线播放| 91嫩草亚洲精品| 欧美私密网站| 99视频国产精品免费观看| 精品无码人妻一区二区三区| 免费的很黄很污的视频网站| 国产精品扒开腿爽爽爽视频| 国产精品蜜月aⅴ在线| 超碰人人人人人人人| 岛国在线视频网站| 91久久精品美女高潮| 欧美a级大片在线| 亚洲大胆人体av| jizz内谢中国亚洲jizz| 在线播放/欧美激情| 四虎影视4hu4虎成人| 国产麻豆视频一区二区| 日韩三级免费观看| 亚洲国产精品嫩草影院久久| 波多野结衣欧美| 欧美日韩电影在线观看| 性生交大片免费看l| 精品sm捆绑视频| 品久久久久久久久久96高清| 久久久久亚洲av片无码| 国产美女视频一区| 欧美日韩国产高清一区| 欧美一区二区三区思思人| 久久黄色免费看| 欧美特级xxxxbbbb毛片| 成人欧美magnet| 亚洲精彩视频| 国产欧美日韩视频在线| 黄色一区二区在线观看| 国产精品久久久久久久电影| 欧美二区三区| 午夜性爽视频男人的天堂| 人妻少妇一区二区| 欧美亚洲日本在线观看| 日本韩国一区| 最新亚洲人成网站在线观看| 亚洲天堂2018av| 999精品视频在线观看| 国产欧美日韩视频在线观看| 天天干天天曰天天操| 色吊丝一区二区| 国产精品自拍视频| 91久久精品一区二区二区| 色天使综合视频| 91av com| 激情网站五月天| 午夜日韩影院| 全部孕妇毛片丰满孕妇孕交| 亚洲精品国产一区二区三区四区在线| 美女撒尿一区二区三区| 亚洲911精品成人18网站| 在线观看理论片| 欧美香蕉爽爽人人爽| 国产精品综合不卡av| 成人黄色电影在线| 日本视频不卡| 中文字幕永久在线视频| 国产寡妇树林野战在线播放| 日韩一区二区久久久| 国产欧美一区二区三区视频在线观看| 天海翼在线视频| 欧美日韩不卡在线| 亚洲欧美国产三级| 日韩少妇高潮抽搐| 久久久久国产精品免费免费搜索| 天堂网在线.www天堂在线| 久久99青青| 欧美一级特黄aaaaaa在线看片| 国模无码视频一区二区三区| 成人h动漫免费观看网站| 国产亚洲精品久久久久婷婷瑜伽| 最新日韩av| 一区二区三区在线观看欧美| 丰满人妻一区二区三区53号| 波多野结衣 作品| 亚洲欧美日韩中文字幕一区二区三区| 久久综合加勒比| 亚洲色图色老头| 国产精品亚洲美女av网站| 激情aⅴ欧美一区二区欲海潮| 精品999成人| 久久精品国产精品亚洲| 亚洲性感美女99在线| 97人妻精品一区二区三区免费| 久久精品999| 日韩中文字幕av电影| 亚洲成av人影院在线观看网| 中文字幕网站视频在线| 97久久精品人人澡人人爽缅北| 中文字幕中文字幕一区三区| 午夜激情视频在线| 成人全视频免费观看在线看| 国产精品一区二区三区毛片淫片| av色男福利网| 国产小视频在线播放| 俺去俺来也在线www色官网| 日本午夜精品视频| 欧美一级视频在线播放| 亚洲精品国产一区二区三区四区在线| 中文字幕第六页| 国产欧美一区二区在线播放| 中文字幕天堂av| 国产欧美韩国高清| 久久综合五月天婷婷伊人| 久久99久久久精品欧美| 99国产精品自拍| 国产精品第二十页| 成人动漫一区二区| 91插插插影院| 久久久久久久久伊人| 婷婷丁香一区二区三区| 亚洲一区自拍| 久久精品视频在线播放| 北条麻妃一区二区三区在线观看| 亚洲精品白浆高清| av成人app永久免费| 日韩欧美国产午夜精品| 日韩在线观看电影完整版高清免费悬疑悬疑| 欧美国产综合| 欧美一区二区视频17c| 国产精品综合久久久| 99热这里只有精品2| 国产精品综合一区二区| 欧美丰满少妇xxxbbb| 日韩黄色网络| 欧美日韩国产成人在线91| 影音先锋亚洲电影| 被黑人猛躁10次高潮视频| 大桥未久一区二区| 尤物网站在线| 欧美日韩精品免费观看视欧美高清免费大片| 日本一卡二卡在线| 粉嫩av免费一区二区三区| 日本一区二区不卡视频| 伊人久久在线观看| 日韩中文字幕视频| 国产欧美日韩麻豆91| 午夜精品成人在线视频| 亚洲一区二区三区四区在线免费观看| 国产不卡一卡2卡三卡4卡5卡在线| 精品黑人一区二区三区国语馆| 蜜桃视频最新网址| 国产日韩欧美在线视频观看| 午夜亚洲国产au精品一区二区| aa日韩免费精品视频一| 免费看国产黄色片| 黑森林福利视频导航| 亚洲国产精品第一区二区| 欧美在线视频日韩| 亚洲影视综合| 欧美精品二区三区四区免费看视频| 久热久热免费视频中文字幕777| 国产主播一区二区| 美女精品久久| 蜜桃久久影院| 午夜精品久久久久久久久| 国产盗摄一区二区| 日本人dh亚洲人ⅹxx| 国内毛片毛片毛片毛片| 成人午夜在线播放| 久色国产在线| 国产成人午夜精品| 欧美福利视频在线观看| 欧洲人成人精品| 福利视频网站| 91p九色成人| 影音先锋国产精品| 99久久这里有精品| 亚洲kkk444kkk在线观看| 亚洲毛片欧洲毛片国产一品色| 精品一区二区在线欧美日韩| 日韩小视频在线观看专区| 国产日韩精品在线播放| 欧美色图12p| 国产成人av在线| 美女撒尿一区二区三区| 免费黄色av网站| 欧美日韩亚洲视频一区| 性の欲びの女javhd| 蜜臀aⅴ国产精品久久久国产老师| 五月激情综合婷婷| 影音先锋欧美激情| www.日韩精品| 亚洲第一黄色片| 不卡的国产精品| 欧美性老头oldtight| 日韩一二三区在线观看| 亚洲成人直播| 肉大捧一出免费观看网站在线播放| 亚洲精品成人三区| 国产91精品黑色丝袜高跟鞋| caopeng视频| 日韩视频1区| 国产综合久久久久| 亚洲综合色丁香婷婷六月图片| 免费女人毛片视频| 色欲av无码一区二区人妻| 97久久超碰福利国产精品…| 日韩电影免费网址| av黄在线观看| 久草福利资源在线视频| 亚洲一二三四2021不卡| 久久美女艺术照精彩视频福利播放| 六月丁香综合| 日本三级免费观看| 成人小视频在线观看免费| 中文字幕日韩免费| 青青草原综合久久大伊人精品优势| 九九在线精品视频| 精品久久久无码中文字幕| 日本不卡影院| 国产高清无密码一区二区三区| 国产成人av影视| 欧美 日韩 亚洲 一区| 91成人在线播放| 免费看美女隐私的视频| 亚洲成人av影片| 久久精品亚洲欧美日韩精品中文字幕| 性无码专区无码| 人成免费在线视频| 亚洲国产成人精品激情在线| 我要看一级黄色录像| 91高清视频在线免费观看| 精品二区视频| 精品这里只有精品| 国内自拍欧美激情| 天天干天天爽| 香港三日本8a三级少妇三级99| jvid一区二区三区| 大黄网站在线观看| 香蕉视频xxxx| 国产激情在线观看视频| 久久久久久久久99精品| 一级视频在线免费观看| 九色成人搞黄网站| 精品视频黄色| 精产国品一二三区| 中文字幕一区在线播放| 岛国视频午夜一区免费在线观看| 国产性xxxx| 亚洲精品国精品久久99热一| 国产精品夜间视频香蕉| 亚洲三级电影网站| 久久精品视频1| 亚洲无在线观看| 无码内射中文字幕岛国片| 欧美视频一区二区在线观看| 免费毛片一区二区三区| 国产白浆在线观看| 日本高清视频一区二区三区| 特级黄色录像片| 91大学生片黄在线观看| 精品视频免费在线播放| www夜片内射视频日韩精品成人| 亚洲性夜色噜噜噜7777| 欧美激情aⅴ一区二区三区| 亚洲欧美在线第一页| 俺去啦最新官网| 日韩午夜电影免费看| 黄色综合网站| 亚洲激情电影在线| 精品国产区一区二区三区在线观看| 国产寡妇色xxⅹ交肉视频| 免费看日韩精品| 日韩少妇一区二区| 免费在线小视频| 亚洲欧美日韩国产另类专区| 超碰男人的天堂| 影音先锋日韩| 亚洲一卡二卡| 欧美激情一级片一区二区| 成人区人妻精品一区二| 波多结衣在线观看| 香蕉国产精品偷在线观看不卡| 风间由美性色一区二区三区| 特级西西人体wwwww| 一区二区精品视频在线观看| 成人h片在线播放免费网站| 免费日本视频一区| av不卡免费电影| 中文字幕永久在线不卡| 亚洲卡通动漫在线| 中文字幕国产在线| 欧美激情15p| 国产尤物视频| 国产一级性片| 在线观看av中文字幕| 一本大道久久精品懂色aⅴ| 成人av电影观看| 一本大道东京热无码aⅴ| 国产一区二区三区四| 久久久精品一品道一区| 美女把腿扒开让男人桶免费| 91久久久亚洲精品|