tx · B2umuL6R3o3P24oFkfk9P64UUowGvHBWondqRWzk27AS

3P96rN9M2g7E8WtgLC6XQgoJ2rz341tpkbG:  -0.01800000 Waves

2023.09.26 20:57 [3838514] smart account 3P96rN9M2g7E8WtgLC6XQgoJ2rz341tpkbG > SELF 0.00000000 Waves

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

github/deemru/w8io/3ef1775 
47.93 ms