tx · 5hcy5S23Y4v6yYxDctGC2rgmiVz8d4Nj9Q8EtjHB2bdh

3PKwLVb8jYk58oYbfXxs2dUjD3YEKeqGWrX:  -0.01900000 Waves

2022.07.28 13:31 [3225051] smart account 3PKwLVb8jYk58oYbfXxs2dUjD3YEKeqGWrX > SELF 0.00000000 Waves

{ "type": 13, "id": "5hcy5S23Y4v6yYxDctGC2rgmiVz8d4Nj9Q8EtjHB2bdh", "fee": 1900000, "feeAssetId": null, "timestamp": 1659004303510, "version": 2, "chainId": 87, "sender": "3PKwLVb8jYk58oYbfXxs2dUjD3YEKeqGWrX", "senderPublicKey": "27DK15MykfnsVojpifD1gbr8kRr8rpY5mw6EH4zL8R25", "proofs": [ "A966NCVCETt2WqJu1KzbynGHLSoMwGPvXM4RiLXChNCNTKQEqcR75YmbrtXyuA2ybwNXDN7XpsziSah2q3suSa5" ], "script": "base64:AAIFAAAAAAAAAB8IAhIDCgEIEgASBQoDCAgBEgYKBAgIAQESAwoBCBIAAAAAKQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFXRyeUdldEludGVnZXJFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADHRyeUdldFN0cmluZwAAAAEAAAADa2V5CQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACBQAAAAR0aGlzBQAAAANrZXkBAAAACWdldE9yYWNsZQAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQIAAAAUc3RhdGljX29yYWNsZUFkZHJlc3MBAAAAEGdldER1Y2tsaW5nUHJpY2UAAAAACQEAAAAVdHJ5R2V0SW50ZWdlckV4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFHN0YXRpY19kdWNrbGluZ1ByaWNlAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAARc3RhdGljX2VnZ0Fzc2V0SWQBAAAAD2dldFNwaWNlQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAE3N0YXRpY19zcGljZUFzc2V0SWQBAAAAEWdldFJlYmlydGhBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfcmViaXJ0aEFkZHJlc3MBAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAQAAABFnZXRDb3Vwb25zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX2NvdXBvbnNBZGRyZXNzAQAAAA5nZXRCdXJuQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAASc3RhdGljX2J1cm5BZGRyZXNzAAAAAA1iYWNrZW5kUHViS2V5AQAAACCf7vaUt+AJS9sVtSQ4zwau7SC/xOobnnBsYkl08mziHAAAAAAOU1RBUlRUSU1FU1RBTVAAAAABfBcIaoAAAAAACUxBUExFTkdUSAAAAAAAAUmXAAAAAAANRFVDS0xJTkdQUklDRQAAAAAABMS0AAAAAAAWcGVyY2VudEdyb3d0aFByZWNpc2lvbgAAI4byb8EAAAAAAAAVZXhpc3RpbmdEdWNrUHJlY2lzaW9uAAAAWvMQekAAAAAAABZLR2xvYmFsSXNzdWVkVGltZXN0YW1wAgAAABdnbG9iYWxfaXNzdWVkX3RpbWVzdGFtcAAAAAAHTVNJTkRBWQAAAAAABSZcAAEAAAAMa2V5VG90YWxGZWVkAAAAAQAAAApkdWNrbGluZ0lkCQABLAAAAAIJAAEsAAAAAgIAAAAJZHVja2xpbmdfBQAAAApkdWNrbGluZ0lkAgAAAAVfZmVlZAEAAAARa2V5RHVja2xpbmdGZWRMYXAAAAABAAAACmR1Y2tsaW5nSWQJAAEsAAAAAgkAASwAAAACAgAAAAlkdWNrbGluZ18FAAAACmR1Y2tsaW5nSWQCAAAAB19mZWRMYXABAAAAF2tleUR1Y2tsaW5n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AAAACmR1Y2tsaW5nSWQEAAAACmtEdWNrTGV2ZWwJAQAAABBrZXlEdWNrbGluZ0xldmVsAAAAAQUAAAAKZHVja2xpbmdJZAQAAAAHJG1hdGNoMAkABCIAAAABBQAAAAprRHVja0xldmVsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAGnAAAAAQUAAAABcwQAAAAHJG1hdGNoMQkABCAAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAJZHVja2xpbmdfBQAAAApkdWNrbGluZ0lkAgAAABFfaXNzdWVkQnlGZWVkQ2FsbAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMQMJAAAAAAAAAgUAAAABYgYJAAE2AAAAAQAAAAAAAAAAAAkBAAAAFWdldER1Y2tsaW5nUGVyY2VudGFnZQAAAAEFAAAACmR1Y2tsaW5nSWQJAQAAABVnZXREdWNrbGluZ1BlcmNlbnRhZ2UAAAABBQAAAApkdWNrbGluZ0lkAQAAAA1nZXRDdXJyZW50TGFwAAAAAAkAAGQAAAACCQAAaQAAAAIJAABlAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAADlNUQVJUVElNRVNUQU1QBQAAAAlMQVBMRU5HVEgAAAAAAAAAAAEBAAAAE2dldExhc3RGZWRUaW1lc3RhbXAAAAABAAAACmR1Y2tsaW5nSWQEAAAAEGxhc3RGZWRUaW1lc3RhbXAJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAG2tleUR1Y2tsaW5nRmVkTGFzdFRpbWVzdGFtcAAAAAEFAAAACmR1Y2tsaW5nSWQDCQAAZgAAAAIFAAAAEGxhc3RGZWRUaW1lc3RhbXAAAAAAAAAAAAAFAAAAEGxhc3RGZWRUaW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAQAAABljYWxjdWxhdGVOZXdEdWNrbGluZ0xldmVsAAAAAgAAAApkdWNrbGluZ0lkAAAADXBheW1lbnRBbW91bnQEAAAACWN1cnJlbnRUcwgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAEAAAAF2xhc3RGZWRUaW1lc3Rh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ZHVja2xpbmcgd2l0aCBzdWNoIGlkBAAAABBkdWNrbGluZ0lkU3RyaW5nCQACWAAAAAEIBQAAAA9kdWNrbGluZ0lkQ2hlY2sAAAACaWQFAAAAEGR1Y2tsaW5nSWRTdHJpbmcEAAAAEmtEdWNrbGluZ0xhc3RGZWRUcwkBAAAAG2tleUR1Y2tsaW5nRmVkTGFzdFRpbWVzdGFtcAAAAAEFAAAACmR1Y2tsaW5nSWQEAAAACWxhc3RGZWRUcwkBAAAAE2dldExhc3RGZWRUaW1lc3RhbXAAAAABBQAAAA5yZWFsRHVja2xpbmdJZAQAAAAOY3VycmVudFBheW1lbnQICQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAJa05ld0xldmVsCQEAAAAQa2V5RHVja2xpbmdMZXZlbAAAAAEFAAAADnJlYWxEdWNrbGluZ0lkBAAAAAprVG90YWxGZWVkCQEAAAAMa2V5VG90YWxGZWVkAAAAAQUAAAAOcmVhbER1Y2tsaW5nSWQEAAAACXRvdGFsRmVlZAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAAprVG90YWxGZWVkBAAAAAxrRmVlZFR4U3RhdHMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWR1Y2tsaW5nXwUAAAAOcmVhbER1Y2tsaW5nSWQCAAAABl9zdGF0XwkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAQAAAAUa0FkZHJlc3NGZWRUaW1lc3RhbXAJAQAAABZrZXlBZGRyZXNzRmVkVGltZXN0YW1wAAAAAwUAAAANYWRkcmVzc1N0cmluZwkBAAAADWdldEN1cnJlbnRMYXAAAAAACAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAQAAAAYa0R1Y2tsaW5nRmVkTGFwVGltZXN0YW1wCQEAAAAaa2V5RHVja2xpbmdGZWRMYXBUaW1lc3RhbXAAAAACBQAAAA5yZWFsRHVja2xpbmdJZAkBAAAADWdldEN1cnJlbnRMYXAAAAAABAAAAA9rRHVja2xpbmdGZWRMYXAJAQAAABFrZXlEdWNrbGluZ0ZlZExhcAAAAAEFAAAADnJlYWxEdWNrbGluZ0lkAwkAAGYAAAACBQAAAA5jdXJyZW50UGF5bWVudAUAAAANbWF4RmVlZEFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAP0JGRDogQ2Fubm90IGZlZWQgZHVja2xpbmcgZm9yIHN1Y2ggYW1vdW50LCBtYXggZmVlZCBhbW91bnQgaXM6IAkAAaQAAAABBQAAAA1tYXhGZWVkQW1vdW50BAAAABBjYWxjdWxhdGVSZXN1bHRzCQEAAAAZY2FsY3VsYXRlTmV3RHVja2xpbmdMZXZlbAAAAAIFAAAADnJlYWxEdWNrbGluZ0lkCQAAaQAAAAIFAAAADmN1cnJlbnRQYXltZW50AAAAAAAAAABkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rQWRkcmVzc05vbmNlCQAAZAAAAAIFAAAADGN1cnJlbnROb25jZQAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa0R1Y2tsaW5nTGFzdEZlZFRzCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa1RvdGFsRmVlZAkAAGQAAAACBQAAAAl0b3RhbEZlZWQFAAAADmN1cnJlbnRQYXltZW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrRmVlZFR4U3RhdHMFAAAADmN1cnJlbnRQYXltZW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRrQWRkcmVzc0ZlZFRpbWVzdGFtcAUAAAAOY3VycmVudFBheW1lbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGGtEdWNrbGluZ0ZlZExhcFRpbWVzdGFtcAUAAAAOY3VycmVudFBheW1lbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tEdWNrbGluZ0ZlZExhcAkBAAAADWdldEN1cnJlbnRMYXAAAAAACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtOZXdMZXZlbAgFAAAAEGNhbGN1bGF0ZVJlc3VsdHMAAAACXzEJAARMAAAAAgkBAAAAC1N0cmlu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", "height": 3225051, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DDyw1iWWG3UekbAQDUG1Ca7aPWuuYDnALAnYFdaSxoxF Next: 7unJcCZVyZm6SqBpuxZpXytQpDRtU8N5Zr4DVZDnaqbX Diff:
OldNewDifferences
9494
9595
9696 func keyStartPercentage (ducklingId) = (("duckling_" + ducklingId) + "_startPercentage")
97+
98+
99+func keyOwner (ducklingId) = (("duckling_" + ducklingId) + "_owner")
97100
98101
99102 func tryGetInteger (key) = {
234237 else {
235238 let asset = Issue("BABY-11111111-GZ", "", 1, 0, false, unit, height)
236239 let assetId = calculateAssetId(asset)
237- $Tuple2([StringEntry((((address + "_") + txIdStr) + "_di"), toBase58String(assetId)), IntegerEntry("stats_amount", (tryGetInteger("stats_amount") + 1)), BooleanEntry((("duckling_" + toBase58String(assetId)) + "_issuedByFeedCall"), (i.caller == this)), IntegerEntry(keyStartPercentage(toBase58String(assetId)), percentage), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
240+ $Tuple2([StringEntry((((address + "_") + txIdStr) + "_di"), toBase58String(assetId)), IntegerEntry("stats_amount", (tryGetInteger("stats_amount") + 1)), BooleanEntry((("duckling_" + toBase58String(assetId)) + "_issuedByFeedCall"), (i.caller == this)), IntegerEntry(keyStartPercentage(toBase58String(assetId)), percentage), StringEntry(keyOwner(toBase58String(assetId)), address), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
238241 }
239242
240243
258261 else if ((ducklingId == ""))
259262 then throw("BFD: Please buy a duckling first!")
260263 else {
264+ let ducklingOwner = tryGetString(keyOwner(ducklingId))
261265 let ducklingIdCheck = value(assetInfo(fromBase58String(ducklingId)))
262266 if ((assetBalance(i.caller, ducklingIdCheck.id) != 1))
263267 then throw("BFD: You're not the owner of the duckling")
264- else if ((ducklingIdCheck.issuer != this))
265- then throw("BFD: Cant find duckling with such id")
266- else {
267- let ducklingIdString = toBase58String(ducklingIdCheck.id)
268- ducklingIdString
269- }
268+ else if ((ducklingOwner != toString(i.caller)))
269+ then throw("BFD: You can only feed ducklings that you won/bought yourself!")
270+ else if ((ducklingIdCheck.issuer != this))
271+ then throw("BFD: Cant find duckling with such id")
272+ else {
273+ let ducklingIdString = toBase58String(ducklingIdCheck.id)
274+ ducklingIdString
275+ }
270276 }
271277 let kDucklingLastFedTs = keyDucklingFedLastTimestamp(ducklingId)
272278 let lastFedTs = getLastFedTimestamp(realDucklingId)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
1313 case b: Int =>
1414 b
1515 case _ =>
1616 0
1717 }
1818
1919
2020 func tryGetString (key) = tryGetStringExternal(this, key)
2121
2222
2323 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
2424
2525
2626 func getDucklingPrice () = tryGetIntegerExternal(getOracle(), "static_ducklingPrice")
2727
2828
2929 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
3030
3131
3232 func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_spiceAssetId"))
3333
3434
3535 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
3636
3737
3838 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
3939
4040
4141 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
4242
4343
4444 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
4545
4646
4747 let backendPubKey = base58'BmKAXRQy7jZm44fa1YxNQDTcAwNSb74EpQwP5CT7UHdV'
4848
4949 let STARTTIMESTAMP = 1632474000000
5050
5151 let LAPLENGTH = 21600000
5252
5353 let DUCKLINGPRICE = 80000000
5454
5555 let percentGrowthPrecision = 10000000000000000
5656
5757 let existingDuckPrecision = 100000000000000
5858
5959 let KGlobalIssuedTimestamp = "global_issued_timestamp"
6060
6161 let MSINDAY = 86400000
6262
6363 func keyTotalFeed (ducklingId) = (("duckling_" + ducklingId) + "_feed")
6464
6565
6666 func keyDucklingFedLap (ducklingId) = (("duckling_" + ducklingId) + "_fedLap")
6767
6868
6969 func keyDucklingFedTimestamp (ducklingId) = (("duckling_" + ducklingId) + "_fedTs")
7070
7171
7272 func keyDucklingFedLapTimestamp (ducklingId,lap) = (((("duckling_" + ducklingId) + "_lap_") + toString(lap)) + "_fedTs")
7373
7474
7575 func keyAddressFedTimestamp (address,lap,timestamp) = ((((("address_" + address) + "_lap_") + toString(lap)) + "_fedTs_") + toString(timestamp))
7676
7777
7878 func keyAddressNonce (address) = (("address_" + address) + "_nonce")
7979
8080
8181 func keyDucklingFedLastTimestamp (ducklingId) = (("duckling_" + ducklingId) + "_fedLastTs")
8282
8383
8484 func keyDucklingLevel (ducklingId) = (("duckling_" + ducklingId) + "_level")
8585
8686
8787 func keyFeedForLap (address,lap) = (((("address_" + address) + "_lap_") + toString(lap)) + "_feed")
8888
8989
9090 func keyDucklingGrown (ducklingId) = (("duckling_" + ducklingId) + "_grown")
9191
9292
9393 func keyStartHatchingId (ducklingId) = (("duckling_" + ducklingId) + "_grown")
9494
9595
9696 func keyStartPercentage (ducklingId) = (("duckling_" + ducklingId) + "_startPercentage")
97+
98+
99+func keyOwner (ducklingId) = (("duckling_" + ducklingId) + "_owner")
97100
98101
99102 func tryGetInteger (key) = {
100103 let val = match getInteger(this, key) {
101104 case b: Int =>
102105 b
103106 case _ =>
104107 0
105108 }
106109 val
107110 }
108111
109112
110113 func getBool (key) = match getBoolean(this, key) {
111114 case b: Boolean =>
112115 b
113116 case _ =>
114117 false
115118 }
116119
117120
118121 func getDucklingPercentage (ducklingId) = {
119122 let percentageDuckling = tryGetInteger(keyStartPercentage(ducklingId))
120123 let base = if ((percentageDuckling != 0))
121124 then percentageDuckling
122125 else 20
123126 toBigInt((base * existingDuckPrecision))
124127 }
125128
126129
127130 func getCurrentLevelBigInt (ducklingId) = {
128131 let kDuckLevel = keyDucklingLevel(ducklingId)
129132 match getString(kDuckLevel) {
130133 case s: String =>
131134 parseBigIntValue(s)
132135 case _ =>
133136 match getBoolean((("duckling_" + ducklingId) + "_issuedByFeedCall")) {
134137 case b: Boolean =>
135138 if ((b == true))
136139 then toBigInt(0)
137140 else getDucklingPercentage(ducklingId)
138141 case _ =>
139142 getDucklingPercentage(ducklingId)
140143 }
141144 }
142145 }
143146
144147
145148 func getCurrentLap () = (((lastBlock.timestamp - STARTTIMESTAMP) / LAPLENGTH) + 1)
146149
147150
148151 func getLastFedTimestamp (ducklingId) = {
149152 let lastFedTimestamp = tryGetInteger(keyDucklingFedLastTimestamp(ducklingId))
150153 if ((lastFedTimestamp > 0))
151154 then lastFedTimestamp
152155 else lastBlock.timestamp
153156 }
154157
155158
156159 func calculateNewDucklingLevel (ducklingId,paymentAmount) = {
157160 let currentTs = lastBlock.timestamp
158161 let lastFedTimestampChecked = getLastFedTimestamp(ducklingId)
159162 let fedDiff = (currentTs - lastFedTimestampChecked)
160163 let penalty = toBigInt(0)
161164 let growth = fraction(toBigInt(paymentAmount), toBigInt(percentGrowthPrecision), toBigInt(DUCKLINGPRICE))
162165 let currentLevel = getCurrentLevelBigInt(ducklingId)
163166 let newLevel = ((currentLevel - penalty) + growth)
164167 let result = if ((toBigInt(0) > newLevel))
165168 then toString(growth)
166169 else toString(newLevel)
167170 $Tuple2(result, [("currentLevel=" + toString(currentLevel)), ("newLevel=" + toString(newLevel)), ("growth=" + toString(growth)), ("penalty=" + toString(penalty)), ("lastFedTs=" + toString(lastFedTimestampChecked)), ("fedDiff=" + toString(fedDiff))])
168171 }
169172
170173
171174 func getBackendProof (maxFeedAmount,userNonce,address) = makeString([toString(maxFeedAmount), toString(userNonce), address], ";")
172175
173176
174177 func asInt (value) = match value {
175178 case int: Int =>
176179 int
177180 case _ =>
178181 throw("BAI: wrong type, expected: Int")
179182 }
180183
181184
182185 @Callable(i)
183186 func configureOracle (oracle) = if ((i.caller != this))
184187 then throw("BCO: admin only")
185188 else [StringEntry("static_oracleAddress", oracle)]
186189
187190
188191
189192 @Callable(i)
190193 func buyDuckling () = {
191194 let exactPrice = getDucklingPrice()
192195 if ((50000000 > exactPrice))
193196 then throw("BBD: Invalid price from oracle!")
194197 else {
195198 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
196199 if ((amountPaidByCoupons == amountPaidByCoupons))
197200 then {
198201 let leftToPay = (exactPrice - amountPaidByCoupons)
199202 let payment = if ((leftToPay != 0))
200203 then {
201204 let firstPayment = value(i.payments[0])
202205 if ((firstPayment.assetId != getEggAssetId()))
203206 then throw(("BBD: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
204207 else if ((firstPayment.amount != leftToPay))
205208 then throw(("BBD: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)))
206209 else {
207210 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), leftToPay)])
208211 if ((burnCall == burnCall))
209212 then leftToPay
210213 else throw("Strict value is not equal to itself.")
211214 }
212215 }
213216 else 0
214217 if ((payment == payment))
215218 then {
216219 let ducklingAssetId = invoke(this, "issueFreeDuckling", [toString(i.originCaller), toBase58String(i.transactionId), 0], nil)
217220 if ((ducklingAssetId == ducklingAssetId))
218221 then nil
219222 else throw("Strict value is not equal to itself.")
220223 }
221224 else throw("Strict value is not equal to itself.")
222225 }
223226 else throw("Strict value is not equal to itself.")
224227 }
225228 }
226229
227230
228231
229232 @Callable(i)
230233 func issueFreeDuckling (address,txIdStr,percentage) = if (if ((i.caller != this))
231234 then (i.caller != getRebirthAddress())
232235 else false)
233236 then throw("BIFD: You can't issue free duckling")
234237 else {
235238 let asset = Issue("BABY-11111111-GZ", "", 1, 0, false, unit, height)
236239 let assetId = calculateAssetId(asset)
237- $Tuple2([StringEntry((((address + "_") + txIdStr) + "_di"), toBase58String(assetId)), IntegerEntry("stats_amount", (tryGetInteger("stats_amount") + 1)), BooleanEntry((("duckling_" + toBase58String(assetId)) + "_issuedByFeedCall"), (i.caller == this)), IntegerEntry(keyStartPercentage(toBase58String(assetId)), percentage), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
240+ $Tuple2([StringEntry((((address + "_") + txIdStr) + "_di"), toBase58String(assetId)), IntegerEntry("stats_amount", (tryGetInteger("stats_amount") + 1)), BooleanEntry((("duckling_" + toBase58String(assetId)) + "_issuedByFeedCall"), (i.caller == this)), IntegerEntry(keyStartPercentage(toBase58String(assetId)), percentage), StringEntry(keyOwner(toBase58String(assetId)), address), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
238241 }
239242
240243
241244
242245 @Callable(i)
243246 func feedDuckling (ducklingId,backendSignature,maxFeedAmount,userNonce) = {
244247 let addressString = toString(i.caller)
245248 let backendProof = getBackendProof(maxFeedAmount, userNonce, addressString)
246249 let kAddressNonce = keyAddressNonce(addressString)
247250 let currentNonce = tryGetInteger(kAddressNonce)
248251 let realDucklingId = if (!(sigVerify_8Kb(toBytes(backendProof), fromBase58String(backendSignature), backendPubKey)))
249252 then throw("BFD: Invalid proof from backend")
250253 else if (if ((size(i.payments) != 1))
251254 then true
252255 else (value(i.payments[0]).assetId != getSpiceAssetId()))
253256 then throw("BFD: Bad payment attached (asset[s] or amount)")
254257 else if (getBool(keyDucklingGrown(ducklingId)))
255258 then throw("BFD: Duckling is already grown")
256259 else if ((userNonce != (currentNonce + 1)))
257260 then throw(((("BFD: User Nonce should be " + toString(currentNonce)) + " + 1, while received ") + toString(userNonce)))
258261 else if ((ducklingId == ""))
259262 then throw("BFD: Please buy a duckling first!")
260263 else {
264+ let ducklingOwner = tryGetString(keyOwner(ducklingId))
261265 let ducklingIdCheck = value(assetInfo(fromBase58String(ducklingId)))
262266 if ((assetBalance(i.caller, ducklingIdCheck.id) != 1))
263267 then throw("BFD: You're not the owner of the duckling")
264- else if ((ducklingIdCheck.issuer != this))
265- then throw("BFD: Cant find duckling with such id")
266- else {
267- let ducklingIdString = toBase58String(ducklingIdCheck.id)
268- ducklingIdString
269- }
268+ else if ((ducklingOwner != toString(i.caller)))
269+ then throw("BFD: You can only feed ducklings that you won/bought yourself!")
270+ else if ((ducklingIdCheck.issuer != this))
271+ then throw("BFD: Cant find duckling with such id")
272+ else {
273+ let ducklingIdString = toBase58String(ducklingIdCheck.id)
274+ ducklingIdString
275+ }
270276 }
271277 let kDucklingLastFedTs = keyDucklingFedLastTimestamp(ducklingId)
272278 let lastFedTs = getLastFedTimestamp(realDucklingId)
273279 let currentPayment = value(i.payments[0]).amount
274280 let kNewLevel = keyDucklingLevel(realDucklingId)
275281 let kTotalFeed = keyTotalFeed(realDucklingId)
276282 let totalFeed = tryGetInteger(kTotalFeed)
277283 let kFeedTxStats = ((("duckling_" + realDucklingId) + "_stat_") + toString(lastBlock.timestamp))
278284 let kAddressFedTimestamp = keyAddressFedTimestamp(addressString, getCurrentLap(), lastBlock.timestamp)
279285 let kDucklingFedLapTimestamp = keyDucklingFedLapTimestamp(realDucklingId, getCurrentLap())
280286 let kDucklingFedLap = keyDucklingFedLap(realDucklingId)
281287 if ((currentPayment > maxFeedAmount))
282288 then throw(("BFD: Cannot feed duckling for such amount, max feed amount is: " + toString(maxFeedAmount)))
283289 else {
284290 let calculateResults = calculateNewDucklingLevel(realDucklingId, (currentPayment / 100))
285291 [IntegerEntry(kAddressNonce, (currentNonce + 1)), IntegerEntry(kDucklingLastFedTs, lastBlock.timestamp), IntegerEntry(kTotalFeed, (totalFeed + currentPayment)), IntegerEntry(kFeedTxStats, currentPayment), IntegerEntry(kAddressFedTimestamp, currentPayment), IntegerEntry(kDucklingFedLapTimestamp, currentPayment), IntegerEntry(kDucklingFedLap, getCurrentLap()), StringEntry(kNewLevel, calculateResults._1), StringEntry((kFeedTxStats + "_debug"), makeString(calculateResults._2, ";"))]
286292 }
287293 }
288294
289295
290296
291297 @Callable(i)
292298 func fixLevels (ducklingIds) = if (if ((i.callerPublicKey != base58'GDxBbsDRmeY39quNrDsTXKJzFWbQVtjxHseF4ikxZ7n9'))
293299 then (i.caller != this)
294300 else false)
295301 then throw("BFL: Not authorized")
296302 else {
297303 let ducklingIdsList = value(split(ducklingIds, ","))
298304 func handleId (acc,id) = {
299305 let kTotalFeed = keyTotalFeed(id)
300306 let totalFeed = tryGetInteger(kTotalFeed)
301307 let kNewLevel = keyDucklingLevel(id)
302308 let startingLevel = match getBoolean((("duckling_" + id) + "_issuedByFeedCall")) {
303309 case b: Boolean =>
304310 if ((b == true))
305311 then toBigInt(0)
306312 else getDucklingPercentage(id)
307313 case _ =>
308314 getDucklingPercentage(id)
309315 }
310316 let growth = fraction(toBigInt(totalFeed), toBigInt(percentGrowthPrecision), toBigInt(DUCKLINGPRICE))
311317 (acc ++ [StringEntry(kNewLevel, toString((startingLevel + growth)))])
312318 }
313319
314320 let $l = ducklingIdsList
315321 let $s = size($l)
316322 let $acc0 = nil
317323 func $f0_1 ($a,$i) = if (($i >= $s))
318324 then $a
319325 else handleId($a, $l[$i])
320326
321327 func $f0_2 ($a,$i) = if (($i >= $s))
322328 then $a
323329 else throw("List size exceeds 20")
324330
325331 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
326332 }
327333
328334
329335
330336 @Callable(i)
331337 func turnDucklingIntoDuck () = {
332338 let address = toString(i.caller)
333339 let txId = toBase58String(i.transactionId)
334340 let lastIssuedDucklingTs = tryGetInteger(KGlobalIssuedTimestamp)
335341 let fiveMinInMs = ((5 * 60) * 1000)
336342 let timeDiff = (lastBlock.timestamp - (lastIssuedDucklingTs + fiveMinInMs))
337343 if (if ((lastIssuedDucklingTs > 0))
338344 then (0 > timeDiff)
339345 else false)
340346 then throw((("BTD: Can issue ducklings only once per 5 minutes, please wait for " + toString(fraction(timeDiff, 1, 1000))) + " sec."))
341347 else if ((size(i.payments) != 1))
342348 then throw("BTD: Bad payment attached (asset[s] or amount)")
343349 else {
344350 let pmt = value(assetInfo(value(value(i.payments[0]).assetId)))
345351 if ((toBigInt(100) > getCurrentLevelBigInt(toBase58String(pmt.id))))
346352 then throw("BTD: Duckling is not grown yet...")
347353 else if ((pmt.issuer != this))
348354 then throw("BTD: Can use only ducklings from this dApp")
349355 else {
350356 let call = invoke(getIncubatorAddress(), "startDuckHatching", [""], nil)
351357 if ((call == call))
352358 then {
353359 let kDucklingGrown = keyDucklingGrown(toBase58String(pmt.id))
354360 [BooleanEntry(kDucklingGrown, true), IntegerEntry(KGlobalIssuedTimestamp, lastBlock.timestamp)]
355361 }
356362 else throw("Strict value is not equal to itself.")
357363 }
358364 }
359365 }
360366
361367
362368 @Verifier(tx)
363369 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
364370

github/deemru/w8io/3ef1775 
53.22 ms