精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

智能合約編寫之Solidity的基礎特性

區塊鏈
智能合約編寫階段將從 Solidity 基礎特性、高級特性、設計模式以及編程攻略分別展開,帶讀者認識 Solidity 并掌握其運用,更好地進行智能合約開發。本篇將圍繞 Solidity 的基礎特性,帶大家上手開發一個最基本的智能合約。

[[324359]]

前篇介紹,目前大部分的聯盟鏈平臺,包括 FISCO BCOS,都采用 Solidity 作為智能合約開發語言,因此熟悉并上手 Solidity 十分必要。

作為一門面向區塊鏈平臺設計的圖靈完備的編程語言,Solidity 支持函數調用、修飾符、重載、事件、繼承等多種特性,在區塊鏈社區中,擁有廣泛的影響力和踴躍的社區支持。但對于剛接觸區塊鏈的人而言,Solidity 是一門陌生的語言。

智能合約編寫階段將從 Solidity 基礎特性、高級特性、設計模式以及編程攻略分別展開,帶讀者認識 Solidity 并掌握其運用,更好地進行智能合約開發。 

本篇將圍繞 Solidity 的基礎特性,帶大家上手開發一個最基本的智能合約。

智能合約代碼結構

任何編程語言都有其規范的代碼結構,用于表達在一個代碼文件中如何組織和編寫代碼,Solidity 也一樣。

本節,我們將通過一個簡單的合約示例,來了解智能合約的代碼結構。

  1. pragma solidity ^0.4.25;
  2. contract Sample{
  3.  
  4. //State variables
  5. address private _admin;
  6. uint private _state;
  7.  
  8. //Modifier
  9. modifier onlyAdmin(){
  10. require(msg.sender == _admin, "You are not admin");
  11. _;
  12. }
  13.  
  14. //Events
  15. event SetState(uint value);
  16.  
  17. //Constructor
  18. constructor() public{
  19. _admin = msg.sender;
  20. }
  21.  
  22. //Functions
  23. function setState(uint value) public onlyAdmin{
  24. _state = value;
  25. emit SetState(value);
  26. }
  27.  
  28. function getValue() public view returns (uint){
  29. return _state;
  30. }
  31.  
  32. }

上面這段程序包括了以下功能:

  • 通過構造函數來部署合約

  • 通過 setValue 函數設置合約狀態

  • 通過 getValue 函數查詢合約狀態

整個合約主要分為以下幾個構成部分:

  • 狀態變量 - _admin_state,這些變量會被永久保存,也可以被函數修改

  • 構造函數 - 用于部署并初始化合約

  • 事件 - SetState, 功能類似日志,記錄了一個事件的發生

  • 修飾符 - onlyAdmin, 用于給函數加一層“外衣”

  • 函數 - setStategetState,用于讀寫狀態變量

下面將逐一介紹上述構成部分。

狀態變量

狀態變量是合約的骨髓,它記錄了合約的業務信息。用戶可以通過函數來修改這些狀態變量,這些修改也會被包含到交易中;交易經過區塊鏈網絡確認后,修改即為生效。

  1. uint private _state;

狀態變量的聲明方式為:[類型]  [訪問修飾符-可選] [字段名]

構造函數

構造函數用于初始化合約,它允許用戶傳入一些基本的數據,寫入到狀態變量中。 

在上述例子中,設置了 _admin 字段,作為后面演示其他功能的前提。

  1. constructor() public{
  2. _admin = msg.sender;
  3. }

 和 Java 不同的是,構造函數不支持重載,只能指定一個構造函數。

函數

函數被用來讀寫狀態變量。對變量的修改將會被包含在交易中,經區塊鏈網絡確認后才生效。生效后,修改會被永久的保存在區塊鏈賬本中。

函數簽名定義了函數名、輸入輸出參數、訪問修飾符、自定義修飾符。

  1. function setState(uint value) public onlyAdmin;

函數還可以返回多個返回值:

  1. function functionSample() public view returns(uint, uint){
  2. return (1,2);
  3. } 

在本合約中,還有一個配備了 view 修飾符的函數。這個 view 表示了該函數不會修改任何狀態變量。 

view 類似的還有修飾符 pure,其表明該函數是純函數,連狀態變量都不用讀,函數的運行僅僅依賴于參數。

  1. function add(uint a, uint b) public pure returns(uint){
  2. return a+b;
  3. }

如果在 view 函數中嘗試修改狀態變量,或者在 pure 函數中訪問狀態變量,編譯器均會報錯。

事件 

事件類似于日志,會被記錄到區塊鏈中,客戶端可以通過 web3 訂閱這些事件。

定義事件:

event SetState(uint value);

構造事件:

emit SetState(value);

這里有幾點需要注意:

  • 事件的名稱可以任意指定,不一定要和函數名掛鉤,但推薦兩者掛鉤,以便清晰地表達發生的事情。

  • 構造事件時,也可不寫 emit,但因為事件和函數無論是名稱還是參數都高度相關,這樣操作很容易筆誤將事件寫成函數調用,因此不推薦不寫。 

    1. function setState(uint value) public onlyAdmin{
    2. _state = value;
    3. emit SetState(value);
    4. // 下面這樣寫也可以,但不推薦,因為很容易筆誤寫成 setState
    5. // SetState(value);
    6. }
  • Solidity 編程風格應采用一定的規范。關于編程風格,建議參考:https://learnblockchain.cn/docs/solidity/style-guide.html#id16 

修飾符

修飾符是合約中非常重要的一環。它掛在函數聲明上,為函數提供一些額外的功能,例如檢查、清理等工作。

在本例中,修飾符 onlyAdmin 要求函數調用前,需要先檢測函數的調用者是否為函數部署時設定的那個管理員(即合約的部署人)。

  1. //Modifer
  2. modifier onlyAdmin(){
  3. require(msg.sender == _admin, "You are not admin");
  4. _;
  5. }
  6.  
  7. ...
  8. //Functions
  9. function setState(uint value) public onlyAdmin{
  10. ...
  11. }

值得注意的是,定義在修飾符中的下劃線 “_”,表示函數的調用,指代的是開發者用修飾符修飾的函數。在本例中,表達的是 setState 函數調用的意思。

智能合約的運行 

了解了上述的智能合約示例的結構,就可以直接上手運行,運行合約的方式有多種,大家可以任意采取其中一種:

  • 方法二:使用 FISCO BCOS 開源項目 WeBASE 提供的在線 ide WEBASE-front 運行 

  • 方法三:通過在線 ide remix 來進行合約的部署與運行,remix 的地址為:http://remix.ethereum.org/

本例中使用 remix 作為運行示例。

編譯

首先,在 remix 的在線 ide 中鍵入代碼后,通過編譯按鈕來編譯。成功后會在按鈕上出現一個綠色對勾: 

 

部署

編譯成功后就可進行部署環節,部署成功后會出現合約實例。 

 

setState

合約部署后,我們來調用 setState(4)。在執行成功后,會產生一條交易收據,里面包含了交易的執行信息。

在這里,用戶可以看到交易執行狀態(status)、交易執行人(from)、交易輸入輸出(decoded input、decoded output)、交易開銷(execution cost)以及交易日志(logs)。

在交易日志中,我們看到 SetState 事件被拋出,里面的參數也記錄了事件傳入的值 4

如果我們換一個賬戶來執行,那么調用會失敗,因為 onlyAdmin 修飾符會阻止用戶調用。

 

getState 

調用 getState 后,可以直接看到所得到的值為 4,正好是我們先前 setState 所傳入的值:

 

Solidity 數據類型

在前文的示例中,我們用到了 uint 等數據類型。由于 Solidity 類型設計比較特殊,這里也會簡單介紹一下 Solidity 的數據類型。

整型系列

Solidity 提供了一組數據類型來表示整數, 包含無符號整數與有符號整數。每類整數還可根據長度細分,具體細分類型如下。

類型

長度(位)

有符號

uint

256

uint8

8

uint16

16

...

...

uint256

256

int

256

int8

8

int16

16

...

...

int256

256

定長字節系列

Solidity 提供了 bytes1bytes32 的類型,它們是固定長度的字節數組。

用戶可以讀取定長字節的內容。 

  1. function bytesSample() public{
  2. bytes32 barray;
  3. //Initialize baarray
  4. //read brray[0]
  5. byte b = barray[0];
  6. }

并且,可以將整數類型轉換為字節。 

  1. uint256 s = 1;
  2. bytes32 b = bytes32(s);

這里有一個關鍵細節,Solidity 采取大端序編碼,高地址存的是整數的小端。例如,b[0] 是低地址端,它存整數的高端,所以值為 0;取 b[31] 才是 1。 

  1. function bytesSample() public pure returns(byte, byte){
  2. uint256 value = 1;
  3. bytes32 b = bytes32(value);
  4. //Should be (0, 1)
  5. return (b[0], b[31]);
  6. }

變長字節

從上文中,讀者可了解定長字節數組。此外,Solidity 還提供了一個變長字節數組:bytes。使用方式類似數組,后文會有介紹。 

字符串 

Solidity 提供的字符串,本質是一串經 UTF-8 編碼的字節數組,它兼容于變長字節類型。

目前 Solidity 對字符串的支持不佳,也沒有字符的概念。用戶可以將字符串轉成字節。

  1. function stringSample() public view returns(bytes){
  2. string memory str = "abc";
  3. bytes memory b = bytes(str);
  4. //0x616263
  5. return b;
  6. }

要注意的是,當將 string 轉換成 bytes 時,數據內容本身不會被拷貝,如上文中,strb 變量指向的都是同一個字符串 "abc"

地址類型  

address 表示賬戶地址,它由私鑰間接生成,是一個 20 字節的數據。同樣,它也可以被轉換為 bytes20

  1. function addressSample() public view returns(bytes20){
  2. address me = msg.sender;
  3. bytes20 b = bytes20(me);
  4. return b;
  5. }

映射 

mapping 表示映射,是極其重要的數據結構。它與 Java 中的映射存在如下幾點差別:

  • 它無法迭代鍵名,因為它只保存鍵的哈希,而不保存鍵值,如果想迭代,可以用開源的可迭代哈希類庫

  • 如果一個鍵名未被保存在映射中,一樣可以正常讀取到對應的鍵值,只是值是空值(字節全為 0)。所以它也不需要 putget 等操作,用戶直接去操作它即可。

  1. contract Sample{
  2. mapping(uint=>string) private values;
  3. function mappingSample() public view returns(bytes20){
  4. //put a key value pair
  5. values[10] = "hello";
  6. //read value
  7. string value = values[10];
  8. }
  9. }

數組 

如果數組是狀態變量,那么支持 push 等操作:

  1. contract Sample{
  2. string[] private arr;
  3. function arraySample() public view {
  4. arr.push("Hello");
  5. uint len = arr.length;//should be 1
  6. string value = arr[0];//should be Hello
  7. }
  8. }

數組也可以以局部變量的方式使用,但稍有不同:

  1. function arraySample() public view returns(uint){
  2. //create an empty array of length 2
  3. uint[] memory p = new uint[](2);
  4. p[3] = 1;//THIS WILL THROW EXCEPTION
  5. return p.length;
  6. }

結構

Solidity 允許開發者自定義結構對象。結構體既可以作為狀態變量存儲,也可以在函數中作為局部變量存在。  

  1. struct Person{
  2. uint age;
  3. string name;
  4. }
  5.  
  6. Person private _person;
  7.  
  8. function structExample() {
  9. Person memory p = Person(1, "alice");
  10. _person = p;
  11. }

本節中只介紹了比較常見的數據類型,更完整的列表可參考 Solidity 官方網站:https://solidity.readthedocs.io/en/v0.6.3/types.html  

全局變量 

示例合約代碼的構造函數中,包含 msg.sender。它屬于全局變量。在智能合約中,全局變量或全局方法可用于獲取和當前區塊、交易相關的一些基本信息,如塊高、塊時間、合約調用者等。

比較常用的全局變量是 msg 變量,表示調用上下文,常見的全局變量有以下幾種: 

  • msg.sender:合約的直接調用者。由于是直接調用者,所以當處于“用戶 A->合約 1->合約 2”調用鏈下,若在合約 2內使用 msg.sender,得到的會是合約 1 的地址。如果想獲取用戶 A,可以用 tx.origin

  • tx.origin:交易的"始作俑者",整個調用鏈的起點。

  • msg.calldata:包含完整的調用信息,包括函數標識、參數等。calldata 的前 4 字節就是函數標識,與 msg.sig相同。 

  • msg.sigmsg.calldata 的前 4 字節,用于標識函數。 

  • block.number:表示當前所在的區塊高度。

  • now:表示當前的時間戳。也可以用 block.timestamp 表示。 

這里只列出了部分常見全局變量,完整版本請參考:https://solidity.readthedocs.io/en/v0.4.24/units-and-global-variables.html

結語 

本文以一個簡單的示例合約作為引入,介紹了運用 Solidity 開發智能合約的基本知識。讀者可以嘗試運行該合約,感受智能合約的開發。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-03-18 23:04:41

Solidity開發智能

2023-05-12 09:14:34

2023-10-12 09:05:11

2022-10-17 09:15:37

2023-02-24 08:00:00

2009-10-26 12:17:03

linux腳本編寫

2021-12-28 14:07:03

人工智能相似問機器人

2020-12-17 08:00:00

區塊鏈數據以太坊

2021-04-23 10:59:07

區塊鏈貨幣私鑰

2020-04-22 13:23:46

智能合約區塊鏈比特幣

2021-05-06 09:42:24

Truffle部署智能

2021-11-02 10:25:19

區塊鏈智能合約

2022-05-29 10:19:08

區塊鏈智能合約編程語言

2025-06-10 08:26:00

2022-02-13 23:05:23

加密貨幣比特幣貨幣

2021-03-25 16:34:10

區塊鏈加密資產技術

2023-05-05 08:00:00

2022-10-26 08:00:00

2017-03-15 13:42:12

互聯網

2019-01-18 05:22:39

區塊鏈智能合約網絡安全
點贊
收藏

51CTO技術棧公眾號

日韩av电影免费在线| av一级亚洲| 全球成人免费直播| 亚洲综合一区在线| 国产精品丝袜视频| 深爱五月激情网| 中文字幕+乱码+中文乱码www| 成人中文字幕视频| 色婷婷综合久色| 高清视频在线观看一区| 国产中文字幕久久| 日韩精品麻豆| 久久亚洲免费视频| 欧美人与性动交a欧美精品| 日本a√在线观看| 青青操视频在线| 国产成人aa在线观看网站站| 成 人片 黄 色 大 片| 精品三级久久久| 国产精品毛片久久久久久久| 日本欧美国产在线| 亚洲一区二区三区综合| 暧暧视频在线免费观看| 国产91精品久久久久久久网曝门| 久久亚洲私人国产精品va| 美女少妇一区二区| av大片在线观看| 免费成人性网站| 深夜福利91大全| 天天操天天干天天做| 国内精品久久久久久野外| 国产一区二区导航在线播放| 不卡av在线网站| www.av天天| 成人不卡视频| 欧美午夜激情小视频| 久久久一本精品99久久精品66| 欧美精品亚洲精品日韩精品| 色吊丝一区二区| 色婷婷综合在线| av在线播放亚洲| 日本人妖在线| 波多野结衣91| 欧美在线激情网| 久久亚洲无码视频| 祥仔av免费一区二区三区四区| 亚洲色图制服丝袜| 亚洲一区二区三区xxx视频| 免费在线观看一级片| 超碰在线亚洲| 日韩欧美黄色影院| 日韩少妇内射免费播放18禁裸乳| 久蕉在线视频| 精品午夜久久福利影院| 久久久久久久国产| 亚洲自拍偷拍一区二区| 国产欧美三级电影| 精品国产乱码久久久久久浪潮| 日本福利视频在线| 风间由美一区| 国产成人精品亚洲777人妖 | 亚洲va韩国va欧美va| 国产欧美一区二区视频| 六月丁香在线视频| 成人一区而且| 日韩中文字幕不卡视频| av漫画在线观看| 欧美www.| 一区二区三区视频在线观看| 精品在线一区| 夜夜狠狠擅视频| 亚洲国产专区校园欧美| 中文字幕亚洲一区二区三区五十路 | 精品资源在线看| 国产午夜亚洲精品不卡| 成人天堂噜噜噜| 男人的天堂一区| 免费日韩av| 久久久精品美女| www.色多多| 国产探花在线精品| 精品国产123| 国产精品300页| 国产精品一区免费在线| 色呦呦日韩精品| 丰满少妇在线观看| 看亚洲a级一级毛片| 精品久久久久久综合日本欧美| 亚洲一区二区三区四区五区xx| 精品久久在线| 一本一道久久a久久精品| 啊啊啊国产视频| 欧美久久一区二区三区| 日韩av在线免费观看一区| 久久aaaa片一区二区| 成人全视频在线观看在线播放高清| 亚洲大片一区二区三区| 四虎4hu永久免费入口| 91在线看黄| 亚洲精品免费在线观看| 色噜噜狠狠一区二区三区| 亚洲av成人精品日韩在线播放| 国产成人精品影院| 日本一区二区三区在线视频| 色婷婷视频在线| 成人亚洲一区二区一| 亚洲自拍高清视频网站| 亚洲av片一区二区三区| 亚洲精品乱码久久久久久黑人| 久久精品人人做| 日韩免费在线播放| 精品人妻午夜一区二区三区四区 | 男人女人拔萝卜视频| 激情开心成人网| 日韩午夜电影在线观看| 在线免费看污网站| 四虎国产精品成人免费影视| 亚洲成人1234| 日本一区二区免费视频| 人人狠狠综合久久亚洲婷| 久久久女女女女999久久| 成人免费毛片东京热| 久久久久一区| 国产精品av免费在线观看| 日韩在线 中文字幕| 日韩专区欧美专区| 国产精品久久一| 亚洲天天综合网| 91污在线观看| 日本在线成人一区二区| 2020国产在线| 日韩欧亚中文在线| 性折磨bdsm欧美激情另类| julia中文字幕一区二区99在线| 中文字幕av一区二区三区谷原希美| 久久久www成人免费毛片| 在线成人h网| 91成人福利在线| 无码人妻一区二区三区线| 日本怡春院一区二区| 成人国产精品一区二区| 国产福利电影在线| 色综合久久久久久久久| 国产一级二级视频| 亚洲精品偷拍| 国产在线精品一区二区三区》| 日本精品600av| 五月天久久比比资源色| av动漫免费看| 日韩成人在线电影| 中文字幕欧美国内| 进去里视频在线观看| 国产一区二区三区四| 亚洲欧美日产图| av网站网址在线观看| 午夜精品久久久久久| 91超薄肉色丝袜交足高跟凉鞋| 国产精品观看| 国产精品成人观看视频国产奇米| 国产一区二区在线播放视频| 国产男女无套免费网站| 久久aⅴ国产紧身牛仔裤| 国产伦精品一区二区三区视频黑人| 视频一区二区三区国产| 国产精品毛片久久久久久久| 色片在线免费观看| 四季av一区二区凹凸精品| 午夜精品久久17c| 99re热视频| 国产日产精品1区| 亚洲欧美成人一区| 日韩午夜电影免费看| 日韩在线精品一区| 99热这里只有精品3| 久久综合狠狠综合久久激情| 日韩a在线播放| 激情综合网五月| 国产噜噜噜噜噜久久久久久久久| 欧美成人三区| 欧美性猛交xxxx偷拍洗澡| 男女做爰猛烈刺激| 久久国产精品一区二区| 久久精品美女| 久久电影tv| 精品对白一区国产伦| 成人午夜视频精品一区| 国产偷国产偷亚洲高清人白洁| xxx国产在线观看| 全国精品免费看| 九九热这里只有精品6| 丰满大乳国产精品| 亚洲视频 欧洲视频| 日本少妇xxxx| 韩国亚洲精品| 欧美日韩大片一区二区三区| 久久香蕉av| 51午夜精品国产| 性欧美一区二区| 国产一区二区0| 亚洲精品无码久久久久久| 999精品在线| 久久精品二区| 91精品在线免费视频| 国产一区二区三区四区福利| 欧美h在线观看| 99免费精品在线| 人妻少妇精品久久| 国产 国语对白 露脸| 欧美成人精品一区二区男人看| 欧美一区二区三区公司| 女性裸体视频网站| 丁香啪啪综合成人亚洲小说| 国产理论在线播放| 99在线精品视频在线观看| 国产精品成人一区二区三区| 欧美freesex| 欧美高清激情视频| 亚洲AV无码精品国产| 亚洲美女屁股眼交| 人人妻人人藻人人爽欧美一区| 999亚洲国产精| 中日韩在线视频| 北岛玲精品视频在线观看| 韩日欧美一区二区| 日韩123区| 久久精品国产欧美激情| 国产女主播在线直播| 亚洲黄色av网站| 麻豆久久久久久久久久| 亚洲欧美日韩电影| ass极品国模人体欣赏| 狠狠色伊人亚洲综合成人| 久久久久久久久久久久久久国产| 国产精品嫩模av在线| 国产综合动作在线观看| 精品一区二区三区亚洲| 91精品免费看| 午夜精品久久久久久毛片| 国产精品久久久久久网站| 91在线超碰| 久久久久久久一区二区| 肉肉视频在线观看| 欧美成人精品h版在线观看| av在线免费在线观看| 欧美日韩国产综合一区二区| 欧美成人手机视频| 亚洲三级理论片| www.av免费| www.日韩精品| 美女久久久久久久久| 久久美女性网| 天天干天天操天天干天天操| av成人app永久免费| 97碰碰视频| 美女一区网站| 欧美又大又粗又长| 免费黄网站在线| 欲色天天网综合久久| 亚洲国产成人精品一区二区三区| 7777精品伊人久久久大香线蕉超级流畅| 黄色大全在线观看| 欧美主播一区二区三区| 青草影院在线观看| 久久久亚洲综合| 欧美人与性动交α欧美精品| 国产精品一区三区| 成人在线观看a| 日韩va欧美va亚洲va久久| 一区二区三区 欧美| 麻豆精品一区二区av白丝在线| 人妻无码久久一区二区三区免费 | 亚洲图片在线综合| 美女毛片在线看| 欧美一区二区视频在线观看| 国产av一区二区三区精品| 精品国精品国产| 免费毛片在线| 日韩视频亚洲视频| 影音先锋在线视频| 2019中文字幕全在线观看| yw.尤物在线精品视频| 91免费人成网站在线观看18| 不卡av播放| 国产精品视频久久久| 视频一区日韩| 国产精品女主播视频| 91视频亚洲| 久久66热这里只有精品| 成人黄色av| 日韩精品在线视频免费观看| 久久视频在线| 男人天堂av片| 青椒成人免费视频| 欧美一级片在线免费观看| 久久美女高清视频| 欧美 日韩 国产 一区二区三区| 精品国产电影一区| 亚洲视频在线观看免费视频| 精品国产123| 毛片在线看片| 欧美中在线观看| 精品一区二区三区中文字幕视频 | 天堂在线中文在线| 不卡视频一二三四| 99精品中文字幕| 精品高清美女精品国产区| 国产巨乳在线观看| 色哟哟精品一区| 精品久久久免费视频| 亚洲视频专区在线| 国产黄色免费在线观看| 欧美激情一区二区三区在线视频观看 | 久久超级碰碰| 99在线观看视频| 亚洲小说春色综合另类电影| 91久久国产综合久久蜜月精品 | 国产v综合v亚洲欧| 亚洲精品国产精品国自| 欧美激情一区三区| 久久久久久久久久影院| 精品剧情在线观看| bt在线麻豆视频| 国语自产精品视频在线看一大j8 | 99精品视频网| 亚洲在线观看网站| 国产成人综合亚洲网站| 国产一区二区三区视频播放| 色综合久久综合网欧美综合网| 亚洲av色香蕉一区二区三区| 精品国产欧美一区二区五十路| 神马电影网我不卡| 精品国产91亚洲一区二区三区www| 亚洲色图88| 霍思燕三级露全乳照| 韩国v欧美v日本v亚洲v| 欧美自拍偷拍网| 91官网在线免费观看| 中文字幕777| 亚洲人成电影网站色…| 中文字幕 在线观看| 国产精品久久久久久久av大片| 日韩av三区| 成人免费观看cn| gogo大胆日本视频一区| 国产一级视频在线播放| 日本精品一区二区三区四区的功能| 日本激情一区二区三区| 亚洲人精选亚洲人成在线| 久久青草伊人| 国产精品日韩精品| 免费精品国产| 超碰免费在线公开| 开心九九激情九九欧美日韩精美视频电影| 一道本在线观看| 色婷婷av一区二区三区gif| 国产区av在线| 中文字幕一区二区三区在线播放 | 亚洲天堂第二页| 日韩大尺度黄色| 日韩高清在线播放| 久久精品99久久久| 国产精品白丝喷水在线观看| 欧美一三区三区四区免费在线看| 国产最新在线| 97视频热人人精品| 亚洲人成免费| 一级黄色片大全| 欧美三级日韩三级国产三级| 精品黑人一区二区三区在线观看| 欧美成人午夜剧场免费观看| 第四色中文综合网| 女人天堂av手机在线| 中文字幕不卡在线观看| 国产91av视频| 欧美日韩亚洲高清一区二区| 男女啪啪在线观看| 99电影网电视剧在线观看| 99精品热6080yy久久| 精品人妻一区二区三区蜜桃视频| 欧美日韩高清一区二区不卡| av网站在线免费看推荐| 久久久久久久有限公司| 免费成人性网站| 久久久久久久福利| 国产午夜精品理论片a级探花| 亚洲欧美成人影院| 国产一区二区黄色| 男人的天堂久久精品| 欧美成人免费观看视频| 亚洲美女在线视频| 激情aⅴ欧美一区二区欲海潮| 2019国产精品视频| 亚洲在线黄色| 日本福利片在线观看| 日韩成人中文字幕在线观看| 久久99久久久精品欧美| 日韩精品在线视频免费观看| 国产精品视频在线看| 人妻一区二区三区四区| 成人网欧美在线视频|