tx · 8G2canSJ1tpAAsnjZs7JfF7j6BSFRdeigFUuoVNe2FBU

3PAChhfAJB6CM3PgN1Gguz7HWGaGQeCZNuT:  -0.01700000 Waves

2023.01.19 14:36 [3477268] smart account 3PAChhfAJB6CM3PgN1Gguz7HWGaGQeCZNuT > SELF 0.00000000 Waves

{ "type": 13, "id": "8G2canSJ1tpAAsnjZs7JfF7j6BSFRdeigFUuoVNe2FBU", "fee": 1700000, "feeAssetId": null, "timestamp": 1674128242925, "version": 2, "chainId": 87, "sender": "3PAChhfAJB6CM3PgN1Gguz7HWGaGQeCZNuT", "senderPublicKey": "EY8iGCRDbPaCGeaXESYXRcMqQdgfWvZgndMJXgw1icdy", "proofs": [ "dETjjEyhQDbcNAWx1gnJm4GaRNQFkFoZmMgLj6dpKa53Xr6HashMihEaTri7CcVuJY428YUhfb8ELQCCUz9tEXA" ], "script": "base64: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CQAEIgAAAAECAAAAFHN0YXRpY19zaG9ydEdhbWVOYW1lAgAAACQzR0dOOiBUaGVyZSBpcyBubyBnYW1lIG5hbWUgZGVmaW5lZCEBAAAAD2dldExvbmdHYW1lTmFtZQAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABAgAAABNzdGF0aWNfbG9uZ0dhbWVOYW1lAgAAACozR0xHTjogVGhlcmUgaXMgbm8gbG9uZyBnYW1lIG5hbWUgZGVmaW5lZCEBAAAACmdldE5GVE5hbWUAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQIAAAAOc3RhdGljX25mdE5hbWUCAAAAIzNHTk46IFRoZXJlIGlzIG5vIG5mdCBuYW1lIGRlZmluZWQhAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19mYXJtaW5nQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAGHN0YXRpY19hY2Nlc3NJdGVtQXNzZXRJZAEAAAASZ2V0QWNjZXNzSXRlbVByaWNlAAAAAAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABZzdGF0aWNfYWNjZXNzSXRlbVByaWNlAQAAABJnZXRNaW5Mb2NrRHVyYXRpb24AAAAACQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAFnN0YXRpY19taW5Mb2NrRHVyYXRpb24BAAAAFWdldERlZmF1bHRWZWhpY2xlVHlwZQAAAAAJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABlzdGF0aWNfZGVmYXVsdFZlaGljbGVUeXBlAQAAABNnZXRCb3N0ZXJCdXlBc3NldElkAAAAAAkAAlkAAAABCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQIAAAAYc3RhdGljX2Jvb3N0ZXJCdXlBc3NldElkAQAAABZnZXRCb3N0ZXJQcmljZUZvckxldmVsAAAAAQAAAAVsZXZlbAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgIAAAAZc3RhdGljX2Jvb3N0ZXJQcmljZUxldmVsXwkAAaQAAAABBQAAAAVsZXZlbAIAAAA5M0dCUEZMOiBUaGVyZSBpcyBubyBwcmljZSB2YWx1ZSBmb3IgdGhpcyBsZXZlbCBvZiBib29zdGVyAQAAABVnZXRCb3N0ZXJOYW1lRm9yTGV2ZWwAAAABAAAABWxldmVsCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACAgAAABNzdGF0aWNfYm9vc3Rlck5hbWVfCQABpAAAAAEFAAAABWxldmVsAgAAACAzR0JORkw6IFRoZXJlIGlzIG5vIHN1Y2ggYm9vc3RlcgEAAAAIYXNTdHJpbmcAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZzdHJpbmcFAAAAByRtYXRjaDAFAAAABnN0cmluZwkAAAIAAAABAgAAACEzQVM6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAAFmdldERlZmF1bHRWZWhpY2xlQXNzZXQAAAAACQEAAAAFQXNzZXQAAAAKAQAAAAEAAAAAAAAAAAABAAAAAAAAAAAABQAAAAR0aGlzAQAAAAEABwcFAAAABHVuaXQJAQAAABVnZXREZWZhdWx0VmVoaWNsZVR5cGUAAAAACQABLAAAAAICAAAACltWZWhpY2xlXSAJAQAAABVnZXREZWZhdWx0VmVoaWNsZVR5cGUAAAAAAQAAABBsb2NrRHVja0ludGVybmFsAAAAAgAAAAphZGRyZXNzU3RyAAAAA3BtdAQAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAthc3NldElzc3VlcggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIEAAAADHREdWNrRGV0YWlscwkBAAAADmdldER1Y2tEZXRhaWxzAAAAAQUAAAAHYXNzZXRJZAQAAAAKYXNzZXRDb2xvcggFAAAADHREdWNrRGV0YWlscwAAAAJfMQQAAAAJaXNKYWNrcG90CAUAAAAMdER1Y2tEZXRhaWxzAAAAAl8yBAAAAAprU3BvdHNCdXN5CQEAAAAMa2V5U3BvdHNCdXN5AAAAAQUAAAAKYWRkcmVzc1N0cgQAAAAJc3BvdHNCdXN5CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAACmtTcG90c0J1c3kEAAAADGtTcG90c0JvdWdodAkBAAAADmtleVNwb3RzQm91Z2h0AAAAAQUAAAAKYWRkcmVzc1N0cgQAAAAVYWRkcmVzc1Nwb3RzQXZhaWxhYmxlCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAMa1Nwb3RzQm91Z2h0BQAAAAlzcG90c0J1c3kDCQEAAAACIT0AAAACCAUAAAADcG10AAAABmFtb3VudAAAAAAAAAAAAQkAAAIAAAABAgAAABNORlQgaXMgbm90IGF0dGFjaGVkAwMJAQAAAAIhPQAAAAIFAAAAC2Fzc2V0SXNzdWVyCQEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAAAIhPQAAAAIFAAAAC2Fzc2V0SXNzdWVyCQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAABwkAAAIAAAABAgAAABNpdmFsaWQgTkZUIGF0dGFjaGVkAwkAAGcAAAACAAAAAAAAAAAABQAAABVhZGRyZXNzU3BvdHNBdmFpbGFibGUJAAACAAAAAQIAAAASTm8gc3BvdHMgYXZhaWxhYmxlBAAAABFrUGVyY2hlc0F2YWlsYWJsZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18JAAQlAAAAAQUAAAAEdGhpcwIAAAASX3BlcmNoZXNBdmFpbGFibGVfBQAAAAphc3NldENvbG9yBAAAABBwZXJjaGVzQXZhaWxhYmxlBAAAAAckbWF0Y2gwCQAEGgAAAAIJAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAAFAAAAEWtQZXJjaGVzQXZhaWxhYmxlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAADCQAAAAAAAAIFAAAAEHBlcmNoZXNBdmFpbGFibGUFAAAAEHBlcmNoZXNBdmFpbGFibGUEAAAACmVnZ0Fzc2V0SWQJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAQAAAAEaW52MQMJAABmAAAAAgUAAAAQcGVyY2hlc0F2YWlsYWJsZQAAAAAAAAAAAAUAAAAEdW5pdAkAA/wAAAAECQEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAAAgAAAAhidXlQZXJjaAkABEwAAAACBQAAAAphc3NldENvbG9yCQAETAAAAAICAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAplZ2dBc3NldElkAAAAAAAF9eEABQAAAANuaWwDCQAAAAAAAAIFAAAABGludjEFAAAABGludjEEAAAABGludjIDCQAAAAAAAAIFAAAACWlzSmFja3BvdAcJAAP8AAAABAkBAAAAEWdldEZhcm1pbmdBZGRyZXNzAAAAAAIAAAAIc3Rha2VORlQFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAHYXNzZXRJZAAAAAAAAAAAAQUAAAADbmlsCQAD/AAAAAQJAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAACAAAADHN0YWtlSmFja3BvdAkABEwAAAACBQAAAAphc3NldENvbG9yBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAB2Fzc2V0SWQAAAAAAAAAAAEFAAAAA25pbAMJAAAAAAAAAgUAAAAEaW52MgUAAAAEaW52MgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa1Nwb3RzQnVzeQkAAGQAAAACBQAAAAlzcG90c0J1c3kAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleUR1Y2tPd25lcgAAAAEFAAAAB2Fzc2V0SWQFAAAACmFkZHJlc3NTdHIJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABNrZXlMb2NrZWREdWNrU3RhdHVzAAAAAgUAAAAKYWRkcmVzc1N0cgkAAlgAAAABBQAAAAdhc3NldElkBgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWtleUR1Y2tVbmxvY2tUaW1lAAAAAQUAAAAHYXNzZXRJZAkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkBAAAAEmdldE1pbkxvY2tEdXJhdGlvbgAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAALdW5zdGFrZUR1Y2sAAAACAAAACmFzc2V0SWRTdHIAAAAKYWRkcmVzc1N0cgQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphc3NldElkU3RyBAAAAAx0RHVja0RldGFpbHMJAQAAAA5nZXREdWNrRGV0YWlscwAAAAEFAAAAB2Fzc2V0SWQEAAAACmFzc2V0Q29sb3IIBQAAAAx0RHVja0RldGFpbHMAAAACXzEEAAAACWlzSmFja3BvdAgFAAAADHREdWNrRGV0YWlscwAAAAJfMgQAAAAKa1Nwb3RzQnVzeQkBAAAADGtleVNwb3RzQnVzeQAAAAEFAAAACmFkZHJlc3NTdHIEAAAACmtEdWNrT3duZXIJAQAAAAxrZXlEdWNrT3duZXIAAAABBQAAAAdhc3NldElkBAAAABJyZW1haW5pbmdGb3JVbmxvY2sJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARa2V5RHVja1VubG9ja1RpbWUAAAABBQAAAAdhc3NldElkCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAMJAQAAAAIhPQAAAAIJAQAAAAx0cnlHZXRTdHJpbmcAAAABBQAAAAprRHVja093bmVyBQAAAAphZGRyZXNzU3RyCQAAAgAAAAECAAAAGjNVTDogVGhlIGR1Y2sgaXMgbm90IHlvdXJzAwkAAGYAAAACBQAAABJyZW1haW5pbmdGb3JVbmxvY2sAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIDNVTDogWW91IG5lZWQgdG8gd2FpdCB0byB1bmxvY2sgCQABpAAAAAEJAABpAAAAAgUAAAAScmVtYWluaW5nRm9yVW5sb2NrAAAAAAAAAAPoAgAAAAggc2Vjb25kcwQAAAAPdW5zdGFrZUZ1bmNOYW1lAwkAAAAAAAACBQAAAAlpc0phY2twb3QGAgAAAA51bnN0YWtlSmFja3BvdAIAAAAKdW5zdGFrZU5GVAQAAAAEaW52MQkAA/wAAAAECQEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAABQAAAA91bnN0YWtlRnVuY05hbWUJAARMAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAABGludjEFAAAABGludjEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAACmFkZHJlc3NTdHIAAAAAAAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAE2tleUxvY2tlZER1Y2tTdGF0dXMAAAACBQAAAAphZGRyZXNzU3RyBQAAAAphc3NldElkU3RyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAACmtEdWNrT3duZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACmtTcG90c0J1c3kJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAAprU3BvdHNCdXN5AAAAAAAAAAABBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAA5nZXRWZWhpY2xlTmFtZQAAAAEAAAAEdHlwZQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAICAAAAD3N0YXRpY192ZWhpY2xlXwUAAAAEdHlwZQIAAAAFX25hbWUBAAAAD2dldFZlaGljbGVQcmljZQAAAAEAAAAEdHlwZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAPc3RhdGljX3ZlaGljbGVfBQAAAAR0eXBlAgAAAAZfcHJpY2UBAAAAE21pbnRWZWhpY2xlSW50ZXJuYWwAAAADAAAABHR5cGUAAAAJcmVjaXBpZW50AAAADWJvb3N0ZXJzTGV2ZWwEAAAAC3ZlaGljbGVJdGVtCQAEQgAAAAUFAAAABHR5cGUJAAEsAAAAAgkAASwAAAACAgAAAApbVmVoaWNsZV0gBQAAAAR0eXBlAgAAADQgdmVoaWNsZSBmb3IgdGhlIE1ldGFyYWNlIGdhbWUuIGh0dHBzOi8vbWV0YXJhY2UuY29tAAAAAAAAAAABAAAAAAAAAAAABwQAAAASdmVoaWNsZUl0ZW1Bc3NldElkCQAEOAAAAAEFAAAAC3ZlaGljbGVJdGVtCQAETAAAAAIFAAAAC3ZlaGljbGVJdGVtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXa2V5VmVoaWNsZUJvb3N0ZXJzTGV2ZWwAAAABCQACWAAAAAEFAAAAEnZlaGljbGVJdGVtQXNzZXRJZAUAAAANYm9vc3RlcnNMZXZlbAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAlyZWNpcGllbnQAAAAAAAAAAAEFAAAAEnZlaGljbGVJdGVtQXNzZXRJZAUAAAADbmlsAAAADgAAAAFpAQAAABVidXlBY2Nlc3NJdGVtSW50ZXJuYWwAAAABAAAACmFkZHJlc3NTdHIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAYM0JBSUk6IGludGVybmFsIHVzZSBvbmx5BAAAAA9pc3N1ZUFjY2Vzc0l0ZW0JAARCAAAABQkAASwAAAACAgAAAAdBQ0NFU1MtCQEAAAALZ2V0R2FtZU5hbWUAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAlbQWNjZXNzXSAJAQAAAA9nZXRMb25nR2FtZU5hbWUAAAAAAgAAABAgYWNjZXNzIE5GVCBmb3IgCQEAAAAKZ2V0TkZUTmFtZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAHBAAAABFhY2Nlc3NSYWNlQXNzZXRJZAkAAlgAAAABCQAEOAAAAAEFAAAAD2lzc3VlQWNjZXNzSXRlbQQAAAAMa1Nwb3RzQm91Z2h0CQEAAAAOa2V5U3BvdHNCb3VnaHQAAAABBQAAAAphZGRyZXNzU3RyCQAFFAAAAAIJAARMAAAAAgUAAAAPaXNzdWVBY2Nlc3NJdGVtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAthY2Nlc3NJdGVtXwUAAAARYWNjZXNzUmFjZUFzc2V0SWQCAAAABl9vd25lcgUAAAAKYWRkcmVzc1N0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAACmFkZHJlc3NTdHICAAAAB19vd25pbmcFAAAAEWFjY2Vzc1JhY2VBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrU3BvdHNCb3VnaHQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAAxrU3BvdHNCb3VnaHQAAAAAAAAAAAEFAAAAA25pbAUAAAARYWNjZXNzUmFjZUFzc2V0SWQAAAABaQEAAAAPY29uZmlndXJlT3JhY2xlAAAABAAAAAZvcmFjbGUAAAAJc2hvcnRuYW1lAAAACGxvbmduYW1lAAAAB25mdE5hbWUDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAPM0NPOiBhZG1pbiBvbmx5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzBQAAAAZvcmFjbGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAUc3RhdGljX3Nob3J0R2FtZU5hbWUFAAAACXNob3J0bmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABNzdGF0aWNfbG9uZ0dhbWVOYW1lBQAAAAhsb25nbmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5zdGF0aWNfbmZ0TmFtZQUAAAAHbmZ0TmFtZQUAAAADbmlsAAAAAWkBAAAADXVwZGF0ZVNldHRpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAACdPbmx5IGFkbWluaXN0cmF0b3IgY2FuIGNhbGwgdGhpcyBtZXRob2QEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAADa2V5BQAAAANpbnQFAAAAA25pbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQUAAAABcwUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAANrZXkFAAAAAWIFAAAAA25pbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACYnYFAAAAByRtYXRjaDAJAARMAAAAAgkBAAAAC0JpbmFyeUVudHJ5AAAAAgUAAAADa2V5BQAAAAJidgUAAAADbmlsCQAAAgAAAAECAAAADkJhZCB2YWx1ZSB0eXBlAAAAAWkBAAAADWRlbGV0ZVNldHRpbmcAAAABAAAAA2tleQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAACwzRFM6IE9ubHkgYWRtaW5pc3RyYXRvciBjYW4gY2FsbCB0aGlzIG1ldGhvZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAANrZXkFAAAAA25pbAAAAAFpAQAAAApidXlWZWhpY2xlAAAAAQAAAAh0eXBlTmFtZQQAAAAFcHJpY2UJAQAAAA9nZXRWZWhpY2xlUHJpY2UAAAABBQAAAAh0eXBlTmFtZQQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA9leHBlY3RlZEFzc2V0SWQJAQAAABNnZXRCb3N0ZXJCdXlBc3NldElkAAAAAAMJAAAAAAAAAgUAAAAFcHJpY2UAAAAAAAAAAAAJAAACAAAAAQIAAAAdVGhlcmUgaXMgbm8gc3VjaCB2ZWhpY2xlIHR5cGUDCQEAAAACIT0AAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAFcHJpY2UJAAACAAAAAQkAASwAAAACAgAAAB4zQkI6IEJhZCBwcmljZSwgaXQgc2hvdWxkIGJlOiAJAAGkAAAAAQUAAAAFcHJpY2UDCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAD2V4cGVjdGVkQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAQzNCQjogQmFkIHBheW1lbnQgYXR0YWNoZWQsIGl0IHNob3VsZCBiZSAkUkFDRSB0b2tlbiB3aXRoIGFzc2V0IGlkOiAJAAJYAAAAAQUAAAAPZXhwZWN0ZWRBc3NldElkCQEAAAATbWludFZlaGljbGVJbnRlcm5hbAAAAAMFAAAACHR5cGVOYW1lCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAAAAAABaQEAAAAKYnV5Qm9vc3RlcgAAAAEAAAAHYXNzZXRJZAQAAAAMa0JvdWdodExldmVsCQEAAAAXa2V5VmVoaWNsZUJvb3N0ZXJzTGV2ZWwAAAABBQAAAAdhc3NldElkBAAAABJib3VnaHRCb29zdGVyTGV2ZWwJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAMa0JvdWdodExldmVsBAAAAAhuZXdMZXZlbAkAAGQAAAACBQAAABJib3VnaHRCb29zdGVyTGV2ZWwAAAAAAAAAAAEEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAFcHJpY2UJAQAAABZnZXRCb3N0ZXJQcmljZUZvckxldmVsAAAAAQUAAAAIbmV3TGV2ZWwEAAAAD2V4cGVjdGVkQXNzZXRJZAkBAAAAE2dldEJvc3RlckJ1eUFzc2V0SWQAAAAABAAAAA52ZWhpY2xlRGV0YWlscwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkAA+wAAAABCQACWQAAAAEFAAAAB2Fzc2V0SWQJAQAAABZnZXREZWZhdWx0VmVoaWNsZUFzc2V0AAAAAAMJAQAAAAIhPQAAAAIIBQAAAA52ZWhpY2xlRGV0YWlscwAAAAZpc3N1ZXIFAAAABHRoaXMJAAACAAAAAQIAAAAbVGhpcyBhc3NldCBpcyBub3QgYSB2ZWhpY2xlAwkAAAAAAAACCQEAAAAIY29udGFpbnMAAAACCQEAAAAFdmFsdWUAAAABCAUAAAAOdmVoaWNsZURldGFpbHMAAAALZGVzY3JpcHRpb24CAAAACVtWZWhpY2xlXQcJAAACAAAAAQIAAAAbVGhpcyBhc3NldCBpcyBub3QgYSB2ZWhpY2xlAwMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAAAVwcmljZQYJAAAAAAAAAgUAAAAFcHJpY2UAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACAgAAAB4zQkI6IEJhZCBwcmljZSwgaXQgc2hvdWxkIGJlOiAJAAGkAAAAAQUAAAAFcHJpY2UDCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAD2V4cGVjdGVkQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAKTNCQjogQmFkIHBheW1lbnQgYXR0YWNoZWQsIGl0IHNob3VsZCBiZTogCQACWAAAAAEFAAAAD2V4cGVjdGVkQXNzZXRJZAMJAAAAAAAAAgUAAAAHYXNzZXRJZAIAAAAACQEAAAATbWludFZlaGljbGVJbnRlcm5hbAAAAAMJAQAAABVnZXREZWZhdWx0VmVoaWNsZVR5cGUAAAAACAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtCb3VnaHRMZXZlbAUAAAAIbmV3TGV2ZWwFAAAAA25pbAAAAAFpAQAAAA9idXlNYW55Qm9vc3RlcnMAAAACAAAAB2Fzc2V0SWQAAAAPbmV3RGVzaXJlZExldmVsBAAAAAxrQm91Z2h0TGV2ZWwJAQAAABdrZXlWZWhpY2xlQm9vc3RlcnNMZXZlbAAAAAEFAAAAB2Fzc2V0SWQEAAAAEmJvdWdodEJvb3N0ZXJMZXZlbAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAAxrQm91Z2h0TGV2ZWwKAQAAABdhY2N1bXVsYXRlQm9vc3RlclByaWNlcwAAAAIAAAAFYWNjdW0AAAAPbGV2ZWxUb1B1cmNoYXNlAwMJAABnAAAAAgUAAAASYm91Z2h0Qm9vc3RlckxldmVsBQAAAA9sZXZlbFRvUHVyY2hhc2UGCQAAZgAAAAIFAAAAD2xldmVsVG9QdXJjaGFzZQUAAAAPbmV3RGVzaXJlZExldmVsBQAAAAVhY2N1bQQAAAAMYm9vc3RlclByaWNlCQEAAAAWZ2V0Qm9zdGVyUHJpY2VGb3JMZXZlbAAAAAEFAAAAD2xldmVsVG9QdXJjaGFzZQkAAGQAAAACBQAAAAVhY2N1bQUAAAAMYm9vc3RlclByaWNlBAAAAAp0b3RhbFByaWNlCgAAAAACJGwJAARMAAAAAgAAAAAAAAAAAQkABEwAAAACAAAAAAAAAAACCQAETAAAAAIAAAAAAAAAAAMJAARMAAAAAgAAAAAAAAAABAkABEwAAAACAAAAAAAAAAAFCQAETAAAAAIAAAAAAAAAAAYJAARMAAAAAgAAAAAAAAAABwkABEwAAAACAAAAAAAAAAAICQAETAAAAAIAAAAAAAAAAAkJAARMAAAAAgAAAAAAAAAACgkABEwAAAACAAAAAAAAAAALBQAAAANuaWwKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwAAAAAAAAAAAACgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAXYWNjdW11bGF0ZUJvb3N0ZXJQcmljZXMAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTEJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALBAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAAD2V4cGVjdGVkQXNzZXRJZAkBAAAAE2dldEJvc3RlckJ1eUFzc2V0SWQAAAAABAAAAA52ZWhpY2xlRGV0YWlscwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkAA+wAAAABCQACWQAAAAEFAAAAB2Fzc2V0SWQJAQAAABZnZXREZWZhdWx0VmVoaWNsZUFzc2V0AAAAAAMJAQAAAAIhPQAAAAIIBQAAAA52ZWhpY2xlRGV0YWlscwAAAAZpc3N1ZXIFAAAABHRoaXMJAAACAAAAAQIAAAAbVGhpcyBhc3NldCBpcyBub3QgYSB2ZWhpY2xlAwkAAAAAAAACCQEAAAAIY29udGFpbnMAAAACCQEAAAAFdmFsdWUAAAABCAUAAAAOdmVoaWNsZURldGFpbHMAAAALZGVzY3JpcHRpb24CAAAACVtWZWhpY2xlXQcJAAACAAAAAQIAAAAbVGhpcyBhc3NldCBpcyBub3QgYSB2ZWhpY2xlAwkAAGcAAAACBQAAABJib3VnaHRCb29zdGVyTGV2ZWwFAAAAD25ld0Rlc2lyZWRMZXZlbAkAAAIAAAABAgAAAB8zQkI6IEJvb3N0ZXIgd2FzIGFscmVhZHkgYm91Z2h0AwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAACnRvdGFsUHJpY2UJAAACAAAAAQkAASwAAAACAgAAAB4zQkI6IEJhZCBwcmljZSwgaXQgc2hvdWxkIGJlOiAJAAGkAAAAAQUAAAAKdG90YWxQcmljZQMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPZXhwZWN0ZWRBc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAApM0JCOiBCYWQgcGF5bWVudCBhdHRhY2hlZCwgaXQgc2hvdWxkIGJlOiAJAAJYAAAAAQUAAAAPZXhwZWN0ZWRBc3NldElkAwkAAAAAAAACBQAAAAdhc3NldElkAgAAAAAJAQAAABNtaW50VmVoaWNsZUludGVybmFsAAAAAwkBAAAAFWdldERlZmF1bHRWZWhpY2xlVHlwZQAAAAAIBQAAAAFpAAAABmNhbGxlcgUAAAAPbmV3RGVzaXJlZExldmVsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrQm91Z2h0TGV2ZWwFAAAAD25ld0Rlc2lyZWRMZXZlbAUAAAADbmlsAAAAAWkBAAAACmJ1eVRpY2tldHMAAAAABAAAAA5rVGlja2V0c0JvdWdodAkBAAAAEGtleVRpY2tldHNCb3VnaHQAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANdGlja2V0c0JvdWdodAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAA5rVGlja2V0c0JvdWdodAQAAAADcG10CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA9leHBlY3RlZEFzc2V0SWQJAQAAABNnZXRCb3N0ZXJCdXlBc3NldElkAAAAAAQAAAAQbmV3VGlja2V0c0JvdWdodAkAAGkAAAACCAUAAAADcG10AAAABmFtb3VudAAAAAAABfXhAAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPZXhwZWN0ZWRBc3NldElkCQAAAgAAAAECAAAAGTNCQzogV3JvbmcgYXNzZXQgYXR0YWNoZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADmtUaWNrZXRzQm91Z2h0CQAAZAAAAAIFAAAADXRpY2tldHNCb3VnaHQFAAAAEG5ld1RpY2tldHNCb3VnaHQFAAAAA25pbAAAAAFpAQAAABhidXlBY2Nlc3NJdGVtQW5kTG9ja0R1Y2sAAAAABAAAAAplZ2dQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAtkdWNrUGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQQAAAAKYWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQEAAAACIT0AAAACCAUAAAAKZWdnUGF5bWVudAAAAAdhc3NldElkCQEAAAAUZ2V0QWNjZXNzSXRlbUFzc2V0SWQAAAAACQAAAgAAAAECAAAAGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAAAAAiE9AAAAAggFAAAACmVnZ1BheW1lbnQAAAAGYW1vdW50CQEAAAASZ2V0QWNjZXNzSXRlbVByaWNlAAAAAAkAAAIAAAABAgAAACUzQkFJOiBXcm9uZyBhbW91bnQgb2YgYXNzZXRzIGF0dGFjaGVkBAAAAA5hY2Nlc3NJdGVtRGF0YQkBAAAACGFzU3RyaW5nAAAAAQkAA/wAAAAEBQAAAAR0aGlzAgAAABVidXlBY2Nlc3NJdGVtSW50ZXJuYWwJAARMAAAAAgUAAAAKYWRkcmVzc1N0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAADmFjY2Vzc0l0ZW1EYXRhBQAAAA5hY2Nlc3NJdGVtRGF0YQQAAAAIbG9ja0RhdGEJAQAAABBsb2NrRHVja0ludGVybmFsAAAAAgUAAAAKYWRkcmVzc1N0cgUAAAALZHVja1BheW1lbnQJAAUUAAAAAgUAAAAIbG9ja0RhdGEFAAAADmFjY2Vzc0l0ZW1EYXRhCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1idXlBY2Nlc3NJdGVtAAAAAAQAAAAKYWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACmVnZ1BheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAAKZWdnUGF5bWVudAAAAAdhc3NldElkCQEAAAAUZ2V0QWNjZXNzSXRlbUFzc2V0SWQAAAAACQAAAgAAAAECAAAAGjNCQUk6IFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAAAAAiE9AAAAAggFAAAACmVnZ1BheW1lbnQAAAAGYW1vdW50CQEAAAASZ2V0QWNjZXNzSXRlbVByaWNlAAAAAAkAAAIAAAABAgAAACUzQkFJOiBXcm9uZyBhbW91bnQgb2YgYXNzZXRzIGF0dGFjaGVkBAAAAA5hY2Nlc3NJdGVtRGF0YQkBAAAACGFzU3RyaW5nAAAAAQkAA/wAAAAEBQAAAAR0aGlzAgAAABVidXlBY2Nlc3NJdGVtSW50ZXJuYWwJAARMAAAAAgUAAAAKYWRkcmVzc1N0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAADmFjY2Vzc0l0ZW1EYXRhBQAAAA5hY2Nlc3NJdGVtRGF0YQkABRQAAAACBQAAAANuaWwFAAAADmFjY2Vzc0l0ZW1EYXRhCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABJidXlBY2Nlc3NJdGVtT3RoZXIAAAABAAAADGFkZHJlc3NPdGhlcgQAAAAKZWdnUGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAplZ2dQYXltZW50AAAAB2Fzc2V0SWQJAQAAABRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAAAAAJAAACAAAAAQIAAAAaM0JBSTogV3JvbmcgYXNzZXQgYXR0YWNoZWQDCQEAAAACIT0AAAACCAUAAAAKZWdnUGF5bWVudAAAAAZhbW91bnQJAQAAABJnZXRBY2Nlc3NJdGVtUHJpY2UAAAAACQAAAgAAAAECAAAAJTNCQUk6IFdyb25nIGFtb3VudCBvZiBhc3NldHMgYXR0YWNoZWQEAAAADmFjY2Vzc0l0ZW1EYXRhCQEAAAAIYXNTdHJpbmcAAAABCQAD/AAAAAQFAAAABHRoaXMCAAAAFWJ1eUFjY2Vzc0l0ZW1JbnRlcm5hbAkABEwAAAACBQAAAAxhZGRyZXNzT3RoZXIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAA5hY2Nlc3NJdGVtRGF0YQUAAAAOYWNjZXNzSXRlbURhdGEJAAUUAAAAAgUAAAADbmlsBQAAAA5hY2Nlc3NJdGVtRGF0YQkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIbG9ja0R1Y2sAAAAABAAAAAphZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALZHVja1BheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAQAAABBsb2NrRHVja0ludGVybmFsAAAAAgUAAAAKYWRkcmVzc1N0cgUAAAALZHVja1BheW1lbnQAAAABaQEAAAAPdW5sb2NrRHVja090aGVyAAAAAQAAAAphc3NldElkU3RyAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAETNVRE86IEFkbWluIG9ubHkhBAAAAAhvd25lcktleQkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAAxrZXlEdWNrT3duZXIAAAABCQACWQAAAAEFAAAACmFzc2V0SWRTdHIJAQAAAAt1bnN0YWtlRHVjawAAAAIFAAAACmFzc2V0SWRTdHIFAAAACG93bmVyS2V5AAAAAWkBAAAACnVubG9ja0R1Y2sAAAABAAAACmFzc2V0SWRTdHIEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQEAAAALdW5zdGFrZUR1Y2sAAAACBQAAAAphc3NldElkU3RyBQAAAAphZGRyZXNzU3RyAAAAAOus7qs=", "height": 3477268, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EHuZ1oVG351AUvDKDiMWqX7FYAUu6jeS56tJCncEZhjQ Next: 3bqS2BdknYsjKTLugcBBsF4MkZDgenrjBgmDFPtBiBJs Diff:
OldNewDifferences
8888 func getMinLockDuration () = tryGetInteger("static_minLockDuration")
8989
9090
91+func getDefaultVehicleType () = tryGetString("static_defaultVehicleType")
92+
93+
9194 func getBosterBuyAssetId () = fromBase58String(tryGetString("static_boosterBuyAssetId"))
9295
9396
103106 case _ =>
104107 throw("3AS: wrong type, expected: String")
105108 }
109+
110+
111+func getDefaultVehicleAsset () = Asset(base58'1', 1, 0, this, base58'1', false, false, unit, getDefaultVehicleType(), ("[Vehicle] " + getDefaultVehicleType()))
106112
107113
108114 func lockDuckInternal (addressStr,pmt) = {
183189 func getVehiclePrice (type) = tryGetInteger((("static_vehicle_" + type) + "_price"))
184190
185191
186-func mintVehicleInternal (type,recipient) = {
192+func mintVehicleInternal (type,recipient,boostersLevel) = {
187193 let vehicleItem = Issue(type, (("[Vehicle] " + type) + " vehicle for the Metarace game. https://metarace.com"), 1, 0, false)
188194 let vehicleItemAssetId = calculateAssetId(vehicleItem)
189- let initialBoostersLevel = 0
190-[vehicleItem, IntegerEntry(keyVehicleBoostersLevel(toBase58String(vehicleItemAssetId)), initialBoostersLevel), ScriptTransfer(recipient, 1, vehicleItemAssetId)]
195+[vehicleItem, IntegerEntry(keyVehicleBoostersLevel(toBase58String(vehicleItemAssetId)), boostersLevel), ScriptTransfer(recipient, 1, vehicleItemAssetId)]
191196 }
192197
193198
246251 then throw(("3BB: Bad price, it should be: " + toString(price)))
247252 else if ((pmt.assetId != expectedAssetId))
248253 then throw(("3BB: Bad payment attached, it should be $RACE token with asset id: " + toBase58String(expectedAssetId)))
249- else mintVehicleInternal(typeName, i.caller)
254+ else mintVehicleInternal(typeName, i.caller, 0)
250255 }
251256
252257
259264 let pmt = value(i.payments[0])
260265 let price = getBosterPriceForLevel(newLevel)
261266 let expectedAssetId = getBosterBuyAssetId()
262- let vehicleDetails = value(assetInfo(fromBase58String(assetId)))
267+ let vehicleDetails = valueOrElse(assetInfo(fromBase58String(assetId)), getDefaultVehicleAsset())
263268 if ((vehicleDetails.issuer != this))
264269 then throw("This asset is not a vehicle")
265270 else if ((contains(value(vehicleDetails.description), "[Vehicle]") == false))
270275 then throw(("3BB: Bad price, it should be: " + toString(price)))
271276 else if ((pmt.assetId != expectedAssetId))
272277 then throw(("3BB: Bad payment attached, it should be: " + toBase58String(expectedAssetId)))
273- else {
274- let name = getBosterNameForLevel(newLevel)
275-[IntegerEntry(kBoughtLevel, newLevel)]
276- }
278+ else if ((assetId == ""))
279+ then mintVehicleInternal(getDefaultVehicleType(), i.caller, 1)
280+ else [IntegerEntry(kBoughtLevel, newLevel)]
277281 }
278282
279283
307311 }
308312 let pmt = value(i.payments[0])
309313 let expectedAssetId = getBosterBuyAssetId()
310- let vehicleDetails = value(assetInfo(fromBase58String(assetId)))
314+ let vehicleDetails = valueOrElse(assetInfo(fromBase58String(assetId)), getDefaultVehicleAsset())
311315 if ((vehicleDetails.issuer != this))
312316 then throw("This asset is not a vehicle")
313317 else if ((contains(value(vehicleDetails.description), "[Vehicle]") == false))
318322 then throw(("3BB: Bad price, it should be: " + toString(totalPrice)))
319323 else if ((pmt.assetId != expectedAssetId))
320324 then throw(("3BB: Bad payment attached, it should be: " + toBase58String(expectedAssetId)))
321- else [IntegerEntry(kBoughtLevel, newDesiredLevel)]
325+ else if ((assetId == ""))
326+ then mintVehicleInternal(getDefaultVehicleType(), i.caller, newDesiredLevel)
327+ else [IntegerEntry(kBoughtLevel, newDesiredLevel)]
322328 }
323329
324330
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
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 keyDuckUnlockTime (assetId) = (("duck_" + toBase58String(assetId)) + "_unlockTime")
1313
1414
1515 func keyDuckOwner (assetId) = (("duck_" + toBase58String(assetId)) + "_owner")
1616
1717
1818 func keyVehicleBoostersLevel (assetId) = (("vehicle_" + assetId) + "_boostersLevel")
1919
2020
2121 func keySpotsBought (addressStr) = (("address_" + addressStr) + "_spotsBought")
2222
2323
2424 func keyTicketsBought (addressStr) = (("address_" + addressStr) + "_ticketsBought")
2525
2626
2727 func keyVehicleTypePrice (name) = (("vehicleType_" + name) + "_price")
2828
2929
3030 func keySpotsBusy (addressStr) = (("address_" + addressStr) + "_spotsBusy")
3131
3232
3333 func keyLockedDuckStatus (addressStr,assetIdStr) = (((("address_" + addressStr) + "_lockedDuck_") + assetIdStr) + "_status")
3434
3535
3636 func getDuckDetails (assetId) = {
3737 let assetName = value(value(assetInfo(assetId)).name)
3838 let assetNameParts = split(assetName, "")
3939 let isJackpot = (assetNameParts[(size(assetNameParts) - 2)] == "J")
4040 let assetColor = if (isJackpot)
4141 then "B"
4242 else assetNameParts[(size(assetNameParts) - 1)]
4343 $Tuple2(assetColor, isJackpot)
4444 }
4545
4646
4747 func tryGetStringExternal (address,key) = match getString(address, key) {
4848 case a: String =>
4949 a
5050 case _ =>
5151 ""
5252 }
5353
5454
5555 func tryGetString (key) = tryGetStringExternal(this, key)
5656
5757
5858 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
5959
6060
6161 func getGameName () = valueOrErrorMessage(getString("static_shortGameName"), "3GGN: There is no game name defined!")
6262
6363
6464 func getLongGameName () = valueOrErrorMessage(getString("static_longGameName"), "3GLGN: There is no long game name defined!")
6565
6666
6767 func getNFTName () = valueOrErrorMessage(getString("static_nftName"), "3GNN: There is no nft name defined!")
6868
6969
7070 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
7171
7272
7373 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
7474
7575
7676 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress")))
7777
7878
7979 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
8080
8181
8282 func getAccessItemAssetId () = fromBase58String(tryGetString("static_accessItemAssetId"))
8383
8484
8585 func getAccessItemPrice () = tryGetInteger("static_accessItemPrice")
8686
8787
8888 func getMinLockDuration () = tryGetInteger("static_minLockDuration")
8989
9090
91+func getDefaultVehicleType () = tryGetString("static_defaultVehicleType")
92+
93+
9194 func getBosterBuyAssetId () = fromBase58String(tryGetString("static_boosterBuyAssetId"))
9295
9396
9497 func getBosterPriceForLevel (level) = valueOrErrorMessage(getInteger(("static_boosterPriceLevel_" + toString(level))), "3GBPFL: There is no price value for this level of booster")
9598
9699
97100 func getBosterNameForLevel (level) = valueOrErrorMessage(getString(("static_boosterName_" + toString(level))), "3GBNFL: There is no such booster")
98101
99102
100103 func asString (value) = match value {
101104 case string: String =>
102105 string
103106 case _ =>
104107 throw("3AS: wrong type, expected: String")
105108 }
109+
110+
111+func getDefaultVehicleAsset () = Asset(base58'1', 1, 0, this, base58'1', false, false, unit, getDefaultVehicleType(), ("[Vehicle] " + getDefaultVehicleType()))
106112
107113
108114 func lockDuckInternal (addressStr,pmt) = {
109115 let assetId = value(pmt.assetId)
110116 let assetIssuer = value(assetInfo(assetId)).issuer
111117 let tDuckDetails = getDuckDetails(assetId)
112118 let assetColor = tDuckDetails._1
113119 let isJackpot = tDuckDetails._2
114120 let kSpotsBusy = keySpotsBusy(addressStr)
115121 let spotsBusy = tryGetInteger(kSpotsBusy)
116122 let kSpotsBought = keySpotsBought(addressStr)
117123 let addressSpotsAvailable = (tryGetInteger(kSpotsBought) - spotsBusy)
118124 if ((pmt.amount != 1))
119125 then throw("NFT is not attached")
120126 else if (if ((assetIssuer != getIncubatorAddress()))
121127 then (assetIssuer != getBreederAddress())
122128 else false)
123129 then throw("ivalid NFT attached")
124130 else if ((0 >= addressSpotsAvailable))
125131 then throw("No spots available")
126132 else {
127133 let kPerchesAvailable = ((("address_" + toString(this)) + "_perchesAvailable_") + assetColor)
128134 let perchesAvailable = match getInteger(getFarmingAddress(), kPerchesAvailable) {
129135 case b: Int =>
130136 b
131137 case _ =>
132138 0
133139 }
134140 if ((perchesAvailable == perchesAvailable))
135141 then {
136142 let eggAssetId = getEggAssetId()
137143 let inv1 = if ((perchesAvailable > 0))
138144 then unit
139145 else invoke(getFarmingAddress(), "buyPerch", [assetColor, ""], [AttachedPayment(eggAssetId, 100000000)])
140146 if ((inv1 == inv1))
141147 then {
142148 let inv2 = if ((isJackpot == false))
143149 then invoke(getFarmingAddress(), "stakeNFT", nil, [AttachedPayment(assetId, 1)])
144150 else invoke(getFarmingAddress(), "stakeJackpot", [assetColor], [AttachedPayment(assetId, 1)])
145151 if ((inv2 == inv2))
146152 then [IntegerEntry(kSpotsBusy, (spotsBusy + 1)), StringEntry(keyDuckOwner(assetId), addressStr), BooleanEntry(keyLockedDuckStatus(addressStr, toBase58String(assetId)), true), IntegerEntry(keyDuckUnlockTime(assetId), (lastBlock.timestamp + getMinLockDuration()))]
147153 else throw("Strict value is not equal to itself.")
148154 }
149155 else throw("Strict value is not equal to itself.")
150156 }
151157 else throw("Strict value is not equal to itself.")
152158 }
153159 }
154160
155161
156162 func unstakeDuck (assetIdStr,addressStr) = {
157163 let assetId = fromBase58String(assetIdStr)
158164 let tDuckDetails = getDuckDetails(assetId)
159165 let assetColor = tDuckDetails._1
160166 let isJackpot = tDuckDetails._2
161167 let kSpotsBusy = keySpotsBusy(addressStr)
162168 let kDuckOwner = keyDuckOwner(assetId)
163169 let remainingForUnlock = (tryGetInteger(keyDuckUnlockTime(assetId)) - lastBlock.timestamp)
164170 if ((tryGetString(kDuckOwner) != addressStr))
165171 then throw("3UL: The duck is not yours")
166172 else if ((remainingForUnlock > 0))
167173 then throw((("3UL: You need to wait to unlock " + toString((remainingForUnlock / 1000))) + " seconds"))
168174 else {
169175 let unstakeFuncName = if ((isJackpot == true))
170176 then "unstakeJackpot"
171177 else "unstakeNFT"
172178 let inv1 = invoke(getFarmingAddress(), unstakeFuncName, [assetIdStr], nil)
173179 if ((inv1 == inv1))
174180 then [ScriptTransfer(Address(fromBase58String(addressStr)), 1, assetId), DeleteEntry(keyLockedDuckStatus(addressStr, assetIdStr)), DeleteEntry(kDuckOwner), IntegerEntry(kSpotsBusy, (tryGetInteger(kSpotsBusy) - 1))]
175181 else throw("Strict value is not equal to itself.")
176182 }
177183 }
178184
179185
180186 func getVehicleName (type) = getStringValue(this, (("static_vehicle_" + type) + "_name"))
181187
182188
183189 func getVehiclePrice (type) = tryGetInteger((("static_vehicle_" + type) + "_price"))
184190
185191
186-func mintVehicleInternal (type,recipient) = {
192+func mintVehicleInternal (type,recipient,boostersLevel) = {
187193 let vehicleItem = Issue(type, (("[Vehicle] " + type) + " vehicle for the Metarace game. https://metarace.com"), 1, 0, false)
188194 let vehicleItemAssetId = calculateAssetId(vehicleItem)
189- let initialBoostersLevel = 0
190-[vehicleItem, IntegerEntry(keyVehicleBoostersLevel(toBase58String(vehicleItemAssetId)), initialBoostersLevel), ScriptTransfer(recipient, 1, vehicleItemAssetId)]
195+[vehicleItem, IntegerEntry(keyVehicleBoostersLevel(toBase58String(vehicleItemAssetId)), boostersLevel), ScriptTransfer(recipient, 1, vehicleItemAssetId)]
191196 }
192197
193198
194199 @Callable(i)
195200 func buyAccessItemInternal (addressStr) = if ((i.caller != this))
196201 then throw("3BAII: internal use only")
197202 else {
198203 let issueAccessItem = Issue(("ACCESS-" + getGameName()), ((("[Access] " + getLongGameName()) + " access NFT for ") + getNFTName()), 1, 0, false)
199204 let accessRaceAssetId = toBase58String(calculateAssetId(issueAccessItem))
200205 let kSpotsBought = keySpotsBought(addressStr)
201206 $Tuple2([issueAccessItem, StringEntry((("accessItem_" + accessRaceAssetId) + "_owner"), addressStr), StringEntry((("address_" + addressStr) + "_owning"), accessRaceAssetId), IntegerEntry(kSpotsBought, (tryGetInteger(kSpotsBought) + 1))], accessRaceAssetId)
202207 }
203208
204209
205210
206211 @Callable(i)
207212 func configureOracle (oracle,shortname,longname,nftName) = if ((i.caller != this))
208213 then throw("3CO: admin only")
209214 else [StringEntry("static_oracleAddress", oracle), StringEntry("static_shortGameName", shortname), StringEntry("static_longGameName", longname), StringEntry("static_nftName", nftName)]
210215
211216
212217
213218 @Callable(i)
214219 func updateSetting (key,value) = if ((i.caller != this))
215220 then throw("Only administrator can call this method")
216221 else match value {
217222 case int: Int =>
218223 [IntegerEntry(key, int)]
219224 case s: String =>
220225 [StringEntry(key, s)]
221226 case b: Boolean =>
222227 [BooleanEntry(key, b)]
223228 case bv: ByteVector =>
224229 [BinaryEntry(key, bv)]
225230 case _ =>
226231 throw("Bad value type")
227232 }
228233
229234
230235
231236 @Callable(i)
232237 func deleteSetting (key) = if ((i.caller != this))
233238 then throw("3DS: Only administrator can call this method")
234239 else [DeleteEntry(key)]
235240
236241
237242
238243 @Callable(i)
239244 func buyVehicle (typeName) = {
240245 let price = getVehiclePrice(typeName)
241246 let pmt = value(i.payments[0])
242247 let expectedAssetId = getBosterBuyAssetId()
243248 if ((price == 0))
244249 then throw("There is no such vehicle type")
245250 else if ((pmt.amount != price))
246251 then throw(("3BB: Bad price, it should be: " + toString(price)))
247252 else if ((pmt.assetId != expectedAssetId))
248253 then throw(("3BB: Bad payment attached, it should be $RACE token with asset id: " + toBase58String(expectedAssetId)))
249- else mintVehicleInternal(typeName, i.caller)
254+ else mintVehicleInternal(typeName, i.caller, 0)
250255 }
251256
252257
253258
254259 @Callable(i)
255260 func buyBooster (assetId) = {
256261 let kBoughtLevel = keyVehicleBoostersLevel(assetId)
257262 let boughtBoosterLevel = tryGetInteger(kBoughtLevel)
258263 let newLevel = (boughtBoosterLevel + 1)
259264 let pmt = value(i.payments[0])
260265 let price = getBosterPriceForLevel(newLevel)
261266 let expectedAssetId = getBosterBuyAssetId()
262- let vehicleDetails = value(assetInfo(fromBase58String(assetId)))
267+ let vehicleDetails = valueOrElse(assetInfo(fromBase58String(assetId)), getDefaultVehicleAsset())
263268 if ((vehicleDetails.issuer != this))
264269 then throw("This asset is not a vehicle")
265270 else if ((contains(value(vehicleDetails.description), "[Vehicle]") == false))
266271 then throw("This asset is not a vehicle")
267272 else if (if ((pmt.amount != price))
268273 then true
269274 else (price == 0))
270275 then throw(("3BB: Bad price, it should be: " + toString(price)))
271276 else if ((pmt.assetId != expectedAssetId))
272277 then throw(("3BB: Bad payment attached, it should be: " + toBase58String(expectedAssetId)))
273- else {
274- let name = getBosterNameForLevel(newLevel)
275-[IntegerEntry(kBoughtLevel, newLevel)]
276- }
278+ else if ((assetId == ""))
279+ then mintVehicleInternal(getDefaultVehicleType(), i.caller, 1)
280+ else [IntegerEntry(kBoughtLevel, newLevel)]
277281 }
278282
279283
280284
281285 @Callable(i)
282286 func buyManyBoosters (assetId,newDesiredLevel) = {
283287 let kBoughtLevel = keyVehicleBoostersLevel(assetId)
284288 let boughtBoosterLevel = tryGetInteger(kBoughtLevel)
285289 func accumulateBoosterPrices (accum,levelToPurchase) = if (if ((boughtBoosterLevel >= levelToPurchase))
286290 then true
287291 else (levelToPurchase > newDesiredLevel))
288292 then accum
289293 else {
290294 let boosterPrice = getBosterPriceForLevel(levelToPurchase)
291295 (accum + boosterPrice)
292296 }
293297
294298 let totalPrice = {
295299 let $l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
296300 let $s = size($l)
297301 let $acc0 = 0
298302 func $f0_1 ($a,$i) = if (($i >= $s))
299303 then $a
300304 else accumulateBoosterPrices($a, $l[$i])
301305
302306 func $f0_2 ($a,$i) = if (($i >= $s))
303307 then $a
304308 else throw("List size exceeds 11")
305309
306310 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11)
307311 }
308312 let pmt = value(i.payments[0])
309313 let expectedAssetId = getBosterBuyAssetId()
310- let vehicleDetails = value(assetInfo(fromBase58String(assetId)))
314+ let vehicleDetails = valueOrElse(assetInfo(fromBase58String(assetId)), getDefaultVehicleAsset())
311315 if ((vehicleDetails.issuer != this))
312316 then throw("This asset is not a vehicle")
313317 else if ((contains(value(vehicleDetails.description), "[Vehicle]") == false))
314318 then throw("This asset is not a vehicle")
315319 else if ((boughtBoosterLevel >= newDesiredLevel))
316320 then throw("3BB: Booster was already bought")
317321 else if ((pmt.amount != totalPrice))
318322 then throw(("3BB: Bad price, it should be: " + toString(totalPrice)))
319323 else if ((pmt.assetId != expectedAssetId))
320324 then throw(("3BB: Bad payment attached, it should be: " + toBase58String(expectedAssetId)))
321- else [IntegerEntry(kBoughtLevel, newDesiredLevel)]
325+ else if ((assetId == ""))
326+ then mintVehicleInternal(getDefaultVehicleType(), i.caller, newDesiredLevel)
327+ else [IntegerEntry(kBoughtLevel, newDesiredLevel)]
322328 }
323329
324330
325331
326332 @Callable(i)
327333 func buyTickets () = {
328334 let kTicketsBought = keyTicketsBought(toString(i.caller))
329335 let ticketsBought = tryGetInteger(kTicketsBought)
330336 let pmt = i.payments[0]
331337 let expectedAssetId = getBosterBuyAssetId()
332338 let newTicketsBought = (pmt.amount / 100000000)
333339 if ((pmt.assetId != expectedAssetId))
334340 then throw("3BC: Wrong asset attached")
335341 else [IntegerEntry(kTicketsBought, (ticketsBought + newTicketsBought))]
336342 }
337343
338344
339345
340346 @Callable(i)
341347 func buyAccessItemAndLockDuck () = {
342348 let eggPayment = value(i.payments[0])
343349 let duckPayment = value(i.payments[1])
344350 let addressStr = toString(i.caller)
345351 if ((eggPayment.assetId != getAccessItemAssetId()))
346352 then throw("3BAI: Wrong asset attached")
347353 else if ((eggPayment.amount != getAccessItemPrice()))
348354 then throw("3BAI: Wrong amount of assets attached")
349355 else {
350356 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
351357 if ((accessItemData == accessItemData))
352358 then {
353359 let lockData = lockDuckInternal(addressStr, duckPayment)
354360 $Tuple2(lockData, accessItemData)
355361 }
356362 else throw("Strict value is not equal to itself.")
357363 }
358364 }
359365
360366
361367
362368 @Callable(i)
363369 func buyAccessItem () = {
364370 let addressStr = toString(i.caller)
365371 let eggPayment = value(i.payments[0])
366372 if ((eggPayment.assetId != getAccessItemAssetId()))
367373 then throw("3BAI: Wrong asset attached")
368374 else if ((eggPayment.amount != getAccessItemPrice()))
369375 then throw("3BAI: Wrong amount of assets attached")
370376 else {
371377 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressStr], nil))
372378 if ((accessItemData == accessItemData))
373379 then $Tuple2(nil, accessItemData)
374380 else throw("Strict value is not equal to itself.")
375381 }
376382 }
377383
378384
379385
380386 @Callable(i)
381387 func buyAccessItemOther (addressOther) = {
382388 let eggPayment = value(i.payments[0])
383389 if ((eggPayment.assetId != getAccessItemAssetId()))
384390 then throw("3BAI: Wrong asset attached")
385391 else if ((eggPayment.amount != getAccessItemPrice()))
386392 then throw("3BAI: Wrong amount of assets attached")
387393 else {
388394 let accessItemData = asString(invoke(this, "buyAccessItemInternal", [addressOther], nil))
389395 if ((accessItemData == accessItemData))
390396 then $Tuple2(nil, accessItemData)
391397 else throw("Strict value is not equal to itself.")
392398 }
393399 }
394400
395401
396402
397403 @Callable(i)
398404 func lockDuck () = {
399405 let addressStr = toString(i.caller)
400406 let duckPayment = value(i.payments[0])
401407 lockDuckInternal(addressStr, duckPayment)
402408 }
403409
404410
405411
406412 @Callable(i)
407413 func unlockDuckOther (assetIdStr) = if ((i.caller != this))
408414 then throw("3UDO: Admin only!")
409415 else {
410416 let ownerKey = tryGetString(keyDuckOwner(fromBase58String(assetIdStr)))
411417 unstakeDuck(assetIdStr, ownerKey)
412418 }
413419
414420
415421
416422 @Callable(i)
417423 func unlockDuck (assetIdStr) = {
418424 let addressStr = toString(i.caller)
419425 unstakeDuck(assetIdStr, addressStr)
420426 }
421427
422428

github/deemru/w8io/6500d08 
86.02 ms