Smart Contract Details
Open on Dero ExplorerInternal ID:
42913
Hash / Transaction:
Block:
Timestamp:
2023-10-13 22:44:29 UTC (1.8 years ago)
Creator:
The Abyss
(+33 more)
(1396558)
Raw Data:
[{"name":"SC_ACTION","datatype":"U","value":1},{"name":"SC_CODE","datatype":"S","value":"// Copyright 2022. Civilware. All rights reserved.\n// Artificer NFA Market Standard (ART-NFA-MS1)\n\nFunction InitializePrivate() Uint64\n 10 IF EXISTS(\"owner\") == 0 THEN GOTO 300 ELSE GOTO 999\n 300 STORE(\"artificerFee\", 1)\n 310 STORE(\"royalty\", 3)\n 320 STORE(\"ownerCanUpdate\", 0)\n 330 STORE(\"nameHdr\", \"Gun15\")\n 340 STORE(\"descrHdr\", \"Desperado Guns are a collection of NFT/NFAs created by G and Little Duck. Owning a Desperado G45 NFT will grant holders access to an Artificer standard NFA. NFA holders will be able to participate in a new utility on the Dero blockchain called Asset Duels on dReams app. ;;7b2272223a347d\")\n 350 STORE(\"typeHdr\", \"Image\")\n 360 STORE(\"iconURLHdr\", \"https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Icons/Gun15-IC.png\")\n 370 STORE(\"tagsHdr\", \"#NFT #NFA #Dero #Cowboys #Guns #Gunfight #AssetDuels\")\n 400 STORE(\"fileCheckC\", \"13344a3258d912ec32edd22bf34beb08d66f6c903656430c90521d2b4eb053fd\")\n 410 STORE(\"fileCheckS\", \"e9108dc3532d0c366e2bf75b0a5a621f777cd151c0df12d18a8bf2bcd09ecfd\")\n 420 STORE(\"fileURL\", \"https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Assets/Gun15.png\")\n 430 STORE(\"fileSignURL\", \"https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Sign/Gun15.png.sign\")\n 440 STORE(\"coverURL\", \"https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Cover/Gun15-CA.png\")\n 450 STORE(\"collection\", \"Desperado Guns\")\n 500 IF init() == 0 THEN GOTO 600 ELSE GOTO 999\n 600 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction init() Uint64\n 10 IF EXISTS(\"owner\") == 0 THEN GOTO 20 ELSE GOTO 999\n 20 STORE(\"owner\", SIGNER())\n 30 STORE(\"creatorAddr\", SIGNER())\n 40 STORE(\"artificerAddr\", ADDRESS_RAW(\"dero1qy0khp9s9yw2h0eu20xmy9lth3zp5cacmx3rwt6k45l568d2mmcf6qgcsevzx\"))\n 50 IF IS_ADDRESS_VALID(LOAD(\"artificerAddr\")) == 1 THEN GOTO 60 ELSE GOTO 999\n 60 STORE(\"active\", 0)\n 70 STORE(\"scBalance\", 0)\n 80 STORE(\"cancelBuffer\", 300)\n 90 STORE(\"startBlockTime\", 0)\n 100 STORE(\"endBlockTime\", 0)\n 110 STORE(\"bidCount\", 0)\n 120 STORE(\"staticBidIncr\", 10000)\n 130 STORE(\"percentBidIncr\", 1000)\n 140 STORE(\"listType\", \"\")\n 150 STORE(\"charityDonatePerc\", 0)\n 160 STORE(\"startPrice\", 0)\n 170 STORE(\"currBidPrice\", 0)\n 180 STORE(\"version\", \"1.1.1\")\n 500 IF LOAD(\"charityDonatePerc\") + LOAD(\"artificerFee\") + LOAD(\"royalty\") \u003e 100 THEN GOTO 999\n 600 SEND_ASSET_TO_ADDRESS(SIGNER(), 1, SCID())\n 610 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction ClaimOwnership() Uint64\n 10 IF ASSETVALUE(SCID()) == 1 THEN GOTO 20 ELSE GOTO 999\n 20 IF ADDRESS_STRING(SIGNER()) == \"\" THEN GOTO 500\n 30 transferOwnership(SIGNER())\n 40 SEND_ASSET_TO_ADDRESS(SIGNER(), 1, SCID())\n 50 RETURN 0\n 500 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), 1, SCID())\n 510 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction Update(iconURL String, coverURL String, fileURL String, fileSignURL String, tags String) Uint64\n 10 IF LOAD(\"creatorAddr\") == SIGNER() THEN GOTO 40 ELSE GOTO 20\n 20 IF LOAD(\"ownerCanUpdate\") == 1 THEN GOTO 30 ELSE GOTO 999\n 30 IF LOAD(\"owner\") == SIGNER() THEN GOTO 40 ELSE GOTO 999\n 40 IF iconURL != \"\" THEN GOTO 50 ELSE GOTO 60\n 50 STORE(\"iconURLHdr\", iconURL)\n 60 IF coverURL != \"\" THEN GOTO 70 ELSE GOTO 80\n 70 STORE(\"coverURL\", coverURL)\n 80 IF fileURL != \"\" THEN GOTO 90 ELSE GOTO 100\n 90 STORE(\"fileURL\", fileURL)\n 100 IF fileSignURL != \"\" THEN GOTO 110 ELSE GOTO 120\n 110 STORE(\"fileSignURL\", fileSignURL)\n 120 IF tags != \"\" THEN GOTO 130 ELSE GOTO 140\n 130 STORE(\"tagsHdr\", tags)\n 140 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction Start(listType String, duration Uint64, startPrice Uint64, charityDonateAddr String, charityDonatePerc Uint64) Uint64\n 10 dim tempPercCount as Uint64\n 20 dim err as String\n 30 IF ADDRESS_STRING(SIGNER()) == \"\" THEN GOTO 600\n 40 IF ASSETVALUE(SCID()) == 1 THEN GOTO 70 ELSE GOTO 400\n 70 IF listType == \"auction\" THEN GOTO 100 ELSE GOTO 80\n 80 IF listType == \"sale\" THEN GOTO 100 ELSE GOTO 400\n 100 IF LOAD(\"owner\") == SIGNER() THEN GOTO 110 ELSE GOTO 400\n 110 IF checkActive(LOAD(\"listType\")) == 999 THEN GOTO 150 ELSE GOTO 400\n 150 IF charityDonatePerc + LOAD(\"artificerFee\") + LOAD(\"royalty\") \u003e 100 THEN GOTO 160 ELSE GOTO 190\n 160 LET tempPercCount = 100 - LOAD(\"artificerFee\") - LOAD(\"royalty\")\n 165 LET charityDonatePerc = tempPercCount\n 170 STORE(\"charityDonatePerc\", charityDonatePerc)\n 175 IF IS_ADDRESS_VALID(ADDRESS_RAW(charityDonateAddr)) == 1 THEN GOTO 180 ELSE GOTO 400\n 180 STORE(\"charityDonateAddr\", ADDRESS_RAW(charityDonateAddr))\n 185 GOTO 210\n 190 IF charityDonatePerc \u003e 0 THEN GOTO 195 ELSE GOTO 210\n 195 IF IS_ADDRESS_VALID(ADDRESS_RAW(charityDonateAddr)) == 1 THEN GOTO 200 ELSE GOTO 400\n 200 STORE(\"charityDonatePerc\", charityDonatePerc)\n 205 STORE(\"charityDonateAddr\", ADDRESS_RAW(charityDonateAddr))\n 210 STORE(\"listType\", listType)\n 220 STORE(\"scBalance\", 1)\n 230 STORE(\"startBlockTime\", BLOCK_TIMESTAMP())\n 240 STORE(\"endBlockTime\", generateEndBlock(duration, BLOCK_TIMESTAMP()))\n 250 STORE(\"startPrice\", startPrice)\n 270 STORE(\"active\", 1)\n 300 RETURN 0\n 400 IF ASSETVALUE(SCID()) \u003e 0 THEN GOTO 410 ELSE GOTO 999\n 410 SEND_ASSET_TO_ADDRESS(SIGNER(), ASSETVALUE(SCID()), SCID())\n 420 RETURN 0\n 600 IF ASSETVALUE(SCID()) \u003e 0 THEN GOTO 610 ELSE GOTO 999\n 610 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), ASSETVALUE(SCID()), SCID())\n 620 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction BuyItNow() Uint64\n 10 dim activeFlag as Uint64\n 15 IF ADDRESS_STRING(SIGNER()) == \"\" THEN GOTO 999\n 20 IF LOAD(\"owner\") == SIGNER() THEN GOTO 920 ELSE GOTO 30\n 30 LET activeFlag = checkActive(\"sale\")\n 40 IF activeFlag == 0 THEN GOTO 50 ELSE GOTO 500\n 50 IF LOAD(\"scBalance\") == 1 THEN GOTO 60 ELSE GOTO 920\n 60 IF DEROVALUE() \u003e= LOAD(\"startPrice\") THEN GOTO 70 ELSE GOTO 920\n 70 SEND_ASSET_TO_ADDRESS(SIGNER(), LOAD(\"scBalance\"), SCID())\n 80 STORE(\"scBalance\", 0)\n 90 processDEROFinalPayment(DEROVALUE())\n 95 transferOwnership(SIGNER())\n 96 resetVars(1)\n 97 STORE(\"previousSalePrice\", DEROVALUE())\n 100 RETURN 0\n 500 IF activeFlag == 999 THEN GOTO 920 ELSE GOTO 510\n 510 IF activeFlag == 111 THEN GOTO 520 ELSE GOTO 920\n 520 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"scBalance\"), SCID())\n 530 STORE(\"scBalance\", 0)\n 540 resetVars(1)\n 920 IF DEROVALUE() \u003e 0 THEN GOTO 925 ELSE GOTO 930\n 925 SEND_DERO_TO_ADDRESS(SIGNER(), DEROVALUE())\n 930 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction Bid() Uint64\n 10 dim activeFlag, bidAmt as Uint64\n 15 IF ADDRESS_STRING(SIGNER()) == \"\" THEN GOTO 999\n 25 LET bidAmt = DEROVALUE()\n 30 IF LOAD(\"owner\") == SIGNER() THEN GOTO 920 ELSE GOTO 35\n 35 LET activeFlag = checkActive(\"auction\")\n 40 IF activeFlag == 0 THEN GOTO 50 ELSE GOTO 500\n 50 IF LOAD(\"scBalance\") == 1 THEN GOTO 51 ELSE GOTO 920\n 51 IF EXISTS(SIGNER() + \"-bidDate\") == 1 THEN GOTO 60 ELSE GOTO 70\n 60 IF LOAD(SIGNER() + \"-bidDate\") \u003c BLOCK_TIMESTAMP() THEN GOTO 70 ELSE GOTO 920\n 70 IF bidAmt \u003e= LOAD(\"startPrice\") THEN GOTO 80 ELSE GOTO 920\n 80 IF bidAmt \u003e= LOAD(\"currBidPrice\") THEN GOTO 90 ELSE GOTO 920\n 90 STORE(\"currBidPrice\", findLesserIncrease(bidAmt))\n 100 outbidReturns()\n 120 STORE(\"currBidAddr\", SIGNER())\n 130 STORE(\"currBidAmt\", bidAmt)\n 140 STORE(SIGNER() + \"-bidDate\", BLOCK_TIMESTAMP())\n 150 STORE(\"bidCount\", LOAD(\"bidCount\") + 1)\n 170 IF LOAD(\"endBlockTime\") - 900 \u003c= BLOCK_TIMESTAMP() THEN GOTO 180 ELSE GOTO 190\n 180 STORE(\"endBlockTime\", BLOCK_TIMESTAMP() + 900)\n 190 RETURN 0\n 500 IF activeFlag == 999 THEN GOTO 920 ELSE GOTO 510\n 510 IF activeFlag == 111 THEN GOTO 520 ELSE GOTO 920\n 520 IF bidAmt \u003e 0 THEN GOTO 530 ELSE GOTO 540\n 530 SEND_DERO_TO_ADDRESS(SIGNER(), bidAmt)\n 540 processHighestBidder()\n 550 RETURN 0\n 920 IF bidAmt \u003e 0 THEN GOTO 925 ELSE GOTO 930\n 925 SEND_DERO_TO_ADDRESS(SIGNER(), bidAmt)\n 930 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction CloseListing() Uint64\n 10 IF LOAD(\"owner\") == SIGNER() THEN GOTO 20 ELSE GOTO 999\n 20 IF checkActive(LOAD(\"listType\")) == 111 THEN GOTO 30 ELSE GOTO 999\n 30 IF LOAD(\"listType\") == \"auction\" THEN GOTO 40 ELSE GOTO 200\n 40 IF LOAD(\"bidCount\") \u003e 0 THEN GOTO 50 ELSE GOTO 210\n 50 processHighestBidder()\n 60 RETURN 0\n 200 IF LOAD(\"listType\") == \"sale\" THEN GOTO 210 ELSE GOTO 999\n 210 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"scBalance\"), SCID())\n 220 STORE(\"scBalance\", 0)\n 230 resetVars(1)\n 240 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction CancelListing() Uint64\n 10 dim tempCounter as Uint64\n 30 IF LOAD(\"owner\") == SIGNER() THEN GOTO 50 ELSE GOTO 999\n 50 IF checkActive(LOAD(\"listType\")) == 0 THEN GOTO 60 ELSE GOTO 999\n 60 IF (LOAD(\"startBlockTime\") + LOAD(\"cancelBuffer\")) \u003e= BLOCK_TIMESTAMP() THEN GOTO 460 ELSE GOTO 999\n 460 outbidReturns()\n 600 SEND_ASSET_TO_ADDRESS(LOAD(\"owner\"), LOAD(\"scBalance\"), SCID())\n 610 STORE(\"scBalance\", 0)\n 620 resetVars(1)\n 630 RETURN 0\n 999 RETURN 1\nEnd Function\n\nFunction transferOwnership(newOwner String) Uint64\n 10 IF LOAD(\"owner\") == newOwner THEN GOTO 40 ELSE GOTO 20\n 20 STORE(\"previousOwner\", LOAD(\"owner\"))\n 30 STORE(\"owner\", newOwner)\n 40 RETURN 0\nEnd Function\n\nFunction generateEndBlock(duration Uint64, startBlockTime Uint64) Uint64\n 10 dim timeinseconds, endBlockTime as Uint64\n 20 LET timeinseconds = 3600 * duration\n 30 IF timeinseconds == 0 THEN GOTO 40 ELSE GOTO 50\n 40 LET timeinseconds = 3600\n 50 IF timeinseconds \u003e 604800 THEN GOTO 60 ELSE GOTO 70\n 60 LET timeinseconds = 604800\n 70 LET endBlockTime = startBlockTime + timeinseconds\n 80 RETURN endBlockTime\nEnd Function\n\nFunction checkActive(listType String) Uint64\n 10 IF LOAD(\"startBlockTime\") \u003c= BLOCK_TIMESTAMP() THEN GOTO 30 ELSE GOTO 900\n 30 IF LOAD(\"scBalance\") == 1 THEN GOTO 40 ELSE GOTO 900\n 40 IF LOAD(\"endBlockTime\") \u003e BLOCK_TIMESTAMP() THEN GOTO 50 ELSE GOTO 500\n 50 IF LOAD(\"listType\") == listType THEN GOTO 200 ELSE GOTO 910\n 200 STORE(\"active\", 1)\n 210 RETURN 0\n 500 STORE(\"active\", 0)\n 520 RETURN 111\n 900 STORE(\"active\", 0)\n 910 RETURN 999\nEnd Function\n\nFunction processHighestBidder() Uint64\n 10 dim bidAmt as Uint64\n 20 dim bidAddr as String\n 30 LET bidAddr = LOAD(\"owner\")\n 100 IF EXISTS(\"currBidAmt\") == 1 THEN GOTO 110 ELSE GOTO 310\n 110 IF EXISTS(\"currBidAddr\") == 1 THEN GOTO 120 ELSE GOTO 310\n 120 IF LOAD(\"currBidAddr\") != \"\" THEN GOTO 130 ELSE GOTO 310\n 130 IF LOAD(\"currBidAmt\") \u003e 0 THEN GOTO 140 ELSE GOTO 310\n 140 LET bidAddr = LOAD(\"currBidAddr\")\n 150 LET bidAmt = LOAD(\"currBidAmt\")\n 310 SEND_ASSET_TO_ADDRESS(bidAddr, LOAD(\"scBalance\"), SCID())\n 320 processDEROFinalPayment(bidAmt)\n 350 transferOwnership(bidAddr)\n 360 STORE(\"scBalance\", 0)\n 370 IF EXISTS(bidAddr + \"-bidDate\") == 1 THEN GOTO 380 ELSE GOTO 390\n 380 DELETE(bidAddr + \"-bidDate\")\n 390 DELETE(\"currBidAddr\")\n 400 DELETE(\"currBidAmt\")\n 410 IF bidAmt \u003e 0 THEN GOTO 420 ELSE GOTO 600\n 420 STORE(\"previousAuctionPrice\", bidAmt)\n 600 resetVars(1)\n 610 RETURN 0\nEnd Function\n\nFunction outbidReturns() Uint64\n 20 IF EXISTS(\"currBidAddr\") == 1 THEN GOTO 30 ELSE GOTO 900\n 30 IF EXISTS(\"currBidAmt\") == 1 THEN GOTO 40 ELSE GOTO 900\n 40 IF LOAD(\"currBidAmt\") \u003e 0 THEN GOTO 50 ELSE GOTO 900\n 50 IF LOAD(\"currBidAddr\") != \"\" THEN GOTO 60 ELSE GOTO 900\n 60 SEND_DERO_TO_ADDRESS(LOAD(\"currBidAddr\"), LOAD(\"currBidAmt\"))\n 800 DELETE(LOAD(\"currBidAddr\") + \"-bidDate\")\n 810 DELETE(\"currBidAddr\")\n 820 DELETE(\"currBidAmt\")\n 900 RETURN 0\nEnd Function\n\nFunction processDEROFinalPayment(saleAmt Uint64) Uint64\n 10 dim payoutAmt, royaltyPaymt, artificerPaymt, charityPaymt as Uint64\n 20 IF saleAmt == 0 THEN GOTO 200 ELSE GOTO 60\n 60 IF LOAD(\"royalty\") \u003e 0 THEN GOTO 65 ELSE GOTO 80\n 65 LET royaltyPaymt = LOAD(\"royalty\") * saleAmt / 100\n 66 IF royaltyPaymt \u003e 0 THEN GOTO 70 ELSE GOTO 80\n 70 SEND_DERO_TO_ADDRESS(LOAD(\"creatorAddr\"), royaltyPaymt)\n 80 IF LOAD(\"artificerFee\") \u003e 0 THEN GOTO 85 ELSE GOTO 100\n 85 LET artificerPaymt = LOAD(\"artificerFee\") * saleAmt / 100\n 86 IF artificerPaymt \u003e 0 THEN GOTO 90 ELSE GOTO 100\n 90 SEND_DERO_TO_ADDRESS(LOAD(\"artificerAddr\"), artificerPaymt)\n 100 IF LOAD(\"charityDonatePerc\") \u003e 0 THEN GOTO 105 ELSE GOTO 120\n 105 LET charityPaymt = LOAD(\"charityDonatePerc\") * saleAmt / 100\n 106 IF charityPaymt \u003e 0 THEN GOTO 110 ELSE GOTO 120\n 110 SEND_DERO_TO_ADDRESS(LOAD(\"charityDonateAddr\"), charityPaymt)\n 120 LET payoutAmt = saleAmt - royaltyPaymt - artificerPaymt - charityPaymt\n 125 IF payoutAmt \u003e 0 THEN GOTO 130 ELSE GOTO 200\n 130 SEND_DERO_TO_ADDRESS(LOAD(\"owner\"), payoutAmt)\n 200 RETURN 0\nEnd Function\n\nFunction resetVars(forceReset Uint64) Uint64\n 10 IF forceReset == 0 THEN GOTO 20 ELSE GOTO 30\n 20 IF checkActive(LOAD(\"listType\")) == 999 THEN GOTO 20 ELSE GOTO 900\n 30 STORE(\"startBlockTime\", 0)\n 40 STORE(\"endBlockTime\", 0)\n 50 STORE(\"bidCount\", 0)\n 60 STORE(\"active\", 0)\n 80 STORE(\"startPrice\", 0)\n 90 STORE(\"currBidPrice\", 0)\n 100 STORE(\"listType\", \"\")\n 110 STORE(\"charityDonateAddr\", \"\")\n 120 STORE(\"charityDonatePerc\", 0)\n 200 RETURN 0\n 900 RETURN 999\nEnd Function\n\nFunction findLesserIncrease(bidAmt Uint64) Uint64\n 10 dim percentCalc, staticCalc as Uint64\n 20 LET percentCalc = bidAmt + (bidAmt * LOAD(\"percentBidIncr\") / 10000)\n 30 LET staticCalc = bidAmt + LOAD(\"staticBidIncr\")\n 50 IF percentCalc \u003c staticCalc THEN GOTO 100 ELSE GOTO 200\n 100 RETURN percentCalc\n 200 RETURN staticCalc\nEnd Function"}]
Code:
// Copyright 2022. Civilware. All rights reserved.
// Artificer NFA Market Standard (ART-NFA-MS1)
Function InitializePrivate() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 300 ELSE GOTO 999
300 STORE("artificerFee", 1)
310 STORE("royalty", 3)
320 STORE("ownerCanUpdate", 0)
330 STORE("nameHdr", "Gun15")
340 STORE("descrHdr", "Desperado Guns are a collection of NFT/NFAs created by G and Little Duck. Owning a Desperado G45 NFT will grant holders access to an Artificer standard NFA. NFA holders will be able to participate in a new utility on the Dero blockchain called Asset Duels on dReams app. ;;7b2272223a347d")
350 STORE("typeHdr", "Image")
360 STORE("iconURLHdr", "https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Icons/Gun15-IC.png")
370 STORE("tagsHdr", "#NFT #NFA #Dero #Cowboys #Guns #Gunfight #AssetDuels")
400 STORE("fileCheckC", "13344a3258d912ec32edd22bf34beb08d66f6c903656430c90521d2b4eb053fd")
410 STORE("fileCheckS", "e9108dc3532d0c366e2bf75b0a5a621f777cd151c0df12d18a8bf2bcd09ecfd")
420 STORE("fileURL", "https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Assets/Gun15.png")
430 STORE("fileSignURL", "https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Sign/Gun15.png.sign")
440 STORE("coverURL", "https://raw.githubusercontent.com/DeroDesperados/Desperado-Guns/main/Cover/Gun15-CA.png")
450 STORE("collection", "Desperado Guns")
500 IF init() == 0 THEN GOTO 600 ELSE GOTO 999
600 RETURN 0
999 RETURN 1
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 20 ELSE GOTO 999
20 STORE("owner", SIGNER())
30 STORE("creatorAddr", SIGNER())
40 STORE("artificerAddr", ADDRESS_RAW("dero1qy0khp9s9yw2h0eu20xmy9lth3zp5cacmx3rwt6k45l568d2mmcf6qgcsevzx"))
50 IF IS_ADDRESS_VALID(LOAD("artificerAddr")) == 1 THEN GOTO 60 ELSE GOTO 999
60 STORE("active", 0)
70 STORE("scBalance", 0)
80 STORE("cancelBuffer", 300)
90 STORE("startBlockTime", 0)
100 STORE("endBlockTime", 0)
110 STORE("bidCount", 0)
120 STORE("staticBidIncr", 10000)
130 STORE("percentBidIncr", 1000)
140 STORE("listType", "")
150 STORE("charityDonatePerc", 0)
160 STORE("startPrice", 0)
170 STORE("currBidPrice", 0)
180 STORE("version", "1.1.1")
500 IF LOAD("charityDonatePerc") + LOAD("artificerFee") + LOAD("royalty") > 100 THEN GOTO 999
600 SEND_ASSET_TO_ADDRESS(SIGNER(), 1, SCID())
610 RETURN 0
999 RETURN 1
End Function
Function ClaimOwnership() Uint64
10 IF ASSETVALUE(SCID()) == 1 THEN GOTO 20 ELSE GOTO 999
20 IF ADDRESS_STRING(SIGNER()) == "" THEN GOTO 500
30 transferOwnership(SIGNER())
40 SEND_ASSET_TO_ADDRESS(SIGNER(), 1, SCID())
50 RETURN 0
500 SEND_ASSET_TO_ADDRESS(LOAD("owner"), 1, SCID())
510 RETURN 0
999 RETURN 1
End Function
Function Update(iconURL String, coverURL String, fileURL String, fileSignURL String, tags String) Uint64
10 IF LOAD("creatorAddr") == SIGNER() THEN GOTO 40 ELSE GOTO 20
20 IF LOAD("ownerCanUpdate") == 1 THEN GOTO 30 ELSE GOTO 999
30 IF LOAD("owner") == SIGNER() THEN GOTO 40 ELSE GOTO 999
40 IF iconURL != "" THEN GOTO 50 ELSE GOTO 60
50 STORE("iconURLHdr", iconURL)
60 IF coverURL != "" THEN GOTO 70 ELSE GOTO 80
70 STORE("coverURL", coverURL)
80 IF fileURL != "" THEN GOTO 90 ELSE GOTO 100
90 STORE("fileURL", fileURL)
100 IF fileSignURL != "" THEN GOTO 110 ELSE GOTO 120
110 STORE("fileSignURL", fileSignURL)
120 IF tags != "" THEN GOTO 130 ELSE GOTO 140
130 STORE("tagsHdr", tags)
140 RETURN 0
999 RETURN 1
End Function
Function Start(listType String, duration Uint64, startPrice Uint64, charityDonateAddr String, charityDonatePerc Uint64) Uint64
10 dim tempPercCount as Uint64
20 dim err as String
30 IF ADDRESS_STRING(SIGNER()) == "" THEN GOTO 600
40 IF ASSETVALUE(SCID()) == 1 THEN GOTO 70 ELSE GOTO 400
70 IF listType == "auction" THEN GOTO 100 ELSE GOTO 80
80 IF listType == "sale" THEN GOTO 100 ELSE GOTO 400
100 IF LOAD("owner") == SIGNER() THEN GOTO 110 ELSE GOTO 400
110 IF checkActive(LOAD("listType")) == 999 THEN GOTO 150 ELSE GOTO 400
150 IF charityDonatePerc + LOAD("artificerFee") + LOAD("royalty") > 100 THEN GOTO 160 ELSE GOTO 190
160 LET tempPercCount = 100 - LOAD("artificerFee") - LOAD("royalty")
165 LET charityDonatePerc = tempPercCount
170 STORE("charityDonatePerc", charityDonatePerc)
175 IF IS_ADDRESS_VALID(ADDRESS_RAW(charityDonateAddr)) == 1 THEN GOTO 180 ELSE GOTO 400
180 STORE("charityDonateAddr", ADDRESS_RAW(charityDonateAddr))
185 GOTO 210
190 IF charityDonatePerc > 0 THEN GOTO 195 ELSE GOTO 210
195 IF IS_ADDRESS_VALID(ADDRESS_RAW(charityDonateAddr)) == 1 THEN GOTO 200 ELSE GOTO 400
200 STORE("charityDonatePerc", charityDonatePerc)
205 STORE("charityDonateAddr", ADDRESS_RAW(charityDonateAddr))
210 STORE("listType", listType)
220 STORE("scBalance", 1)
230 STORE("startBlockTime", BLOCK_TIMESTAMP())
240 STORE("endBlockTime", generateEndBlock(duration, BLOCK_TIMESTAMP()))
250 STORE("startPrice", startPrice)
270 STORE("active", 1)
300 RETURN 0
400 IF ASSETVALUE(SCID()) > 0 THEN GOTO 410 ELSE GOTO 999
410 SEND_ASSET_TO_ADDRESS(SIGNER(), ASSETVALUE(SCID()), SCID())
420 RETURN 0
600 IF ASSETVALUE(SCID()) > 0 THEN GOTO 610 ELSE GOTO 999
610 SEND_ASSET_TO_ADDRESS(LOAD("owner"), ASSETVALUE(SCID()), SCID())
620 RETURN 0
999 RETURN 1
End Function
Function BuyItNow() Uint64
10 dim activeFlag as Uint64
15 IF ADDRESS_STRING(SIGNER()) == "" THEN GOTO 999
20 IF LOAD("owner") == SIGNER() THEN GOTO 920 ELSE GOTO 30
30 LET activeFlag = checkActive("sale")
40 IF activeFlag == 0 THEN GOTO 50 ELSE GOTO 500
50 IF LOAD("scBalance") == 1 THEN GOTO 60 ELSE GOTO 920
60 IF DEROVALUE() >= LOAD("startPrice") THEN GOTO 70 ELSE GOTO 920
70 SEND_ASSET_TO_ADDRESS(SIGNER(), LOAD("scBalance"), SCID())
80 STORE("scBalance", 0)
90 processDEROFinalPayment(DEROVALUE())
95 transferOwnership(SIGNER())
96 resetVars(1)
97 STORE("previousSalePrice", DEROVALUE())
100 RETURN 0
500 IF activeFlag == 999 THEN GOTO 920 ELSE GOTO 510
510 IF activeFlag == 111 THEN GOTO 520 ELSE GOTO 920
520 SEND_ASSET_TO_ADDRESS(LOAD("owner"), LOAD("scBalance"), SCID())
530 STORE("scBalance", 0)
540 resetVars(1)
920 IF DEROVALUE() > 0 THEN GOTO 925 ELSE GOTO 930
925 SEND_DERO_TO_ADDRESS(SIGNER(), DEROVALUE())
930 RETURN 0
999 RETURN 1
End Function
Function Bid() Uint64
10 dim activeFlag, bidAmt as Uint64
15 IF ADDRESS_STRING(SIGNER()) == "" THEN GOTO 999
25 LET bidAmt = DEROVALUE()
30 IF LOAD("owner") == SIGNER() THEN GOTO 920 ELSE GOTO 35
35 LET activeFlag = checkActive("auction")
40 IF activeFlag == 0 THEN GOTO 50 ELSE GOTO 500
50 IF LOAD("scBalance") == 1 THEN GOTO 51 ELSE GOTO 920
51 IF EXISTS(SIGNER() + "-bidDate") == 1 THEN GOTO 60 ELSE GOTO 70
60 IF LOAD(SIGNER() + "-bidDate") < BLOCK_TIMESTAMP() THEN GOTO 70 ELSE GOTO 920
70 IF bidAmt >= LOAD("startPrice") THEN GOTO 80 ELSE GOTO 920
80 IF bidAmt >= LOAD("currBidPrice") THEN GOTO 90 ELSE GOTO 920
90 STORE("currBidPrice", findLesserIncrease(bidAmt))
100 outbidReturns()
120 STORE("currBidAddr", SIGNER())
130 STORE("currBidAmt", bidAmt)
140 STORE(SIGNER() + "-bidDate", BLOCK_TIMESTAMP())
150 STORE("bidCount", LOAD("bidCount") + 1)
170 IF LOAD("endBlockTime") - 900 <= BLOCK_TIMESTAMP() THEN GOTO 180 ELSE GOTO 190
180 STORE("endBlockTime", BLOCK_TIMESTAMP() + 900)
190 RETURN 0
500 IF activeFlag == 999 THEN GOTO 920 ELSE GOTO 510
510 IF activeFlag == 111 THEN GOTO 520 ELSE GOTO 920
520 IF bidAmt > 0 THEN GOTO 530 ELSE GOTO 540
530 SEND_DERO_TO_ADDRESS(SIGNER(), bidAmt)
540 processHighestBidder()
550 RETURN 0
920 IF bidAmt > 0 THEN GOTO 925 ELSE GOTO 930
925 SEND_DERO_TO_ADDRESS(SIGNER(), bidAmt)
930 RETURN 0
999 RETURN 1
End Function
Function CloseListing() Uint64
10 IF LOAD("owner") == SIGNER() THEN GOTO 20 ELSE GOTO 999
20 IF checkActive(LOAD("listType")) == 111 THEN GOTO 30 ELSE GOTO 999
30 IF LOAD("listType") == "auction" THEN GOTO 40 ELSE GOTO 200
40 IF LOAD("bidCount") > 0 THEN GOTO 50 ELSE GOTO 210
50 processHighestBidder()
60 RETURN 0
200 IF LOAD("listType") == "sale" THEN GOTO 210 ELSE GOTO 999
210 SEND_ASSET_TO_ADDRESS(LOAD("owner"), LOAD("scBalance"), SCID())
220 STORE("scBalance", 0)
230 resetVars(1)
240 RETURN 0
999 RETURN 1
End Function
Function CancelListing() Uint64
10 dim tempCounter as Uint64
30 IF LOAD("owner") == SIGNER() THEN GOTO 50 ELSE GOTO 999
50 IF checkActive(LOAD("listType")) == 0 THEN GOTO 60 ELSE GOTO 999
60 IF (LOAD("startBlockTime") + LOAD("cancelBuffer")) >= BLOCK_TIMESTAMP() THEN GOTO 460 ELSE GOTO 999
460 outbidReturns()
600 SEND_ASSET_TO_ADDRESS(LOAD("owner"), LOAD("scBalance"), SCID())
610 STORE("scBalance", 0)
620 resetVars(1)
630 RETURN 0
999 RETURN 1
End Function
Function transferOwnership(newOwner String) Uint64
10 IF LOAD("owner") == newOwner THEN GOTO 40 ELSE GOTO 20
20 STORE("previousOwner", LOAD("owner"))
30 STORE("owner", newOwner)
40 RETURN 0
End Function
Function generateEndBlock(duration Uint64, startBlockTime Uint64) Uint64
10 dim timeinseconds, endBlockTime as Uint64
20 LET timeinseconds = 3600 * duration
30 IF timeinseconds == 0 THEN GOTO 40 ELSE GOTO 50
40 LET timeinseconds = 3600
50 IF timeinseconds > 604800 THEN GOTO 60 ELSE GOTO 70
60 LET timeinseconds = 604800
70 LET endBlockTime = startBlockTime + timeinseconds
80 RETURN endBlockTime
End Function
Function checkActive(listType String) Uint64
10 IF LOAD("startBlockTime") <= BLOCK_TIMESTAMP() THEN GOTO 30 ELSE GOTO 900
30 IF LOAD("scBalance") == 1 THEN GOTO 40 ELSE GOTO 900
40 IF LOAD("endBlockTime") > BLOCK_TIMESTAMP() THEN GOTO 50 ELSE GOTO 500
50 IF LOAD("listType") == listType THEN GOTO 200 ELSE GOTO 910
200 STORE("active", 1)
210 RETURN 0
500 STORE("active", 0)
520 RETURN 111
900 STORE("active", 0)
910 RETURN 999
End Function
Function processHighestBidder() Uint64
10 dim bidAmt as Uint64
20 dim bidAddr as String
30 LET bidAddr = LOAD("owner")
100 IF EXISTS("currBidAmt") == 1 THEN GOTO 110 ELSE GOTO 310
110 IF EXISTS("currBidAddr") == 1 THEN GOTO 120 ELSE GOTO 310
120 IF LOAD("currBidAddr") != "" THEN GOTO 130 ELSE GOTO 310
130 IF LOAD("currBidAmt") > 0 THEN GOTO 140 ELSE GOTO 310
140 LET bidAddr = LOAD("currBidAddr")
150 LET bidAmt = LOAD("currBidAmt")
310 SEND_ASSET_TO_ADDRESS(bidAddr, LOAD("scBalance"), SCID())
320 processDEROFinalPayment(bidAmt)
350 transferOwnership(bidAddr)
360 STORE("scBalance", 0)
370 IF EXISTS(bidAddr + "-bidDate") == 1 THEN GOTO 380 ELSE GOTO 390
380 DELETE(bidAddr + "-bidDate")
390 DELETE("currBidAddr")
400 DELETE("currBidAmt")
410 IF bidAmt > 0 THEN GOTO 420 ELSE GOTO 600
420 STORE("previousAuctionPrice", bidAmt)
600 resetVars(1)
610 RETURN 0
End Function
Function outbidReturns() Uint64
20 IF EXISTS("currBidAddr") == 1 THEN GOTO 30 ELSE GOTO 900
30 IF EXISTS("currBidAmt") == 1 THEN GOTO 40 ELSE GOTO 900
40 IF LOAD("currBidAmt") > 0 THEN GOTO 50 ELSE GOTO 900
50 IF LOAD("currBidAddr") != "" THEN GOTO 60 ELSE GOTO 900
60 SEND_DERO_TO_ADDRESS(LOAD("currBidAddr"), LOAD("currBidAmt"))
800 DELETE(LOAD("currBidAddr") + "-bidDate")
810 DELETE("currBidAddr")
820 DELETE("currBidAmt")
900 RETURN 0
End Function
Function processDEROFinalPayment(saleAmt Uint64) Uint64
10 dim payoutAmt, royaltyPaymt, artificerPaymt, charityPaymt as Uint64
20 IF saleAmt == 0 THEN GOTO 200 ELSE GOTO 60
60 IF LOAD("royalty") > 0 THEN GOTO 65 ELSE GOTO 80
65 LET royaltyPaymt = LOAD("royalty") * saleAmt / 100
66 IF royaltyPaymt > 0 THEN GOTO 70 ELSE GOTO 80
70 SEND_DERO_TO_ADDRESS(LOAD("creatorAddr"), royaltyPaymt)
80 IF LOAD("artificerFee") > 0 THEN GOTO 85 ELSE GOTO 100
85 LET artificerPaymt = LOAD("artificerFee") * saleAmt / 100
86 IF artificerPaymt > 0 THEN GOTO 90 ELSE GOTO 100
90 SEND_DERO_TO_ADDRESS(LOAD("artificerAddr"), artificerPaymt)
100 IF LOAD("charityDonatePerc") > 0 THEN GOTO 105 ELSE GOTO 120
105 LET charityPaymt = LOAD("charityDonatePerc") * saleAmt / 100
106 IF charityPaymt > 0 THEN GOTO 110 ELSE GOTO 120
110 SEND_DERO_TO_ADDRESS(LOAD("charityDonateAddr"), charityPaymt)
120 LET payoutAmt = saleAmt - royaltyPaymt - artificerPaymt - charityPaymt
125 IF payoutAmt > 0 THEN GOTO 130 ELSE GOTO 200
130 SEND_DERO_TO_ADDRESS(LOAD("owner"), payoutAmt)
200 RETURN 0
End Function
Function resetVars(forceReset Uint64) Uint64
10 IF forceReset == 0 THEN GOTO 20 ELSE GOTO 30
20 IF checkActive(LOAD("listType")) == 999 THEN GOTO 20 ELSE GOTO 900
30 STORE("startBlockTime", 0)
40 STORE("endBlockTime", 0)
50 STORE("bidCount", 0)
60 STORE("active", 0)
80 STORE("startPrice", 0)
90 STORE("currBidPrice", 0)
100 STORE("listType", "")
110 STORE("charityDonateAddr", "")
120 STORE("charityDonatePerc", 0)
200 RETURN 0
900 RETURN 999
End Function
Function findLesserIncrease(bidAmt Uint64) Uint64
10 dim percentCalc, staticCalc as Uint64
20 LET percentCalc = bidAmt + (bidAmt * LOAD("percentBidIncr") / 10000)
30 LET staticCalc = bidAmt + LOAD("staticBidIncr")
50 IF percentCalc < staticCalc THEN GOTO 100 ELSE GOTO 200
100 RETURN percentCalc
200 RETURN staticCalc
End Function