# 手遊詐騙程式碼 ```solidity= // SPDX-License-Identifier: MIT pragma solidity >= 0.5.0 <0.7.0; pragma experimental ABIEncoderV2; contract lab{ address payable middle_address; // 中間商地址 uint index = 0; //商品編碼 uint order_id = 0; //訂單編號 //帳戶結構 struct Member{ address member_address; //賣家地址 string member_name; //賣家名稱 // string[] record; //交易紀錄 bool isCreated; //帳戶是否建立 } //購買資訊 struct BuyInfo{ uint buyid; //訂單編號 address buyaddress; //買家地址 address selladdress; //賣家地址 string buyname; //購買商品名稱 uint buynumber; //購買商品數量 uint buyprice; //購買商品總價 uint buyTime; //訂單成立時間 bool isSet; //訂單是否成立 bool isFinish; //訂單是否完成 } // 商品資訊 struct GoodInfo{ uint good_id; //商品編號 address seller_address; //賣家地址 string good_name; //商品名稱 string good_detail; //商品細節 uint good_price; //商品價格 bool isExisted; //商品是否存在 } struct Account{ uint orderacc_id; //對應訂單編號 string account; //帳戶 string password; //密碼 } struct Treasure{ uint ordertre_id; //對應訂單編號 string vt_name; //虛寶名稱 } modifier OnlyOwner { require(msg.sender == middle_address, "你沒有此項權限"); _; } mapping(address => BuyInfo) records; //紀錄買賣紀錄 mapping(address => Member) seller; //賣家資訊 mapping(address => Member) buyer; //買家資訊 mapping(uint => BuyInfo) orders; //訂單資訊 mapping(uint => GoodInfo) goods; //商品資訊 mapping(uint => Account) com_acc; //交貨物(帳號) mapping(uint => Treasure) com_tre; //交貨物(虛寶) constructor() public{ middle_address = msg.sender; //部屬合約的地址為中間商 } //賣家註冊 function CreateSeller(string memory sellname) public returns (string memory,bool){ require(seller[msg.sender].isCreated == false, "此賣家已經建立"); seller[msg.sender].member_address = msg.sender; seller[msg.sender].member_name = sellname; seller[msg.sender].isCreated = true; return ("賣家註冊成功",seller[msg.sender].isCreated); } //買家註冊 function CreateBuyer(string memory buyname) public returns (string memory,bool){ require(buyer[msg.sender].isCreated == false, "此買家已經建立"); buyer[msg.sender].member_address = msg.sender; buyer[msg.sender].member_name = buyname; buyer[msg.sender].isCreated = true; return ("買家註冊成功", buyer[msg.sender].isCreated); } //賣家添加商品 function AddGoods(string memory gname, string memory gdetail, uint gprice) public returns (uint) { require(msg.sender == seller[msg.sender].member_address, "你不是賣家"); require(seller[msg.sender].isCreated == true, "此商家不存在"); index += 1; goods[index].good_id = index; goods[index].seller_address = msg.sender; goods[index].good_name = gname; goods[index].good_detail = gdetail; goods[index].good_price = gprice * 1 ether; goods[index].isExisted = true; return goods[index].good_id; } // 查看商品 function LookGood(uint number) public view returns (GoodInfo memory){ return goods[number]; } // 查看賣家 function LookSeller(address selleradd) public view returns (Member memory){ return seller[selleradd]; } // 查看買家 function LookBuyer(address buyeradd) public view returns (Member memory){ return buyer[buyeradd]; } //買家新增訂單 function CreateOrder(uint id, uint number) public returns (BuyInfo memory) { require(goods[id].isExisted == true, "此商品不存在"); order_id += 1; uint current = 0; current = goods[id].good_price * number; orders[order_id].buyid = order_id; orders[order_id].buyaddress = msg.sender; orders[order_id].selladdress = goods[id].seller_address; orders[order_id].buyname = goods[id].good_name; orders[order_id].buynumber = number; orders[order_id].buyprice = current; orders[order_id].buyTime = block.timestamp; orders[order_id].isSet = true; orders[order_id].isFinish = false; } //賣家查詢訂單 function CheckOrder(uint oid) public view returns (BuyInfo memory){ return orders[oid]; } //賣家給中間商商品(帳號) function SendAcc(uint aid,string memory _account, string memory _password) public { require(msg.sender == seller[msg.sender].member_address, "你不是賣家"); require(msg.sender == orders[aid].selladdress, "你不是這個訂單的賣家"); com_acc[aid].orderacc_id = aid; com_acc[aid].account = _account; com_acc[aid].password = _password; } //賣家給中間商商品(虛寶) function SendTre(uint tid,string memory tre_name) public { require(msg.sender == seller[msg.sender].member_address, "你不是賣家"); require(msg.sender == orders[tid].selladdress, "你不是這個訂單的賣家"); com_tre[tid].ordertre_id = tid; com_tre[tid].vt_name = tre_name; } //買家給中間商錢 function Pay(uint oid) public payable { require(msg.sender == buyer[msg.sender].member_address, "你不是買家"); require(msg.sender == orders[oid].buyaddress, "你不是這個訂單的買家"); require(orders[oid].buyprice == msg.value, "金額不符合"); uint total = address(this).balance; middle_address.transfer(total); } //中間商給買家商品(帳號) function Delivery_Account(uint oid) public view OnlyOwner returns (Account memory){ return com_acc[oid]; } //中間商給買家商品(虛寶) function Delivery_Tresure(uint oid) public view OnlyOwner returns (Treasure memory){ return com_tre[oid]; } //中間商給賣家錢 function Delivery_Money(uint oid) public payable OnlyOwner { uint money = address(this).balance; address payable sell = payable(orders[oid].selladdress); sell.transfer(money); } //中間商設定合約狀態 function SetOrder(uint oid) public OnlyOwner returns (BuyInfo memory) { orders[oid].isFinish = true; return orders[oid]; } } ```