麻豆国内精品欧美在线-麻豆国内精品久久久久久-麻豆国产在线观看一区二区-麻豆国产在线观看免费-麻豆国产原创-麻豆国产一区二区在线观看

EOSForce.io主網智能合約教程(上)區塊鏈

EOS原力 2018-10-23 11:02
分享到:
導讀

EOSForce.io主網智能合約教程(上)

本文為EOSForce.io主網智能合約教程系列文章,

全教程目錄如下。

一、EOSForce主網智能合約概覽:

需要的知識

通訊模型

ABI宏及應用

多索引數據庫編程接口

命名規范

C /C編程接口

二、EOSForce主網智能合約教程:

智能合約起步

EOSFORCEIO Token 合約介紹

多索引表示例

在 EOSFORCEIO 上創建一個 Token

合約中隨機化

升級系統合約

怎樣寫 ABI 文件

由于文章篇幅有限,EOSForce主網智能合約教程4-7章會于接下來的推送中展示。

全文詳細內容也可登陸官網查看:eosforce.github.io/Documentation/#/zh-cn/contract

智能合約起步

第一步:安裝合約開發工具集(CDT)

EOSFORCEIO 合約開發工具集 - 按照安裝指導繼續。eosiocpp工具包含在工具集中,該工具編譯編譯合約并且生成 ABI 文件。

首先克隆代碼

git clone --recursive https://github.com/eosio/eosio.cdt cd eosio.cdt

然后運行 build.sh 并且提供打算部署 EOSFORCEIO 區塊鏈的核心符號。build.sh 將自動安裝所需要的依賴。

./build.sh

最后,安裝構建,安裝將把核心安裝到 /usr/local/eosio.cdt, 頂層工具(編譯器,鏈接器等等)的符號鏈接安裝到 /usr/local/bin

$ sudo ./install.sh

第二步:啟動節點

如果使用 docker 并且 容器不在運行,執行下面命令。

docker start eosio

如果在本地運行 nodeos , 用下列單個命令可以啟動單節點區塊鏈。

$ nodeos -e -p eosio --plugin eosio::chain_api_plugin \     --plugin eosio::history_api_plugin

這個命令設置了許多標志并且裝載了本教程其余部分所需要的可選插件。假如一切順利,妹0.5秒你將看到一條區塊生成消息。

在 docker 上,

docker logs --tail 25 eosio ... 3165501ms thread-0   producer_plugin.cpp:944       produce_block        ] Produced block 00000a4c898956e0... #2636 @ 2018-05-25T16:52:45.500 signed by eosio [trxs: 0, lib: 2635, confirmed: 0] 3166004ms thread-0   producer_plugin.cpp:944       produce_block        ] Produced block 00000a4d2d4a5893... #2637 @ 2018-05-25T16:52:46.000 signed by eosio [trxs: 0, lib: 2636, confirmed: 0] ...

第三步:創建錢包

錢包是私鑰倉庫,必須用私鑰來認證區塊鏈上 actions。這些私鑰加密存儲在磁盤上,使用密碼來保護。密碼應該存儲在一個安全的密碼管理器中或者記下來。

$ cleos wallet create --to-console Creating wallet: default Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5JuBXoXJ8JHiCTXf...."

錢包經過一段時間將自動鎖定,通過下列命令解鎖

$ cleos wallet unlock 

password:

為了安全目的,當不適用錢包的時候,一般最后讓其鎖定。為了鎖定錢包而不關閉 nodeos , 可以執行下列命令

cleos wallet lock Locked: default

本文其余部分需要錢包處于解鎖狀態。

裝載教程 Key

上述步驟發起的私鏈伴隨創建了一堆初始秘鑰,必須導入錢包(參見下文)

$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

第四部:裝載 BIOS 合約

現在我們有一個錢包已經裝載了 eosio 賬戶的私鑰,我們部署一個缺省的系統合約。為了開發的目的,我們使用缺省的 eosio.bios 合約。 這個合約使你能直接控制其它賬戶的資源分配并且能訪問其它有特權的 API 調用。在公鏈上,這個合約將管理 tokens 抵押及解押以為合約申請CPU、網絡、內存。

eosio.bios 合約在 EOSFORCEIO 源代碼 contracts/eosio.bios 目錄下。下面的命令序列假設從 EOSFORCEIO 源代碼根目錄執行,但是你可以指定完整路徑 ${EOSIO_SOURCE}/build/contracts/eosio.bios 從任何地方執行。

如果你用 docker, 命令是:

$ cleos set contract eosio contracts/eosio.bios -p eosio@active Reading WAST... Assembling WASM... Publishing contract... executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083  4068 bytes  10000 cycles #         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e... #         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...

如果從源代碼構建,命令是:

$ cleos set contract eosio build/contracts/eosio.bios -p eosio@active Reading WAST... Assembling WASM... Publishing contract... executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083  4068 bytes  10000 cycles #         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e... #         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...

命令序列的結果是 cleos 生成包含兩個 actions 的 transaction, eosio::setcode 和 eosio::setabi。

code 定義了合約怎樣運行, abi 描述了參數怎樣在二進制和 json 表示間轉換。雖然 abi 技術上是可選的, DOSFORCEIO 所有工具都依賴它為了方便使用。

任何時候執行一個 transaction ,將看到如下輸出:

executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083  4068 bytes  10000 cycles #         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e... #         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...

可以這樣解讀:eosio 定義的 action setcode 被 eosio 合約用參數 {args...} 執行。

#         ${executor} <= ${contract}:${action} ${args...} > console output from this execution, if any

后面我們將會看到 actions 可以被多個合約處理。

這個調用的最后一個參數是 -p eosio@active 。 這告訴 cleos 用 eosio 賬戶的 active 授權來簽署 這個 action ,比如說用之前為 eosio 賬戶導入的私鑰 來簽署這個 action 。

第五步:創建賬戶

現在我們已經設置了基本的系統合約,我們可以開始創建我們自己的賬戶。我們將創建兩個賬戶 user 和 tester, 我們需要為每個賬戶關聯一個私鑰。 這個例子中,兩個賬戶將使用同一個私鑰。

我們首先為賬戶生成私鑰。

$ cleos create key --to-console Private key: 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR Public key: EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4

然后我們將使用導入錢包:

$ cleos wallet import --private-key 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR imported private key for: EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4

主要用 cleos 實際生成的私鑰,不要用例子中顯示的。

私鑰不會自動加入錢包,因此忽略這步將導致失去對賬戶的控制。

創建兩個用戶賬戶

接下來我們創建兩個賬戶, user 和 tester, 用上面創建和導入的私鑰。

$ cleos create account eosio user EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 executed transaction: 8aedb926cc1ca31642ada8daf4350833c95cbe98b869230f44da76d70f6d6242  364 bytes  1000 cycles #         eosio <= eosio::newaccount            {"creator":"eosio","name":"user","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxentZZ... $ cleos create account eosio tester EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083 366 bytes  1000 cycles #         eosio <= eosio::newaccount            {"creator":"eosio","name":"tester","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxentZZ...

注意:create account 命令需要兩個密鑰,一個是 OwnerKey (在生產環境上應該高度保密),另一個是 ActiveKey。這個例子中,使用了同一把密鑰。

因為我們使用了 eosio::history_api_plugin , 因此我們可以查詢我們的密鑰控制的所有賬戶:

$ cleos get accounts EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 {   "account_names": [     "tester",     "user"   ] }

EOSFORCEIO Token 合約介紹

Eosio.token, Exchange, 及 Eosio.msig 合約

在這個階段區塊鏈并不能做很多,因此讓我們部署 eosio.token 合約。這個合約使能創建許多不同的 tokens, 都運行在相同的合約上但是潛在被不同的用戶管理。

在我們部署 token 合約前,先要將要部署上去的賬戶。

$ cleos create account eosio eosio.token \     EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \ ...

然后我們可以部署合約,合約在 ${EOSIO_SOURCE}/build/contracts/eosio.token 目錄下。

$ cleos set contract eosio.token build/contracts/eosio.token -p eosio.token@active Reading WAST... Assembling WASM... Publishing contract... executed transaction: 528bdbce1181dc5fd72a24e4181e6587dace8ab43b2d7ac9b22b2017992a07ad  8708 bytes  10000 cycles #         eosio <= eosio::setcode               {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001ce011d60067f7e7f7f7f7f00... #         eosio <= eosio::setabi                {"account":"eosio.token","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name"...

創建 Currency Token

可以查看 eosio.token 合約的接口,定義在 contracts/eosio.token/eosio.token.hpp:

void create( account_name issuer,             asset        maximum_supply );    void issue( account_name to, asset quantity, string memo );    void transfer( account_name from,               account_name to,               asset        quantity,               string       memo );

為了創建新的 token, 我們必須調用 create(...) action 用合適的參數。這個命令將使用最大供給的符號來識別這個 token 以區別于其它 tokens。 發行人有權調用發行與或執行其它動作比如凍結,撤銷,及白名單擁有者。

調用這個命令的簡潔方法,用位置參數:

$ cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS"]' \          -p eosio.token@active executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12  120 bytes  1000 cycles #   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}

可選的調用這個命令的更詳細的方式,使用命名參數:

$ cleos push action eosio.token create \         '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' \         -p eosio.token@active executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12  120 bytes  1000 cycles #   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}

這個命令創建一個新的 token SYS, 有四位小數點精度及最大 1000000000.0000 SYS 供應量。

為了創建這個 token, 我們需要 eosio.token 合約的權限因為他 “擁有”符號名字空間(比如“SYS”)。這個合約的為了版本可能允許其它方自動購買符號名字。 因為這個原因我們必須傳遞 -p eosio.token@active 以授權這個調用。

授予 tokens 給 “user”賬戶

現在已經創建了 token, 發行人可以授予新 token 給之前創建的賬戶 user。如果你沒有創建 user 賬戶,參見之前的指令。

我們將使用位置參數調用方式。

$ cleos push action eosio.token issue '[ "user", "100.0000 SYS", "memo" ]' \     -p eosio@active executed transaction: 822a607a9196112831ecc2dc14ffb1722634f1749f3ac18b73ffacd41160b019  268 bytes  1000 cycles #   eosio.token <= eosio.token::issue           {"to":"user","quantity":"100.0000 SYS","memo":"memo"} >> issue #   eosio.token <= eosio.token::transfer        {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"} >> transfer #         eosio <= eosio.token::transfer        {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"} #          user <= eosio.token::transfer        {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"}

這次輸出包含幾個不同的 actions: 一個 issue 及三個 transfers。雖然我們簽署的唯一 action 是 issue, issue action 執行一次“在線轉賬”并且 “在線轉賬”通知發送方賬戶和接收方賬戶。輸出指示了調用的所有 action 處理器,調用的順序,action 是否有其它輸出。

技術上, eosio.token 合約本可以忽略在線轉賬而直接修改余額。然而,這個例子,eosio.token 合約遵循 token 慣例,要求所有賬戶余額可以可以從 transfer action 總和中推導。也要求資金的發送方和接收方被通知以便他們能自動化處理存款和取款。

如果你想看廣播的實際的 transaction, 可以用 -d -j 選項指示 “不要廣播” 及 “以 json 格式返回 transaction”。

$ cleos push action eosio.token issue '["user", "100.0000 SYS", "memo"]' -p eosio@active -d -j {   "expiration": "2018-05-25T19:02:58",   "ref_block_num": 18200,   "ref_block_prefix": 614206268,   "max_net_usage_words": 0,   "max_cpu_usage_ms": 0,   "delay_sec": 0,   "context_free_actions": [],   "actions": [{       "account": "eosio.token",       "name": "issue",       "authorization": [{           "actor": "eosio",           "permission": "active"         }       ],       "data": "00000000007015d640420f00000000000453595300000000046d656d6f"     }   ],   "transaction_extensions": [],   "signatures": [     "SIG_K1_Khyk1GsxWCx4axqYMF2AREDvaZtZdFaQifNPkR9DomR7toJ4sGua7pMBNq2osV5TY8rcGNcgNwn1eFe3noAXsoUA26HNDJ"   ],   "context_free_data": [] }

轉賬 Tokens 給賬戶 “Tester”

現在賬戶 user 已經有 tokens, 我們將轉一些給賬戶 tester。我們指示 user 授權這次 action 用權限參數 -p user@active 。

$ cleos push action eosio.token transfer \         '[ "user", "tester", "25.0000 SYS", "m" ]' -p user@active executed transaction: 06d0a99652c11637230d08a207520bf38066b8817ef7cafaab2f0344aafd7018  268 bytes  1000 cycles #   eosio.token <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"} >> transfer #          user <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"} #        tester <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}

部署 Exchange 合約

類似于上面的例子,我們能部署 exchange 合約。exchange 合約提供了創建及交易貨幣的能力。假設從 EOSFORCEIO 源碼的根目錄運行。

$ cleos create account eosio exchange  \         EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \         EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 executed transaction: 4d38de16631a2dc698f1d433f7eb30982d855219e7c7314a888efbbba04e571c  364 bytes  1000 cycles #         eosio <= eosio::newaccount            {"creator":"eosio","name":"exchange","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxe... $ cleos set contract exchange build/contracts/exchange -p exchange@active Reading WAST/WASM from build/contracts/exchange/exchange.wasm... Using already assembled WASM... Publishing contract... executed transaction: 503dddec456ae301ef467c6a05bc6bf61e1ea21ab911ef6cc6e0750001b675c8  33888 bytes  5841 us #         eosio <= eosio::setcode               {"account":"exchange","vmtype":0,"vmversion":0,"code":"0061736d0100000001bb022f60067f7e7f7f7f7f00600... #         eosio <= eosio::setabi                {"account":"exchange","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d650e0...

部署 Eosio.msig 合約

eosio.msig 合約允許多方異步簽署單個 transaction。EOSFORCEIO 在基礎層面提供多重簽名支持,但是它需要一個同步的旁通道可以搬運數據及簽署數據。 Eosio.msig 是一種更加友好的方式,可以異步建議,批準,及最終出版多方的同意。

采用下述命令部署 Eosio.msig 合約。

$ cleos create account eosio eosio.msig  \         EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \         EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 #         eosio <= eosio::newaccount            {"creator":"eosio","name":"eosio.msig","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJ... $ cleos set contract eosio.msig build/contracts/eosio.msig -p eosio.msig@active Reading WAST/WASM from build/contracts/eosio.msig/eosio.msig.wasm... Using already assembled WASM... Publishing contract... executed transaction: 3433c434bdef42ba2150d5df46c17e0258f20b7836a057911faa2daa66262338  8864 bytes  1319 us #         eosio <= eosio::setcode               {"account":"eosio.msig","vmtype":0,"vmversion":0,"code":"0061736d010000000198011760017f0060047f7e7e7... #         eosio <= eosio::setabi                {"account":"eosio.msig","abi":"0e656f73696f3a3a6162692f312e30030c6163636f756e745f6e616d65046e616d650...

多索引表示例

描述

在這篇教程中我們將瀏覽在智能合約中創建和使用多索引表的步驟。

注釋

多索引表是一種在內存中緩存狀態和數據為了快速訪問的方法。多索引表支持創建,讀,更新和刪除(CRUD)操作,有些區塊鏈不支持(區塊鏈僅支持創建和讀)。

多索引表提供了一種快速訪問的數據存儲,是一種實用的在智能合約中存儲數據的方式。區塊鏈記錄 transactions, 但你應該用多索引表存儲應用數據。

它們是多索引表,因為它們支持在數據上使用多個索引。主鍵索引類型必須是 uint64_t 并且必須唯一,但是其它二級索引可以有重復。最多可以建16個索引并且 字段類型可以是 uint64_t, uint128_t, uint256_t, double 和 long double 。

如果你想在字符串上建索引,你需要將其轉換成整數類型,并且將結果存儲在一個字段上然后在其上建索引。

1、創建一個 struct

創建一個 struct , 它將被存在多索引表中,并且在想建索引的字段上定義 getters 。

記住這些 getters 其中之一必須名為 "primary_key()", 如果沒有,編譯器 (eosio-cpp)將生成一個錯誤。它無法發現字段用作主鍵。

如果你想建多個索引(最多允許16個),然后為想建索引的字段定義一個 getter, 這次名字不那么重要,因為你將傳遞 getter 名字進入 typedef 。

C struct [[eosio::table]] mystruct { uint64_t key; uint64_t secondid; std::string name; std::string account;

uint64_t primary_key() const { return key; } // getter for primary key      uint64_t by_id() const {return secondid; } // getter for additional key   };

這兒要注意兩件事: 

屬性 [[eosio::table]] 對 ABI 生成器是需要的,eosio-cpp, 識別出你想通過 ABI 暴露這個表并且使它在智能合約外可見。

2.struct 名稱少于12個字符并且都是小寫。

typedef 多索引表并且定義索引

定義將使用 mystruct 的多索引表,告訴它索引什么以及怎樣獲取被索引的數據。主鍵將被自動創建,因此使用上述 struct, 如果我要一個只有主鍵的多索引表 將定義如下:

C

typedef eosio::multi_index datastore;

這定義了多索引出入表名 N(mystruct) 和 struct 名 "mystruct"。N(mystruct) 執行一次編譯轉換從 struct 名到 uint64_t 并且這個 uint64_t 被用來識別屬于這個多索引表的數據。

要增加二級索引,使用 indexed_by 模板做參數,因此定義變為:

C

typedef eosio::multi_index<N(mystruct), mystruct, indexed_by<N(secondid), const_mem_fun>> datastore;

這兒

indexed_by<N(secondid), const_mem_fun>

參數

字段名轉換為整數,N(secondid)

用戶自定義鍵提取器, const_mem_fun

如果想建3個索引

C  

struct [[eosio::table]] mystruct    {      uint64_t     key;       uint64_t     secondid;      uint64_t            anotherid;      std::string  name;       std::string  account;       uint64_t primary_key() const { return key; }      uint64_t by_id() const {return secondid; }      uint64_t by_anotherid() const {return anotherid; }   };

typedef eosio::multi_index<N(mystruct), mystruct, indexed_by<N(secondid), const_mem_fun>, indexed_by<N(anotherid), const_mem_fun>> datastore;

諸此類推。

這兒有一件重要的事要注意,struct 名稱匹配表名,并且名稱將出現在 abi 文件,必須滿足規則(少于12個字符并且都是小寫)。如果不滿足規則,這些表通過 abi 將 不可見(你可以通過編輯 abi 文件規避這個限制)。

3.創建定義類型的局部變量

// local instances of the multi indexes   pollstable _polls; votes _votes;

現在我已經定義了一個有兩個索引的多索引表,我可以在智能合約中用這個表。

下面展示一個用了兩個多索引表的工作智能合約的例子。這兒你能看出怎樣迭代表以及怎樣在同一合約中用兩個表。

C

#include

using namespace eosio;

class youvote : public contract { public: youvote(account_name s):contract(s), _polls(s, s), _votes(s, s) {}

篇幅有限,此部分代碼略,詳見:https://eosforce.github.io/Documentation/#/zh-cn/contract/

END

eosio 合約 創建 token cleos
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


主站蜘蛛池模板: 成人免费网站www网站高清 | 国产毛片99 | 理论片毛片 | 中文字字幕在线中文乱码范文 | 日本欧美高清视频 | 一区二区三区在线播放视频 | 国产精品视频在线观看免费 | 久久综合久久综合九色 | 少妇喷潮明星 | 538国产精品一区二区 | 欧美做爰性生交视频 | 中文字幕日韩精品一区 | 无码任你躁久久久久久 | 性俄罗斯交xxxxx免费视频 | 变态 另类 国产 亚洲 | 97夜夜澡人人双人人人喊 | 国产精品一区在线播放 | 人人爽人人爽人人爽 | 日韩一三区 | 国产精品区一区二区三 | 污片在线看| 青青草十七色 | 亚洲色www永久网站 少妇人妻综合久久中文字幕 | 不卡中文字幕在线观看 | 久久久久久综合网 | 成年人黄色av | 久久久综合久久 | 欧美自拍偷拍一区 | av网站在线看 | 久久久久久久网 | 欧美性色黄大片人与善 | 一本久久a久久精品vr综合 | 成人a免费 | 国产精品1000夫妇激情啪 | 一区二区三区无码高清视频 | 91av蝌蚪| 天天撸日日夜夜 | 中文字幕第十二页 | 九九综合 | 日本欧美一区二区三区 | 国产精品传媒在线观看 | 天天av天天 | 在线中文字幕视频 | 国产偷久久一级精品av小说 | 久久99精品国产麻豆婷婷小说 | 国内精品久久久久久久日韩 | 国产国模在线观看免费 | 无套内射极品少妇chinese | 韩日一区二区三区 | 欧美伦理一区二区三区 | 精品视频久久久久 | 蜜臀精品国产高清在线观看 | 50一60岁老妇女毛片 | 欧美性xxxx极品hd欧美风情 | 91老司机在线 | 激情网站在线 | 免费看的黄色录像 | 久久久久久一区 | 香蕉依人 | 传媒一区二区 | 99久久亚洲精品视香蕉蕉v | 蜜桃传媒av免费观看麻豆 | 中国女人一级一次看片 | 波多野结衣导航 | 中文文字幕文字幕亚洲色 | 成人免费高清在线观看 | 久久精品美女视频 | 国产一区二区三区观看 | 狠狠综合久久av一区二区小说 | 国产精品老女人 | 偷看美女洗澡一二三四区 | 亚洲娇小与黑人巨大交 | 亚洲成av人片在线观看无 | 影音先锋中文在线 | a∨av白浆导航 | 好吊视频一区二区三区 | 免费国产黄色网址 | 亚洲精品国产一区黑色丝袜 | 久久免费视频观看 | 日韩在线不卡视频 | 黄色片网战 | av高潮| 三级毛片av | 亚洲精品456在线播放第一页 | 爱情岛论坛国产首页 | jav久久亚洲欧美精品 | 欧美xxxx视频| 青春草国产视频 | 国产日产欧产精品浪潮的免费功能 | 国语对白做受69按摩 | 国产午夜精品美女视频明星a级 | aaa欧美| 久久99国产精品久久99 | 天天综合网久久 | 好吊操这里只有精品 | 久久99国产精品久久99果冻传媒新版本 | 无码人妻精品一区二区三区99不卡 | 日韩av在线免费播放 | 成人午夜精品一区二区三区 | 日韩亚洲欧美一区二区三区 | а√ 天堂 在线官网 | 亚洲色图五月天 | 人人爽人人草 | 亚洲综合另类 | 日本黄动漫 | 亚洲情趣| 午夜人成免费视频 | 亚洲午夜高清 | 91嫩草视频在线观看 | 小视频免费在线观看 | 红色假期黑色婚礼2 | 成人国产精品久久久 | 九色自拍视频 | 99热官网| 天天干天天上 | 日韩精品专区在线影院重磅 | 四虎成人精品国产永久免费无码 | 少妇性俱乐部纵欲狂欢电影 | 欧美一区二区三区四区视频 | 亚洲熟妇色xxxxx欧美老妇 | 欧美 日韩 国产 成人 在线观看 | 97人人精品 | 一区二区亚洲视频 | 久热国产精品视频一区二区三区 | 国产av成人一区二区三区 | 欧美精品色呦呦 | 一级做受大片免费视频 | 中文字幕日韩精品亚洲七区 | 顶级少妇做爰视频在线观看 | 亚洲情热| 精品久久久久久久久久久国产字幕 | 免费无码国产v片在线观看 任我撸在线视频 | av.www| a久久久久 | 国产成人一区 | 中文字幕永久免费 | 少妇出轨乱人伦 | 日韩av一 | 国产在线最新 | 成人综合网站 | 久久精品国产清高在天天线 | 91精品国产高潮对白 | 亚洲一区二区三区偷拍女厕 | 婚后打屁股高h1v1调教 | 精品久久久久久无码中文字幕 | 久久无码av中文出轨人妻 | 亚洲精品国产一区二区精华液 | 精品国产青草久久久久福利 | 美国色视频 | 国产又色又爽又刺激在线观看 | 好男人中文资源在线观看 | 991本久久精品久久久久 | 久久久久久久国产精品毛片 | 欧美精品久久久久久久久老牛影院 | 纯爱无遮挡h肉动漫在线播放 | 亚洲情涩 | 日韩av高清在线观看 | 久久激情视频 | 日韩欧美精品一区二区 | 亚洲人交乣女bbw | 久草新 | 大江大河第三部50集在线观看旭豪 | 成人短视频在线播放 | 色婷婷香蕉在线一区二区 | 欧洲成人综合网 | 青青视频网 | 午夜精品免费 | 成人精品免费网站 | 488成人啪啪片 | 国产精品美女毛片真酒店 | 又粗又猛又爽又黄少妇视频网站 | 内射毛片内射国产夫妻 | 中文字幕午夜 | 国产精品久久久久久麻豆一区 | 男女av免费 | 用舌头去添高潮无码视频 | 少妇被爽到高潮动态图 | 欧美偷拍一区二区三区 | 日韩做爰视频免费 | 91av视频 | 91精品一线二线三线 | 另类少妇人与禽zozz0性伦 | 国语对白做受欧美 | 一边吃奶一边摸做爽视频 | 国产三级av在线播放 | 91在线观看免费视频 | 护士奶头又白又大又好摸视频 | 97性视频| 日韩成人在线看 | 国产亚洲精品久久久456 | 丰满少妇久久久久久久 | 91chinese一区二区三区 | 亚洲国产成人久久精品大牛影视 | 国产91精品露脸国语对白 | 天堂福利在线 | 中文字幕人妻丝袜乱一区三区 | 欧产日产国产精品精品 | 国产成人麻豆精品午夜福利在线 | 深夜视频在线看 | 嫩模写真一区二区三区三州 | 妇女性内射冈站hdwwwooo | 永久免费网站直接看 | 不卡视频一区二区三区 | 日本白嫩少妇hdtube | 国产男女猛烈无遮挡免费视频 | 国内精品国产成人国产三级粉色 | 欧美一级三级 | 看全色黄大色大片免费久久 | 激情国产精品 | 欧美第一黄网免费网站 | 午夜av在线免费观看 | 你懂的视频在线播放 | 亚洲自拍中文 | 久久人妻内射无码一区三区 | 精品香蕉一区二区三区 | 伊人ab | 久久99网| 色老头在线一区二区三区 | 国产欧美一区二区久久性色99 | 精品欧洲av无码一区二区三区 | 久久久亚洲欧洲日产国码二区 | 天天躁日日躁狠躁欧美 | 又粗又大又硬又长又爽 | 日日噜噜噜噜人人爽亚洲精品 | 九九九九九九伊人 | 国产色婷婷五月精品综合在线 | 无码精品视频一区二区三区 | 国产美女网 | 日本少妇xx洗澡xxxx偷窥 | 国产精品.xx视频.xxtv | av中文字幕免费在线观看 | 国产精品无码一区二区三级 | av伦理在线| 欧美一区二区三区免费视频 | 91吃瓜今日吃瓜入口 | 国产免费丝袜调教视频 | 男女激情在线观看 | 最新在线视频 | 日韩精品一区二区三区在线观看 | 天天爱夜夜操 | 无套内射无矿码免费看黄 | 欧美va天堂在线电影 | 日本一级大黄毛片基地 | 18禁黄久久久aaa片广濑美月 | 国产午夜精品一区 | 国产精品初高中害羞小美女文 | 老熟妇午夜毛片一区二区三区 | 国产国产小嫩模无套内谢 | 国产夫妻自拍小视频 | 久久久久久久久久久av | 精品无码一区二区三区不卡 | 福利在线一区 | 少妇啪啪高潮全身舒爽 | 亚洲人女屁股眼交3之懂色 亚洲人屁股眼子交1 | 久久久亚洲国产精品麻豆综合天堂 | 91免费在线视频观看 | 久久久久久美女精品啪啪 | 久久久成人免费视频 | 好吊妞人成视频在线观看27du | 色小妹av | 四虎在线免费观看视频 | 国产二区精品视频 | 亚洲免费影院 | 靠逼网站在线观看 | 亚洲第一影视 | 国产色综合视频 | 亚洲浮力影院久久久久久 | 国产精品久久久久无码av色戒 | 国产九一视频 | 蜜芽tv福利在线视频 | 夜夜偷天天爽夜夜爱 | 久久深夜 | 暖暖av| 狠狠色伊人亚洲综合第8页 狠狠色综合久久婷婷 | 成人免费视频视频在线观看 免费 | 久久久青青草 | 亚洲色图国产视频 | 欧美黄页在线观看 | 色一情一乱一伦一区二区三区 | 精品久久国产 | 亚洲色欲综合一区二区三区 | 午夜熟女插插xx免费视频 | 国产精品免费看久久久无码 | 亚洲精品免费在线观看视频 | 亚洲一区二区三区黄色 | 成年人色片 | 特级淫片裸体免费看 | 国产在线国偷精品免费看 | 欧美亚洲精品suv一区 | 波多野结衣一区二区三区高清 | 免费看成人av | 日韩精品久久久久久久 | 麻豆网址 | 少妇又紧又深又湿又爽视频 | 国产精品男女啪啪 | 中文字幕日产av | 毛片在线播放视频 | 成人午夜视频免费在线观看 | 97香蕉久久超级碰碰高清版 | 熟女精品视频一区二区三区 | 欧美精品黑人粗大 | 99久久久无码国产aaa精品 | 精品国产一区二区三区久久 | 国产九一视频 | 日韩成人av在线 | 婷婷丁香九月 | 亚洲欧美日韩国产精品一区午夜 | 麻豆免费在线观看视频 | 久久久久女教师免费一区 | 欧美日韩国产在线一区 | 亚洲精品久久久久中文字幕二区 | 五月天综合网站 | 两个女人互相吃奶摸下面 | 成人免费毛片偷拍 | 亚洲欧美在线不卡 | 国产乱淫a∨片免费观看 | 久久久噜噜噜www成人网 | 日日噜噜夜夜狠狠va视频 | 久草视频免费播放 | 国产高潮国产高潮久久久91 | 日日摸日日碰夜夜爽无码 | 国产成人天天爽高清视频 | 日韩a无v码在线播放免费 | 亚洲国产精品99久久久久久久久 | 欧美性大战久久久 | 天堂аⅴ在线最新版在线 | 久久久久久久国产精品美女 | 情侣酒店偷拍一区二区在线播放 | 中文字幕在线第一页 | 欧美性生活网 | 国产精品无码专区在线播放 | 国产精品爽爽久久久久久 | 欧美三级在线 | 成人片黄网站色大片免费 | 天天看黄色 | 国产综合亚洲精品一区二 | 免费观看又色又爽又黄的崩锅 | 亚洲国产av一区二区三区 | 在线99热| 在线一区二区三区在线一区 | 成人羞羞视频在线观看免费 | 白天躁晚上躁麻豆视频 | 国产成人精品123区免费视频 | 人人澡人人添人人爽一区二区 | 五月天婷婷基地 | 日韩av自拍偷拍 | 久久久噜噜噜久久中文字幕色伊伊 | 国产一区二区三区免费观看网站上 | h视频在线看 | 亚洲综合精品一区二区三区 | 欧美激情五月 | 一区二区三区成人久久爱 | 国产精品黄在线观看免费软件 | 九九热久久免费视频 | 欧美日韩二区三区 | 亚洲天堂激情 | 男人天堂亚洲 | 久久综合国产伦精品免费 | 九九热久久久99国产盗摄蜜臀 | 在线观看成人动漫 | 欧美激烈精交gif动态图 | 国产精品www老牛影视 | 爱情岛免费永久网站 | 欧美日韩精品在线视频 | 亚洲二区视频 | 午夜精品久久久久久久蜜桃 | 中文在线免费观看入口 | 国产精品久久久久久久久久小说 | www久久久精品 | 国产午夜精品一区二区三区嫩草 | 九九九九热精品免费视频点播观看 | 中文字幕在线不卡一区二区 | 精品无码国产一区二区三区av | 国产成人精品免费视频 | 国内成人自拍 | 在线网站av | 粉嫩在线一区二区三区视频 | 性xxxx视频播放免费 | 99国产精品一区二区 | 狠狠色依依成人婷婷九月 | 91超碰在线免费观看 | 亚洲色图制服丝袜 | 豆国产97在线 | 亚洲 | 欧美你懂的 | 毛片网站免费在线观看 | 成人三级k8经典网 | 日本女优一区 | 欧性猛交ⅹxxx乱大交 | 91欧美一区二区三区 | 97国产精品亚洲精品 | 青青青在线视频免费观看 | 特级a老妇做爰全过程 | 欧美影片网站推荐 | 五月婷婷激情综合 | 国产精品久久久久久爽爽爽床戏 | 欧美最猛黑人xxxx黑人猛交98 | 男人天堂伊人 | 中文在线а天堂中文在线新版 | 国产精品毛片一区视频播 | 丁香花免费高清完整在线播放 | bnb99八度免费影院 | 成人三级做爰av | 五月婷婷视频 | 国产原创视频在线观看 | 久久中文字幕无码专区 | 欧美色欧美亚洲高清在线视频 | 粗大的内捧猛烈进出 | 五月天堂网 | 亚洲天堂网在线视频 | 精品国产传媒 | 视频黄色免费 | 亚洲国产无线乱码在线观看 | 久久久国产成人一区二区三区 | 久久婷婷五月综合色一区二区 | 一本大道卡一卡二卡三乱码全集资源 | 一二区在线观看 | 伊人爱爱网 | 久精品视频 | 国产 精品 自在自线 | 在线免费视频一区 | 日韩av无码中文无码电影 | 国产精品激情av久久久青桔 | 88久久精品无码一区二区毛片 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 色噜噜狠狠一区二 | 日韩精品一区二区三区蜜臀 | 绯色av中文字幕一区三区 | 夜夜艹 | 无线日本视频精品 | 国产欧美日韩视频在线观看 | 日本在线视频www | 18禁白丝喷水视频www视频 | 美女内射毛片在线看3d | 亚洲国产成人aⅴ毛片大全密桃 | 国产精品欧美亚洲 | 姑娘第5集在线观看免费好剧 | 成 人色 网 站 欧美大片在线观看 | 日韩视频免费看 | 这里只有精品在线播放 | 午夜成人鲁丝片午夜精品 | 人妻人人做人做人人爱 | 天堂va欧美va亚洲va好看va | 欧美激情xxxxx | 免费的a级片 | 成年人网站在线观看视频 | 性疯狂做受xxxx高清视频 | 国产精品7777777 | 国产欧美在线视频 | 国产精品亚韩精品无码a在线 | 久久无码人妻一区二区三区午夜 | 少妇出轨乱人伦 | 国产又爽又黄又无遮挡的激情视频 | jzzjzz日本丰满成熟少妇 | 在线视频午夜 | 国产成+人欧美+综合在线观看 | 伊人久久大香线蕉综合5g | 在线观看亚洲成人 | 欧美精品乱人伦久久久久久 | 999riav | 亚洲成色www久久网站夜月 | 亚洲欧洲无码一区二区三区 | 无码孕妇孕交在线观看 | 黑人性视频 | 天天综合天天综合 | 国产精品揄拍一区二区 | 中文字幕91 | 国产中文字幕久久 | 亚洲 欧美日韩 综合 国产 | 亚洲女欲精品久久久久久久18 | 美女高潮网站 | 日本九九视频 | 色哟哟哟www精品视频观看软件 | 国产av天堂亚洲国产av天堂 | 黄色片的网站 | 亚洲热妇无码av在线播放 | 免费视频精品 | 哪里可以看免费毛片 | 一级特黄性色生活片 | 欧美日韩一区二区三区精品 | 欧美日韩喷水 | 中文字幕日韩精品亚洲七区 | 亚洲精品一区二区三区在线观看 | 中文字幕在线观 | 国产精品美女一区二区视频 | 韩国美女福利视频 | 国产日产精品久久久久快鸭 | 在线观看老湿视频福利 | 欧美午夜理伦三级在线观看 | 成人性生交大片免费看96 | 污污网站在线 | 强乱中文字幕 | 久久久久久国产精品免费免费 | 男人av无码天堂 | 成人小视频在线免费观看 | 国产精品美女久久久久久久久久久 | 亚洲综合另类小说色区色噜噜 | 日韩在线小视频 | 在线国产区 | 91av导航| 男人的天堂在线观看av | 欧美精品欧美极品欧美激情 | 亚洲乱码国产乱码精品精大量 | 色七七在线| 精品乱码一区二区三四区 | 秋霞av鲁丝片一区二区 | 99热热99| 免费av不卡 | 中文字幕日韩精 | 日韩av手机在线免费观看 | 中文字幕久久久 | 蜜乳av 懂色av 粉嫩av | 自拍偷拍另类 | 精品国产一区二区三区av 性色 | 日韩在线网址 | 亚洲人成中文字幕在线观看 | 中文字幕在线观看一区 | 成人午夜久久 | 中国女人真人一级毛片 | 中文字幕亚洲乱码熟女在线萌芽 | 久久99精品久久久久子伦 | 国产精品无码专区在线观看 | 亚洲另类色综合网站 | 四虎影视免费在线观看 | 全部免费的毛片在线看 | 性欧美一区 | 91香蕉视频黄| 99久久精品午夜一区二区 | 欧美日韩综合一区二区三区 | 日本妇人成熟免费 | 国产中文字幕在线免费观看 | 综合激情在线 | 男人晚上看的网址 | 国模小丫大尺度啪啪人体 | 在线观看欧美一区二区 | 黑人操白妞 | 激情四虎| 成在线人av免费无码高潮喷水 | 亚洲国产av一区二区三区四区 | 日本在线视频免费 | 欧美啪啪网 | 黄色一级大片 | 日韩中文字幕一区二区三区 | 亚洲精品久久久日韩美女极品 | 久久成年片色大黄全免费网站 | 二男一女一级一片 | 巨乳女教师佐山爱,夫前在线 | 国产无套内射久久久国产 | 极品少妇被黑人白浆直流 | 久草精品视频在线观看 | 精品乱码一区二区三区四区 | 欧美色成人 | 国产精品一区二区三区在线看 | 男女做爰全过程免费视频播放 | 性饥渴的农村熟妇 | 国产人妻人伦精品1国产 | 992tv成人国产福利在线 | 久久最新 | 欧美黑人性暴力猛交喷水 | jzzijzzij亚洲成熟少妇18 jzzijzzij亚洲农村妇女 | 日本在线中文字幕专区 | 亚洲另类激情视频 | 97国产精品视频 | 国产露脸久久高潮 | 久久久久国产精品无码免费看 | 最新国产拍偷乱偷精品 | 免费操片 | 人少妇精品123在线观看 | 肉色欧美久久久久久久免费看 | 日韩精品资源 | 不卡av网| 男人的天堂avav | 国产欧美一区二区精品性 | 精品成人一区 | 国产成人精品日本亚洲网站 | 狠狠色伊人亚洲综合第8页 狠狠色综合久久婷婷 | 青草视频污 | 99精品久久久久久久免费看蜜月 | 亚洲最大黄色网址 | 极品videosvideo喷水 | 男女做爰猛烈叫床无遮挡 | 波多野结衣在线播放视频 | 麻豆丰满少妇chinese | 揉捏奶头高潮呻吟视频 | 香蕉久久久久久av成人 | 久久久精品国产sm最大网站 | 国产精品免费麻豆入口 | 欧美裸体xxxx极品少妇软件 | 久久久亚洲国产天美传媒修理工 | 亚洲欧美一区二区精品久久久 | 波多野结衣视频免费看 | 日本无遮挡边做边爱边摸 | 久久精品一区二区三区av | 99精品视频在线免费观看 | 麻豆视频在线免费观看 | 四虎成人精品永久免费av九九 | 男人边吃奶边做好爽免费视频 | 后进极品美女白嫩翘臀 | 欧美成人家庭影院 | 九九久久精品国产 | 久久久久久成人 | 中午字幕无线码一区2020 | 午夜大尺度做爰激吻视频 | 婷婷91| 国产精品va无码免费 | 日本在线中文字幕专区 | 色88888久久久久久影院 | 亚洲涩涩涩 | 欲妇荡岳丰满少妇岳91在线 | 99国产精品久久久久久久成人热 | www亚洲高清 | 亚洲免费视频播放 | 四川丰满少妇毛片新婚之夜 | 日本一级理论片在线大全 | 怡红院av亚洲一区二区三区h | 高潮videossex高潮 |