Transaction Details
Open on Dero ExplorerInternal ID:
2866266
Transaction Hash:
a74f0833442d9aee0c58d83ba72a6eb5e59d052bc572ada335fb6a925b265efa
Block:
Timestamp:
2022-10-02 03:30:08 UTC (2.8 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 initStore()\r\n10 STORE(\"commit_ctr\", 0)\r\n20 RETURN\r\nEnd Function\r\n\r\nFunction beginStore()\r\n10 MAPSTORE(\"commit\", \"{\")\r\n20 MAPSTORE(\"commit_ctr\", LOAD(\"commit_ctr\"))\r\n30 RETURN\r\nEnd Function\r\n\r\nFunction appendStore(key String, value String)\r\n10 DIM commit as String\r\n20 LET commit = MAPGET(\"commit\")\r\n30 IF commit == \"{\" THEN GOTO 50\r\n40 LET commit = commit + \",\"\r\n50 MAPSTORE(\"commit\", commit + \"\\\"\" + key + \"\\\":\" + value)\r\n60 RETURN\r\nEnd Function\r\n\r\nFunction storeString(key String, value String)\r\n10 DIM commit as String\r\n20 STORE(key, value)\r\n30 appendStore(key, \"\\\"\" + value + \"\\\"\")\r\n40 RETURN\r\nEnd Function\r\n\r\nFunction storeUint64(key String, value Uint64)\r\n10 DIM commit as String\r\n20 STORE(key, value)\r\n30 appendStore(key, \"\" + value + \"\")\r\n40 RETURN\r\nEnd Function\r\n\r\nFunction deleteKey(key String)\r\n10 DIM commit as String\r\n20 DELETE(key)\r\n30 appendStore(key, \"-1\")\r\n40 RETURN\r\nEnd Function\r\n\r\nFunction endStore()\r\n10 DIM ctr as Uint64\r\n20 LET ctr = MAPGET(\"commit_ctr\")\r\n30 STORE(\"commit_\" + ctr, MAPGET(\"commit\") + \"}\")\r\n40 STORE(\"commit_ctr\", ctr + 1)\r\n50 RETURN\r\nEnd Function\r\n\r\nFunction auKey(id Uint64, key String) String\r\n10 RETURN \"au_\" + id + \"_\" + key\r\nEnd Function\r\n\r\nFunction Initialize() Uint64\r\n10 IF EXISTS(\"owner\") == 0 THEN GOTO 30\r\n20 RETURN 1\r\n30 STORE(\"owner\", SIGNER())\r\n40 STORE(\"fee_0000000000000000000000000000000000000000000000000000000000000000\", 25) // 2.5%\r\n50 STORE(\"au_ctr\", 0)\r\n60 initStore()\r\n70 RETURN 0\r\nEnd Function\r\n\r\nFunction CreateAuction(sellAssetId String, bidAssetId String, startAmount Uint64, minBidAmount Uint64, startTimestamp Uint64, duration Uint64) Uint64\r\n10 DIM auId as Uint64\r\n20 LET auId = LOAD(\"au_ctr\")\r\n30 IF startTimestamp \u003e 0 THEN GOTO 50\r\n40 LET startTimestamp = BLOCK_TIMESTAMP()\r\n50 IF EXISTS(\"fee_\" + bidAssetId) == 0 THEN GOTO 230\r\n60 beginStore()\r\n70 storeUint64(auKey(auId, \"startAmount\"), startAmount)\r\n80 storeString(auKey(auId, \"sellAssetId\"), sellAssetId)\r\n90 storeUint64(auKey(auId, \"sellAmount\"), ASSETVALUE(HEXDECODE(sellAssetId)))\r\n100 storeUint64(auKey(auId, \"startTimestamp\"), startTimestamp)\r\n110 storeUint64(auKey(auId, \"duration\"), duration)\r\n120 storeString(auKey(auId, \"seller\"), ADDRESS_STRING(SIGNER()))\r\n130 storeString(auKey(auId, \"bidAssetId\"), bidAssetId)\r\n140 storeUint64(auKey(auId, \"minBidAmount\"), minBidAmount)\r\n150 storeUint64(auKey(auId, \"currentBid\"), 0)\r\n160 storeUint64(auKey(auId, \"bidCount\"), 0)\r\n170 storeUint64(auKey(auId, \"timestamp\"), BLOCK_TIMESTAMP())\r\n180 storeUint64(auKey(auId, \"close\"), 0)\r\n190 storeString(auKey(auId, \"txId\"), HEX(TXID()))\r\n200 endStore()\r\n210 STORE(\"au_ctr\", auId + 1)\r\n220 RETURN 0\r\n230 RETURN 1\r\nEnd Function\r\n\r\nFunction SetAuctionMinBid(auId Uint64, amount Uint64) Uint64\r\n10 IF LOAD(auKey(auId, \"seller\")) == ADDRESS_STRING(SIGNER()) THEN GOTO 30\r\n20 RETURN 1\r\n30 beginStore()\r\n40 storeUint64(auKey(auId, \"minBidAmount\"), amount)\r\n50 endStore()\r\n60 RETURN 0\r\nEnd Function\r\n\r\nFunction CloseAuction(auId Uint64) Uint64\r\n10 IF LOAD(auKey(auId, \"seller\")) != ADDRESS_STRING(SIGNER()) THEN GOTO 90\r\n20 IF LOAD(auKey(auId, \"bidCount\")) \u003e 0 THEN GOTO 90\r\n30 IF LOAD(auKey(auId, \"close\")) == 1 THEN GOTO 90\r\n40 SEND_ASSET_TO_ADDRESS(SIGNER(), LOAD(auKey(auId, \"sellAmount\")), HEXDECODE(LOAD(auKey(auId, \"sellAssetId\"))))\r\n50 beginStore()\r\n60 storeUint64(auKey(auId, \"close\"), 1)\r\n70 endStore()\r\n80 RETURN 0\r\n90 RETURN 1\r\nEnd Function\r\n\r\nFunction isAuctionFinished (auId Uint64) Uint64\r\n10 DIM startTimestamp, duration, timestamp as Uint64\r\n20 LET startTimestamp = LOAD(auKey(auId, \"startTimestamp\"))\r\n30 LET duration = LOAD(auKey(auId, \"duration\"))\r\n40 LET timestamp = BLOCK_TIMESTAMP()\r\n50 IF timestamp \u003c= startTimestamp + duration THEN GOTO 70\r\n60 RETURN 1\r\n70 RETURN 0\r\nEnd Function\r\n\r\nFunction Bid(auId Uint64) Uint64\r\n10 DIM minBidAmount, bidAmount, bidCount, lockedAmount, startAmount, currentBid, timestamp, bdrBidCount as Uint64\r\n20 DIM bidAssetId, signerString as String\r\n30 LET signerString = ADDRESS_STRING(SIGNER())\r\n40 LET minBidAmount = LOAD(auKey(auId, \"minBidAmount\"))\r\n50 LET bidAssetId = LOAD(auKey(auId, \"bidAssetId\"))\r\n60 LET bidCount = LOAD(auKey(auId, \"bidCount\"))\r\n70 LET bidAmount = ASSETVALUE(HEXDECODE(bidAssetId))\r\n80 LET startAmount = LOAD(auKey(auId, \"startAmount\"))\r\n90 LET currentBid = LOAD(auKey(auId, \"currentBid\"))\r\n95 LET timestamp = BLOCK_TIMESTAMP()\r\n100 LET lockedAmount = 0\r\n110 IF EXISTS(auKey(auId, \"bdr_\" + signerString + \"_lockedAmount\")) == 0 THEN GOTO 130\r\n120 LET lockedAmount = LOAD(auKey(auId, \"bdr_\" + signerString + \"_lockedAmount\"))\r\n130 LET lockedAmount = lockedAmount + bidAmount\r\n135 IF LOAD(auKey(auId, \"close\")) == 1 THEN GOTO 150\r\n136 IF timestamp \u003c LOAD(auKey(auId, \"startTimestamp\")) THEN GOTO 150\r\n140 IF isAuctionFinished(auId) == 0 THEN GOTO 160\r\n150 RETURN 1\r\n160 IF bidAmount \u003e= minBidAmount THEN GOTO 180\r\n170 RETURN 1\r\n180 IF currentBid \u003e 0 THEN GOTO 210\r\n190 IF bidAmount \u003e= startAmount THEN GOTO 230\r\n200 RETURN 1\r\n210 IF lockedAmount \u003e currentBid THEN GOTO 230\r\n220 RETURN 1\r\n230 beginStore()\r\n240 LET currentBid = currentBid + (lockedAmount - currentBid)\r\n250 LET bdrBidCount = 0\r\n260 IF EXISTS(auKey(auId, \"bdr_\" + signerString + \"_bidCount\")) == 0 THEN GOTO 280\r\n270 LET bdrBidCount = LOAD(auKey(auId, \"bdr_\" + signerString + \"_bidCount\"))\r\n280 storeUint64(auKey(auId, \"bdr_\" + signerString + \"_lockedAmount\"), lockedAmount)\r\n290 storeUint64(auKey(auId, \"bdr_\" + signerString + \"_bidAmount\"), lockedAmount)\r\n300 storeUint64(auKey(auId, \"bdr_\" + signerString + \"_timestamp\"), timestamp)\r\n310 storeUint64(auKey(auId, \"bdr_\" + signerString + \"_bidCount\"), bdrBidCount + 1)\r\n320 storeUint64(auKey(auId, \"currentBid\"), currentBid)\r\n330 storeUint64(auKey(auId, \"bidCount\"), bidCount + 1)\r\n340 storeString(auKey(auId, \"lastBidder\"), signerString)\r\n350 endStore()\r\n360 RETURN 0\r\nEnd Function\r\n\r\nFunction CheckoutAuction(auId Uint64) Uint64\r\n10 DIM sellAssetId, bidAssetId, seller, winner as String\r\n20 DIM currentBid, sellAmount, auctionCut as Uint64\r\n30 LET sellAssetId = LOAD(auKey(auId, \"sellAssetId\"))\r\n40 LET sellAmount = LOAD(auKey(auId, \"sellAmount\"))\r\n50 LET currentBid = LOAD(auKey(auId, \"currentBid\"))\r\n60 LET bidAssetId = LOAD(auKey(auId, \"bidAssetId\"))\r\n70 LET seller = LOAD(auKey(auId, \"seller\"))\r\n80 LET winner = LOAD(auKey(auId, \"lastBidder\"))\r\n90 LET auctionCut = 0\r\n100 IF LOAD(auKey(auId, \"close\")) == 0 THEN GOTO 120\r\n110 RETURN 1\r\n120 IF isAuctionFinished(auId) == 1 THEN GOTO 140\r\n130 RETURN 1\r\n140 IF EXISTS(\"fee_\" + bidAssetId) == 0 THEN GOTO 170\r\n150 LET auctionCut = currentBid * LOAD(\"fee_\" + bidAssetId) / 1000\r\n160 LET currentBid = currentBid - auctionCut\r\n170 beginStore()\r\n180 storeUint64(auKey(auId, \"close\"), 1)\r\n190 storeUint64(auKey(auId, \"bdr_\" + winner + \"_lockedAmount\"), 0)\r\n200 storeUint64(auKey(auId, \"checkoutFee\"), auctionCut)\r\n210 SEND_ASSET_TO_ADDRESS(ADDRESS_RAW(winner), sellAmount, HEXDECODE(sellAssetId))\r\n220 SEND_ASSET_TO_ADDRESS(ADDRESS_RAW(seller), currentBid, HEXDECODE(bidAssetId))\r\n230 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), auctionCut, HEXDECODE(bidAssetId))\r\n240 endStore()\r\n250 RETURN 0\r\nEnd Function\r\n\r\nFunction RetrieveLockedFunds(auId Uint64) Uint64\r\n10 DIM lockedAmount as Uint64\r\n20 DIM bidAssetId, signerString, winner as String\r\n30 LET bidAssetId = LOAD(auKey(auId, \"bidAssetId\"))\r\n40 LET signerString = ADDRESS_STRING(SIGNER())\r\n50 LET winner = LOAD(auKey(auId, \"lastBidder\"))\r\n60 IF isAuctionFinished(auId) == 1 THEN GOTO 80\r\n70 RETURN 1\r\n80 IF winner != signerString THEN GOTO 100\r\n90 RETURN 1\r\n100 LET lockedAmount = LOAD(auKey(auId, \"bdr_\" + signerString + \"_lockedAmount\"))\r\n110 IF lockedAmount \u003e 0 THEN GOTO 130\r\n120 RETURN 1\r\n130 beginStore()\r\n140 SEND_ASSET_TO_ADDRESS(SIGNER(), lockedAmount, HEXDECODE(bidAssetId))\r\n150 storeUint64(auKey(auId, \"bdr_\" + signerString + \"_lockedAmount\"), 0)\r\n160 endStore()\r\n170 RETURN 0\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"}]
Payload
Token (SCID):
DERO
Deposited:
none
Fees:
0.11657 DERO