免费视频久久久久_999色综合_天天色成人网_亚洲综合自拍网_绯色av一区二区三区免费看_成人xxxx

實時滾動新聞

EOS部署、智能合約應用開發和代幣映射

2018-05-28 10:59:00    輕松萬里行        點擊:

  距離EOS主網上線還有不到一周,現在持有EOS的人請注意:如果不在交易所的,一定要去注冊下。近日,區塊鏈領域專家谷老師做了關于EOS部署、智能合約應用開發和代幣映射內容的技術分享,引起了眾多同行的關注。

\

  目前最大的EOS應用是區塊鏈百科(https://everipedia.org/),已獲得7500萬美元的融資,它對標的是維基百科。這個應用的大概規則是:比如當你要編輯一個詞條時,你需要抵押自己的Token,然后每天會產生限量token激勵,社區里的事情都要進行投票,進行自治,大于75%的投票,才可以修改詞條。這是因為它的內容是存放在IPFS里。當然,還有很多EOS應用,我只挑了一個典型的。

  EOS如何部署私有環境?

  https://github.com/EOSIO/eos/wiki

  編譯命令:https://github.com/EOSIO/eos/wiki/Local-Environment#2-building-eosio

\

  EOS網絡是由無數個nodes組成的,提供單獨keosd 錢包節點,可以單獨下。相對而言,以太坊節點會自動同步數據,會很慢。

  啟動EOS節點命令:./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

\

  使用cleos創建錢包及賬號(https://github.com/EOSIO/eos/wiki/Programs-&-Tools#cleos),這里要注意EOS錢包和以太坊錢包的區別:EOS主要管理私鑰,不是一個離線賬號,是建立在EOS節點上注冊后的賬號。

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ wallet unlock

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ wallet list

  管理2組賬號,第一組賬號是eosio,其他所有eos賬號都是在第一個eosio上派生出來的。

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ create key

  我們先來創建私鑰:

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ wallet import 私鑰

  現在就多了一組賬號。

  然后開始創建EOS上的賬戶。

  以太坊的賬號是一個40字符的字符串,很難被記住。EOS權限分組,owner是最高權限,active 可以管理賬號的資產。

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ create account eosio 唯一名字(可以搶注) OwnerKey ActiveKey

  這樣你的唯一名字就注冊到EOS網絡上了,別人可以直接給你這個名字的賬號里打錢或者各種操作,以上操作意味著創建賬戶和管理私鑰的內容就完成了。

  接下來就是創建合約,先來講2個案例:

  第一個案例:飛行寶

\

  飛行寶的具體邏輯是:用戶要坐飛機,在飛行前,用戶買了哪一期的哪一個航班,EOS提供了一個多索引的數據表結構叫multi_Index,

  uint64_t term_Id; 每一天開一期

  account_name 就是我們剛剛在eos上注冊的唯一用戶名,代表購買者賬號

  uint64_t content; 可以留言

  account_name get_poster() const { return account }

  fmulti_index多索引,類似一個mysql一個表名,第一個字段是表名,后面是列,就是定義了一個數據表。

  總共有4個操作:第一個操作是購買某一天的航班,購買就是一個添加數據的過程;第二操作是獲取購買的情況;第三個操作是查詢你的所有購買記錄,返回一個數組;第四個操作是修改操作。

  我們來實際操作下:

  eosiocpp -o flybaby.wast flybaby.cpp

  生成一個 webassembly 文件,這是ABI文件(現在EOS網絡還有一些bug,要手動改下某幾處ABI文件才可以運行)。

  現在開始部署合約

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ set contract 唯一名字 flybaby

\

  和以太坊有區別的是EOS可以修改智能合約。

  接下來是調用方法

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ push action 唯一名字 create '[1, 1, "唯一名字", 3000, "備注"]' -p 唯一名字

  說明調用成功

  cleos -u http://47.98.56.32:8888/ --wallet-url http://47.98.56.32:9999/ get table 唯一名字 唯一名字 fdata

  返回一個JSON數據,用一個新賬號再來買一個。返回2個飛行寶購買記錄,說明成功。get 方法是獲取某一天的航班,list方法返回我所有的飛行寶購買記錄。

  合約源碼:

  flybaby.cpp

  #include

  #include

  using namespace eosio;

  using std::string;

  class flybaby : public eosio::contract {

  public:

  //self 代表合約擁有者賬號.

  flybaby( account_name self ):contract(self){}

  /// @abi table

  struct record {

  uint64_t term_id; //飛行寶期數+航班ID作為主鍵

  account_name customer; //購買者賬號

  uint64_t amount; //購買數量

  string content; //留言

  //客戶在當期僅能買一次某航班,但可以買多個不同航班.

  uint64_t primary_key()const { return term_id; }

  //根據客戶篩選出他購買的航班列表.

  account_name get_poster() const { return customer; }

  EOSLIB_SERIALIZE(record, (term_id)(customer)(amount)(content))

  };

  typedef eosio::multi_index

  indexed_by

  const_mem_fun> > records;

  using contract::contract;

  /// @abi action

  void create(uint64_t term,uint64_t id,account_name user,uint64_t amount, string content) {

  require_auth( user ); //驗證權限,只能用自己的賬號給你自己買.

  records datable( _self, _self); //定義數據庫對象,數據庫屬于合約創建者,并且都存在一個表中.

  //簡化僅表達意思,沒做校驗,注意運算符優先級.

  uint64_t term_id = (term << 32) + id;

  datable.emplace(user, [&]( record & d){

  eosio::print("ok this is lamda");

  //d.term_id = datable.available_primary_key();

  d.term_id = term_id;

  d.customer = user;

  d.amount = amount;

  d.content = content;

  eosio::print("update");

  });//數據庫內容創建

  }

  void get(uint64_t term,uint64_t id,account_name user) {

  require_auth(user);

  records datable(_self, _self);

  uint64_t term_id = (term << 32) + id;

  auto info = datable.find(term_id);

  eosio::print("Term_id: ", info->term_id,

  " Customer: ", name{info->customer},

  " Amount: ", info->amount,

  " Content: ", info->content.c_str());

  }

  void list(account_name user) {

  require_auth(user);

  records datable(_self, _self);

  auto poster_index = datable.template get_index();

  auto pos = poster_index.find( user );

  for (; pos != poster_index.end(); pos++)

  {

  eosio::print("Term_id: ", pos->term_id,

  " Customer: ", name{pos->customer},

  " Amount: ", pos->amount,

  " Content: ", pos->content.c_str());

  eosio::print("||");

  }

  }

  void change(account_name user, uint64_t term, uint64_t id, string content)

  {

  require_auth(user);

  records datable( _self, _self);

  uint64_t term_id = (term << 32) + id;

  auto info = datable.find(term_id);

  eosio_assert(info->customer == user, "not your account");

  //此處payer不是user

  datable.modify(info, _self, [&](auto& p){

  if (content != "")

  p.content = content;

  });

  }

  void dele(account_name user, uint64_t term, uint64_t id)

  {

  require_auth(user);

  records datable( _self, _self);

  uint64_t term_id = (term << 32) + id;

  auto info = datable.find(term_id);

  eosio::print(info->content.c_str());

  eosio_assert(info->customer == user, "not your account");

  datable.erase(info);

  }

  };

  EOSIO_ABI(flybaby, (create)(get)(list)(change)(dele))

  接下來講解 Token 的合約

  EOS上沒有ERC20的協議,來看下邏輯:

\

  currency_stats代表一個資產的結構體,有資產的代號、名稱;

  max_supply 最大發行量;

  issuer 是代幣的發行者;

\

  填寫好Token的名字、代號、發行量,做好準備工作。

  require_auth(st.issuer) 只有發行者可以修改當前的發行量;

  token::issue 方法就是發布出去;

  token::transfer 就是轉賬功能;

  就是對余額進行增加、減少的處理。

  合約源碼:

  token.cpp

  /**

  * @file

  * @copyright defined in eos/LICENSE.txt

  */

  #include "mydogcon.hpp"

  namespace eosio {

  void token::create( account_name issuer,

  asset maximum_supply )

  {

  require_auth( _self );

  auto sym = maximum_supply.symbol;

  eosio_assert( sym.is_valid(), "invalid symbol name" );

  eosio_assert( maximum_supply.is_valid(), "invalid supply");

  eosio_assert( maximum_supply.amount > 0, "max-supply must be positive");

  stats statstable( _self, sym.name() );

  auto existing = statstable.find( sym.name() );

  eosio_assert( existing == statstable.end(), "token with symbol already exists" );

  statstable.emplace( _self, [&]( auto& s ) {

  s.supply.symbol = maximum_supply.symbol;

  s.max_supply = maximum_supply;

  s.issuer = issuer;

  });

  }

  void token::issue( account_name to, asset quantity, string memo )

  {

  auto sym = quantity.symbol;

  eosio_assert( sym.is_valid(), "invalid symbol name" );

  auto sym_name = sym.name();

  stats statstable( _self, sym_name );

  auto existing = statstable.find( sym_name );

  eosio_assert( existing != statstable.end(), "token with symbol does not exist, create token before issue" );

  const auto& st = *existing;

  require_auth( st.issuer );

  eosio_assert( quantity.is_valid(), "invalid quantity" );

  eosio_assert( quantity.amount > 0, "must issue positive quantity" );

  eosio_assert( quantity.symbol == st.supply.symbol, "symbol precision mismatch" );

  eosio_assert( quantity.amount <= st.max_supply.amount - st.supply.amount, "quantity exceeds available supply");

  statstable.modify( st, 0, [&]( auto& s ) {

  s.supply += quantity;

  });

  add_balance( st.issuer, quantity, st, st.issuer );

  if( to != st.issuer ) {

  SEND_INLINE_ACTION( *this, transfer, {st.issuer,N(active)}, {st.issuer, to, quantity, memo} );

  }

  }

  void token::transfer( account_name from,

  account_name to,

  asset quantity,

  string /*memo*/ )

  {

  eosio_assert( from != to, "cannot transfer to self" );

  require_auth( from );

  eosio_assert( is_account( to ), "to account does not exist");

  auto sym = quantity.symbol.name();

  stats statstable( _self, sym );

  const auto& st = statstable.get( sym );

  require_recipient( from );

  require_recipient( to );

  eosio_assert( quantity.is_valid(), "invalid quantity" );

  eosio_assert( quantity.amount > 0, "must transfer positive quantity" );

  eosio_assert( quantity.symbol == st.supply.symbol, "symbol precision mismatch" );

  sub_balance( from, quantity, st );

  add_balance( to, quantity, st, from );

  }

  void token::sub_balance( account_name owner, asset value, const currency_stats& st ) {

  accounts from_acnts( _self, owner );

  const auto& from = from_acnts.get( value.symbol.name() );

  eosio_assert( from.balance.amount >= value.amount, "overdrawn balance" );

  if( from.balance.amount == value.amount ) {

  from_acnts.erase( from );

  } else {

  from_acnts.modify( from, owner, [&]( auto& a ) {

  a.balance -= value;

  });

  }

  }

  void token::add_balance( account_name owner, asset value, const currency_stats& st, account_name ram_payer )

  {

  accounts to_acnts( _self, owner );

  auto to = to_acnts.find( value.symbol.name() );

  if( to == to_acnts.end() ) {

  to_acnts.emplace( ram_payer, [&]( auto& a ){

  a.balance = value;

  });

  } else {

  to_acnts.modify( to, 0, [&]( auto& a ) {

  a.balance += value;

  });

  }

  }

  } /// namespace eosio

  EOSIO_ABI( eosio::token, (create)(issue)(transfer) )

  token.hpp

  /**

  * @file

  * @copyright defined in eos/LICENSE.txt

  */

  #pragma once

  #include

  #include

  #include

  namespace eosiosystem {

  class system_contract;

  }

  namespace eosio {

  using std::string;

  class token : public contract {

  public:

  token( account_name self ):contract(self){}

  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 );

  private:

  friend eosiosystem::system_contract;

  inline asset get_supply( symbol_name sym )const;

  inline asset get_balance( account_name owner, symbol_name sym )const;

  private:

  struct account {

  asset balance;

  uint64_t primary_key()const { return balance.symbol.name(); }

  };

  struct currency_stats {

  asset supply;

  asset max_supply;

  account_name issuer;

  uint64_t primary_key()const { return supply.symbol.name(); }

  };

  typedef eosio::multi_index accounts;

  typedef eosio::multi_index stats;

  void sub_balance( account_name owner, asset value, const currency_stats& st );

  void add_balance( account_name owner, asset value, const currency_stats& st,

  account_name ram_payer );

  public:

  struct transfer_args {

  account_name from;

  account_name to;

  asset quantity;

  string memo;

  };

  };

  asset token::get_supply( symbol_name sym )const

  {

  stats statstable( _self, sym );

  const auto& st = statstable.get( sym );

  return st.supply;

  }

  asset token::get_balance( account_name owner, symbol_name sym )const

  {

  accounts accountstable( _self, owner );

  const auto& ac = accountstable.get( sym );

  return ac.balance;

  }

  } /// namespace eosio

  提問環節

  1:講講你的EOS信仰

  谷老師:我一般對EOS失去信心的時候,我就會去reddit看下EOS上朋友們的留言,上面的消息是很及時,而且上面的朋友特別友好,給你不割肉的動力。比如:big news is coming soon……winter is coming……Image you are one of them……The Dawn is coming……

  每當我難受的時候,我就來這里,我的信仰就是來自這里。

  2:主鏈上線時間有沒有風險?

  谷老師:現在EOS 1.0 上線已經完成 94%,EOS還是可以的,有一定風險會延遲。現在講一下EOS百萬TPS的梗:它一共21個超級節點,有點類似我們在用負載均衡,比如10臺機器,輪訓來分發流量,如果當前有1萬交易,會分到某個節點上,由于單臺服務器節點很高,能一次性處理。

  另外我推薦ONO這個區塊鏈應用,未來隨著區塊鏈的升級換代,提升基礎設施,也許我們后端開發就不像現在這樣去買一臺云服務器,而未來所有的后端就是一個區塊鏈,所有應用都會直接構建到區塊鏈上,像聊天、打車就直接構建在像這樣的EOS區塊鏈上,打車的結算公開在區塊鏈上,就不存在殺熟的問題。甚至公司的形式也會發生變化,而是由使用者來決定。未來區塊鏈就不只是炒幣的功能。

  3:如果一個用戶開發了一個很好的應用,大戶如果抄襲,大戶會不會搶走EOS運行的資源?

  谷老師:根據你抵押的EOS份額來租用算力。這是一個商業邏輯,如果你的應用很火,就會有資本投你,算力不太可能被壟斷。

  谷老師在最后還講到,伴隨夏季的來臨,航班延誤或取消都進入了高發期。而航空延誤險則是很多常旅客的必備,而全球區塊鏈互助社區HMS,其基于區塊鏈技術和底層的風險保障邏輯,設計出的全自動的智能型全球航空飛行延誤互助保障合約——“飛行寶”現在已完成首例賠付。

  一直以來,區塊鏈技術和基于區塊鏈的項目,因為與現實世界脫節而蒙上了神秘的面紗。與此同時,底層技術不夠成熟、缺乏智能合約公鏈平臺,影響了區塊鏈技術的發展以及應用化的過程。HMS一直在探索區塊鏈技術和互助業務相結合的創新,為更多的現實場景提供服務,對促進區塊鏈世界與現實世界的進一步聯動有深刻意義,他非常看好這一應用。

相關新聞:

下一篇:最后一頁
中國質量萬里行 | 關于我們 | 聯系我們 | 服務聲明 | 人才招聘
Copyright © 2002 - 2018 中國質量萬里行
京公網安備11010502034432號     京ICP備13012862號
主站蜘蛛池模板: 国精日本亚洲欧州国产中文久久_亚洲国产精华_一级久久久久_97在线观视频免费观看_久久久国产精品伦理一区二区三区_日韩一区二区三区免费观看_日本成人a网站_免费在线观看毛片 | 亚洲小说少妇区图片_亚洲国产欧美在线人成_日本欧美v大码在线_国产精品精品自在线拍_国产亚洲一本大道中文不卡_在线观看黄动漫_亚洲国产精品一二三_国产精品免费看视频 | 亚洲免费天堂_麻豆.www_日本中文字幕精品_麻豆视频在线观看免费_上流社会韩剧免费观看_涩涩屋导航_久久亚洲精品成人_天堂资源中文网 | 国产极品在线视频_不卡日韩_高潮到不停喷水的免费视频_欧美人妇做爰XXXⅩ性高_日本欧美久久久久免费播放网_国产网曝门99视频在线看_成人在线视频中文字幕_国产精品视频一区牛牛视频 | 四虎永久在线精品国产馆v视影院_永久免费观看美女裸体视频的网站_女教师の爆乳bd在线观看_亚洲加勒比无码一区二区_性欧美牲交xxxxx视频欧美_五月色婷婷在线影院_国产人伦视频_粉嫩av一区二区三区在线 成人一在线视频日韩国产_超碰在线公开97_久久亚洲精品国产一区_国产精品久久不能_午夜亚洲精品专区高潮日w_kaori肉感在线播放_www.四虎影视.com_欧美日韩久 | 久久久国产视频91_亚洲国产AV美女网站_蜜臀av在线一区二区三区_超碰伊人久久_国产高清狼人香蕉在线_国产成人亚洲在线观看_亚洲欧美一级久久精品国产特黄_91pro国产福利网站www | 日本永久精品_国语精彩对白清晰_国产成人久久777777_激情99_中国久久精品_a级黄色录相_国产农村黄AAAAA特黄AV毛片_YY6080午夜福利无码理论 | 久久久久久久一级_69av导航_av高清免费_91精品欧美一区二区三区_成人免毛片_久久一级网站_中文字幕亚洲区_六月婷婷影院 | 久久久社区_硬汉视频在线观看_亚洲视频精品一区_jjzz4日本_黄色视免费_嘿咻嘿咻免费无码专区在线看_成人国产精品一区二区网站_人妻老妇乱子伦精品无码专区 | 少妇9999九九九九在线观看_人妻丰满熟妇aⅴ无码_人成午夜免费视频在线观看_麻豆中文字幕在线观看_少妇人妻偷人精品一区二区_国产二二三区_99re在线视频观看_国产欧美一区二区三区免费看 | 女女同性一区二区三区免费观看_国产一级久久_日韩欧美成人精品_無码一区中文字幕少妇熟女_91porny国产_激情久久久久久_色综久久综合桃花网国产精品_18禁强伦姧人妻又大又 | 两根一起进三P免费视频_色偷偷偷久久伊人大杳蕉_狠操在线_91成人在线精品视频_在线成人毛片_一级特黄bbbbb免费观看_91怡红院_免费人成网站视频在线观看国内 | 亚洲男人综合久久综合天堂_99爱视频在线_成人av午夜_中文字字幕码一二三区_国产综合不卡_国产综合13P_一区二区色_少妇三级全黄 | 福利在线看_日本在线天堂_热久久国产_日韩不卡在线观看日韩不卡视频_国产日产欧产精品精品蜜芽_韩国一级片免费_亚洲欧美日韩综合在线_免费不卡视频 | 美女视频黄频A免费_含羞草官网在线观看免费视频_最好看的2018国语在线_欧美一级爱爱_办公室强伦片免费看_成人AV片无码免费天天看_日韩免费视频中文字幕_久久五十路丰满熟女中出 | 亚洲超碰人人_国产在线视频欧美一区二区三区_天天av导航_日韩精品一区二区三区在线视频_日本激情在线视频_免费看a的网站_日韩午夜一区二区三区_视色视频 | 男人进去女人爽免费视频_国内激情_午夜影院一级_狠狠做五月深爱婷婷_黄色一级大片免费_午夜久久久久久久久久久久_无码人妻丰满熟妇A片护士_免费看黄色大全 | 亚洲国产无线乱码在线观看_中文幕无线码中文字蜜桃_日韩一区二区三区免费高清_超碰在线免费福利_岛国色网_老司机精品线观看视频_免费特级婬片日本高清视频_免费精品视频一区 | 毛片免费视频在线观看_日韩伦乱_97欧美精品系列一区二区_国产精品亲子乱子伦xxxx裸_操喷视频_欧美蜜桃视频_天上人间av网_亚洲日韩中文字幕日本 | 日韩成人高清_精品韩国三级在线观看视频_天堂中文在线资源_久久久久91_最近最新中文第一页_日本丰满大乳无码免费看_日本韩国视频在线观看_无码人妻久久一区二区三区 | 久久久久久青青无码日韩_国产女人40精品一区毛片视频_人妖啪啪综合av一区ts人妖_国产美女裸体丝袜喷水视频_羞羞答答av_亚洲精品综合久久中文字幕_天天摸天天看_99色人 国产精品www劲爽视频_国产青草视频在线观看视频_日韩欧美群交P片內射中文_成人观看av_av永久免费大全网站_日产精品最新在线_久久人人网_国产精品一七六九在线是免费 | 国产中文字幕二区_国产伊人影院_成人特级毛片_无套内谢孕妇毛片免费看看_久久亚洲精中文字幕冲田杏梨_久久久国产乱子伦精品_国产裸体xxxx视频在线播放_97中文 | 亚洲日本中文字幕_成人网qqq444_综合色婷婷一区二区亚洲欧美国产_亚洲经典国产_久久不卡日韩美女_日本www免费观看_2018高清国产日本一道国产_亚洲欧美一级黄色录像视频 | 亚洲夜夜性无码_国产欧美日韩久久久久_亚洲无嘛_成人你懂的_久久视频在线_成人美女视频免费_国产精品老熟女露脸视频_精品亚洲成a人无码成a在线观看 | 蜜桃AV无码免费看永久_国产精品揄拍100视频_国产在线1_久久三级_九九热免费精品视频_国产午夜精品久久久_超碰97国产精品人人cao_成人免费高潮片视频软件 | 亚洲中文在线精品国产_日本成人一级片_免费毛片一区二区三区久久久毛片_白浆在线播放_国产精品久久久久久久久网站导航_japan白嫩丰满少妇videoshd_亚洲成人h_bnb998成人免费 | 日韩成人高清_精品韩国三级在线观看视频_天堂中文在线资源_久久久久91_最近最新中文第一页_日本丰满大乳无码免费看_日本韩国视频在线观看_无码人妻久久一区二区三区 | 国产极品在线视频_不卡日韩_高潮到不停喷水的免费视频_欧美人妇做爰XXXⅩ性高_日本欧美久久久久免费播放网_国产网曝门99视频在线看_成人在线视频中文字幕_国产精品视频一区牛牛视频 | 精品综合久久久久久88_国产啊啊啊视频在线观看_未满十八18禁止免费网站_日韩人妻无码一区二区三区久久99_国产xxxx69真实实拍_中国激情网_yiren22亚洲综合伊人22_少妇激三级做爰在线观看 | jizzjizz欧美69巨大_久久青色_日韩一区二区三区精品视频第3页_久久九七_国产精品久久毛片A片_日韩精品中文字幕在线_97久久精品久久免费观看_天堂在线资源中文在线观看 | 在办公室把护士给爽了动态图_色欲日韩中文无码字幕影院_亚洲五区在线观看_一区二区三区精密机械公司_色视频在线观看视频_日本成人一区二区_免费激情网_国产成人AV无码精品 | 成人无毒网_2021国产va在线_亚洲欧美国产另类视频_欧美一级淫_免费观看裸体美女网站_中国av高清_国产精品99久久精品_免费精品在线视频 欧美人与动牲交A免费观看_一本色道综合久久亚洲精品_变态孕交videosgratis孕妇_国模无码视频一区二区三区_无码精品人妻一区二区三刘亦菲_一级片视频播放_一级成人毛片_FUCK东北老女人HD对话 | 总裁与秘书高h肉_中文精品久久久久鬼色_日韩精品无码专区免费播放_国产古装全黄A级视频_青苹果乐园高清免费看_不卡国产一区二区三区四区_国产日产欧产精品精品ai_在线免费色 | 男女18禁啪啪无遮挡激烈网站_黄色毛片免费进入_学园默示录免费观看_辽宁人妻Chinese_在线婷婷_黄的网站在线观看_欧美特级黄色大片_日本在线视频免费 | 成人免费A级毛片天天看_av在线免费播放网站_美女wwwzzz色_精品一区二区三区免费毛片爱_精品一区二区三区入口_成年片黄色日本大片网站视频_国产在线无码精品无码_国产日韩欧美东南在线 | 久久精品亚洲人成影院_久久久久国产精品人妻_caoporm-超频在线视频_粗大的内捧猛烈进出在线视频_麻豆产精国品一二三产区区_亚洲精品中_九七精品_国产原创av中文在线观看 | 不卡欧美_国产精品99久久久精品_二级片免费_亚洲激情一二三区_粗大猛烈进出高潮视频免费看_国产免费一级一级_国产视频一区精品_欧美日本另类 | 日韩在线不卡_青草视频免费在线观看_日本激情动作片免费看_日韩精品一区二区三区高清免费_欧美精品VIDEOSSEX少妇_国产11页_麻豆天美蜜桃91_av边做边流奶水无码免费 | 男人进去女人爽免费视频_国内激情_午夜影院一级_狠狠做五月深爱婷婷_黄色一级大片免费_午夜久久久久久久久久久久_无码人妻丰满熟妇A片护士_免费看黄色大全 | 自拍偷拍第6页_我有一个朋友在线观看_四虎成人精品国产永久免费无码_欧美牲交黑粗硬大_色爱综合网欧美_97aⅰ内射白浆蜜桃精品_青青草在线免费观看_亚洲精品不卡无码福利在线观看 | 欧美人妖XXXX做受_少妇群交换bd高清国语版_日本久久精_免费动漫黄爽A片在线观看_国产清纯白嫩初高生在线播放视频_综合激情视频_欧美一级黄色片子_蜜桃av噜噜一区二区三区策驰 |