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