tx · Fv5CPNrFRhTFN17G7GNdvuAdEJqyepcfa8UMT3yGzzWy 3PCoF5ZnsQJKAJJCoSqUcVVqJ2Dm4fvn9ar: -0.01000000 Waves 2022.01.20 15:14 [2952323] smart account 3PCoF5ZnsQJKAJJCoSqUcVVqJ2Dm4fvn9ar > SELF 0.00000000 Waves
{ "type": 13, "id": "Fv5CPNrFRhTFN17G7GNdvuAdEJqyepcfa8UMT3yGzzWy", "fee": 1000000, "feeAssetId": null, "timestamp": 1642680995068, "version": 2, "chainId": 87, "sender": "3PCoF5ZnsQJKAJJCoSqUcVVqJ2Dm4fvn9ar", "senderPublicKey": "2RFPMtHxVSEG1LnET2FGshyhRepA7zJmx6tPwdHeNpJi", "proofs": [ "qWjXC1cnXN4kuyATkC7nxaUddPQUyFyTFtMJuZ8zJif8xVYy2C5HcXwDnvBzh5i2WD2DfVNHvb32Xqr1ToKbco7" ], "script": "base64:AAIFAAAAAAAABMwIAhIGCgQICAEBEgMKAQgSAwoBCBIDCgEIEgQKAggIGgYKAUESAWkaDAoBQhIHYWRkcmVzcxoKCgFDEgVsZXZlbBoNCgFEEghpbnZlc3RlZBoTCgFFEg5pc3N1ZU1hbnRsZU5GVBoQCgFGEgttYW50bGVOZnRJZBoRCgFHEgxrTWFudGxlTGV2ZWwaEgoBSBINa01hbnRsZUV4aXN0cxoRCgFJEgxrTWFudGxlT3duZXIaEgoBShINa01hbnRsZVN0YXR1cxoSCgFLEg1rQXJ0ZWZhY3RUeXBlGhQKAUwSD2tNYW50bGVJbnZlc3RlZBocCgFNEhdrQXJ0ZWZhY3RPd25lckFuZFN0YXR1cxoXCgFOEhJrT25seUFydGVmYWN0TGV2ZWwaEAoBTxILTUFOVExFUFJJQ0UaEQoBUBIMUElDS0FYRVBSSUNFGhEKAVESDGZpcnN0UGF5bWVudBoWCgFSEhF1cGdyYWRlUG9pbnRQcmljZRoRCgFTEgxtYW50bGVFeGlzdHMaEAoBVBILbWFudGxlT3duZXIaGgoBVRIVbWFudGxlQWxyZWFkeUludmVzdGVkGhIKAVYSDXRvdGFsSW52ZXN0ZWQaDQoBVxIIbmV3TGV2ZWwaFgoBWBIRYXR0YWNoZWRBc3NldEluZm8aDgoBWRIJa0R1Y2tMb2NrGhEKAVoSDG1hbnRsZVN0YXR1cxoUCgFhEg9icmVlZGVyQ29udHJhY3QaFwoCYWESEWtBcnRlZmFjdElkQnlUeXBlGhQKAmFiEg5rUHV0T25BcnRlZmFjdBoSCgJhYxIMYXJ0ZWZhY3RUeXBlGh4KAmFkEhhrQXJ0ZWZhY3RJZEJ5VHlwZUFuZER1Y2saGgoCYWUSFGtQdXRPbkFydGVmYWN0U3RhdHVzGggKAmFmEgJ0eBoMCgJhZxIGdmVyaWZ5GhYKAWISEWluY3ViYXRvckNvbnRyYWN0Gg8KAWMSCmVnZ0Fzc2V0SWQaFgoBZBIRc3dvcFByb21vQ29udHJhY3QaDwoBZRIKTUFOVExFTkFNRRoQCgFmEgtQSUNLQVhFTkFNRRoQCgFnEgtUUkFDVE9STkFNRRoPCgFoEgpTVEFUVVNGUkVFGhMKAWkSDlNUQVRVU09DQ1VQSUVEGhAKAWoSC2tleUR1Y2tMb2NrGhIKAWsSDWNh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", "height": 2952323, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9fDbmmaEdAoBuq6j2pbQJJyKBAZjA6KsNiDQoxhWK1c6 Next: 6J9rp6X3TgvKHn1oSkhwEBbnGRVKwCCijuGbxHeA1CUi Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let | |
4 | + | let breederContract = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y' | |
5 | 5 | ||
6 | - | let | |
6 | + | let incubatorContract = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM' | |
7 | 7 | ||
8 | - | let | |
8 | + | let eggAssetId = base58'3v7zGkeHS6KrsvmTRzEzvCxm5cdzkCtM7z5cM6efcjCB' | |
9 | 9 | ||
10 | - | let | |
10 | + | let swopPromoContract = base58'3P8zG7GNt4JphWXFTG39c2nmNmRRmqs4SEz' | |
11 | 11 | ||
12 | - | func getInt (key) = match getInteger(this, key) { | |
13 | - | case b: Int => | |
14 | - | b | |
15 | - | case _ => | |
16 | - | 0 | |
17 | - | } | |
12 | + | let MANTLENAME = "mantle" | |
13 | + | ||
14 | + | let PICKAXENAME = "pickaxe" | |
15 | + | ||
16 | + | let TRACTORNAME = "tractor" | |
17 | + | ||
18 | + | let STATUSFREE = "FREE" | |
19 | + | ||
20 | + | let STATUSOCCUPIED = "OCCUPIED" | |
21 | + | ||
22 | + | func keyDuckLock (callerAddress,duckId) = (((("address_" + callerAddress) + "_duck_") + duckId) + "_status") | |
18 | 23 | ||
19 | 24 | ||
20 | - | func getStr (key) = match getString(this, key) { | |
21 | - | case b: String => | |
22 | - | b | |
23 | - | case _ => | |
24 | - | "" | |
25 | - | } | |
25 | + | func keyInvestor (callerAddress) = (("address_" + callerAddress) + "_amount") | |
26 | 26 | ||
27 | 27 | ||
28 | - | func getBool (key) = match getBoolean(this, key) { | |
29 | - | case b: Boolean => | |
30 | - | b | |
31 | - | case _ => | |
32 | - | false | |
33 | - | } | |
28 | + | func keyArtefactInvested (type,artefactId) = (((("artefact_" + type) + "_artefactId_") + artefactId) + "_invested") | |
34 | 29 | ||
35 | 30 | ||
36 | - | func getRewardForUser (address) = { | |
37 | - | let claimed = getBool((("reward_" + address) + "_claimed")) | |
38 | - | if (claimed) | |
39 | - | then throw("You already claimed") | |
40 | - | else $Tuple2(getStr((("reward_" + address) + "_type")), claimed) | |
31 | + | func keyOnlyArtefactLevel (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_level") | |
32 | + | ||
33 | + | ||
34 | + | func keyArtefactIdByDuckAndType (type,duckId) = (((("artefact_ " + type) + "_duck_") + toBase58String(duckId)) + "_artefactId") | |
35 | + | ||
36 | + | ||
37 | + | func keyArtefactOwner (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_owner") | |
38 | + | ||
39 | + | ||
40 | + | func keyArtefactOwnerAndStatus (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status") | |
41 | + | ||
42 | + | ||
43 | + | func keyArtefactStatus (type,artefactId) = (((("artefact_ " + type) + "_artefactId_") + toBase58String(artefactId)) + "_status") | |
44 | + | ||
45 | + | ||
46 | + | func keyArtefactType (artefactId) = (("artefactId_" + toBase58String(artefactId)) + "_type") | |
47 | + | ||
48 | + | ||
49 | + | func keyArtefactLevel (type,owner,artefactId) = (((((("address_" + owner) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_level") | |
50 | + | ||
51 | + | ||
52 | + | func keyPutOnArtefact (type,owner,duckId,artefactId) = (((((((("address_" + owner) + "_duck_") + duckId) + "_artefact_") + type) + "_artefactId_") + toBase58String(artefactId)) + "_status") | |
53 | + | ||
54 | + | ||
55 | + | func keyArtefactExists (type,artefactId) = ((("artefact_" + type) + "_artefactId_") + toBase58String(artefactId)) | |
56 | + | ||
57 | + | ||
58 | + | @Callable(i) | |
59 | + | func issueFreeMantle (address,type,level,invested) = if (if ((i.caller != this)) | |
60 | + | then (i.caller != Address(swopPromoContract)) | |
61 | + | else false) | |
62 | + | then throw("Can be called only by admin") | |
63 | + | else if ((type != MANTLENAME)) | |
64 | + | then throw("You can buy only mantles now") | |
65 | + | else { | |
66 | + | let issueMantleNFT = Issue("DUCK-MANTLE-0", "[Artefact] Mantle NFT for Jeduck", 1, 0, false) | |
67 | + | let mantleNftId = calculateAssetId(issueMantleNFT) | |
68 | + | let kMantleLevel = keyArtefactLevel(MANTLENAME, address, mantleNftId) | |
69 | + | let kMantleExists = keyArtefactExists(MANTLENAME, mantleNftId) | |
70 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, mantleNftId) | |
71 | + | let kMantleStatus = keyArtefactStatus(MANTLENAME, mantleNftId) | |
72 | + | let kArtefactType = keyArtefactType(mantleNftId) | |
73 | + | let kMantleInvested = keyArtefactInvested(MANTLENAME, toBase58String(mantleNftId)) | |
74 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, address, mantleNftId) | |
75 | + | let kOnlyArtefactLevel = keyOnlyArtefactLevel(mantleNftId) | |
76 | + | [IntegerEntry(kMantleLevel, level), IntegerEntry(kMantleInvested, invested), BooleanEntry(kMantleExists, true), StringEntry(kMantleOwner, address), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactType, MANTLENAME), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), IntegerEntry(kOnlyArtefactLevel, level)] | |
77 | + | } | |
78 | + | ||
79 | + | ||
80 | + | ||
81 | + | @Callable(i) | |
82 | + | func buyArtefact (type) = { | |
83 | + | let MANTLEPRICE = 1000000 | |
84 | + | let PICKAXEPRICE = 10000000 | |
85 | + | let firstPayment = value(i.payments[0]) | |
86 | + | if ((firstPayment.assetId != eggAssetId)) | |
87 | + | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggAssetId))) | |
88 | + | else if (containsElement([PICKAXENAME, MANTLENAME], type)) | |
89 | + | then throw("Bad artefact type") | |
90 | + | else if (if ((type == MANTLENAME)) | |
91 | + | then (firstPayment.amount != MANTLEPRICE) | |
92 | + | else false) | |
93 | + | then throw(("To buy a mantle you currently need the following amount of EGGlets: " + toString(MANTLEPRICE))) | |
94 | + | else if (if ((type == PICKAXENAME)) | |
95 | + | then (firstPayment.amount != PICKAXEPRICE) | |
96 | + | else false) | |
97 | + | then throw(("To buy a mantle you currently need the following amount of EGGlets: " + toString(PICKAXEPRICE))) | |
98 | + | else { | |
99 | + | let issueMantleNFT = Issue((("TOOL-" + type) + "-0"), (("[Tool] " + type) + " NFT for Jeduck"), 1, 0, false) | |
100 | + | let mantleNftId = calculateAssetId(issueMantleNFT) | |
101 | + | let kMantleLevel = keyArtefactLevel(type, toString(i.caller), mantleNftId) | |
102 | + | let kMantleExists = keyArtefactExists(type, mantleNftId) | |
103 | + | let kMantleOwner = keyArtefactOwner(type, mantleNftId) | |
104 | + | let kMantleStatus = keyArtefactStatus(type, mantleNftId) | |
105 | + | let kArtefactType = keyArtefactType(mantleNftId) | |
106 | + | let kMantleInvested = keyArtefactInvested(type, toBase58String(mantleNftId)) | |
107 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(type, toString(i.caller), mantleNftId) | |
108 | + | let kOnlyArtefactLevel = keyOnlyArtefactLevel(mantleNftId) | |
109 | + | [IntegerEntry(kMantleLevel, 1), IntegerEntry(kMantleInvested, MANTLEPRICE), BooleanEntry(kMantleExists, true), StringEntry(kMantleOwner, toString(i.caller)), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactType, MANTLENAME), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), IntegerEntry(kOnlyArtefactLevel, 1)] | |
110 | + | } | |
41 | 111 | } | |
42 | 112 | ||
43 | 113 | ||
114 | + | ||
44 | 115 | @Callable(i) | |
45 | - | func claimPerch (color) = { | |
46 | - | let callerAddress = toString(i.caller) | |
47 | - | let $t010451110 = getRewardForUser(callerAddress) | |
48 | - | let rewardType = $t010451110._1 | |
49 | - | let rewardClaimed = $t010451110._2 | |
50 | - | if ((rewardType != RewardPerch)) | |
51 | - | then throw("You don't have perch reward") | |
116 | + | func upgradeMantle (artefactId) = { | |
117 | + | let upgradePointPrice = 1000000 | |
118 | + | let firstPayment = value(i.payments[0]) | |
119 | + | if ((firstPayment.assetId != eggAssetId)) | |
120 | + | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggAssetId))) | |
121 | + | else if ((upgradePointPrice > firstPayment.amount)) | |
122 | + | then throw(("Minimal payment for upgrading mantle is: " + toString(upgradePointPrice))) | |
123 | + | else { | |
124 | + | let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId)) | |
125 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId)) | |
126 | + | let mantleExists = getBooleanValue(kMantleExists) | |
127 | + | let mantleOwner = getStringValue(kMantleOwner) | |
128 | + | if (!(mantleExists)) | |
129 | + | then throw("Mantle with such an ID does not exist") | |
130 | + | else if ((mantleOwner != toString(i.originCaller))) | |
131 | + | then throw("You're not an owner of the mantle") | |
132 | + | else { | |
133 | + | let kMantleInvested = keyArtefactInvested(MANTLENAME, artefactId) | |
134 | + | let mantleAlreadyInvested = getIntegerValue(kMantleInvested) | |
135 | + | let kMantleLevel = keyArtefactLevel(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId)) | |
136 | + | let kOnlyArtefactLevel = keyOnlyArtefactLevel(fromBase58String(artefactId)) | |
137 | + | let totalInvested = (mantleAlreadyInvested + firstPayment.amount) | |
138 | + | let newLevel = (((10 * pow(totalInvested, 8, 6, 1, 8, HALFUP)) + 100000000) / 100000000) | |
139 | + | [IntegerEntry(kMantleLevel, newLevel), IntegerEntry(kMantleInvested, totalInvested), IntegerEntry(kOnlyArtefactLevel, newLevel)] | |
140 | + | } | |
141 | + | } | |
142 | + | } | |
143 | + | ||
144 | + | ||
145 | + | ||
146 | + | @Callable(i) | |
147 | + | func putOnArtefact (artefactId) = { | |
148 | + | let firstPayment = value(i.payments[0]) | |
149 | + | let attachedAssetInfo = value(assetInfo(value(firstPayment.assetId))) | |
150 | + | if (if ((attachedAssetInfo.issuer.bytes != incubatorContract)) | |
151 | + | then (attachedAssetInfo.issuer.bytes != breederContract) | |
152 | + | else false) | |
153 | + | then throw("You can attach only DUCKs issued by incubator or breeder ") | |
52 | 154 | else { | |
53 | - | let freePerch = invoke(Address(farmingContract), "addFreePerch", [callerAddress, color], nil) | |
54 | - | if ((freePerch == freePerch)) | |
55 | - | then [BooleanEntry((("reward_" + callerAddress) + "_claimed"), true)] | |
56 | - | else throw("Strict value is not equal to itself.") | |
155 | + | let kMantleExists = keyArtefactExists(MANTLENAME, fromBase58String(artefactId)) | |
156 | + | let kMantleOwner = keyArtefactOwner(MANTLENAME, fromBase58String(artefactId)) | |
157 | + | let kMantleStatus = keyArtefactStatus(MANTLENAME, fromBase58String(artefactId)) | |
158 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(MANTLENAME, toString(i.originCaller), fromBase58String(artefactId)) | |
159 | + | let kDuckLock = keyDuckLock(toString(i.originCaller), toBase58String(value(firstPayment.assetId))) | |
160 | + | let mantleExists = getBooleanValue(kMantleExists) | |
161 | + | let mantleOwner = getStringValue(kMantleOwner) | |
162 | + | let mantleStatus = getStringValue(kMantleStatus) | |
163 | + | let kArtefactIdByType = keyArtefactIdByDuckAndType(MANTLENAME, value(firstPayment.assetId)) | |
164 | + | if (!(mantleExists)) | |
165 | + | then throw("Mantle with such an ID does not exist") | |
166 | + | else if ((mantleOwner != toString(i.originCaller))) | |
167 | + | then throw("You're not an owner of the mantle") | |
168 | + | else if ((mantleStatus != STATUSFREE)) | |
169 | + | then throw("Mantle is already used!") | |
170 | + | else { | |
171 | + | let kPutOnArtefact = keyPutOnArtefact(MANTLENAME, toString(i.originCaller), toBase58String(value(firstPayment.assetId)), fromBase58String(artefactId)) | |
172 | + | [BooleanEntry(kPutOnArtefact, true), StringEntry(kMantleStatus, STATUSOCCUPIED), StringEntry(kArtefactOwnerAndStatus, STATUSOCCUPIED), BooleanEntry(kDuckLock, true), StringEntry(kArtefactIdByType, artefactId)] | |
173 | + | } | |
57 | 174 | } | |
58 | 175 | } | |
59 | 176 | ||
60 | 177 | ||
61 | 178 | ||
62 | 179 | @Callable(i) | |
63 | - | func claimMantle (choise,collectiveFarmAssetId) = { | |
64 | - | let callerAddress = toString(i.caller) | |
65 | - | let $t015021567 = getRewardForUser(callerAddress) | |
66 | - | let rewardType = $t015021567._1 | |
67 | - | let rewardClaimed = $t015021567._2 | |
68 | - | if ((rewardType != RewardMantle)) | |
69 | - | then throw("You don't have mantle reward") | |
70 | - | else { | |
71 | - | let res = [BooleanEntry((("reward_" + callerAddress) + "_claimed"), true)] | |
72 | - | if ((choise == "mantle")) | |
73 | - | then { | |
74 | - | let freeMantleIssue = invoke(Address(gameContract), "issueFreeMantle", [toString(i.caller), "mantle", 2, 2000000], nil) | |
75 | - | if ((freeMantleIssue == freeMantleIssue)) | |
76 | - | then res | |
77 | - | else throw("Strict value is not equal to itself.") | |
78 | - | } | |
79 | - | else (res ++ [ScriptTransfer(i.caller, 4000000, fromBase58String(collectiveFarmAssetId))]) | |
80 | - | } | |
180 | + | func takeOffArtefact (duckId,artefactType) = { | |
181 | + | let kArtefactIdByTypeAndDuck = keyArtefactIdByDuckAndType(artefactType, fromBase58String(duckId)) | |
182 | + | let artefactId = getStringValue(kArtefactIdByTypeAndDuck) | |
183 | + | let kArtefactType = keyArtefactType(fromBase58String(artefactId)) | |
184 | + | let kPutOnArtefact = keyPutOnArtefact(artefactType, toString(i.originCaller), duckId, fromBase58String(artefactId)) | |
185 | + | let kPutOnArtefactStatus = getBooleanValue(kPutOnArtefact) | |
186 | + | let kArtefactOwnerAndStatus = keyArtefactOwnerAndStatus(artefactType, toString(i.originCaller), fromBase58String(artefactId)) | |
187 | + | let kDuckLock = keyDuckLock(toString(i.originCaller), duckId) | |
188 | + | let kMantleStatus = keyArtefactStatus(artefactType, fromBase58String(artefactId)) | |
189 | + | if ((kPutOnArtefactStatus != true)) | |
190 | + | then throw("There is no duck with such parameteres") | |
191 | + | else [DeleteEntry(kPutOnArtefact), DeleteEntry(kArtefactIdByTypeAndDuck), DeleteEntry(kDuckLock), StringEntry(kMantleStatus, STATUSFREE), StringEntry(kArtefactOwnerAndStatus, STATUSFREE), ScriptTransfer(i.originCaller, 1, fromBase58String(duckId))] | |
81 | 192 | } | |
82 | 193 | ||
194 | + | ||
195 | + | @Verifier(tx) | |
196 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
83 | 197 |
github/deemru/w8io/3ef1775 54.19 ms ◑