SC Arguments: [Name:SC_ACTION Type:uint64 Value:'0' Name:SC_ID Type:hash Value:'a3e6a008d760c7b98471f27402f5539cafdfffdde2311174604023a7903a08dc' Name:code Type:string Value:'// Grokked
Function InitializePrivate() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", SIGNER())
35 STORE("start", 0)
40 STORE("v", 1)
60 RETURN 0
End Function
Function Set(amt Uint64, dur Uint64) Uint64
5 IF LOAD("start") != 0 THEN GOTO 20
6 IF dur < 300 || dur > 172800 THEN GOTO 20
7 IF DEROVALUE() < amt/2 THEN GOTO 20
10 IF LOAD("owner") == SIGNER() THEN GOTO 30
20 RETURN 1
30 STORE("start", 1)
40 STORE("duration", dur)
50 STORE("amount", amt)
54 STORE("joined", 0)
55 STORE("pot", DEROVALUE())
56 STORE("in", 0)
57 STORE("last", BLOCK_TIMESTAMP())
100 RETURN 0
End Function
Function Cancel() Uint64
10 IF LOAD("owner") != SIGNER() THEN GOTO 40
20 IF LOAD("start") != 1 THEN GOTO 40
30 IF LOAD("in") == 0 THEN GOTO 50
40 RETURN 1
50 SEND_DERO_TO_ADDRESS(LOAD("owner"), LOAD("pot"))
60 STORE("start", 0)
70 RETURN 0
End Function
Function Join() Uint64
5 IF LOAD("start") != 1 THEN GOTO 40
6 IF LOAD("in") >= 30 THEN GOTO 40
20 IF DEROVALUE() < LOAD("amount") THEN GOTO 40
30 IF EXISTS(HEX(SIGNER())) == 0 THEN GOTO 50
40 RETURN 1
50 STORE(HEX(SIGNER()), LOAD("joined"))
65 STORE(LOAD("joined"), SIGNER())
70 STORE("joined", LOAD("joined")+1)
75 STORE("in", LOAD("in")+1)
80 STORE("pot", LOAD("pot")+DEROVALUE())
100 RETURN 0
End Function
Function Start() Uint64
5 IF LOAD("start") != 1 THEN GOTO 20
6 IF LOAD("in") < 3 THEN GOTO 20
10 IF LOAD("owner") == SIGNER() THEN GOTO 30
20 RETURN 1
30 STORE("start", 2)
40 STORE("grok", 99)
60 grok()
100 RETURN 0
End Function
Function grok() Uint64
10 DIM new as Uint64
20 LET new = 0+RANDOM(LOAD("joined"))
30 IF LOAD("grok") == new THEN GOTO 20
40 IF EXISTS(new) == 0 THEN GOTO 20
60 STORE("grok", new)
70 STORE("last", BLOCK_TIMESTAMP())
100 RETURN 0
End Function
Function setDur() Uint64
10 IF LOAD("duration") <= 300 THEN GOTO 30
20 STORE("duration", 90*LOAD("duration")/100)
30 RETURN 0
End Function
Function Pass() Uint64
5 IF LOAD("start") != 2 THEN GOTO 30
6 IF LOAD("in") == 1 THEN GOTO 30
10 IF LOAD(HEX(SIGNER())) != LOAD("grok") THEN GOTO 30
20 IF BLOCK_TIMESTAMP() < LOAD("last")+LOAD("duration") THEN GOTO 40
30 RETURN 1
40 setDur()
50 grok()
100 RETURN 0
End Function
Function Grokked() Uint64
5 IF LOAD("start") != 2 THEN GOTO 30
10 IF BLOCK_TIMESTAMP() < LOAD("last")+LOAD("duration") THEN GOTO 30
20 IF LOAD("owner") == SIGNER() THEN GOTO 40
30 RETURN 1
40 DELETE(HEX(LOAD(LOAD("grok"))))
45 DELETE(LOAD("grok"))
50 STORE("in", LOAD("in")-1)
60 setDur()
70 grok()
100 RETURN 0
End Function
Function Win(a Uint64) Uint64
5 IF LOAD("start") != 2 THEN GOTO 30
6 IF LOAD("in") != 1 THEN GOTO 30
10 IF EXISTS(a) == 0 THEN GOTO 30
20 IF LOAD("owner") == SIGNER() THEN GOTO 40
30 RETURN 1
40 SEND_DERO_TO_ADDRESS(LOAD(a), LOAD("pot")/2)
60 SEND_DERO_TO_ADDRESS(LOAD("owner"), LOAD("pot")/2)
70 SEND_DERO_TO_ADDRESS(LOAD("owner"), LOAD("pot")%2)
71 DIM addr as String
72 LET addr = HEX(LOAD(a))
73 IF EXISTS("w_"+addr) THEN GOTO 75
74 STORE("w_"+addr, 0)
75 STORE("w_"+addr, LOAD("w_"+addr)+1)
80 STORE("start", 0)
81 STORE("pot", 0)
85 DELETE(HEX(LOAD(a)))
86 DELETE(a)
100 RETURN 0
End Function
Function Refund(p Uint64) Uint64
5 IF LOAD("start") == 0 THEN GOTO 30
6 IF LOAD("start") == 1 && BLOCK_TIMESTAMP() < LOAD("last")+173400 THEN GOTO 30
10 IF BLOCK_TIMESTAMP() < LOAD("last")+LOAD("duration")+600 THEN GOTO 30
11 IF EXISTS(p) == 0 THEN GOTO 30
20 IF LOAD(p) == SIGNER() THEN GOTO 40
21 IF LOAD("in") == 1 THEN GOTO 40
30 RETURN 1
40 DIM i as Uint64
41 DIM a as String
50 IF EXISTS(i) == 0 THEN GOTO 70
60 SEND_DERO_TO_ADDRESS(LOAD(i), LOAD("pot")/LOAD("in"))
62 LET a = HEX(LOAD(i))
63 IF EXISTS("w_"+a) THEN GOTO 65
64 STORE("w_"+a, 0)
65 STORE("w_"+a, LOAD("w_"+a)+1)
66 DELETE(HEX(LOAD(i)))
67 DELETE(i)
70 LET i = i+1
80 IF i <= 30 THEN GOTO 50
81 SEND_DERO_TO_ADDRESS(LOAD("owner"), LOAD("pot")%LOAD("in"))
82 STORE("grok", 99)
90 STORE("start", 0)
91 STORE("pot", 0)
100 RETURN 0
End Function
Function UpdateCode(code String) Uint64
5 IF code == "" THEN GOTO 20
6 IF LOAD("pot") != 0 THEN GOTO 20
10 IF LOAD("owner") == SIGNER() THEN GOTO 30
20 RETURN 1
30 UPDATE_SC_CODE(code)
60 STORE("v", LOAD("v")+1)
100 RETURN 0
End Function' Name:entrypoint Type:string Value:'UpdateCode'] |