Smart Contract Details

Open on Dero Explorer
Internal ID:
47973
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