2022.04.14 17:23 [3073654] smart account 3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks > SELF 0.00000000 Waves

{ "type": 13, "id": "51R3mwNe34jWJfGMxCXo2Yd96bNZ2oJJRhestEeASh5R", "fee": 1400000, "feeAssetId": null, "timestamp": 1649946196608, "version": 2, "chainId": 87, "sender": "3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks", "senderPublicKey": "XrNmTusDFaLSz3wAjmdfcyC5h6uYyVbpdh18758UpFv", "proofs": [ "Zcr3evzeTayjDcS3pokiiaBp8BnwdzP6R915aQx9gULhZtM1vz5a2XaiKC7hV4VF7S6h8vSxHxaX6TBFs8qU8Du" ], "script": "base64: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AA9yYW5kb21TZWVkQmxvY2sAAAADdnJmCQAAagAAAAIJAASyAAAAAgUAAAAKcmFuZG9tSGFzaAUAAAAGb2Zmc2V0BQAAAAh2YXJpYW50cwEAAAARZ2V0UmFuZG9tQXJ0ZWZhY3QAAAACAAAABWJveElkAAAAAWgEAAAADHJhbmRvbU51bWJlcgkBAAAAD2dldFJhbmRvbU51bWJlcgAAAAQAAAAAAAAAAAYFAAAABWJveElkBQAAAAFoAAAAAAAAAAABCQABkQAAAAIFAAAACWFydGVmYWN0cwUAAAAMcmFuZG9tTnVtYmVyAQAAAA5nZXRSYW5kb21HZW5lcwAAAAIAAAAEdHhJZAAAAAFoBAAAAAxyYW5kb21OdW1iZXIJAQAAAA9nZXRSYW5kb21OdW1iZXIAAAAEAAAAAAAAAAAGBQAAAAR0eElkBQAAAAFoAAAAAAAAAAACCQABkQAAAAIFAAAACWZyZWVHZW5lcwUAAAAMcmFuZG9tTnVtYmVyAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABNnZXRUcnVzdGVkQ29udHJhY3RzAAAAAAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAF3N0YXRpY190cnVzdGVkQ29udHJhY3RzAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nCQAAAgAAAAECAAAAHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEAAAAObWFuaXB1bGF0ZU5hbWUAAAADAAAACWFzc2V0TmFtZQAAAAhwb3NpdGlvbgAAAARjaGFyCQABLAAAAAIJAAEsAAAAAgkAAS8AAAACBQAAAAlhc3NldE5hbWUJAABlAAAAAgUAAAAIcG9zaXRpb24AAAAAAAAAAAEFAAAABGNoYXIJAQAAAAl0YWtlUmlnaHQAAAACBQAAAAlhc3NldE5hbWUJAABlAAAAAgAAAAAAAAAAEAUAAAAIcG9zaXRpb24BAAAAEGl0ZW1Jc0luQ29vbERvd24AAAACAAAADGFydGVmYWN0TmFtZQAAAAphcnRlZmFjdElkBAAAABF1bnN0YWtlSGVpZ2h0TGFzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAQa2V5VW5zdGFrZUhlaWdodAAAAAIFAAAADGFydGVmYWN0TmFtZQUAAAAKYXJ0ZWZhY3RJZAQAAAAOY29vbGRvd25QZXJpb2QAAAAAAAAAAPADCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACBQAAABF1bnN0YWtlSGVpZ2h0TGFzdAUAAAAOY29vbGRvd25QZXJpb2QHBgAAAA8AAAABaQEAAAAPbWFuaXB1bGF0ZUJvb3N0AAAAAgAAAAVib29zdAAAAAZkdWNrSWQEAAAAEGFsbG93ZWRDb250cmFjdHMJAQAAABNnZXRUcnVzdGVkQ29udHJhY3RzAAAAAAQAAAAUYWxsb3dlZENvbnRyYWN0c0xpc3QJAAS1AAAAAgUAAAAQYWxsb3dlZENvbnRyYWN0cwIAAAABOwQAAAAKZGFwcFRvQ2FsbAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAAAAAAAIJAARPAAAAAgUAAAAUYWxsb3dlZENvbnRyYWN0c0xpc3QFAAAACmRhcHBUb0NhbGwFAAAABHVuaXQJAAACAAAAAQIAAAAvVGhpcyBzbWFydCBjb250cmFjdCBjYW4ndCBtYW5pcHVsYXRlIHRoZSBib29zdCEEAAAAA2tleQkBAAAAFGtleUV4dGVybmFsQm9vc3REdWNrAAAAAQUAAAAGZHVja0lkBAAAAAthY3RpdmVCb29zdAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAANrZXkEAAAACG5ld0Jvb3N0CQAAZAAAAAIFAAAAC2FjdGl2ZUJvb3N0BQAAAAVib29zdAMJAABmAAAAAgAAAAAAAAAAAAUAAAAIbmV3Qm9vc3QJAAACAAAAAQIAAAA7U29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBib29zdCwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWlucyEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAA2tleQUAAAAIbmV3Qm9vc3QFAAAAA25pbAAAAAFpAQAAABZtYW5pcHVsYXRlQm9vc3RBY2NvdW50AAAAAgAAAAVib29zdAAAAAdhZGRyZXNzBAAAABBhbGxvd2VkQ29udHJhY3RzCQEAAAATZ2V0VHJ1c3RlZENvbnRyYWN0cwAAAAAEAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0CQAEtQAAAAIFAAAAEGFsbG93ZWRDb250cmFjdHMCAAAAATsEAAAACmRhcHBUb0NhbGwJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAAAAAAACCQAETwAAAAIFAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0BQAAAApkYXBwVG9DYWxsBQAAAAR1bml0CQAAAgAAAAECAAAAL1RoaXMgc21hcnQgY29udHJhY3QgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgYm9vc3QhBAAAAANrZXkJAQAAABdrZXlFeHRlcm5hbEJvb3N0QWRkcmVzcwAAAAEFAAAAB2FkZHJlc3MEAAAAC2FjdGl2ZUJvb3N0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAAA2tleQQAAAAIbmV3Qm9vc3QJAABkAAAAAgUAAAALYWN0aXZlQm9vc3QFAAAABWJvb3N0AwkAAGYAAAACAAAAAAAAAAAABQAAAAhuZXdCb29zdAkAAAIAAAABAgAAADtTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGJvb3N0LCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zIQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAAhuZXdCb29zdAUAAAADbmlsAAAAAWkBAAAAFGNoZWNrQXJ0ZWZhY3REZXRhaWxzAAAAAQAAAAdhc3NldElkBAAAAAVhc3NldAkBAAAABXZhbHVlAAAAAQkAA+wAAAABCQACWQAAAAEFAAAAB2Fzc2V0SWQEAAAACWFzc2V0TmFtZQkBAAAABXZhbHVlAAAAAQgFAAAABWFzc2V0AAAABG5hbWUDAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAAC2FsbEFydGVmYWN0BQAAAAlhc3NldE5hbWUJAAAAAAAAAggFAAAABWFzc2V0AAAABmlzc3VlcgUAAAAEdGhpcwcJAAUUAAAAAgUAAAADbmlsBQAAAAlhc3NldE5hbWUJAAACAAAAAQIAAAAQSW52YWxpZCBhcnRlZmFjdAAAAAFpAQAAAA9jb25maWd1cmVPcmFjbGUAAAABAAAABm9yYWNsZQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAAphZG1pbiBvbmx5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzBQAAAAZvcmFjbGUFAAAAA25pbAAAAAFpAQAAABpjYWxjdWxhdGVGYXJtaW5nUG93ZXJCb29zdAAAAAIAAAAGZHVja0lkAAAAB2FkZHJlc3MEAAAAEWV4dGVybmFsQm9vc3REdWNrCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABRrZXlFeHRlcm5hbEJvb3N0RHVjawAAAAEFAAAABmR1Y2tJZAQAAAAUZXh0ZXJuYWxCb29zdEFkZHJlc3MJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAF2tleUV4dGVybmFsQm9vc3RBZGRyZXNzAAAAAQUAAAAHYWRkcmVzcwQAAAAKdG90YWxCb29zdAkAAGQAAAACBQAAABFleHRlcm5hbEJvb3N0RHVjawUAAAAUZXh0ZXJuYWxCb29zdEFkZHJlc3MJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAZkdWNrSWQCAAAAC19sYXN0X2Jvb3N0BQAAAAp0b3RhbEJvb3N0BQAAAANuaWwFAAAACnRvdGFsQm9vc3QAAAABaQEAAAAJZml4ZWRHZW5lAAAAAwAAAAd0eElkU3RyAAAAD3BhcmVudEZpeGVkR2VuZQAAABFwb3NpdGlvbkZpeGVkR2VuZQQAAAAMZmlyc3RQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAxmaXJzdEFzc2V0SWQJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQAAAAAAAAAAAEJAAACAAAAAQIAAAATTkZUIGlzIG5vdCBhdHRhY2hlZAQAAAAIYXJ0ZWZhY3QJAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAUAAAAEdGhpcwIAAAAUY2hlY2tBcnRlZmFjdERldGFpbHMJAARMAAAAAgUAAAAMZmlyc3RBc3NldElkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAIYXJ0ZWZhY3QFAAAACGFydGVmYWN0AwkBAAAAAiE9AAAAAgUAAAAIYXJ0ZWZhY3QCAAAAC0FSVC1GSVhHRU5FCQAAAgAAAAECAAAAKVlvdSBuZWVkIHRvIGF0dGFjaCBhIEFSVC1GSVhHRU5FIGFydGVmYWN0BAAAAAR0eElkCQACWQAAAAEFAAAAB3R4SWRTdHIEAAAAD2ZpbmlzaEhlaWdodEtleQkBAAAAGWdldFByb2Nlc3NGaW5pc2hIZWlnaHRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAQAAAATcHJvY2Vzc0ZpbmlzaEhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAUAAAAPZmluaXNoSGVpZ2h0S2V5BAAAAA9kdWNrR2VuZXNTdHJpbmcJAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAIAAAAMZ2VuZXJhdGVEdWNrCQAETAAAAAIFAAAAB3R4SWRTdHIJAARMAAAAAgUAAAATcHJvY2Vzc0ZpbmlzaEhlaWdodAkABEwAAAACBQAAAA9wYXJlbnRGaXhlZEdlbmUJAARMAAAAAgUAAAARcG9zaXRpb25GaXhlZEdlbmUJAARMAAAAAgIAAAAACQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAA9kdWNrR2VuZXNTdHJpbmcFAAAAD2R1Y2tHZW5lc1N0cmluZwQAAAAEY2FsbAkAA/wAAAAECQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAAAgAAABdmaW5pc2hEdWNrSGF0Y2hpbmdJdGVtcwkABEwAAAACBQAAAAd0eElkU3RyCQAETAAAAAIFAAAAD2R1Y2tHZW5lc1N0cmluZwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAABGNhbGwFAAAABGNhbGwJAARMAAAAAgkBAAAABEJ1cm4AAAACCQEAAAAFdmFsdWUAAAABCAUAAAAMZmlyc3RQYXltZW50AAAAB2Fzc2V0SWQAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAhmcmVlR2VuZQAAAAEAAAAHdHhJZFN0cgQAAAAMZmlyc3RQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAxmaXJzdEFzc2V0SWQJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkAwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQAAAAAAAAAAAEJAAACAAAAAQIAAAATTkZUIGlzIG5vdCBhdHRhY2hlZAQAAAAIYXJ0ZWZhY3QJAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAUAAAAEdGhpcwIAAAAUY2hlY2tBcnRlZmFjdERldGFpbHMJAARMAAAAAgUAAAAMZmlyc3RBc3NldElkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAIYXJ0ZWZhY3QFAAAACGFydGVmYWN0AwkBAAAAAiE9AAAAAgUAAAAIYXJ0ZWZhY3QCAAAADEFSVC1GUkVFR0VORQkAAAIAAAABAgAAACpZb3UgbmVlZCB0byBhdHRhY2ggYSBBUlQtRlJFRUdFTkUgYXJ0ZWZhY3QEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAZZ2V0UHJvY2Vzc0ZpbmlzaEhlaWdodEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBAAAABNwcm9jZXNzRmluaXNoSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAABQAAAA9maW5pc2hIZWlnaHRLZXkEAAAADHNlbGVjdGVkR2VuZQkBAAAADmdldFJhbmRvbUdlbmVzAAAAAgUAAAAEdHhJZAUAAAATcHJvY2Vzc0ZpbmlzaEhlaWdodAQAAAAOcmFuZG9tUG9zaXRpb24JAQAAAA9nZXRSYW5kb21OdW1iZXIAAAAEAAAAAAAAAAAHBQAAAAR0eElkBQAAABNwcm9jZXNzRmluaXNoSGVpZ2h0AAAAAAAAAAADBAAAAA9kdWNrR2VuZXNTdHJpbmcJAQAAAAhhc1N0cmluZwAAAAEJAAP8AAAABAkBAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAIAAAAMZ2VuZXJhdGVEdWNrCQAETAAAAAIFAAAA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JFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAdwcmVJbml0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAcc3RhdGljX0FSVC1MQUtFX2Zhcm1pbmdTbG90cwAAAAAAAAAAyAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAcc3RhdGljX0FSVC1MQUtFX2Zhcm1pbmdCb29zdAAAAAAAAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAdc3RhdGljX0FSVC1IT1VTRV9mYXJtaW5nU2xvdHMAAAAAAAAAAAQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAHXN0YXRpY19BUlQtSE9VU0VfZmFybWluZ0Jvb3N0AAAAAAAAAAAeCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAACBzdGF0aWNfQVJULUJJR0hPVVNFX2Zhcm1pbmdTbG90cwAAAAAAAAAACgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAgc3RhdGljX0FSVC1CSUdIT1VTRV9mYXJtaW5nQm9vc3QAAAAAAAAAAA8FAAAAA25pbAAAAAFpAQAAAA1pc3N1ZUFydGVmYWN0AAAAAgAAAAR0eXBlAAAACHJlY2VpdmVyAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMEAAAAB3R4SWRTdHIJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAHYWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAACHJlY2VpdmVyBAAAAAhhcnRlZmFjdAkABEMAAAAHBQAAAAR0eXBlAgAAACpORlQgYXJ0ZWZhY3Qgb2YgV2F2ZXMgRHVja3MgZ2FtZS4g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", "height": 3073654, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CnCTkGviczb5Weanzq6vMXhAiuyRyYFFcKzQJtxVejKn Next: CyjzXmmHPbJXG1rBGpq9HpKmYhE6JrjZR1k2CX1V6zQi Diff:
OldNewDifferences
77 func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
88
99
10-func keyArtefactDuck (artefactName,duckId) = (((artefactName + "_") + duckId) + "_duck")
10+func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
1111
1212
13-func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
13+func keyExternalBoostAddress (address) = (address + "_user_external_boost")
1414
1515
1616 func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
2727 let oldArtefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"]
2828
2929 let artefacts = ["ART-XMISTL", "ART-XHAT", "ART-XSCARF", "ART-XSWEATER", "ART-XSOCK", "ART-XTREE"]
30-
31-let stakeableWithLock = ["ART-LAKE", "ART-XTREE"]
32-
33-let stakeableWithoutLock = ["ART-XMISTL"]
34-
35-let allStakeable = (stakeableWithoutLock ++ stakeableWithLock)
3630
3731 let allArtefact = (artefacts ++ oldArtefacts)
3832
139133
140134
141135 @Callable(i)
136+func manipulateBoostAccount (boost,address) = {
137+ let allowedContracts = getTrustedContracts()
138+ let allowedContractsList = split(allowedContracts, ";")
139+ let dappToCall = toString(i.caller)
140+ if ((indexOf(allowedContractsList, dappToCall) == unit))
141+ then throw("This smart contract can't manipulate the boost!")
142+ else {
143+ let key = keyExternalBoostAddress(address)
144+ let activeBoost = tryGetInteger(key)
145+ let newBoost = (activeBoost + boost)
146+ if ((0 > newBoost))
147+ then throw("Something went wrong with boost, please contact the admins!")
148+ else [IntegerEntry(key, newBoost)]
149+ }
150+ }
151+
152+
153+
154+@Callable(i)
142155 func checkArtefactDetails (assetId) = {
143156 let asset = value(assetInfo(fromBase58String(assetId)))
144157 let assetName = value(asset.name)
160173
161174 @Callable(i)
162175 func calculateFarmingPowerBoost (duckId,address) = {
163- let lakeBoost = if ((tryGetString(keyArtefactOwner("ART-LAKE", address)) != ""))
164- then 2
165- else 0
166- let xmasTreeBoost = if ((tryGetString(keyArtefactOwner("ART-XTREE", address)) != ""))
167- then 3
168- else 0
169- let scarfBoost = if ((tryGetString(keyArtefactDuck("ART-XSCARF", duckId)) != ""))
170- then 69
171- else 0
172- let externalBoost = tryGetInteger(keyExternalBoostDuck(duckId))
173- let totalBoost = (((lakeBoost + xmasTreeBoost) + scarfBoost) + externalBoost)
176+ let externalBoostDuck = tryGetInteger(keyExternalBoostDuck(duckId))
177+ let externalBoostAddress = tryGetInteger(keyExternalBoostAddress(address))
178+ let totalBoost = (externalBoostDuck + externalBoostAddress)
174179 $Tuple2([IntegerEntry((duckId + "_last_boost"), totalBoost)], totalBoost)
175180 }
176181
279284
280285
281286 @Callable(i)
282-func wearItemToDuck () = {
283- let firstPayment = value(i.payments[0])
284- let secondPayment = value(i.payments[1])
285- let duckId = toBase58String(value(firstPayment.assetId))
286- let secondAssetId = toBase58String(value(secondPayment.assetId))
287- if (if ((firstPayment.amount != 1))
288- then true
289- else (secondPayment.amount != 1))
290- then throw("NFT is not attached")
291- else {
292- let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
293- if ((children == children))
294- then {
295- let artefactName = asString(invoke(this, "checkArtefactDetails", [secondAssetId], nil))
296- if ((artefactName == artefactName))
297- then if ((artefactName != "ART-XSCARF"))
298- then throw("You need to attach a ART-XSCARF artefact")
299- else {
300- let artefactId = tryGetString(keyArtefactDuck(artefactName, duckId))
301- if ((artefactId == ""))
302- then [StringEntry(keyArtefactDuck(artefactName, duckId), secondAssetId), ScriptTransfer(i.caller, 1, firstPayment.assetId)]
303- else throw(("Duck is already wearing a " + artefactName))
304- }
305- else throw("Strict value is not equal to itself.")
306- }
307- else throw("Strict value is not equal to itself.")
308- }
309- }
310-
311-
312-
313-@Callable(i)
314287 func addArteFactToDuck () = {
315288 let firstPayment = value(i.payments[0])
316289 let secondPayment = value(i.payments[1])
371344 else throw("Strict value is not equal to itself.")
372345 }
373346 }
374-
375-
376-
377-@Callable(i)
378-func stakeItem () = if (if ((size(i.payments) == 1))
379- then (i.payments[0].amount == 1)
380- else false)
381- then {
382- let assetId = value(i.payments[0].assetId)
383- let artefactName = asString(invoke(this, "checkArtefactDetails", [toBase58String(assetId)], nil))
384- if ((artefactName == artefactName))
385- then if (containsElement(allStakeable, artefactName))
386- then if (if (containsElement(stakeableWithLock, artefactName))
387- then itemIsInCoolDown(artefactName, toBase58String(assetId))
388- else false)
389- then throw("Item can't be staked yet, it's in cooldown")
390- else {
391- let invoker = toString(i.caller)
392- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
393- if ((artefactId == ""))
394- then [StringEntry(keyArtefactOwner(artefactName, invoker), toBase58String(assetId))]
395- else throw(("You are already staking " + artefactName))
396- }
397- else throw("You can't stake this artafect")
398- else throw("Strict value is not equal to itself.")
399- }
400- else throw("Invalid payment")
401-
402-
403-
404-@Callable(i)
405-func unstakeItem (artefactName) = if (containsElement(allArtefact, artefactName))
406- then {
407- let invoker = toString(i.caller)
408- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
409- if ((artefactId == ""))
410- then throw(("You didnt stake " + artefactName))
411- else [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
412- }
413- else throw("This artefact doesn't exist")
414347
415348
416349
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
55
66
77 func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
88
99
10-func keyArtefactDuck (artefactName,duckId) = (((artefactName + "_") + duckId) + "_duck")
10+func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
1111
1212
13-func keyExternalBoostDuck (duckId) = (duckId + "_duck_external_boost")
13+func keyExternalBoostAddress (address) = (address + "_user_external_boost")
1414
1515
1616 func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
1717
1818
1919 let devAddress = base58'3P44yqcpfhPF2iC1nptm2ZJCTaN7VYhz9og'
2020
2121 let eggsNeeded = (3 * 100000000)
2222
2323 let artefactsLimit = (301 + 600)
2424
2525 let freeGenes = ["A", "B", "C", "D", "E"]
2626
2727 let oldArtefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"]
2828
2929 let artefacts = ["ART-XMISTL", "ART-XHAT", "ART-XSCARF", "ART-XSWEATER", "ART-XSOCK", "ART-XTREE"]
30-
31-let stakeableWithLock = ["ART-LAKE", "ART-XTREE"]
32-
33-let stakeableWithoutLock = ["ART-XMISTL"]
34-
35-let allStakeable = (stakeableWithoutLock ++ stakeableWithLock)
3630
3731 let allArtefact = (artefacts ++ oldArtefacts)
3832
3933 func tryGetString (key) = match getString(this, key) {
4034 case a: String =>
4135 a
4236 case _ =>
4337 ""
4438 }
4539
4640
4741 func tryGetInteger (key) = match getInteger(this, key) {
4842 case a: Int =>
4943 a
5044 case _ =>
5145 0
5246 }
5347
5448
5549 func getRandomNumber (variants,txId,finishHeight,offset) = {
5650 let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
5751 let randomHash = sha256(((base58'items' + txId) + value(randomSeedBlock.vrf)))
5852 (toInt(randomHash, offset) % variants)
5953 }
6054
6155
6256 func getRandomArtefact (boxId,h) = {
6357 let randomNumber = getRandomNumber(6, boxId, h, 1)
6458 artefacts[randomNumber]
6559 }
6660
6761
6862 func getRandomGenes (txId,h) = {
6963 let randomNumber = getRandomNumber(6, txId, h, 2)
7064 freeGenes[randomNumber]
7165 }
7266
7367
7468 func tryGetStringExternal (address,key) = match getString(address, key) {
7569 case a: String =>
7670 a
7771 case _ =>
7872 ""
7973 }
8074
8175
8276 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
8377
8478
8579 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
8680
8781
8882 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
8983
9084
9185 func getTrustedContracts () = tryGetStringExternal(getOracle(), "static_trustedContracts")
9286
9387
9488 func asString (value) = match value {
9589 case string: String =>
9690 string
9791 case _ =>
9892 throw("wrong type, expected: String")
9993 }
10094
10195
10296 func asInt (value) = match value {
10397 case int: Int =>
10498 int
10599 case _ =>
106100 throw("wrong type, expected: Int")
107101 }
108102
109103
110104 func manipulateName (assetName,position,char) = ((take(assetName, (position - 1)) + char) + takeRight(assetName, (16 - position)))
111105
112106
113107 func itemIsInCoolDown (artefactName,artefactId) = {
114108 let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
115109 let cooldownPeriod = 240
116110 if ((height > (unstakeHeightLast + cooldownPeriod)))
117111 then false
118112 else true
119113 }
120114
121115
122116 @Callable(i)
123117 func manipulateBoost (boost,duckId) = {
124118 let allowedContracts = getTrustedContracts()
125119 let allowedContractsList = split(allowedContracts, ";")
126120 let dappToCall = toString(i.caller)
127121 if ((indexOf(allowedContractsList, dappToCall) == unit))
128122 then throw("This smart contract can't manipulate the boost!")
129123 else {
130124 let key = keyExternalBoostDuck(duckId)
131125 let activeBoost = tryGetInteger(key)
132126 let newBoost = (activeBoost + boost)
133127 if ((0 > newBoost))
134128 then throw("Something went wrong with boost, please contact the admins!")
135129 else [IntegerEntry(key, newBoost)]
136130 }
137131 }
138132
139133
140134
141135 @Callable(i)
136+func manipulateBoostAccount (boost,address) = {
137+ let allowedContracts = getTrustedContracts()
138+ let allowedContractsList = split(allowedContracts, ";")
139+ let dappToCall = toString(i.caller)
140+ if ((indexOf(allowedContractsList, dappToCall) == unit))
141+ then throw("This smart contract can't manipulate the boost!")
142+ else {
143+ let key = keyExternalBoostAddress(address)
144+ let activeBoost = tryGetInteger(key)
145+ let newBoost = (activeBoost + boost)
146+ if ((0 > newBoost))
147+ then throw("Something went wrong with boost, please contact the admins!")
148+ else [IntegerEntry(key, newBoost)]
149+ }
150+ }
151+
152+
153+
154+@Callable(i)
142155 func checkArtefactDetails (assetId) = {
143156 let asset = value(assetInfo(fromBase58String(assetId)))
144157 let assetName = value(asset.name)
145158 if (if (containsElement(allArtefact, assetName))
146159 then (asset.issuer == this)
147160 else false)
148161 then $Tuple2(nil, assetName)
149162 else throw("Invalid artefact")
150163 }
151164
152165
153166
154167 @Callable(i)
155168 func configureOracle (oracle) = if ((i.caller != this))
156169 then throw("admin only")
157170 else [StringEntry("static_oracleAddress", oracle)]
158171
159172
160173
161174 @Callable(i)
162175 func calculateFarmingPowerBoost (duckId,address) = {
163- let lakeBoost = if ((tryGetString(keyArtefactOwner("ART-LAKE", address)) != ""))
164- then 2
165- else 0
166- let xmasTreeBoost = if ((tryGetString(keyArtefactOwner("ART-XTREE", address)) != ""))
167- then 3
168- else 0
169- let scarfBoost = if ((tryGetString(keyArtefactDuck("ART-XSCARF", duckId)) != ""))
170- then 69
171- else 0
172- let externalBoost = tryGetInteger(keyExternalBoostDuck(duckId))
173- let totalBoost = (((lakeBoost + xmasTreeBoost) + scarfBoost) + externalBoost)
176+ let externalBoostDuck = tryGetInteger(keyExternalBoostDuck(duckId))
177+ let externalBoostAddress = tryGetInteger(keyExternalBoostAddress(address))
178+ let totalBoost = (externalBoostDuck + externalBoostAddress)
174179 $Tuple2([IntegerEntry((duckId + "_last_boost"), totalBoost)], totalBoost)
175180 }
176181
177182
178183
179184 @Callable(i)
180185 func fixedGene (txIdStr,parentFixedGene,positionFixedGene) = {
181186 let firstPayment = value(i.payments[0])
182187 let firstAssetId = toBase58String(value(firstPayment.assetId))
183188 if ((firstPayment.amount != 1))
184189 then throw("NFT is not attached")
185190 else {
186191 let artefact = asString(invoke(this, "checkArtefactDetails", [firstAssetId], nil))
187192 if ((artefact == artefact))
188193 then if ((artefact != "ART-FIXGENE"))
189194 then throw("You need to attach a ART-FIXGENE artefact")
190195 else {
191196 let txId = fromBase58String(txIdStr)
192197 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
193198 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
194199 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txIdStr, processFinishHeight, parentFixedGene, positionFixedGene, "", 0], nil))
195200 if ((duckGenesString == duckGenesString))
196201 then {
197202 let call = invoke(getBreederAddress(), "finishDuckHatchingItems", [txIdStr, duckGenesString], nil)
198203 if ((call == call))
199204 then [Burn(value(firstPayment.assetId), 1)]
200205 else throw("Strict value is not equal to itself.")
201206 }
202207 else throw("Strict value is not equal to itself.")
203208 }
204209 else throw("Strict value is not equal to itself.")
205210 }
206211 }
207212
208213
209214
210215 @Callable(i)
211216 func freeGene (txIdStr) = {
212217 let firstPayment = value(i.payments[0])
213218 let firstAssetId = toBase58String(value(firstPayment.assetId))
214219 if ((firstPayment.amount != 1))
215220 then throw("NFT is not attached")
216221 else {
217222 let artefact = asString(invoke(this, "checkArtefactDetails", [firstAssetId], nil))
218223 if ((artefact == artefact))
219224 then if ((artefact != "ART-FREEGENE"))
220225 then throw("You need to attach a ART-FREEGENE artefact")
221226 else {
222227 let txId = fromBase58String(txIdStr)
223228 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
224229 let processFinishHeight = getIntegerValue(getBreederAddress(), finishHeightKey)
225230 let selectedGene = getRandomGenes(txId, processFinishHeight)
226231 let randomPosition = getRandomNumber(7, txId, processFinishHeight, 3)
227232 let duckGenesString = asString(invoke(getBreederAddress(), "generateDuck", [txIdStr, processFinishHeight, 0, 0, selectedGene, randomPosition], nil))
228233 if ((duckGenesString == duckGenesString))
229234 then {
230235 let call = invoke(getBreederAddress(), "finishDuckHatchingItems", [txIdStr, duckGenesString], nil)
231236 if ((call == call))
232237 then [Burn(value(firstPayment.assetId), 1)]
233238 else throw("Strict value is not equal to itself.")
234239 }
235240 else throw("Strict value is not equal to itself.")
236241 }
237242 else throw("Strict value is not equal to itself.")
238243 }
239244 }
240245
241246
242247
243248 @Callable(i)
244249 func copyDuck () = {
245250 let firstPayment = value(i.payments[0])
246251 let secondPayment = value(i.payments[1])
247252 let firstAssetId = toBase58String(value(firstPayment.assetId))
248253 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [firstAssetId], nil))
249254 if ((children == children))
250255 then if (if ((firstPayment.amount != 1))
251256 then true
252257 else (secondPayment.amount != 1))
253258 then throw("NFT is not attached")
254259 else {
255260 let artefact = asString(invoke(this, "checkArtefactDetails", [toBase58String(value(secondPayment.assetId))], nil))
256261 if ((artefact == artefact))
257262 then if ((artefact != "ART-MIRROR"))
258263 then throw("You need to attach a ART-MIRROR artefact")
259264 else {
260265 let nftInfo = value(assetInfo(value(firstPayment.assetId)))
261266 let asset1Gen = split(nftInfo.name, "")
262267 if (if ((asset1Gen[14] == "G"))
263268 then true
264269 else (asset1Gen[14] == "J"))
265270 then throw("You can't mirror this duck")
266271 else {
267272 let duckGen = nftInfo.name
268273 let call = invoke(getBreederAddress(), "createDuckSpecialGenes", [i.caller.bytes, duckGen, children], nil)
269274 if ((call == call))
270275 then [ScriptTransfer(i.caller, 1, firstPayment.assetId), Burn(value(secondPayment.assetId), 1)]
271276 else throw("Strict value is not equal to itself.")
272277 }
273278 }
274279 else throw("Strict value is not equal to itself.")
275280 }
276281 else throw("Strict value is not equal to itself.")
277282 }
278283
279284
280285
281286 @Callable(i)
282-func wearItemToDuck () = {
283- let firstPayment = value(i.payments[0])
284- let secondPayment = value(i.payments[1])
285- let duckId = toBase58String(value(firstPayment.assetId))
286- let secondAssetId = toBase58String(value(secondPayment.assetId))
287- if (if ((firstPayment.amount != 1))
288- then true
289- else (secondPayment.amount != 1))
290- then throw("NFT is not attached")
291- else {
292- let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
293- if ((children == children))
294- then {
295- let artefactName = asString(invoke(this, "checkArtefactDetails", [secondAssetId], nil))
296- if ((artefactName == artefactName))
297- then if ((artefactName != "ART-XSCARF"))
298- then throw("You need to attach a ART-XSCARF artefact")
299- else {
300- let artefactId = tryGetString(keyArtefactDuck(artefactName, duckId))
301- if ((artefactId == ""))
302- then [StringEntry(keyArtefactDuck(artefactName, duckId), secondAssetId), ScriptTransfer(i.caller, 1, firstPayment.assetId)]
303- else throw(("Duck is already wearing a " + artefactName))
304- }
305- else throw("Strict value is not equal to itself.")
306- }
307- else throw("Strict value is not equal to itself.")
308- }
309- }
310-
311-
312-
313-@Callable(i)
314287 func addArteFactToDuck () = {
315288 let firstPayment = value(i.payments[0])
316289 let secondPayment = value(i.payments[1])
317290 let firstAssetId = toBase58String(value(firstPayment.assetId))
318291 if (if ((firstPayment.amount != 1))
319292 then true
320293 else (secondPayment.amount != 1))
321294 then throw("NFT is not attached")
322295 else {
323296 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [firstAssetId], nil))
324297 if ((children == children))
325298 then if ((children == 0))
326299 then throw("You can only pick a sterile NFT-duck")
327300 else {
328301 let artefact = asString(invoke(this, "checkArtefactDetails", [toBase58String(value(secondPayment.assetId))], nil))
329302 if ((artefact == artefact))
330303 then if (if ((artefact != "ART-XHAT"))
331304 then (artefact != "ART-POMP")
332305 else false)
333306 then throw("You need to attach a ART-XHAT or ART-POMP artefact")
334307 else {
335308 let nftInfo = value(assetInfo(value(firstPayment.assetId)))
336309 let asset1Gen = split(nftInfo.name, "")
337310 if (if ((asset1Gen[14] == "G"))
338311 then true
339312 else (asset1Gen[14] == "J"))
340313 then throw("You can't mirror this duck")
341314 else if (if ((asset1Gen[5] == "S"))
342315 then true
343316 else (asset1Gen[5] == "T"))
344317 then throw("you already attached a artefact")
345318 else {
346319 let char = if ((artefact == "ART-XHAT"))
347320 then "T"
348321 else if ((artefact == "ART-POMP"))
349322 then "S"
350323 else throw("No char defined")
351324 let oldDuckGen = nftInfo.name
352325 let oldFarmGen = asString(invoke(getBreederAddress(), "getGenFromName", [oldDuckGen], nil))
353326 if ((oldFarmGen == oldFarmGen))
354327 then {
355328 let duckGen = manipulateName(oldDuckGen, 6, char)
356329 let call = invoke(getBreederAddress(), "createDuckSpecialGenes", [i.caller.bytes, duckGen, children], nil)
357330 if ((call == call))
358331 then {
359332 let callReduce = invoke(getBreederAddress(), "reduceRarity", [firstAssetId, oldFarmGen], nil)
360333 if ((callReduce == callReduce))
361334 then [Burn(value(firstPayment.assetId), 1), Burn(value(secondPayment.assetId), 1)]
362335 else throw("Strict value is not equal to itself.")
363336 }
364337 else throw("Strict value is not equal to itself.")
365338 }
366339 else throw("Strict value is not equal to itself.")
367340 }
368341 }
369342 else throw("Strict value is not equal to itself.")
370343 }
371344 else throw("Strict value is not equal to itself.")
372345 }
373346 }
374-
375-
376-
377-@Callable(i)
378-func stakeItem () = if (if ((size(i.payments) == 1))
379- then (i.payments[0].amount == 1)
380- else false)
381- then {
382- let assetId = value(i.payments[0].assetId)
383- let artefactName = asString(invoke(this, "checkArtefactDetails", [toBase58String(assetId)], nil))
384- if ((artefactName == artefactName))
385- then if (containsElement(allStakeable, artefactName))
386- then if (if (containsElement(stakeableWithLock, artefactName))
387- then itemIsInCoolDown(artefactName, toBase58String(assetId))
388- else false)
389- then throw("Item can't be staked yet, it's in cooldown")
390- else {
391- let invoker = toString(i.caller)
392- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
393- if ((artefactId == ""))
394- then [StringEntry(keyArtefactOwner(artefactName, invoker), toBase58String(assetId))]
395- else throw(("You are already staking " + artefactName))
396- }
397- else throw("You can't stake this artafect")
398- else throw("Strict value is not equal to itself.")
399- }
400- else throw("Invalid payment")
401-
402-
403-
404-@Callable(i)
405-func unstakeItem (artefactName) = if (containsElement(allArtefact, artefactName))
406- then {
407- let invoker = toString(i.caller)
408- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
409- if ((artefactId == ""))
410- then throw(("You didnt stake " + artefactName))
411- else [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
412- }
413- else throw("This artefact doesn't exist")
414347
415348
416349
417350 @Callable(i)
418351 func preInit () = [IntegerEntry("static_ART-LAKE_farmingSlots", 200), IntegerEntry("static_ART-LAKE_farmingBoost", 2), IntegerEntry("static_ART-HOUSE_farmingSlots", 4), IntegerEntry("static_ART-HOUSE_farmingBoost", 30), IntegerEntry("static_ART-BIGHOUSE_farmingSlots", 10), IntegerEntry("static_ART-BIGHOUSE_farmingBoost", 15)]
419352
420353
421354
422355 @Callable(i)
423356 func issueArtefact (type,receiver) = if ((i.caller == this))
424357 then {
425358 let txIdStr = toBase58String(i.transactionId)
426359 let address = Address(fromBase58String(receiver))
427360 let artefact = Issue(type, "NFT artefact of Waves Ducks game. Drop #2.", 1, 0, false, unit, 0)
428361 let artefactId = calculateAssetId(artefact)
429362 [artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), type), ScriptTransfer(address, 1, artefactId)]
430363 }
431364 else throw("admin only")
432365
433366
434367
435368 @Callable(i)
436369 func setLock (n) = if ((i.caller == this))
437370 then [IntegerEntry("global_locked", n)]
438371 else throw("admin only")
439372
440373
441374
442375 @Callable(i)
443376 func buyArtefact () = if ((lastBlock.timestamp > 1639742400000))
444377 then throw("There are no active sales now... ")
445378 else if ((tryGetInteger("global_locked") > 0))
446379 then throw("contract is temporarily locked")
447380 else if ((tryGetInteger("global_artAmount") >= artefactsLimit))
448381 then throw("SOLDOUT!!! Hurray!")
449382 else if (if ((1639605600000 > lastBlock.timestamp))
450383 then (i.caller != Address(devAddress))
451384 else false)
452385 then throw("Too early...")
453386 else {
454387 let firstPayment = value(i.payments[0])
455388 if ((firstPayment.assetId != getEggAssetId()))
456389 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
457390 else if ((eggsNeeded > firstPayment.amount))
458391 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
459392 else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", (tryGetInteger("global_artAmount") + 1))]
460393 }
461394
462395
463396
464397 @Callable(i)
465398 func setGlobalArtAmount (newAmount) = if (if ((i.caller == this))
466399 then true
467400 else (i.caller == Address(devAddress)))
468401 then [IntegerEntry("global_artAmount", newAmount)]
469402 else throw("Permission denied")
470403
471404
472405
473406 @Callable(i)
474407 func claimArtefact (boxIdStr) = {
475408 let txId = fromBase58String(boxIdStr)
476409 let statusKey = (((toString(i.caller) + "_") + boxIdStr) + "_status")
477410 let heightKey = (((toString(i.caller) + "_") + boxIdStr) + "_finishHeight")
478411 if ((getStringValue(statusKey) != "started"))
479412 then throw("claimed already")
480413 else if ((getIntegerValue(heightKey) > height))
481414 then throw("you cannot claim yet")
482415 else {
483416 let artType = getRandomArtefact(txId, getIntegerValue(heightKey))
484417 let asset = Issue(artType, "Artefact of Waves Ducks metaverse.", 1, 0, false, unit, getIntegerValue(heightKey))
485418 let assetId = calculateAssetId(asset)
486419 [StringEntry(statusKey, artType), StringEntry((((toString(i.caller) + "_") + boxIdStr) + "_artefactId"), toBase58String(assetId)), StringEntry((toBase58String(assetId) + "_type"), artType), asset, ScriptTransfer(i.caller, 1, assetId)]
487420 }
488421 }
489422
490423
491424 @Verifier(tx)
492425 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
493426

github/deemru/w8io/786bc32 
69.46 ms