tx · 95gfpisKPyiBC4qJtkCsawaFgHVeRAAvY6oEChxp9WEG

3Moxfr1c53DJoiy5eHzocn6PRWkSng4QGt5:  -0.01700000 Waves

2024.10.08 09:23 [3317487] smart account 3Moxfr1c53DJoiy5eHzocn6PRWkSng4QGt5 > SELF 0.00000000 Waves

{ "type": 13, "id": "95gfpisKPyiBC4qJtkCsawaFgHVeRAAvY6oEChxp9WEG", "fee": 1700000, "feeAssetId": null, "timestamp": 1728368647295, "version": 2, "chainId": 84, "sender": "3Moxfr1c53DJoiy5eHzocn6PRWkSng4QGt5", "senderPublicKey": "BU8rYtii1aJGQdtENyW49QRU4HmzRBrG7fKheSLpaCkk", "proofs": [ "63vjxLd8wJKew8WdqRyJDhh25Yew5Vgx5MdUkJRRaAb3L2DcFDT3sohYRQTWedC2U1cT5LCdf1pwLLSnxZHGUC6j" ], "script": "base64:BgI8CAISAwoBCBIGCgQICAgIEgMKAQgSABIAEgMKAQgSABIDCgEIEgMKAQgSBAoCCAgSAwoBCBIGCgQIAQQIOAENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEVa2V5RHVja1BsYXlVbmxvY2tUaW1lAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18JANgEAQUHYXNzZXRJZAILX3VubG9ja1RpbWUBF2tleUR1Y2tGaW5pc2hVbmxvY2tUaW1lAQdhc3NldElkCQCsAgIJAKwCAgIFZHVja18JANgEAQUHYXNzZXRJZAIRZmluaXNoX3VubG9ja1RpbWUBDGtleUR1Y2tPd25lcgEHYXNzZXRJZAkArAICCQCsAgICBWR1Y2tfCQDYBAEFB2Fzc2V0SWQCBl9vd25lcgEOa2V5U3BvdHNCb3VnaHQBCmFkZHJlc3NTdHIJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIMX3Nwb3RzQm91Z2h0AQxrZXlTcG90c0J1c3kBCmFkZHJlc3NTdHIJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIKX3Nwb3RzQnVzeQETa2V5TG9ja2VkRHVja1N0YXR1cwIKYWRkcmVzc1N0cgphc3NldElkU3RyCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgxfbG9ja2VkRHVja18FCmFzc2V0SWRTdHICB19zdGF0dXMBCWtleUR1Y2tWMgIKYWRkcmVzc1N0cgphc3NldElkU3RyCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgxfbG9ja2VkRHVja18FCmFzc2V0SWRTdHICA192MgEOZ2V0RHVja0RldGFpbHMBB2Fzc2V0SWQECWFzc2V0TmFtZQkBBXZhbHVlAQgJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZARuYW1lBA5hc3NldE5hbWVQYXJ0cwkAtQkCBQlhc3NldE5hbWUCAAQJaXNKYWNrcG90CQAAAgkAkQMCBQ5hc3NldE5hbWVQYXJ0cwkAZQIJAJADAQUOYXNzZXROYW1lUGFydHMAAgIBSgQKYXNzZXRDb2xvcgMFCWlzSmFja3BvdAIBQgkAkQMCBQ5hc3NldE5hbWVQYXJ0cwkAZQIJAJADAQUOYXNzZXROYW1lUGFydHMAAQkAlAoCBQphc3NldENvbG9yBQlpc0phY2twb3QBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAoAgBBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBFHN0YXRpY0tleV9lZ2dBc3NldElkAAIRc3RhdGljX2VnZ0Fzc2V0SWQBGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEYc3RhdGljS2V5X2Zhcm1pbmdBZGRyZXNzAAIVc3RhdGljX2Zhcm1pbmdBZGRyZXNzARhzdGF0aWNLZXlfcmVudGluZ0FkZHJlc3MAAhVzdGF0aWNfcmVudGluZ0FkZHJlc3MBF3N0YXRpY0tleV9zaG9ydEdhbWVOYW1lAAIUc3RhdGljX3Nob3J0R2FtZU5hbWUBFnN0YXRpY0tleV9sb25nR2FtZU5hbWUAAhNzdGF0aWNfbG9uZ0dhbWVOYW1lARFzdGF0aWNLZXlfbmZ0TmFtZQACDnN0YXRpY19uZnROYW1lARdzdGF0aWNLZXlfYmFja2VuZFB1YktleQACFHN0YXRpY19iYWNrZW5kUHViS2V5ARtzdGF0aWNLZXlfYWNjZXNzSXRlbUFzc2V0SWQAAhhzdGF0aWNfYWNjZXNzSXRlbUFzc2V0SWQBGXN0YXRpY0tleV9hY2Nlc3NJdGVtUHJpY2UAAhZzdGF0aWNfYWNjZXNzSXRlbVByaWNlARlzdGF0aWNLZXlfbWluTG9ja0R1cmF0aW9uAAIWc3RhdGljX21pbkxvY2tEdXJhdGlvbgEYc3RhdGljS2V5X1VubG9ja0R1cmF0aW9uAAIVc3RhdGljX1VubG9ja0R1cmF0aW9uARtzdGF0aWNLZXlfYm9vc3RlckJ1eUFzc2V0SWQAAhhzdGF0aWNfYm9vc3RlckJ1eUFzc2V0SWQBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgEbc3RhdGljS2V5X2Jvb3N0ZXJQcmljZUxldmVsAQVsZXZlbAkArAICAhlzdGF0aWNfYm9vc3RlclByaWNlTGV2ZWxfBQVsZXZlbAEVc3RhdGljS2V5X2Jvb3N0ZXJOYW1lAQVsZXZlbAkArAICAhNzdGF0aWNfYm9vc3Rlck5hbWVfBQVsZXZlbAEVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAISc3RhdGljX2J1cm5BZGRyZXNzAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABC2dldEdhbWVOYW1lAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARdzdGF0aWNLZXlfc2hvcnRHYW1lTmFtZQACJDNHR046IFRoZXJlIGlzIG5vIGdhbWUgbmFtZSBkZWZpbmVkIQEPZ2V0TG9uZ0dhbWVOYW1lAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARZzdGF0aWNLZXlfbG9uZ0dhbWVOYW1lAAIqM0dMR046IFRoZXJlIGlzIG5vIGxvbmcgZ2FtZSBuYW1lIGRlZmluZWQhAQpnZXRORlROYW1lAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARFzdGF0aWNLZXlfbmZ0TmFtZQACIzNHTk46IFRoZXJlIGlzIG5vIG5mdCBuYW1lIGRlZmluZWQhARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAARFnZXRCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwABEWdldFJlbnRpbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X3JlbnRpbmdBZGRyZXNzAAERZ2V0RmFybWluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfZmFybWluZ0FkZHJlc3MAAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFHN0YXRpY0tleV9lZ2dBc3NldElkAAEQZ2V0QmFja2VuZFB1YktleQAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfYmFja2VuZFB1YktleQABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABDmdldEJ1cm5BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAEUZ2V0QWNjZXNzSXRlbUFzc2V0SWQACQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEbc3RhdGljS2V5X2FjY2Vzc0l0ZW1Bc3NldElkAAESZ2V0QWNjZXNzSXRlbVByaWNlAAkBDXRyeUdldEludGVnZXIBCQEZc3RhdGljS2V5X2FjY2Vzc0l0ZW1QcmljZQABEmdldE1pbkxvY2tEdXJhdGlvbgAJAQ10cnlHZXRJbnRlZ2VyAQkBGXN0YXRpY0tleV9taW5Mb2NrRHVyYXRpb24AARFnZXRVbmxvY2tEdXJhdGlvbgAJAQ10cnlHZXRJbnRlZ2VyAQkBGHN0YXRpY0tleV9VbmxvY2tEdXJhdGlvbgABE2dldEJvc3RlckJ1eUFzc2V0SWQACQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEbc3RhdGljS2V5X2Jvb3N0ZXJCdXlBc3NldElkAAEWZ2V0Qm9zdGVyUHJpY2VGb3JMZXZlbAEFbGV2ZWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEbc3RhdGljS2V5X2Jvb3N0ZXJQcmljZUxldmVsAQkApAMBBQVsZXZlbAI5M0dCUEZMOiBUaGVyZSBpcyBubyBwcmljZSB2YWx1ZSBmb3IgdGhpcyBsZXZlbCBvZiBib29zdGVyARVnZXRCb3N0ZXJOYW1lRm9yTGV2ZWwBBWxldmVsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFXN0YXRpY0tleV9ib29zdGVyTmFtZQEJAKQDAQUFbGV2ZWwCIDNHQk5GTDogVGhlcmUgaXMgbm8gc3VjaCBib29zdGVyARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQdwYXltZW50AwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlSQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAlmZWVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFJDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAFBnN0cmluZwkAAgECITNBUzogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEQbG9ja0R1Y2tJbnRlcm5hbAMKYWRkcmVzc1N0cg10YWtlU3BvdHNGcm9tA3BtdAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAthc3NldElzc3VlcggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIEDHREdWNrRGV0YWlscwkBDmdldER1Y2tEZXRhaWxzAQUHYXNzZXRJZAQKYXNzZXRDb2xvcggFDHREdWNrRGV0YWlscwJfMQQJaXNKYWNrcG90CAUMdER1Y2tEZXRhaWxzAl8yBAprU3BvdHNCdXN5CQEMa2V5U3BvdHNCdXN5AQUNdGFrZVNwb3RzRnJvbQQJc3BvdHNCdXN5CQENdHJ5R2V0SW50ZWdlcgEFCmtTcG90c0J1c3kEDGtTcG90c0JvdWdodAkBDmtleVNwb3RzQm91Z2h0AQUNdGFrZVNwb3RzRnJvbQQVYWRkcmVzc1Nwb3RzQXZhaWxhYmxlCQBlAgkBDXRyeUdldEludGVnZXIBBQxrU3BvdHNCb3VnaHQFCXNwb3RzQnVzeQMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkAwMJAQIhPQIFC2Fzc2V0SXNzdWVyCQETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAQIhPQIFC2Fzc2V0SXNzdWVyCQERZ2V0QnJlZWRlckFkZHJlc3MABwkAAgECE2l2YWxpZCBORlQgYXR0YWNoZWQDCQBnAgAABRVhZGRyZXNzU3BvdHNBdmFpbGFibGUJAAIBCQCsAgICIE5vIHNwb3RzIGF2YWlsYWJsZSBpbiBodW50IGZvcjogBQ10YWtlU3BvdHNGcm9tBBFrUGVyY2hlc0F2YWlsYWJsZQkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18JAKUIAQUEdGhpcwISX3BlcmNoZXNBdmFpbGFibGVfBQphc3NldENvbG9yBBBwZXJjaGVzQXZhaWxhYmxlBAckbWF0Y2gwCQCaCAIJARFnZXRGYXJtaW5nQWRkcmVzcwAFEWtQZXJjaGVzQXZhaWxhYmxlAwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAwkAAAIFEHBlcmNoZXNBdmFpbGFibGUFEHBlcmNoZXNBdmFpbGFibGUECmVnZ0Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa1Nwb3RzQnVzeQkAZAIFCXNwb3RzQnVzeQABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrT3duZXIBBQdhc3NldElkBQphZGRyZXNzU3RyCQDMCAIJAQxCb29sZWFuRW50cnkCCQETa2V5TG9ja2VkRHVja1N0YXR1cwIFCmFkZHJlc3NTdHIJANgEAQUHYXNzZXRJZAYJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlEdWNrUGxheVVubG9ja1RpbWUBBQdhc3NldElkCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAJARJnZXRNaW5Mb2NrRHVyYXRpb24ACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5RHVja1YyAgUKYWRkcmVzc1N0cgkA2AQBBQdhc3NldElkBgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5pbml0VW5sb2NrRHVjawIKYXNzZXRJZFN0cgphZGRyZXNzU3RyBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEDHREdWNrRGV0YWlscwkBDmdldER1Y2tEZXRhaWxzAQUHYXNzZXRJZAQKYXNzZXRDb2xvcggFDHREdWNrRGV0YWlscwJfMQQJaXNKYWNrcG90CAUMdER1Y2tEZXRhaWxzAl8yBAprU3BvdHNCdXN5CQEMa2V5U3BvdHNCdXN5AQUKYWRkcmVzc1N0cgQKa0R1Y2tPd25lcgkBDGtleUR1Y2tPd25lcgEFB2Fzc2V0SWQEEnJlbWFpbmluZ0ZvclVubG9jawkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkBFWtleUR1Y2tQbGF5VW5sb2NrVGltZQEFB2Fzc2V0SWQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBAiE9AgkBDHRyeUdldFN0cmluZwEFCmtEdWNrT3duZXIFCmFkZHJlc3NTdHIJAAIBAhwzSVVMRDogVGhlIGR1Y2sgaXMgbm90IHlvdXJzAwkAZgIFEnJlbWFpbmluZ0ZvclVubG9jawAACQACAQkArAICCQCsAgICITNJVUw6IFlvdSBuZWVkIHRvIHdhaXQgdG8gdW5sb2NrIAkApAMBCQBpAgUScmVtYWluaW5nRm9yVW5sb2NrAOgHAgggc2Vjb25kcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleUR1Y2tGaW5pc2hVbmxvY2tUaW1lAQUHYXNzZXRJZAkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQERZ2V0VW5sb2NrRHVyYXRpb24ABQNuaWwBC3Vuc3Rha2VEdWNrAwphc3NldElkU3RyCmFkZHJlc3NTdHIPYWRkU3BvdHNUb3dhcmRzBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEDHREdWNrRGV0YWlscwkBDmdldER1Y2tEZXRhaWxzAQUHYXNzZXRJZAQKYXNzZXRDb2xvcggFDHREdWNrRGV0YWlscwJfMQQJaXNKYWNrcG90CAUMdER1Y2tEZXRhaWxzAl8yBAprU3BvdHNCdXN5CQEMa2V5U3BvdHNCdXN5AQUPYWRkU3BvdHNUb3dhcmRzBAprRHVja093bmVyCQEMa2V5RHVja093bmVyAQUHYXNzZXRJZAQScmVtYWluaW5nRm9yVW5sb2NrCQBlAgkBDXRyeUdldEludGVnZXIBCQEXa2V5RHVja0ZpbmlzaFVubG9ja1RpbWUBBQdhc3NldElkCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAQIhPQIJAQx0cnlHZXRTdHJpbmcBBQprRHVja093bmVyBQphZGRyZXNzU3RyCQACAQIaM1VEOiBUaGUgZHVjayBpcyBub3QgeW91cnMDCQBmAgUScmVtYWluaW5nRm9yVW5sb2NrAAAJAAIBCQCsAgIJAKwCAgIgM1VEOiBZb3UgbmVlZCB0byB3YWl0IHRvIHVubG9jayAJAKQDAQkAaQIFEnJlbWFpbmluZ0ZvclVubG9jawDoBwIIIHNlY29uZHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCmFkZHJlc3NTdHIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQETa2V5TG9ja2VkRHVja1N0YXR1cwIFCmFkZHJlc3NTdHIFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKa0R1Y2tPd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa1Nwb3RzQnVzeQkAZQIJAQ10cnlHZXRJbnRlZ2VyAQUKa1Nwb3RzQnVzeQABBQNuaWwMAWkBFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAEKYWRkcmVzc1N0cgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGDNCQUlJOiBpbnRlcm5hbCB1c2Ugb25seQQPaXNzdWVBY2Nlc3NJdGVtCQDCCAUJAKwCAgIHQUNDRVNTLQkBC2dldEdhbWVOYW1lAAkArAICCQCsAgIJAKwCAgIJW0FjY2Vzc10gCQEPZ2V0TG9uZ0dhbWVOYW1lAAIQIGFjY2VzcyBORlQgZm9yIAkBCmdldE5GVE5hbWUAAAEAAAcEEWFjY2Vzc1JhY2VBc3NldElkCQDYBAEJALgIAQUPaXNzdWVBY2Nlc3NJdGVtBAxrU3BvdHNCb3VnaHQJAQ5rZXlTcG90c0JvdWdodAEFCmFkZHJlc3NTdHIJAJQKAgkAzAgCBQ9pc3N1ZUFjY2Vzc0l0ZW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICC2FjY2Vzc0l0ZW1fBRFhY2Nlc3NSYWNlQXNzZXRJZAIGX293bmVyBQphZGRyZXNzU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIHX293bmluZwURYWNjZXNzUmFjZUFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtTcG90c0JvdWdodAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQUMa1Nwb3RzQm91Z2h0AAEFA25pbAURYWNjZXNzUmFjZUFzc2V0SWQBaQEPY29uZmlndXJlT3JhY2xlBAZvcmFjbGUJc2hvcnRuYW1lCGxvbmduYW1lB25mdE5hbWUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg8zQ086IGFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIUc3RhdGljX29yYWNsZUFkZHJlc3MFBm9yYWNsZQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfc2hvcnRHYW1lTmFtZQUJc2hvcnRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQICE3N0YXRpY19sb25nR2FtZU5hbWUFCGxvbmduYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQICDnN0YXRpY19uZnROYW1lBQduZnROYW1lBQNuaWwBaQENZGVsZXRlU2V0dGluZwEDa2V5AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsM0RTOiBPbmx5IGFkbWluaXN0cmF0b3IgY2FuIGNhbGwgdGhpcyBtZXRob2QJAMwIAgkBC0RlbGV0ZUVudHJ5AQUDa2V5BQNuaWwBaQEYYnV5QWNjZXNzSXRlbUFuZExvY2tEdWNrAAQKZWdnUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAphZGRyZXNzU3RyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgMJAQIhPQIIBQplZ2dQYXltZW50B2Fzc2V0SWQJARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJAAIBAhozQkFJOiBXcm9uZyBhc3NldCBhdHRhY2hlZAMJAQIhPQIIBQplZ2dQYXltZW50BmFtb3VudAkBEmdldEFjY2Vzc0l0ZW1QcmljZQAJAAIBAiUzQkFJOiBXcm9uZyBhbW91bnQgb2YgYXNzZXRzIGF0dGFjaGVkBA5hY2Nlc3NJdGVtRGF0YQkBCGFzU3RyaW5nAQkA/AcEBQR0aGlzAhVidXlBY2Nlc3NJdGVtSW50ZXJuYWwJAMwIAgUKYWRkcmVzc1N0cgUDbmlsBQNuaWwDCQAAAgUOYWNjZXNzSXRlbURhdGEFDmFjY2Vzc0l0ZW1EYXRhBAhidXJuQ2FsbAkA/AcECQEOZ2V0QnVybkFkZHJlc3MAAhRidXJuQXR0YWNoZWRQYXltZW50cwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0RWdnQXNzZXRJZAAIBQplZ2dQYXltZW50BmFtb3VudAUDbmlsAwkAAAIFCGJ1cm5DYWxsBQhidXJuQ2FsbAQMdmFsaWRQYXltZW50AwkAAAIIBQFpBmNhbGxlcgkBEWdldFJlbnRpbmdBZGRyZXNzAAUDbmlsCQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAgMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAQIbG9ja0RhdGEJAM4IAgkBEGxvY2tEdWNrSW50ZXJuYWwDBQphZGRyZXNzU3RyBQphZGRyZXNzU3RyBQtkdWNrUGF5bWVudAUMdmFsaWRQYXltZW50CQCUCgIFCGxvY2tEYXRhBQ5hY2Nlc3NJdGVtRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1idXlBY2Nlc3NJdGVtAAQKYWRkcmVzc1N0cgkApQgBCAUBaQxvcmlnaW5DYWxsZXIECmVnZ1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQplZ2dQYXltZW50B2Fzc2V0SWQJARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJAAIBCQCsAgICGzNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkIAkA2AQBCQEUZ2V0QWNjZXNzSXRlbUFzc2V0SWQAAwkBAiE9AggFCmVnZ1BheW1lbnQGYW1vdW50CQESZ2V0QWNjZXNzSXRlbVByaWNlAAkAAgECJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEDmFjY2Vzc0l0ZW1EYXRhCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkAzAgCBQphZGRyZXNzU3RyBQNuaWwFA25pbAMJAAACBQ5hY2Nlc3NJdGVtRGF0YQUOYWNjZXNzSXRlbURhdGEECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACFGJ1cm5BdHRhY2hlZFBheW1lbnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRFZ2dBc3NldElkAAgFCmVnZ1BheW1lbnQGYW1vdW50BQNuaWwDCQAAAgUIYnVybkNhbGwFCGJ1cm5DYWxsBAx2YWxpZFBheW1lbnQDCQAAAggFAWkGY2FsbGVyCQERZ2V0UmVudGluZ0FkZHJlc3MABQNuaWwJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwABAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50CQCUCgIFDHZhbGlkUGF5bWVudAUOYWNjZXNzSXRlbURhdGEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESYnV5QWNjZXNzSXRlbU90aGVyAQxhZGRyZXNzT3RoZXIECmVnZ1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQplZ2dQYXltZW50B2Fzc2V0SWQJARRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAJAAIBAhozQkFJOiBXcm9uZyBhc3NldCBhdHRhY2hlZAMJAQIhPQIIBQplZ2dQYXltZW50BmFtb3VudAkBEmdldEFjY2Vzc0l0ZW1QcmljZQAJAAIBAiUzQkFJOiBXcm9uZyBhbW91bnQgb2YgYXNzZXRzIGF0dGFjaGVkBA5hY2Nlc3NJdGVtRGF0YQkBCGFzU3RyaW5nAQkA/AcEBQR0aGlzAhVidXlBY2Nlc3NJdGVtSW50ZXJuYWwJAMwIAgUMYWRkcmVzc090aGVyBQNuaWwFA25pbAMJAAACBQ5hY2Nlc3NJdGVtRGF0YQUOYWNjZXNzSXRlbURhdGEECGJ1cm5DYWxsCQD8BwQJAQ5nZXRCdXJuQWRkcmVzcwACFGJ1cm5BdHRhY2hlZFBheW1lbnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRFZ2dBc3NldElkAAgFCmVnZ1BheW1lbnQGYW1vdW50BQNuaWwDCQAAAgUIYnVybkNhbGwFCGJ1cm5DYWxsCQCUCgIFA25pbAUOYWNjZXNzSXRlbURhdGEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIbG9ja0R1Y2sABAphZGRyZXNzU3RyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAQMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAkAzggCCQEQbG9ja0R1Y2tJbnRlcm5hbAMFCmFkZHJlc3NTdHIFCmFkZHJlc3NTdHIFC2R1Y2tQYXltZW50BQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKaW5pdFVubG9jawEKYXNzZXRJZFN0cgQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAADCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQJAM4IAgkBDmluaXRVbmxvY2tEdWNrAgUKYXNzZXRJZFN0cgUKYWRkcmVzc1N0cgUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD2xvY2tEdWNrUmVudGluZwEUYWRkcmVzc1Rha2VTcG90c0Zyb20DCQECIT0CCAUBaQZjYWxsZXIJARFnZXRSZW50aW5nQWRkcmVzcwAJAAIBAhMzVURPOiBSZW50aW5nIG9ubHkhBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQLZHVja1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAkBEGxvY2tEdWNrSW50ZXJuYWwDBQphZGRyZXNzU3RyBRRhZGRyZXNzVGFrZVNwb3RzRnJvbQULZHVja1BheW1lbnQBaQERdW5sb2NrRHVja1JlbnRpbmcCCmFzc2V0SWRTdHIPYWRkU3BvdHNUb3dhcmRzAwkBAiE9AggFAWkGY2FsbGVyCQERZ2V0UmVudGluZ0FkZHJlc3MACQACAQITM1VETzogUmVudGluZyBvbmx5IQQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIJAQt1bnN0YWtlRHVjawMFCmFzc2V0SWRTdHIFCmFkZHJlc3NTdHIFD2FkZFNwb3RzVG93YXJkcwFpAQ91bmxvY2tEdWNrT3RoZXIBCmFzc2V0SWRTdHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhEzVURPOiBBZG1pbiBvbmx5IQQIb3duZXJLZXkJAQx0cnlHZXRTdHJpbmcBCQEMa2V5RHVja093bmVyAQkA2QQBBQphc3NldElkU3RyCQELdW5zdGFrZUR1Y2sDBQphc3NldElkU3RyBQhvd25lcktleQUIb3duZXJLZXkBaQEKdW5sb2NrRHVjawQKYXNzZXRJZFN0cgJ0cwdhbGxvd2VkCXNpZ25hdHVyZQMJAQIhPQIFB2FsbG93ZWQGCQACAQIkM1VEOiBOb3QgYWxsb3dlZCB0byB1bmxvY2sgdGhlIGR1Y2shBAhNU0lOSE9VUgCA3dsBBAljdXJyZW50VHMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFCWN1cnJlbnRUcwkAZAIFAnRzBQhNU0lOSE9VUgkAAgECGDNVRDogT3V0ZGF0ZWQgc2lnbmF0dXJlIQQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEBHRleHQJALkJAgkAzAgCBQphc3NldElkU3RyCQDMCAIJAKQDAQUCdHMJAMwIAgkApQMBBQdhbGxvd2VkBQNuaWwCATsDCQEBIQEJAMQTAwkAmwMBBQR0ZXh0CQDZBAEFCXNpZ25hdHVyZQkBEGdldEJhY2tlbmRQdWJLZXkACQACAQkArAICCQCsAgIJAKwCAgIjM1VEOiBJbnZhbGlkIHByb29mIGZyb20gYmFja2VuZCBrZXkJANgEAQkBEGdldEJhY2tlbmRQdWJLZXkAAgEgBQR0ZXh0BAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwAAAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50CQDOCAIJAQt1bnN0YWtlRHVjawMFCmFzc2V0SWRTdHIFCmFkZHJlc3NTdHIFCmFkZHJlc3NTdHIFDHZhbGlkUGF5bWVudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgA+YhOg", "height": 3317487, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9HAdjnLjLRdii8Lz2x5H85AKQ6gy4f77arbQUD1bGsnt Next: BXNSD2u5gTGH32H9ZJUbonkB5uCTbTcNzegydkZmCNdt Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetInteger (key) = match getInteger(this, key) {
55 case b: Int =>
66 b
77 case _ =>
88 0
99 }
1010
1111
1212 func keyDuckPlayUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "_unlockTime")
1313
1414
1515 func keyDuckFinishUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "finish_unlockTime")
1616
1717
1818 func keyDuckOwner (assetId) = (("duck_" + toBase58String(assetId)) + "_owner")
1919
2020
2121 func keySpotsBought (addressStr) = (("address_" + addressStr) + "_spotsBought")
2222
2323
2424 func keySpotsBusy (addressStr) = (("address_" + addressStr) + "_spotsBusy")
2525
2626
2727 func keyLockedDuckStatus (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_status")
2828
2929
3030 func keyDuckV2 (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_v2")
3131
3232
3333 func getDuckDetails (assetId) = {
3434 let assetName = value(value(assetInfo(assetId)).name)
3535 let assetNameParts = split(assetName, "")
3636 let isJackpot = (assetNameParts[(size(assetNameParts) - 2)] == "J")
3737 let assetColor = if (isJackpot)
3838 then "B"
3939 else assetNameParts[(size(assetNameParts) - 1)]
4040 $Tuple2(assetColor, isJackpot)
4141 }
4242
4343
4444 func tryGetStringExternal (address,key) = match getString(address, key) {
4545 case a: String =>
4646 a
4747 case _ =>
4848 ""
4949 }
5050
5151
5252 func tryGetBoolean (key) = match getBoolean(key) {
5353 case b: Boolean =>
5454 b
5555 case _ =>
5656 false
5757 }
5858
5959
6060 func tryGetString (key) = tryGetStringExternal(this, key)
6161
6262
6363 func staticKey_oracleAddress () = "static_oracleAddress"
6464
6565
6666 func staticKey_eggAssetId () = "static_eggAssetId"
6767
6868
6969 func staticKey_incubatorAddress () = "static_incubatorAddress"
7070
7171
7272 func staticKey_breederAddress () = "static_breederAddress"
7373
7474
7575 func staticKey_farmingAddress () = "static_farmingAddress"
7676
7777
7878 func staticKey_rentingAddress () = "static_rentingAddress"
7979
8080
8181 func staticKey_shortGameName () = "static_shortGameName"
8282
8383
8484 func staticKey_longGameName () = "static_longGameName"
8585
8686
8787 func staticKey_nftName () = "static_nftName"
8888
8989
9090 func staticKey_backendPubKey () = "static_backendPubKey"
9191
9292
9393 func staticKey_accessItemAssetId () = "static_accessItemAssetId"
9494
9595
9696 func staticKey_accessItemPrice () = "static_accessItemPrice"
9797
9898
9999 func staticKey_minLockDuration () = "static_minLockDuration"
100100
101101
102102 func staticKey_UnlockDuration () = "static_UnlockDuration"
103103
104104
105105 func staticKey_boosterBuyAssetId () = "static_boosterBuyAssetId"
106106
107107
108108 func staticKey_extraFee () = "static_extraFee"
109109
110110
111111 func staticKey_feeAggregator () = "static_feeAggregator"
112112
113113
114114 func staticKey_boosterPriceLevel (level) = ("static_boosterPriceLevel_" + level)
115115
116116
117117 func staticKey_boosterName (level) = ("static_boosterName_" + level)
118118
119119
120120 func staticKey_burnAddress () = "static_burnAddress"
121121
122122
123123 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
124124
125125
126126 func getGameName () = valueOrErrorMessage(getString(staticKey_shortGameName()), "3GGN: There is no game name defined!")
127127
128128
129129 func getLongGameName () = valueOrErrorMessage(getString(staticKey_longGameName()), "3GLGN: There is no long game name defined!")
130130
131131
132132 func getNFTName () = valueOrErrorMessage(getString(staticKey_nftName()), "3GNN: There is no nft name defined!")
133133
134134
135135 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
136136
137137
138138 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
139139
140140
141141 func getRentingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rentingAddress())))
142142
143143
144144 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_farmingAddress())))
145145
146146
147147 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
148148
149149
150150 func getBackendPubKey () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_backendPubKey()))
151151
152152
153153 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
154154
155155
156156 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
157157
158158
159159 func getAccessItemAssetId () = fromBase58String(tryGetString(staticKey_accessItemAssetId()))
160160
161161
162162 func getAccessItemPrice () = tryGetInteger(staticKey_accessItemPrice())
163163
164164
165165 func getMinLockDuration () = tryGetInteger(staticKey_minLockDuration())
166166
167167
168168 func getUnlockDuration () = tryGetInteger(staticKey_UnlockDuration())
169169
170170
171171 func getBosterBuyAssetId () = fromBase58String(tryGetString(staticKey_boosterBuyAssetId()))
172172
173173
174174 func getBosterPriceForLevel (level) = valueOrErrorMessage(getInteger(staticKey_boosterPriceLevel(toString(level))), "3GBPFL: There is no price value for this level of booster")
175175
176176
177177 func getBosterNameForLevel (level) = valueOrErrorMessage(getString(staticKey_boosterName(toString(level))), "3GBNFL: There is no such booster")
178178
179179
180180 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
181181 then throw("RCAP: Please attach waves")
182182 else {
183183 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
184184 if ((payment.amount != feeAmount))
185185 then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
186186 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
187187 }
188188
189189
190190 func asString (value) = match value {
191191 case string: String =>
192192 string
193193 case _ =>
194194 throw("3AS: wrong type, expected: String")
195195 }
196196
197197
198198 func lockDuckInternal (addressStr,takeSpotsFrom,pmt) = {
199199 let assetId = value(pmt.assetId)
200200 let assetIssuer = value(assetInfo(assetId)).issuer
201201 let tDuckDetails = getDuckDetails(assetId)
202202 let assetColor = tDuckDetails._1
203203 let isJackpot = tDuckDetails._2
204204 let kSpotsBusy = keySpotsBusy(takeSpotsFrom)
205205 let spotsBusy = tryGetInteger(kSpotsBusy)
206206 let kSpotsBought = keySpotsBought(takeSpotsFrom)
207207 let addressSpotsAvailable = (tryGetInteger(kSpotsBought) - spotsBusy)
208208 if ((pmt.amount != 1))
209209 then throw("NFT is not attached")
210210 else if (if ((assetIssuer != getIncubatorAddress()))
211211 then (assetIssuer != getBreederAddress())
212212 else false)
213213 then throw("ivalid NFT attached")
214214 else if ((0 >= addressSpotsAvailable))
215215 then throw(("No spots available in hunt for: " + takeSpotsFrom))
216216 else {
217217 let kPerchesAvailable = ((("address_" + toString(this)) + "_perchesAvailable_") + assetColor)
218218 let perchesAvailable = match getInteger(getFarmingAddress(), kPerchesAvailable) {
219219 case b: Int =>
220220 b
221221 case _ =>
222222 0
223223 }
224224 if ((perchesAvailable == perchesAvailable))
225225 then {
226226 let eggAssetId = getEggAssetId()
227227 [IntegerEntry(kSpotsBusy, (spotsBusy + 1)), StringEntry(keyDuckOwner(assetId), addressStr), BooleanEntry(keyLockedDuckStatus(addressStr, toBase58String(assetId)), true), IntegerEntry(keyDuckPlayUnlockTime(assetId), (lastBlock.timestamp + getMinLockDuration())), BooleanEntry(keyDuckV2(addressStr, toBase58String(assetId)), true)]
228228 }
229229 else throw("Strict value is not equal to itself.")
230230 }
231231 }
232232
233233
234234 func initUnlockDuck (assetIdStr,addressStr) = {
235235 let assetId = fromBase58String(assetIdStr)
236236 let tDuckDetails = getDuckDetails(assetId)
237237 let assetColor = tDuckDetails._1
238238 let isJackpot = tDuckDetails._2
239239 let kSpotsBusy = keySpotsBusy(addressStr)
240240 let kDuckOwner = keyDuckOwner(assetId)
241241 let remainingForUnlock = (tryGetInteger(keyDuckPlayUnlockTime(assetId)) - lastBlock.timestamp)
242242 if ((tryGetString(kDuckOwner) != addressStr))
243243 then throw("3IULD: The duck is not yours")
244244 else if ((remainingForUnlock > 0))
245245 then throw((("3IUL: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
246246 else [IntegerEntry(keyDuckFinishUnlockTime(assetId), (lastBlock.timestamp + getUnlockDuration()))]
247247 }
248248
249249
250250 func unstakeDuck (assetIdStr,addressStr,addSpotsTowards) = {
251251 let assetId = fromBase58String(assetIdStr)
252252 let tDuckDetails = getDuckDetails(assetId)
253253 let assetColor = tDuckDetails._1
254254 let isJackpot = tDuckDetails._2
255255 let kSpotsBusy = keySpotsBusy(addSpotsTowards)
256256 let kDuckOwner = keyDuckOwner(assetId)
257257 let remainingForUnlock = (tryGetInteger(keyDuckFinishUnlockTime(assetId)) - lastBlock.timestamp)
258258 if ((tryGetString(kDuckOwner) != addressStr))
259259 then throw("3UD: The duck is not yours")
260260 else if ((remainingForUnlock > 0))
261261 then throw((("3UD: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
262262 else [ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
263263 }
264264
265265
266266 @Callable(i)
267267 func buyAccessItemInternal (addressStr) = if ((i.caller != this))
268268 then throw("3BAII: internal use only")
269269 else {
270270 let issueAccessItem = Issue(("ACCESS-" + getGameName()), ((("[Access] " + getLongGameName()) + " access NFT for ") + getNFTName()), 1, 0, false)
271271 let accessRaceAssetId = toBase58String(calculateAssetId(issueAccessItem))
272272 let kSpotsBought = keySpotsBought(addressStr)
273273 $Tuple2([issueAccessItem, StringEntry((("accessItem_" + accessRaceAssetId) + "_owner"), addressStr), StringEntry((("address_" + addressStr) + "_owning"), accessRaceAssetId), IntegerEntry(kSpotsBought, (tryGetInteger(kSpotsBought) + 1))], accessRaceAssetId)
274274 }
275275
276276
277277
278278 @Callable(i)
279279 func configureOracle (oracle,shortname,longname,nftName) = if ((i.caller != this))
280280 then throw("3CO: admin only")
281281 else [StringEntry("static_oracleAddress", oracle), StringEntry("static_shortGameName", shortname), StringEntry("static_longGameName", longname), StringEntry("static_nftName", nftName)]
282282
283283
284284
285285 @Callable(i)
286286 func deleteSetting (key) = if ((i.caller != this))
287287 then throw("3DS: Only administrator can call this method")
288288 else [DeleteEntry(key)]
289289
290290
291291
292292 @Callable(i)
293293 func buyAccessItemAndLockDuck () = {
294294 let eggPayment = value(i.payments[0])
295295 let duckPayment = value(i.payments[1])
296296 let addressStr = toString(i.originCaller)
297297 if ((eggPayment.assetId != getAccessItemAssetId()))
298298 then throw("3BAI: Wrong asset attached")
299299 else if ((eggPayment.amount != getAccessItemPrice()))
300300 then throw("3BAI: Wrong amount of assets attached")
301301 else {
302302 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
303303 if ((accessItemData == accessItemData))
304304 then {
305305 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), eggPayment.amount)])
306306 if ((burnCall == burnCall))
307307 then {
308308 let validPayment = if ((i.caller == getRentingAddress()))
309309 then nil
310310 else checkAdditionalPayment(i.payments[2])
311311 if ((validPayment == validPayment))
312312 then {
313313 let lockData = (lockDuckInternal(addressStr, addressStr, duckPayment) ++ validPayment)
314314 $Tuple2(lockData, accessItemData)
315315 }
316316 else throw("Strict value is not equal to itself.")
317317 }
318318 else throw("Strict value is not equal to itself.")
319319 }
320320 else throw("Strict value is not equal to itself.")
321321 }
322322 }
323323
324324
325325
326326 @Callable(i)
327327 func buyAccessItem () = {
328328 let addressStr = toString(i.originCaller)
329329 let eggPayment = value(i.payments[0])
330330 if ((eggPayment.assetId != getAccessItemAssetId()))
331331 then throw(("3BAI: Wrong asset attached " + toBase58String(getAccessItemAssetId())))
332332 else if ((eggPayment.amount != getAccessItemPrice()))
333333 then throw("3BAI: Wrong amount of assets attached")
334334 else {
335335 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
336336 if ((accessItemData == accessItemData))
337337 then {
338338 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), eggPayment.amount)])
339339 if ((burnCall == burnCall))
340340 then {
341341 let validPayment = if ((i.caller == getRentingAddress()))
342342 then nil
343343 else checkAdditionalPayment(i.payments[1])
344344 if ((validPayment == validPayment))
345345 then $Tuple2(validPayment, accessItemData)
346346 else throw("Strict value is not equal to itself.")
347347 }
348348 else throw("Strict value is not equal to itself.")
349349 }
350350 else throw("Strict value is not equal to itself.")
351351 }
352352 }
353353
354354
355355
356356 @Callable(i)
357357 func buyAccessItemOther (addressOther) = {
358358 let eggPayment = value(i.payments[0])
359359 if ((eggPayment.assetId != getAccessItemAssetId()))
360360 then throw("3BAI: Wrong asset attached")
361361 else if ((eggPayment.amount != getAccessItemPrice()))
362362 then throw("3BAI: Wrong amount of assets attached")
363363 else {
364364 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressOther], nil))
365365 if ((accessItemData == accessItemData))
366366 then {
367367 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), eggPayment.amount)])
368368 if ((burnCall == burnCall))
369369 then $Tuple2(nil, accessItemData)
370370 else throw("Strict value is not equal to itself.")
371371 }
372372 else throw("Strict value is not equal to itself.")
373373 }
374374 }
375375
376376
377377
378378 @Callable(i)
379379 func lockDuck () = {
380380 let addressStr = toString(i.originCaller)
381381 let duckPayment = value(i.payments[0])
382382 let validPayment = checkAdditionalPayment(i.payments[1])
383383 if ((validPayment == validPayment))
384384 then (lockDuckInternal(addressStr, addressStr, duckPayment) ++ validPayment)
385385 else throw("Strict value is not equal to itself.")
386386 }
387387
388388
389389
390390 @Callable(i)
391391 func initUnlock (assetIdStr) = {
392392 let addressStr = toString(i.caller)
393393 let validPayment = checkAdditionalPayment(i.payments[0])
394394 if ((validPayment == validPayment))
395395 then (initUnlockDuck(assetIdStr, addressStr) ++ validPayment)
396396 else throw("Strict value is not equal to itself.")
397397 }
398398
399399
400400
401401 @Callable(i)
402402 func lockDuckRenting (addressTakeSpotsFrom) = if ((i.caller != getRentingAddress()))
403403 then throw("3UDO: Renting only!")
404404 else {
405405 let addressStr = toString(i.caller)
406406 let duckPayment = value(i.payments[0])
407407 lockDuckInternal(addressStr, addressTakeSpotsFrom, duckPayment)
408408 }
409409
410410
411411
412412 @Callable(i)
413413 func unlockDuckRenting (assetIdStr,addSpotsTowards) = if ((i.caller != getRentingAddress()))
414414 then throw("3UDO: Renting only!")
415415 else {
416416 let addressStr = toString(i.caller)
417417 unstakeDuck(assetIdStr, addressStr, addSpotsTowards)
418418 }
419419
420420
421421
422422 @Callable(i)
423423 func unlockDuckOther (assetIdStr) = if ((i.caller != this))
424424 then throw("3UDO: Admin only!")
425425 else {
426426 let ownerKey = tryGetString(keyDuckOwner(fromBase58String(assetIdStr)))
427427 unstakeDuck(assetIdStr, ownerKey, ownerKey)
428428 }
429429
430430
431431
432432 @Callable(i)
433433 func unlockDuck (assetIdStr,ts,allowed,signature) = if ((allowed != true))
434434 then throw("3UD: Not allowed to unlock the duck!")
435435 else {
436436 let MSINHOUR = 3600000
437437 let currentTs = lastBlock.timestamp
438438 if ((currentTs > (ts + MSINHOUR)))
439439 then throw("3UD: Outdated signature!")
440440 else {
441441 let addressStr = toString(i.caller)
442442 let text = makeString([assetIdStr, toString(ts), toString(allowed)], ";")
443443 if (!(sigVerify_8Kb(toBytes(text), fromBase58String(signature), getBackendPubKey())))
444444 then throw(((("3UD: Invalid proof from backend key" + toBase58String(getBackendPubKey())) + " ") + text))
445445 else {
446446 let validPayment = checkAdditionalPayment(i.payments[0])
447447 if ((validPayment == validPayment))
448448 then (unstakeDuck(assetIdStr, addressStr, addressStr) ++ validPayment)
449449 else throw("Strict value is not equal to itself.")
450450 }
451451 }
452452 }
453453
454454

github/deemru/w8io/169f3d6 
53.13 ms