買家、銀行、政府各用一個不同account 一個account擁有自己的hash來辨別誰是誰 contract功能: * 銀行審核 * 政府審核 * 買家填入(總價、基本資料) * 銀行政府雙方都確認成功 ```solidity pragma solidity ^0.4.17; contract reMain{ //=======================================設定變數、角色管理 address buyer = msg.sender; // 買家初始化地址 address gov_agent; // 政府(稅款) address bank_agent; // 銀行(貸款) string [7] data ; // 0: 買家填入資訊, 1: 銀行、政府審核, 2: Done enum Status { contractInit, , contractComplete } Status public status; event statusEvt(Status status); modifier isBuyer{ require(msg.sender == buyer); _; } modifier isBank{ require(msg.sender == bank_agent); _; } modifier isGov{ require(msg.sender == gov_agent); _; } //確認合約狀態才可執行 modifier inStatus(Status _status){ require(status == _status); _; } // 角色管理 // ======================================= // 買方填寫 // 買方姓名,賣家姓名,面積,建物現況格局,聯絡電話,建物門牌,交易總價 constructor(string buyerName,string sellerName,string area,string buildPattern,string phone,string houseNumber,string totalPrice){ data[0]=buyerName; // 買家姓名 data[1]=sellerName; // 賣家姓名 data[2]=area; // 面積 data[3]=buildPattern; // 建物現況格局 data[4]=phone; //聯絡電話 data[5]=houseNumber; //建物門牌 data[6]=totalPrice; //交易總價 emit statusEvt(Status.agentsVerify); // 資料填寫完成 轉移到審核狀態 } // House Present Value Calculate 房屋現值獲取 從政府資料庫 // input: 賣家姓名, output: 房屋現值 //將陣列內data[2]=area為字串,將字串轉換為int,用於後面計算 function stringToUint(string s) constant returns (uint) { bytes memory b = bytes(s); uint result = 0; for (uint i = 0; i < b.length; i++) { // c = b[i] was not needed if (b[i] >= 48 && b[i] <= 57) { result = result * 10 + (uint(b[i]) - 48); // bytes and int are not compatible with the operator -. } } return result; // this was missing } function get_HPV(string name) returns(uint){ uint HPV_price = 10000000; return HPV_price; } // Deed Tax Calculate 契稅計算 // input: 房屋現值, output: 契稅 function DT_cal(uint HPV_price) returns(uint){ uint DT_price = HPV_price * 100/6; return DT_price; } // Annoced Land Value&Current Land Value 土地公告現值&公告地價獲取 從政府資料庫 // input: 地址, output: 公告地價,土地公告現值 function get_CLV_ALV(string addr) returns(uint,uint){ uint ALV_price = 278347; // fake 公告地價 data uint CLV_price = 1018182; // fake 土地公告現值data return (ALV_price,CLV_price); } // (公告地價*面積)-(公告現值*面積)*10% // Land Value Increment Tax 土地增值稅計算 // input: (公告地價, 公告現值, 面積), output: 土地增值稅 function LVIT_cal(uint ALV_price, uint CLV_price, uint area) returns(uint){ uint LVIT_price = (ALV_price*area)-(CLV_price*area)/10; } function get_data() view returns (string,string,string,string,string,string,string){ return (data[0],data[1],data[2],data[3],data[4],data[5],data[6]); } //應該用程式碼輔助區塊練解釋,像是block在哪裡會產生,地政司如何管理查看區塊練,智能合約就用飲料機去解釋。 } ```