---
# System prepended metadata

title: Untitled

---

買家、銀行、政府各用一個不同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在哪裡會產生,地政司如何管理查看區塊練,智能合約就用飲料機去解釋。
    
    
}
```
