精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文字幕日韩一区二区| 男人的天堂a在线| 精品国产网站| 欧美日韩在线综合| 日本成人黄色| 日本熟女毛茸茸| 日韩久久视频| 日韩精品视频无播放器在线看 | 男女精品网站| 一区二区在线视频| 欧美日韩最好看的视频| 亚洲大尺度在线观看| 99久久久久久中文字幕一区| 欧美福利一区二区| 国产a级片网站| 国产成人手机在线| 成人免费高清在线播放| 久草中文综合在线| 欧美黑人xxx| 人妻少妇精品视频一区二区三区 | 国产精品情趣视频| αv一区二区三区| 国产午夜激情视频| 91影院成人| 日韩视频在线一区二区| 国产福利一区视频| 女人黄色免费在线观看| 中文字幕欧美区| 国产精品对白一区二区三区| 中文字幕视频二区| 国产手机视频一区二区| 久久人体大胆视频| www.色多多| 在线一区二区三区视频| 在线观看欧美黄色| 免费看又黄又无码的网站| 国产精品剧情一区二区在线观看| 成人av在线播放网站| 91免费综合在线| 无码人妻丰满熟妇区五十路| 欧美三级午夜理伦三级中文幕| 亚洲美女激情视频| 国产aⅴ爽av久久久久| 在线能看的av网址| 国产精品热久久久久夜色精品三区| 国模精品娜娜一二三区| www日本高清视频| 奇米精品一区二区三区在线观看一| 国外成人性视频| 国产67194| 99久久99久久精品国产片桃花| 亚洲人成在线观看| 国产精品无码久久久久一区二区| 91国内精品| 制服丝袜亚洲色图| 做a视频在线观看| av在线不卡精品| 午夜av一区二区| 免费的一级黄色片| 午夜精品一区| 国产精品国产三级国产| 在线观看欧美亚洲| 日本视频在线免费| 国偷自产av一区二区三区| 日韩欧美一级二级| 亚洲精品一区二区18漫画| 91精品福利观看| 色噜噜狠狠色综合中国| 999香蕉视频| xxx欧美xxx| 色素色在线综合| 日本手机在线视频| 超碰97免费在线| 亚洲成国产人片在线观看| 中文字幕日韩精品无码内射| 91精品久久| 亚洲综合另类小说| 激情视频小说图片| 草草影院在线| 午夜在线成人av| 国产极品在线视频| 亚洲欧美se| www欧美com| 亚洲婷婷伊人| 亚洲色图美腿丝袜| 亚洲AV无码成人精品区明星换面 | 91精品国产综合久久香蕉最新版| 中文在线观看免费高清| 狠狠色狠狠色综合| av一区二区三区免费| 人人妻人人澡人人爽久久av| 成人短视频下载| 欧美lavv| 毛片免费不卡| 亚洲自拍与偷拍| 波多野结衣家庭教师视频| 国产韩日精品| 欧美一级黄色大片| 国产白嫩美女无套久久| 成人网18免费网站| 欧美精品在线观看| av大片在线免费观看| 成人毛片100部免费看| 中国av在线播放| 亚洲高清不卡在线| 久久久久久久午夜| 国产一区二区三区影视| 日韩视频永久免费| 成年人网站免费在线观看| 国产区精品区| 久久99精品视频一区97| 99久久精品国产亚洲| 精品系列免费在线观看| 国产女主播一区二区三区| 福利在线播放| 亚洲色图欧美在线| 国产 日韩 欧美在线| 国产精品久久久久久妇女| 国产影视一区| 欧美一区二区在线看| 欧洲熟妇的性久久久久久| 丁香婷婷久久久综合精品国产| 无人码人妻一区二区三区免费| 伊人精品综合| 一本色道久久88精品综合| 草视频在线观看| 免费国产自线拍一欧美视频| 亚洲xxxxx| 日韩精品一区二区三区色偷偷 | 日韩欧美在线123| 香港三日本8a三级少妇三级99| 在线日韩网站| www.国产一区| 凹凸国产熟女精品视频| 日韩成人综合网| 日韩精品亚洲元码| 色欲狠狠躁天天躁无码中文字幕| 伊人久久亚洲影院| 91在线观看免费高清| 国产人成在线观看| 色综合久久久网| 99re久久精品国产| 欧美激情在线| 国产精品午夜免费| 黄黄视频在线观看| 国产综合色在线观看| 亚洲丁香婷深爱综合| 精品在线观看一区| 国产精品久久777777毛茸茸| 亚洲一区二区三区毛片| 国产探花在线观看视频| 精品丝袜久久| 欧美老女人性视频| 伊人精品一区二区三区| 国产欧美日韩不卡免费| gogogo免费高清日本写真| 91伊人久久| 伊人男人综合视频网| www.com亚洲| youjizz久久| 路边理发店露脸熟妇泻火| 9999精品| 久久国产精品久久久久| 国产av一区二区三区精品| 1区2区3区国产精品| 超碰在线公开97| 久久人人99| 成人春色激情网| 老司机精品影院| 日韩一级免费观看| 国产中文字字幕乱码无限| 国产成人在线影院| 国产美女主播在线播放| 日本在线中文字幕一区| 国模极品一区二区三区| 三级视频在线看| 狠狠做深爱婷婷久久综合一区 | 日韩免费av一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧洲高清一区二区| 四虎精品永久免费| 欧美黑人性生活视频| 婷婷丁香一区二区三区| 亚洲成人黄色影院| 黄色性视频网站| 亚洲日本国产| 女女同性女同一区二区三区91| 国产成人精品一区二三区在线观看| 一区二区三区美女xx视频| 国产强伦人妻毛片| 亚洲国产三级在线| 鲁丝一区二区三区| 国内成人免费视频| 国产黄色一级网站| 久久香蕉国产| 国产一区在线观| 91大神在线观看线路一区| 免费av一区二区| 午夜福利视频一区二区| 欧美午夜一区二区三区 | 视频福利在线| 欧美蜜桃一区二区三区| 国产一级特黄视频| 国产日韩精品一区二区三区| 极品人妻一区二区| 久久精品123| 色偷偷88888欧美精品久久久| 中文字幕乱码一区| 麻豆成人精品| 国产资源第一页| 国产精品片aa在线观看| av成人综合网| 成人精品动漫| 久久综合久中文字幕青草| 狠狠人妻久久久久久综合麻豆| 亚洲大片一区二区三区| 天天干天天色天天干| 亚洲激情另类| 伊人久久大香线蕉成人综合网| 极品束缚调教一区二区网站 | 爽好久久久欧美精品| 欧美tickling挠脚心丨vk| 黄色片在线观看网站| 91在线观看地址| 亚洲综合在线一区二区| 久久精品伊人| 日本阿v视频在线观看| 93在线视频精品免费观看| 狠狠色综合色区| 午夜精品久久久久久毛片| 日本精品中文字幕| 爱搞国产精品| 欧美精品在线免费播放| 麻豆网在线观看| 国产亚洲人成网站在线观看| www五月婷婷| 欧美一级欧美一级在线播放| 日韩特黄一级片| 亚洲乱码中文字幕综合| 欧美日韩国产黄色| 久久网站最新地址| 色婷婷精品久久二区二区密 | 三级av免费看| 麻豆成人久久精品二区三区小说| aaa毛片在线观看| 国产模特精品视频久久久久| 日韩网站在线免费观看| 你懂的视频一区二区| av磁力番号网| 国产精品探花在线观看| 精品日产一区2区三区黄免费| 一区二区在线免费播放| 动漫一区二区在线| jizzjizzjizz欧美| 国产精品亚洲综合| 日韩毛片免费视频一级特黄| 国产精品成人国产乱一区| 456亚洲精品成人影院| 欧亚精品中文字幕| 亚洲天堂一区二区| 欧美极度另类性三渗透| 黄页网站大全在线免费观看| 欧美极品欧美精品欧美视频| 成人福利片网站| 久久久国产一区二区| www久久日com| 欧美成人高清视频| av免费看在线| 欧美国产第二页| 激情黄产视频在线免费观看| 久久久久久综合网天天| 老司机福利在线视频| 久久99亚洲精品| 八戒八戒神马在线电影| 久久久国产成人精品| 高h视频在线观看| 欧美激情精品久久久| 极品av在线| 国产精品一区二区女厕厕| 精品国产一区二区三区性色av| 91九色对白| 欧美美女啪啪| 肥熟一91porny丨九色丨| 日韩精品导航| 一区二区三区国| 欧美激情aⅴ一区二区三区| 麻豆tv在线播放| 奇米影视一区二区三区| 精品国产一二区| 久久久久久麻豆| 午夜国产小视频| 亚洲成av人**亚洲成av**| 一级片在线免费播放| 制服.丝袜.亚洲.中文.综合| 深爱激情五月婷婷| 色偷偷综合社区| 成人黄视频在线观看| 日本a级片电影一区二区| 日韩一区二区三区四区五区| 亚洲一区中文字幕| 日韩精品亚洲aⅴ在线影院| 茄子视频成人在线观看| 欧美国产免费| 青青视频在线播放| 中文在线一区| 免费黄频在线观看| 久久精品欧美一区二区三区不卡 | 国产一区二区三区四| 午夜一区二区三区免费| 亚洲老妇xxxxxx| 无码人妻精品一区二区三区9厂| 欧美三级欧美一级| 天天射天天色天天干| 久久夜色精品国产| 欧美人体一区二区三区| 91中文字幕在线观看| 欧美重口另类| 四虎4hu永久免费入口| 欧美日韩第一区| 国产一级做a爰片久久| 99麻豆久久久国产精品免费| 91成人在线免费视频| 午夜激情一区二区三区| 国产情侣自拍小视频| 国产一区二区三区四区福利| 超碰中文在线| 2022国产精品| 欧美三级伦理在线| 亚洲乱码中文字幕久久孕妇黑人| 国产精品一区不卡| 日本黄色免费片| 香蕉av福利精品导航| 蜜臀av午夜精品| 亚洲一级黄色av| 国产第一页在线视频| 国产综合视频在线观看| 国产欧美日韩影院| 欧美日韩一区二区三区在线看| 亚洲视频在线观看一区二区| 亚洲精品国产精品久久清纯直播| 91在线视频| 国产精品pans私拍| 精品女人视频| 男人天堂av片| 国产综合色精品一区二区三区| 国产精品视频播放| 日韩激情综合| 佐佐木明希av| 青娱乐精品视频| 扒开jk护士狂揉免费| 亚洲一区视频在线观看视频| 亚洲AV无码国产精品午夜字幕| 欧美成人免费全部| 日韩欧美中文字幕在线视频| 自拍偷拍视频在线| 另类成人小视频在线| 久久99久久99精品免费看小说| 欧美精品在线一区二区| 日本网站在线免费观看视频| 国产·精品毛片| 青青草原在线免费观看视频| 在线影院国内精品| 免费在线黄色电影| 国产精品99一区| 色乱码一区二区三区网站| 欧美一级黄色片视频| 国产精品丝袜在线| 一级特黄录像免费看| 欧美精品一区在线播放| 精品三级av| 免费无码国产v片在线观看| 久久久美女艺术照精彩视频福利播放| 精品视频一二三区| 中文精品99久久国产香蕉| 99久久久成人国产精品| 天天做天天躁天天躁| 91在线视频在线| 中文字幕你懂的| 欧美成人性生活| 欧美一区二区三区红桃小说| 欧美日韩激情视频在线观看| 久久综合九色综合97婷婷女人| 日本中文字幕久久| 久久精品亚洲一区| 精品无人区一区二区| 亚洲性生活网站| 亚洲精品水蜜桃| 污视频在线免费观看| 国产美女久久精品| 亚洲国产午夜| 黑人巨大精品欧美| 欧美日本国产视频| 超碰在线观看免费| 欧美极品视频一区二区三区| 免费美女久久99| 麻豆视频在线观看| 一区二区三区视频在线| 日韩毛片免费视频一级特黄| 精品国产一区三区| 综合激情成人伊人|