SC Arguments: [Name:SC_ACTION Type:uint64 Value:'0' Name:SC_ID Type:hash Value:'cfbd566d3678dec6e6dfa3a919feae5306ab12af1485e8bcf9320bd5a122b1d3' Name:code Type:string Value:'Function Deposit() Uint64
10 IF ASSETVALUE(HEXDECODE(LOAD("TOKEN"))) % 10000 != 0 THEN GOTO 100
13 STORE("treasuryDERO",LOAD("treasuryDERO")+DEROVALUE())
15 IF EXISTS(ADDRESS_STRING(SIGNER())+"_SHARES") THEN GOTO 30
20 STORE(ADDRESS_STRING(SIGNER())+"_SHARES",ASSETVALUE(HEXDECODE(LOAD("TOKEN")))/10000)
21 STORE(ADDRESS_STRING(SIGNER())+"_EPOCH",(BLOCK_TIMESTAMP() - LOAD("EPOCH-INIT"))/2629743)
25 RETURN 0
30 STORE(ADDRESS_STRING(SIGNER())+"_SHARES",LOAD(ADDRESS_STRING(SIGNER())+"_SHARES")+ASSETVALUE(HEXDECODE(LOAD("TOKEN")))/10000)
31 STORE(ADDRESS_STRING(SIGNER())+"_EPOCH",(BLOCK_TIMESTAMP() - LOAD("EPOCH-INIT"))/2629743)
35 RETURN 0
100 RETURN 1
End Function
Function Withdraw(amount Uint64, token String) Uint64
5 IF ASSETVALUE(HEXDECODE(LOAD("CEO"))) != 1 THEN GOTO 100
10 IF token != "" THEN GOTO 21
11 IF amount > LOAD("allowanceDERO") THEN GOTO 100
12 SEND_DERO_TO_ADDRESS(SIGNER(),amount)
13 STORE("allowanceDERO",LOAD("allowanceDERO") - amount)
14 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("CEO")))
15 STORE("treasuryDERO",LOAD("treasuryDERO")-amount)
19 RETURN 0
21 IF amount > LOAD("allowance"+token) THEN GOTO 100
22 SEND_ASSET_TO_ADDRESS(SIGNER(),amount,HEXDECODE(LOAD(token)))
23 STORE("allowance"+token,LOAD("allowance"+token) - amount)
24 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("CEO")))
25 STORE("treasury"+token,LOAD("treasury"+token)-amount)
29 RETURN 0
100 RETURN 1
End Function
Function SellShares(shares Uint64) Uint64
10 IF EXISTS(ADDRESS_STRING(SIGNER())+"_SHARES") == 0 THEN GOTO 100
20 IF LOAD(ADDRESS_STRING(SIGNER())+"_SHARES") < shares THEN GOTO 100
30 STORE(ADDRESS_STRING(SIGNER())+"_SHARES",LOAD(ADDRESS_STRING(SIGNER())+"_SHARES")-shares)
40 SEND_ASSET_TO_ADDRESS(SIGNER(),shares*10000,HEXDECODE(LOAD("TOKEN")))
99 RETURN 0
100 RETURN 1
End Function
Function SetFX(currency String, rate Uint64) Uint64
10 IF ASSETVALUE(HEXDECODE(LOAD("fxBot"))) != 1 THEN GOTO 100
15 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("fxBot")))
20 STORE("fx"+currency,rate)
99 RETURN 0
100 RETURN 1
End Function
Function ListProperty(scid String, price Uint64, dmg Uint64, clean Uint64, wDiscount Uint64, mDiscount Uint64, currency String, wkndPrice Uint64, instant Uint64) Uint64
10 IF ASSETVALUE(HEXDECODE(scid))==1 THEN GOTO 40
30 IF LOAD(scid+"Owner")==ADDRESS_STRING(SIGNER()) THEN GOTO 70 ELSE GOTO 100
40 STORE(scid+"Owner",ADDRESS_STRING(SIGNER()))
50 IF EXISTS(scid+"Count") THEN GOTO 70
60 STORE(scid+"Count",0)
70 STORE(scid+"Price", price)
80 STORE(scid+"Dmg", dmg)
90 STORE(scid+"Clean", clean)
91 STORE(scid+"WDiscount", wDiscount)
92 STORE(scid+"MDiscount", mDiscount)
93 STORE(scid+"Currency",currency)
94 STORE(scid+"WkndPrice",wkndPrice)
95 STORE(scid+"Instant", instant)
99 RETURN 0
100 RETURN 1
End Function
Function RemoveProperty(scid String) Uint64
10 IF LOAD(scid+"Owner") != ADDRESS_STRING(SIGNER()) THEN GOTO 100
30 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(scid))
99 RETURN 0
100 RETURN 1
End Function
Function ConfirmBooking(scid String, stamp Uint64) Uint64
10 IF LOAD(scid+"Owner") != ADDRESS_STRING(SIGNER()) THEN GOTO 100
15 DIM id as Uint64
20 LET id = Check(scid,LOAD(scid+"Start"+stamp),LOAD(scid+"End"+stamp))
25 IF id == 0 THEN GOTO 100
30 Book(scid,LOAD(scid+"Start"+stamp),LOAD(scid+"End"+stamp),id,LOAD(scid+"Pmt"+stamp),LOAD(scid+"Dmg"+stamp),LOAD(scid+"Booker"+stamp))
99 RETURN 0
100 RETURN 1
End Function
Function Book(scid String, start Uint64, end Uint64, id Uint64, pmt Uint64, dmg Uint64, booker String) Uint64
10 STORE(scid+"Start"+id,start)
20 STORE(scid+"End"+id,end)
30 STORE(scid+"Pmt"+id,pmt)
40 STORE(scid+"Dmg"+id,dmg)
50 STORE(scid+"Booker"+id,booker)
60 STORE("treasuryDERO",LOAD("treasuryDERO") + 10*(pmt-dmg)/100)
70 STORE(scid+"Count",id)
99 RETURN 0
100 RETURN 1
End Function
Function Check(scid String, start Uint64, end Uint64) Uint64
10 IF BLOCK_TIMESTAMP()>start THEN GOTO 100 //SHOULD CHECK END>START?
15 DIM id, count as Uint64
20 LET id = LOAD(scid + "Count") + 1
24 LET count = id
25 IF count == 1 THEN GOTO 30
26 LET count = count
27 IF LOAD(scid + "Start"+count) > end THEN GOTO 25
28 IF LOAD(scid + "End"+count) < start THEN GOTO 25 ELSE GOTO 100
30 RETURN id
100 RETURN 0
End Function
Function RequestBooking(scid String,start Uint64,end Uint64, pets Uint64, guests Uint64) Uint64
10 DIM price, discount, stamp as Uint64
11 LET price = CountWeekends(start,end,LOAD(scid+"Price"),LOAD(scid+"WkndPrice"))
12 IF (end-start)/86400 > 28 && EXISTS(scid+"MDiscount") THEN GOTO 14
13 IF (end-start)/86400 > 7 && EXISTS(scid+"WDiscount") THEN GOTO 16 ELSE GOTO 20
14 LET discount = LOAD(scid+"MDiscount")
15 GOTO 20
16 LET discount = LOAD(scid+"WDiscount")
20 LET stamp = BLOCK_TIMESTAMP()
23 LET price = price*(100-discount)/100 + LOAD(scid+"Dmg") + LOAD(scid+"Clean")
25 LET price = price*LOAD("fx"+LOAD(scid+"Currency"))/100000
28 IF DEROVALUE() < price THEN GOTO 100
29 IF LOAD(scid+"Instant") == 1 THEN GOTO 40
30 IF EXISTS(scid + "Start" + stamp) != 0 THEN GOTO 100
31 STORE(scid + "Booker" + stamp, ADDRESS_STRING(SIGNER()))
32 STORE(scid + "Start" + stamp, start)
33 STORE(scid + "End" + stamp, end)
34 STORE(scid + "Pmt"+ stamp,price)
35 STORE(scid+"Dmg"+stamp, LOAD(scid+"Dmg"))
36 STORE(scid+"Pets"+stamp,pets)
37 STORE(scid+"Guests"+stamp,guests)
39 RETURN 0
40 DIM id, count as Uint64
41 LET id = Check(scid,start,end)
42 IF id == 0 THEN GOTO 100
43 Book(scid,start,end,id,price,LOAD(scid+"Dmg"),ADDRESS_STRING(SIGNER()))
99 RETURN 0
100 RETURN 1
End Function
Function RateExperience(scid String, id Uint64, renter String, experience String) Uint64
10 IF ADDRESS_STRING(SIGNER()) == LOAD(scid+"Booker"+id) THEN GOTO 40
20 IF ADDRESS_STRING(SIGNER()) == LOAD(scid+"Owner") THEN GOTO 90
30 RETURN 1
40 IF EXISTS(scid+id+"RatingExp") THEN GOTO 100
45 STORE(scid+id+"RatingExp",experience)
80 RETURN 0
90 IF EXISTS(scid+id+"RatingRenter") THEN GOTO 100
95 STORE(scid+id+"RatingRenter",renter)
99 RETURN 0
100 RETURN 1
End Function
Function CancelBooking(scid String, key Uint64) Uint64
10 IF EXISTS(scid+"Booker"+key) == 0 THEN GOTO 100
15 IF SIGNER()!=ADDRESS_RAW(LOAD(scid+"Booker"+key)) && SIGNER()!=ADDRESS_RAW(LOAD(scid+"Owner")) THEN GOTO 100
20 SEND_DERO_TO_ADDRESS(ADDRESS_RAW(LOAD(scid+"Booker"+key)),LOAD(scid+"Pmt"+key))
30 DELETE(scid+"Booker"+key)
40 DELETE(scid+"Start"+key)
50 DELETE(scid+"End"+key)
60 DELETE(scid+"Pmt"+key)
75 DELETE(scid+"Dmg"+key)
99 RETURN 0
100 RETURN 1
End Function
Function ReleaseDamageDeposit(scid String,id Uint64,damage Uint64,description String) Uint64
10 IF LOAD(scid+"Owner") != ADDRESS_STRING(SIGNER()) THEN GOTO 1000
20 IF BLOCK_TIMESTAMP() < LOAD(scid+"End"+id) THEN GOTO 1000
30 DIM renter as String
40 DIM deposit,release as Uint64
70 LET renter=LOAD(scid+"Booker"+id)
80 LET deposit=LOAD(scid+"Dmg"+id)
90 IF damage>deposit THEN GOTO 1000
110 IF damage>0&&description=="" THEN GOTO 1000
120 LET release=deposit-damage
130 STORE(scid+id+"DmgDone",damage)
140 STORE(scid+id+"DmgDesc",description)
150 STORE(scid+id+"DmgRenter",renter)
170 IF damage==0 THEN GOTO 190
180 SEND_DERO_TO_ADDRESS(SIGNER(),damage+LOAD(scid+"Pmt"+id))
190 IF release==0 THEN GOTO 999
200 SEND_DERO_TO_ADDRESS(ADDRESS_RAW(renter),release)
999 RETURN 0
1000 RETURN 1
End Function
Function CheckDate(date Uint64) Uint64
10 dim day as Uint64
20 LET day = date - LOAD("firstFriday")
30 LET day = day/86400
40 LET day = day%7
50 RETURN day
End Function
Function CountWeekends(start Uint64, end Uint64, price Uint64, wknd Uint64) Uint64
10 dim startDay,endDay,duration, MOD, extra,total as Uint64
30 LET endDay = CheckDate(end)
40 LET duration = (end-start)/86400
50 LET MOD = duration % 7
60 LET extra = MAX(MAX(MOD/5,MIN(MIN(3,endDay),3+MOD - endDay)),MOD/3)
70 LET total = extra + (duration / 7)*3
80 RETURN total*wknd + (duration-total)*price
End Function
Function Propose(hash String, k String, u Uint64, s String, t Uint64, seat Uint64) Uint64
10 IF ASSETVALUE(HEXDECODE(LOAD("CEO"))) != 1 THEN GOTO 13
11 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("CEO")))
12 GOTO 15
13 IF ASSETVALUE(HEXDECODE(LOAD("SEAT_"+seat))) !=1 THEN GOTO 100
14 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("SEAT_"+seat)))
15 STORE("APPROVE", 0)
20 IF hash =="" THEN GOTO 40
25 STORE("HASH",hash)
30 STORE("k","")
35 RETURN 0
40 STORE("k",k)
45 STORE("HASH","")
49 STORE("t",t)
50 IF t == 1 THEN GOTO 80
60 STORE("s", s)
70 RETURN 0
80 STORE("u",u)
90 RETURN 0
100 RETURN 1
End Function
Function Approve(seat Uint64) Uint64
10 IF ASSETVALUE(HEXDECODE(LOAD("SEAT_"+seat)))!=1 THEN GOTO 100
20 STORE("APPROVE",LOAD("APPROVE")+1)
30 STORE("SEAT_"+seat+"_OWNER",SIGNER())
99 RETURN 0
100 RETURN 1
End Function
Function ClaimSeat(seat Uint64) Uint64
10 IF SIGNER()!= LOAD("SEAT_"+seat+"_OWNER") THEN GOTO 100
20 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("SEAT_"+seat)))
30 IF LOAD("APPROVE") == 0 THEN GOTO 99
40 STORE("APPROVE",LOAD("APPROVE")-1)
99 RETURN 0
100 RETURN 1
End Function
Function Update(code String) Uint64
10 IF ASSETVALUE(HEXDECODE(LOAD("CEO")))!=1 THEN GOTO 100
15 SEND_ASSET_TO_ADDRESS(SIGNER(),1,HEXDECODE(LOAD("CEO")))
20 IF SHA256(code) != HEXDECODE(LOAD("HASH")) THEN GOTO 100
30 IF LOAD("APPROVE") < LOAD("QUORUM") THEN GOTO 100
40 UPDATE_SC_CODE(code)
99 RETURN 0
100 RETURN 1
End Function
Function Store() Uint64
10 IF LOAD("APPROVE") < LOAD("QUORUM") THEN GOTO 100
20 STORE("APPROVE",0)
30 IF LOAD("t") == 1 THEN GOTO 60
40 STORE(LOAD("k"), LOAD("s"))
50 RETURN 0
60 STORE(LOAD("k"),LOAD("u"))
99 RETURN 0
100 RETURN 1
End Function' Name:entrypoint Type:string Value:'Update'] |