Transaction Details

Open on Dero Explorer
Internal ID:
3434601
Transaction Hash:
a789d95d906bfdf675f4ee876bdee4ec87a554d5734f710fda43ed0be81319bd
Block:
Timestamp:
2023-04-15 15:10:03 UTC (2.3 years ago)
Type:
sc
Ring Size:
2
Payloads:
1
Caller:
…qgj5dq70 (1370619)
SC Data:
[{"name":"SC_ACTION","datatype":"U","value":"1"},{"name":"SC_CODE","datatype":"S","value":"Function key(id Uint64, key String) String\r\n10 RETURN \"gb_\" + id + \"_\" + key\r\nEnd Function\r\n\r\nFunction storeTX(id Uint64)\r\n10 STORE(\"tx_\" + HEX(TXID()), id)\r\n20 RETURN\r\nEnd Function\r\n\r\nFunction storeAssets(id Uint64, storeIndex Uint64, assetList String) Uint64\r\n10 DIM end, index, assetAmount, balanceCheck, balanceIndex as Uint64\r\n20 DIM asset, row as String\r\n40 LET index = 0\r\n42 LET balanceCheck = 0\r\n43 LET balanceIndex = 0\r\n45 LET end = STRLEN(assetList) / 84\r\n50 LET row = SUBSTR(assetList, index * 84, 84)\r\n52 LET asset = SUBSTR(row, "0", 64)\r\n55 LET assetAmount = ATOI(SUBSTR(row, "64", 20))\r\n60 IF MAPEXISTS(asset) == 1 THEN GOTO 66\r\n62 MAPSTORE(asset, 0)\r\n63 LET balanceIndex = balanceIndex + 1\r\n64 MAPSTORE(asset + \"_value\", ASSETVALUE(HEXDECODE(asset)))\r\n66 MAPSTORE(asset, MAPGET(asset) + assetAmount)\r\n68 IF MAPGET(asset) != MAPGET(asset + \"_value\") THEN GOTO 80\r\n70 LET balanceCheck = balanceCheck + 1\r\n80 STORE(key(id, \"dp_\" + storeIndex + \"_asset\"), asset)\r\n90 STORE(key(id, \"dp_\" + storeIndex + \"_amount\"), assetAmount)\r\n100 LET index = index + 1\r\n105 LET storeIndex = storeIndex + 1\r\n110 IF index \u003c end THEN GOTO 50\r\n115 IF balanceCheck != balanceIndex THEN GOTO 140\r\n120 STORE(key(id, \"storeIndex\"), storeIndex)\r\n130 RETURN 0\r\n140 RETURN 1\r\nEnd Function\r\n\r\nFunction Initialize() Uint64\r\n10 IF EXISTS(\"owner\") == 1 THEN GOTO 60\r\n20 STORE(\"owner\", SIGNER())\r\n30 STORE(\"fee_0000000000000000000000000000000000000000000000000000000000000000\", 50) // 5%\r\n40 STORE(\"gb_ctr\", 0)\r\n50 RETURN 0\r\n60 RETURN 1\r\nEnd Function\r\n\r\nFunction CreateMachine(assetList String, price Uint64, priceAssetId String, startTimestamp Uint64, expireTimestamp Uint64, dispenseCooldown Uint64, minDispense Uint64, maxDispense Uint64, lock Uint64) Uint64\r\n10 DIM id as Uint64\r\n20 LET id = LOAD(\"gb_ctr\")\r\n30 STORE(key(id, \"creator\"), ADDRESS_STRING(SIGNER()))\r\n40 STORE(key(id, \"price\"), price)\r\n50 STORE(key(id, \"priceAssetId\"), priceAssetId)\r\n60 STORE(key(id, \"startTimestamp\"), startTimestamp)\r\n65 STORE(key(id, \"minDispense\"), minDispense)\r\n70 STORE(key(id, \"maxDispense\"), maxDispense)\r\n80 STORE(key(id, \"storeIndex\"), 0)\r\n90 STORE(key(id, \"expireTimestamp\"), expireTimestamp)\r\n100 STORE(key(id, \"lock\"), lock)\r\n110 STORE(key(id, \"lastDispense\"), 0)\r\n120 STORE(key(id, \"dispenseCooldown\"), dispenseCooldown)\r\n130 STORE(\"gb_ctr\", id + 1)\r\n140 storeTX(id)\r\n150 RETURN storeAssets(id, "0", assetList)\r\nEnd Function\r\n\r\nFunction SetLock(id Uint64, lock Uint64) Uint64\r\n10 IF LOAD(key(id, \"creator\")) != ADDRESS_STRING(SIGNER()) THEN GOTO 50\r\n20 STORE(key(id, \"lock\"), lock)\r\n30 storeTX(id)\r\n40 RETURN 0\r\n50 RETURN 1\r\nEnd Function\r\n\r\nFunction EditMachine(id Uint64, price Uint64, startTimestamp Uint64, expireTimestamp Uint64, dispenseCooldown Uint64, minDispense Uint64, maxDispense Uint64, lock Uint64) Uint64\r\n10 IF LOAD(key(id, \"creator\")) != ADDRESS_STRING(SIGNER()) THEN GOTO 120\r\n20 STORE(key(id, \"price\"), price)\r\n30 STORE(key(id, \"dispenseCooldown\"), dispenseCooldown)\r\n40 STORE(key(id, \"minDispense\"), minDispense)\r\n50 STORE(key(id, \"maxDispense\"), maxDispense)\r\n60 STORE(key(id, \"lock\"), lock)\r\n// 70 IF LOAD(key(id, \"lastDispense\")) \u003e 0 THEN GOTO 110\r\n80 STORE(key(id, \"startTimestamp\"), startTimestamp)\r\n90 STORE(key(id, \"expireTimestamp\"), expireTimestamp)\r\n100 storeTX(id)\r\n110 RETURN 0\r\n120 RETURN 1\r\nEnd Function\r\n\r\nFunction Purchase(id Uint64, price Uint64, quantity Uint64) Uint64\r\n10 DIM storeIndex, index, amount, assetAmount, ctr, platformCut, expireTimestamp, timestamp as Uint64\r\n20 DIM signer, asset, priceAssetId, signerString, result as String\r\n25 IF LOAD(key(id, \"lock\")) != 0 THEN GOTO 390\r\n30 LET timestamp = BLOCK_TIMESTAMP()\r\n40 IF timestamp \u003c LOAD(key(id, \"startTimestamp\")) THEN GOTO 390\r\n50 LET expireTimestamp = LOAD(key(id, \"expireTimestamp\"))\r\n60 IF expireTimestamp == 0 THEN GOTO 80\r\n70 IF timestamp \u003e expireTimestamp THEN GOTO 390\r\n80 IF timestamp \u003c LOAD(key(id, \"lastDispense\")) + LOAD(key(id, \"dispenseCooldown\")) THEN GOTO 390\r\n100 LET priceAssetId = LOAD(key(id, \"priceAssetId\"))\r\n110 LET amount = ASSETVALUE(HEXDECODE(priceAssetId))\r\n120 IF price != LOAD(key(id, \"price\")) THEN GOTO 390\r\n130 IF quantity * price != amount THEN GOTO 390\r\n140 LET signer = SIGNER()\r\n150 IF quantity \u003c LOAD(key(id, \"minDispense\")) THEN GOTO 390\r\n160 IF quantity \u003e LOAD(key(id, \"maxDispense\")) THEN GOTO 390\r\n170 LET storeIndex = LOAD(key(id, \"storeIndex\"))\r\n180 IF quantity \u003e storeIndex THEN GOTO 390\r\n200 LET ctr = 0\r\n210 LET index = RANDOM() % storeIndex\r\n220 LET assetAmount = LOAD(key(id, \"dp_\" + index + \"_amount\"))\r\n230 LET asset = LOAD(key(id, \"dp_\" + index + \"_asset\"))\r\n240 SEND_ASSET_TO_ADDRESS(signer, assetAmount, HEXDECODE(asset))\r\n245 LET result = result + asset + \":\" + assetAmount + \":\" + index + \",\"\r\n//245 LET result = result + index + \",\"\r\n248 LET storeIndex = storeIndex - 1\r\n249 IF storeIndex == index THEN GOTO 270\r\n250 STORE(key(id, \"dp_\" + index + \"_asset\"), LOAD(key(id, \"dp_\" + storeIndex + \"_asset\")))\r\n260 STORE(key(id, \"dp_\" + index + \"_amount\"), LOAD(key(id, \"dp_\" + storeIndex + \"_amount\")))\r\n270 DELETE(key(id, \"dp_\" + storeIndex + \"_asset\"))\r\n280 DELETE(key(id, \"dp_\" + storeIndex + \"_amount\"))\r\n290 LET ctr = ctr + 1\r\n300 IF ctr \u003c quantity THEN GOTO 210\r\n310 STORE(key(id, \"storeIndex\"), storeIndex)\r\n330 LET platformCut = amount * LOAD(\"fee_\" + priceAssetId) / 1000\r\n340 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), platformCut, HEXDECODE(priceAssetId))\r\n350 SEND_ASSET_TO_ADDRESS(ADDRESS_RAW(LOAD(key(id, \"creator\"))), amount - platformCut, HEXDECODE(priceAssetId))\r\n360 STORE(key(id, \"lastDispense\"), timestamp)\r\n365 STORE(\"tx_\" + HEX(TXID()) + \"_result\", result)\r\n370 storeTX(id)\r\n380 RETURN 0\r\n390 RETURN 1\r\nEnd Function\r\n\r\nFunction AddAssets(id Uint64, storeIndex Uint64, assetList String) Uint64\r\n10 IF LOAD(key(id, \"creator\")) != ADDRESS_STRING(SIGNER()) THEN GOTO 50\r\n20 storeTX(id)\r\n25 IF LOAD(key(id, \"lock\")) == 0 THEN GOTO 50\r\n30 IF storeIndex != LOAD(key(id, \"storeIndex\")) THEN GOTO 50\r\n40 RETURN storeAssets(id, storeIndex, assetList)\r\n50 RETURN 1\r\nEnd Function\r\n\r\nFunction RetrieveAssets(id Uint64, storeIndex Uint64, orderedIndexList String) Uint64\r\n10 DIM signer, asset as String\r\n20 DIM assetAmount, end, index, assetIndex as Uint64\r\n25 IF LOAD(key(id, \"lock\")) == 0 THEN GOTO 130\r\n30 LET signer = SIGNER()\r\n35 IF storeIndex != LOAD(key(id, \"storeIndex\")) THEN GOTO 130\r\n40 IF LOAD(key(id, \"creator\")) != ADDRESS_STRING(signer) THEN GOTO 130\r\n42 LET end = STRLEN(orderedIndexList) / 5\r\n43 LET index = 0\r\n44 MAPSTORE(\"lastIndex\", 0)\r\n45 LET assetIndex = ATOI(SUBSTR(orderedIndexList, index * 5, 5))\r\n50 IF MAPGET(\"lastIndex\") \u003e assetIndex THEN GOTO 130 // force orderedList\r\n55 MAPSTORE(\"lastIndex\", assetIndex)\r\n60 IF assetIndex \u003c storeIndex THEN GOTO 70\r\n65 LET assetIndex = MAPGET(assetIndex)\r\n70 LET assetAmount = LOAD(key(id, \"dp_\" + assetIndex + \"_amount\"))\r\n75 LET asset = LOAD(key(id, \"dp_\" + assetIndex + \"_asset\"))\r\n80 SEND_ASSET_TO_ADDRESS(signer, assetAmount, HEXDECODE(asset))\r\n90 LET storeIndex = storeIndex - 1\r\n91 IF assetIndex \u003e= storeIndex THEN GOTO 97\r\n92 MAPSTORE(storeIndex, assetIndex)\r\n93 STORE(key(id, \"dp_\" + assetIndex + \"_asset\"), LOAD(key(id, \"dp_\" + storeIndex + \"_asset\")))\r\n95 STORE(key(id, \"dp_\" + assetIndex + \"_amount\"), LOAD(key(id, \"dp_\" + storeIndex + \"_amount\")))\r\n97 DELETE(key(id, \"dp_\" + storeIndex + \"_asset\"))\r\n98 DELETE(key(id, \"dp_\" + storeIndex + \"_amount\"))\r\n100 LET index = index + 1\r\n110 IF index \u003c end THEN GOTO 45\r\n113 STORE(key(id, \"storeIndex\"), storeIndex)\r\n115 storeTX(id)\r\n120 RETURN 0\r\n130 RETURN 1\r\nEnd Function\r\n\r\nFunction SetAssetFee(assetId String, fee Uint64) Uint64\r\n10 IF LOAD(\"owner\") != SIGNER() THEN GOTO 50\r\n20 IF fee \u003e 1000 THEN GOTO 50\r\n30 STORE(\"fee_\" + assetId, fee)\r\n40 RETURN 0\r\n50 RETURN 1\r\nEnd Function\r\n\r\nFunction DelAssetFee(assetId String) Uint64\r\n10 IF LOAD(\"owner\") != SIGNER() THEN GOTO 40\r\n20 DELETE(\"fee_\" + assetId)\r\n30 RETURN 0\r\n40 RETURN 1\r\nEnd Function\r\n\r\nFunction TransferOwnership(newMinter string) Uint64\r\n10 IF LOAD(\"owner\") != SIGNER() THEN GOTO 40\r\n20 STORE(\"tempOwner\", ADDRESS_RAW(newMinter))\r\n30 RETURN 0\r\n40 RETURN 1\r\nEnd Function\r\n\r\nFunction CancelTransferOwnership() Uint64\r\n10 IF LOAD(\"owner\") != SIGNER() THEN GOTO 40\r\n20 DELETE(\"tempOwner\")\r\n30 RETURN 0\r\n40 RETURN 1\r\nEnd Function\r\n\r\nFunction ClaimOwnership() Uint64\r\n10 IF LOAD(\"tempOwner\") != SIGNER() THEN GOTO 50\r\n20 STORE(\"owner\", SIGNER())\r\n30 DELETE(\"tempOwner\")\r\n40 RETURN 0\r\n50 RETURN 1\r\nEnd Function\r\n\r\nFunction UpdateCode(code String) Uint64\r\n10 IF LOAD(\"owner\") != SIGNER() THEN GOTO 40\r\n20 UPDATE_SC_CODE(code)\r\n30 RETURN 0\r\n40 RETURN 1\r\nEnd Function"}]

Payload

Token (SCID):
DERO
Deposited:
none
Fees:
0.11479 DERO