Smart Contract Details
Open on Dero ExplorerInternal ID:
47973
Hash / Transaction:
Block:
Timestamp:
2023-12-24 12:28:18 UTC (1.7 years ago)
Creator:
CakeMaster
(+4 more)
(1414555)
Raw Data:
[{"name":"SC_ACTION","datatype":"U","value":1},{"name":"SC_CODE","datatype":"S","value":"// Grokked\nFunction InitializePrivate() Uint64\n 10 IF EXISTS(\"owner\") == 0 THEN GOTO 30\n 20 RETURN 1\n 30 STORE(\"owner\", SIGNER())\n 35 STORE(\"start\", 0)\n 40 STORE(\"v\", 1)\n 60 RETURN 0\nEnd Function\n\nFunction Set(amt Uint64, dur Uint64) Uint64\n 5 IF LOAD(\"start\") != 0 THEN GOTO 20\n 6 IF dur \u003c 300 || dur \u003e 172800 THEN GOTO 20\n 7 IF DEROVALUE() \u003c amt/2 THEN GOTO 20\n 10 IF LOAD(\"owner\") == SIGNER() THEN GOTO 30\n 20 RETURN 1\n 30 STORE(\"start\", 1)\n 40 STORE(\"duration\", dur)\n 50 STORE(\"amount\", amt)\n 54 STORE(\"joined\", 0)\n 55 STORE(\"pot\", DEROVALUE())\n 56 STORE(\"in\", 0)\n 57 STORE(\"last\", BLOCK_TIMESTAMP())\n 100 RETURN 0\nEnd Function\n\nFunction Cancel() Uint64\n 10 IF LOAD(\"owner\") != SIGNER() THEN GOTO 40\n 20 IF LOAD(\"start\") != 1 THEN GOTO 40\n 30 IF LOAD(\"in\") == 0 THEN GOTO 50\n 40 RETURN 1\n 50 SEND_DERO_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"pot\"))\n 60 STORE(\"start\", 0)\n 70 RETURN 0\nEnd Function\n\nFunction Join() Uint64\n 5 IF LOAD(\"start\") != 1 THEN GOTO 40\n 6 IF LOAD(\"in\") \u003e= 30 THEN GOTO 40 \n 20 IF DEROVALUE() \u003c LOAD(\"amount\") THEN GOTO 40\n 30 IF EXISTS(HEX(SIGNER())) == 0 THEN GOTO 50\n 40 RETURN 1\n 50 STORE(HEX(SIGNER()), LOAD(\"joined\"))\n 65 STORE(LOAD(\"joined\"), SIGNER())\n 70 STORE(\"joined\", LOAD(\"joined\")+1)\n 75 STORE(\"in\", LOAD(\"in\")+1)\n 80 STORE(\"pot\", LOAD(\"pot\")+DEROVALUE())\n 100 RETURN 0\nEnd Function\n\nFunction Start() Uint64\n 5 IF LOAD(\"start\") != 1 THEN GOTO 20\n 6 IF LOAD(\"in\") \u003c 3 THEN GOTO 20\n 10 IF LOAD(\"owner\") == SIGNER() THEN GOTO 30\n 20 RETURN 1\n 30 STORE(\"start\", 2)\n 40 STORE(\"grok\", 99)\n 60 grok()\n 100 RETURN 0\nEnd Function\n\nFunction grok() Uint64\n 10 DIM new as Uint64\n 20 LET new = 0+RANDOM(LOAD(\"joined\"))\n 30 IF LOAD(\"grok\") == new THEN GOTO 20\n 40 IF EXISTS(new) == 0 THEN GOTO 20\n 60 STORE(\"grok\", new)\n 70 STORE(\"last\", BLOCK_TIMESTAMP())\n 100 RETURN 0\nEnd Function\n\nFunction setDur() Uint64\n 10 IF LOAD(\"duration\") \u003c= 300 THEN GOTO 30\n 20 STORE(\"duration\", 90*LOAD(\"duration\")/100)\n 30 RETURN 0\nEnd Function\n\nFunction Pass() Uint64\n 5 IF LOAD(\"start\") != 2 THEN GOTO 30\n 6 IF LOAD(\"in\") == 1 THEN GOTO 30\n 10 IF LOAD(HEX(SIGNER())) != LOAD(\"grok\") THEN GOTO 30\n 20 IF BLOCK_TIMESTAMP() \u003c LOAD(\"last\")+LOAD(\"duration\") THEN GOTO 40\n 30 RETURN 1\n 40 setDur()\n 50 grok()\n 100 RETURN 0 \nEnd Function\n\nFunction Grokked() Uint64\n 5 IF LOAD(\"start\") != 2 THEN GOTO 30\n 10 IF BLOCK_TIMESTAMP() \u003c LOAD(\"last\")+LOAD(\"duration\") THEN GOTO 30\n 20 IF LOAD(\"owner\") == SIGNER() THEN GOTO 40\n 30 RETURN 1\n 40 DELETE(HEX(LOAD(LOAD(\"grok\"))))\n 45 DELETE(LOAD(\"grok\"))\n 50 STORE(\"in\", LOAD(\"in\")-1)\n 60 setDur()\n 70 grok()\n 100 RETURN 0 \nEnd Function\n\nFunction Win(a Uint64) Uint64\n 5 IF LOAD(\"start\") != 2 THEN GOTO 30\n 6 IF LOAD(\"in\") != 1 THEN GOTO 30\n 10 IF EXISTS(a) == 0 THEN GOTO 30\n 20 IF LOAD(\"owner\") == SIGNER() THEN GOTO 40\n 30 RETURN 1\n 40 SEND_DERO_TO_ADDRESS(LOAD(a), LOAD(\"pot\")/2)\n 60 SEND_DERO_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"pot\")/2)\n 70 SEND_DERO_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"pot\")%2)\n 71 DIM addr as String\n 72 LET addr = HEX(LOAD(a))\n 73 IF EXISTS(\"w_\"+addr) THEN GOTO 75\n 74 STORE(\"w_\"+addr, 0)\n 75 STORE(\"w_\"+addr, LOAD(\"w_\"+addr)+1)\n 80 STORE(\"start\", 0)\n 81 STORE(\"pot\", 0)\n 85 DELETE(HEX(LOAD(a)))\n 86 DELETE(a)\n 100 RETURN 0\nEnd Function\n\nFunction Refund(p Uint64) Uint64\n 5 IF LOAD(\"start\") == 0 THEN GOTO 30\n 6 IF LOAD(\"start\") == 1 \u0026\u0026 BLOCK_TIMESTAMP() \u003c LOAD(\"last\")+173400 THEN GOTO 30\n 10 IF BLOCK_TIMESTAMP() \u003c LOAD(\"last\")+LOAD(\"duration\")+600 THEN GOTO 30\n 11 IF EXISTS(p) == 0 THEN GOTO 30\n 20 IF LOAD(p) == SIGNER() THEN GOTO 40\n 21 IF LOAD(\"in\") == 1 THEN GOTO 40\n 30 RETURN 1\n 40 DIM i as Uint64\n 41 DIM a as String\n 50 IF EXISTS(i) == 0 THEN GOTO 70\n 60 SEND_DERO_TO_ADDRESS(LOAD(i), LOAD(\"pot\")/LOAD(\"in\"))\n 62 LET a = HEX(LOAD(i))\n 63 IF EXISTS(\"w_\"+a) THEN GOTO 65\n 64 STORE(\"w_\"+a, 0)\n 65 STORE(\"w_\"+a, LOAD(\"w_\"+a)+1)\n 66 DELETE(HEX(LOAD(i)))\n 67 DELETE(i)\n 70 LET i = i+1\n 80 IF i \u003c= 30 THEN GOTO 50\n 81 SEND_DERO_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"pot\")%LOAD(\"in\"))\n 82 STORE(\"grok\", 99)\n 90 STORE(\"start\", 0)\n 91 STORE(\"pot\", 0)\n 100 RETURN 0\nEnd Function\n\nFunction UpdateCode(code String) Uint64\n 5 IF code == \"\" THEN GOTO 20\n 6 IF LOAD(\"pot\") != 0 THEN GOTO 20\n 10 IF LOAD(\"owner\") == SIGNER() THEN GOTO 30\n 20 RETURN 1\n 30 UPDATE_SC_CODE(code)\n 60 STORE(\"v\", LOAD(\"v\")+1)\n 100 RETURN 0\nEnd Function"}]
Code:
// 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