tx · 5rJghoJvzWwtdpzoRFjrZD2fPEARKHHiBnEzW2Zza98M 3MptoMhDNemvt44YriTKHqdqAJDsPRQxWz6: -0.01000000 Waves 2020.12.18 15:50 [1314145] smart account 3MptoMhDNemvt44YriTKHqdqAJDsPRQxWz6 > SELF 0.00000000 Waves
{ "type": 13, "id": "5rJghoJvzWwtdpzoRFjrZD2fPEARKHHiBnEzW2Zza98M", "fee": 1000000, "feeAssetId": null, "timestamp": 1608295820418, "version": 1, "sender": "3MptoMhDNemvt44YriTKHqdqAJDsPRQxWz6", "senderPublicKey": "4pktbUT4HKzKtkGcc6ao2XLeSK9EimGtj6XisPEaNwuG", "proofs": [ "5S321PVEFFvtYdnhYiawdJ1TLRQfwWdQwqhHc5FwbBVG4h1TYVzfxk3UJYU2QWNsCmGV3xTFZ9b9NaX5iHrkfe5d" ], "script": "base64:AAIEAAAAAAAAABYIAhIFCgMICAgSABIAEgUKAwgICBIAAAAAFQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAABmdldEludAAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAAAAAADU0VQAgAAAAJfXwAAAAASSWR4Q2ZnU2hhcmVUb2tlbklkAAAAAAAAAAABAAAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoVG9rZW5zAAAAAAAAAAACAAAAABdJZHhDZmdEZWNpbWFsc011bHRQcmljZQAAAAAAAAAAAwAAAAAUSWR4Q2ZnR2V0RGVsYXlCbG9ja3MAAAAAAAAAAAQAAAAAE0lkeFRvdGFsTG9ja2VkU2hhcmUAAAAAAAAAAAEAAAAAEklkeFRvdGFsTG9ja2VkQmFzZQAAAAAAAAAAAgEAAAAWa2V5TmV4dEludGVybmFsVG9rZW5JZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAA9rZXlTaGFyZTJCYXNlSWQAAAABAAAADXNoYXJlVG9rZW5TdHIJAAEsAAAAAgIAAAAjJXMlcyVzX19jb25maWdfX3NoYXJlMkJhc2VBc3NldElkX18FAAAADXNoYXJlVG9rZW5TdHIBAAAAC2tleUFzc2V0Q2ZnAAAAAQAAAAxiYXNlVG9rZW5TdHIJAAEsAAAAAgIAAAAaJXMlcyVzX19jb25maWdfX2Fzc2V0Q2ZnX18FAAAADGJhc2VUb2tlblN0cgEAAAAOa2V5VG90YWxMb2NrZWQAAAABAAAADWJhc2V0VG9rZW5TdHIJAAEsAAAAAgIAAAAXJXMlcyVzX190b3RhbF9fbG9ja2VkX18FAAAADWJhc2V0VG9rZW5TdHIBAAAAFGtleVRvdGFsTG9ja2VkQnlVc2VyAAAAAgAAAA1iYXNldFRva2VuU3RyAAAADnVzZXJBZGRyZXNzU3RyCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlcyVzJXNfX3RvdGFsX19sb2NrZWQJAARMAAAAAgUAAAANYmFzZXRUb2tlblN0cgkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAADbmlsBQAAAANTRVABAAAAD2RhdGFUb3RhbExvY2tlZAAAAAIAAAAQc2hhcmVUb2tlbkFtb3VudAAAAA9iYXNlVG9rZW5BbW91bnQJAAS5AAAAAgkABEwAAAACAgAAAAQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAQc2hhcmVUb2tlbkFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAD2Jhc2VUb2tlbkFtb3VudAUAAAADbmlsBQAAAANTRVABAAAADGtleU9wZXJhdGlvbgAAAAQAAAANb3BlcmF0aW9uVHlwZQAAAAtiYXNlQXNzZXRJZAAAAAt1c2VyQWRkcmVzcwAAAAR0eElkCQAEuQAAAAIJAARMAAAAAgIAAAAIJXMlcyVzJXMJAARMAAAAAgUAAAANb3BlcmF0aW9uVHlwZQkABEwAAAACBQAAAAtiYXNlQXNzZXRJZAkABEwAAAACBQAAAAt1c2VyQWRkcmVzcwkABEwAAAACBQAAAAR0eElkBQAAAANuaWwFAAAAA1NFUAEAAAANZGF0YU9wZXJhdGlvbgAAAAgAAAAGc3RhdHVzAAAADmluVG9rZW5zQW1vdW50AAAABXByaWNlAAAAD291dFRva2Vuc0Ftb3VudAAAAAtzdGFydEhlaWdodAAAAA5zdGFydFRpbWVzdGFtcAAAAAllbmRIZWlnaHQAAAAMZW5kVGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAQJXMlZCVkJWQlZCVkJWQlZAkABEwAAAACBQAAAAZzdGF0dXMJAARMAAAAAgkAAaQAAAABBQAAAA5pblRva2Vuc0Ftb3VudAkABEwAAAACCQABpAAAAAEFAAAABXByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPb3V0VG9rZW5zQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgkAAaQAAAABBQAAAA5zdGFydFRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAACWVuZEhlaWdodAkABEwAAAACCQABpAAAAAEFAAAADGVuZFRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEAAAAOYmFzZUFzc2V0SWRTdHIEAAAAA2tleQkBAAAAC2tleUFzc2V0Q2ZnAAAAAQUAAAAOYmFzZUFzc2V0SWRTdHIJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAA2tleQUAAAADU0VQAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABAAAAA2tleQQAAAAQdG90YWxMb2NrZWRBcnJheQkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAAD2RhdGFUb3RhbExvY2tlZAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAFAAAAA1NFUAkABEwAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQAAAAAAAAAAAAkABEwAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQAAAAAAAAAAAQUAAAADbmlsAQAAABRpbmNyZW1lbnRUb3RhbExvY2tlZAAAAAMAAAADa2V5AAAAEHNoYXJlVG9rZW5BbW91bnQAAAAPYmFzZVRva2VuQW1vdW50BAAAAAlkYXRhQXJyYXkJAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABBQAAAANrZXkJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQkBAAAAD2RhdGFUb3RhbExvY2tlZAAAAAIJAABkAAAAAgkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAE0lkeFRvdGFsTG9ja2VkU2hhcmUFAAAAEHNoYXJlVG9rZW5BbW91bnQJAABkAAAAAgkAAZEAAAACBQAAAAlkYXRhQXJyYXkFAAAAEklkeFRvdGFsTG9ja2VkQmFzZQUAAAAPYmFzZVRva2VuQW1vdW50AQAAAAljYWxjUHJpY2UAAAAEAAAAC2Jhc2VBc3NldElkAAAADHNoYXJlVG9rZW5JZAAAABZkZWNpbWFsc011bHRCb3RoVG9rZW5zAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAABBiYXNlQXNzZXRCYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMFAAAAC2Jhc2VBc3NldElkBAAAAA1zaGFyZUVtaXNzaW9uCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAxzaGFyZVRva2VuSWQAAAAIcXVhbnRpdHkDCQAAAAAAAAIFAAAADXNoYXJlRW1pc3Npb24AAAAAAAAAAAAJAABoAAAAAgAAAAAAAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABrAAAAAwUAAAAQYmFzZUFzc2V0QmFsYW5jZQUAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAADXNoYXJlRW1pc3Npb24AAAAFAAAAAWkBAAAAEmFkbWluUmVnaXN0ZXJBc3NldAAAAAMAAAAMYmFzZVRva2VuU3RyAAAADnNoYXJlVG9rZW5OYW1lAAAAD3NoYXJlVG9rZW5EZXNjcgQAAAALYmFzZVRva2VuSWQJAAJZAAAAAQUAAAAMYmFzZVRva2VuU3RyBAAAAAhkZWNpbWFscwgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAALYmFzZVRva2VuSWQAAAAIZGVjaW1hbHMEAAAAFXNoYXJlVG9rZW5Jc3N1ZUFjdGlvbgkABEIAAAAFBQAAAA5zaGFyZVRva2VuTmFtZQUAAAAPc2hhcmVUb2tlbkRlc2NyAAAAAAAAAAABBQAAAAhkZWNpbWFscwYEAAAADHNoYXJlVG9rZW5JZAkABDgAAAABBQAAABVzaGFyZVRva2VuSXNzdWVBY3Rpb24EAAAADXNoYXJlVG9rZW5TdHIJAAJYAAAAAQUAAAAMc2hhcmVUb2tlbklkBAAAABFkZWNpbWFsc011bHRQcmljZQkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gEAAAAFmRlY2ltYWxzTXVsdEJvdGhUb2tlbnMJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAAIZGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAFGludGVybmFsQmFzZVRva2VudElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZrZXlOZXh0SW50ZXJuYWxUb2tlbklkAAAAAAAAAAAAAAAAAAQAAAAUaW50ZXJuYWxCYXNlVG9rZW5TdHIJAAGkAAAAAQUAAAAUaW50ZXJuYWxCYXNlVG9rZW50SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAABclcyVzJXNfX2NvbmZpZ19fYXNzZXRfXwUAAAAMYmFzZVRva2VuU3RyCQAEuQAAAAIJAARMAAAAAgIAAAAKJXMlcyVkJWQlZAkABEwAAAACBQAAAA1zaGFyZVRva2VuU3RyCQAETAAAAAIFAAAAFGludGVybmFsQmFzZVRva2VuU3RyCQAETAAAAAIJAAGkAAAAAQUAAAAWZGVjaW1hbHNNdWx0Qm90aFRva2VucwkABEwAAAACCQABpAAAAAEFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAETAAAAAICAAAABDE0NDAFAAAAA25pbAUAAAADU0VQCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19faW50ZXJuYWwyYmFzZUFzc2V0SWRfXwUAAAAUaW50ZXJuYWxCYXNlVG9rZW5TdHIFAAAADGJhc2VUb2tlblN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAAKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAAAADGJhc2VUb2tlblN0cgUAAAAUaW50ZXJuYWxCYXNlVG9rZW5TdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAACUlcyVzJXNfX21hcHBpbmdzX19zaGFyZTJiYXNlQXNzZXRJZF9fBQAAAA1zaGFyZVRva2VuU3RyBQAAAAxiYXNlVG9rZW5TdHIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlOZXh0SW50ZXJuYWxUb2tlbklkAAAAAAkAAGQAAAACBQAAABRpbnRlcm5hbEJhc2VUb2tlbnRJZAAAAAAAAAAAAQkABEwAAAACBQAAABVzaGFyZVRva2VuSXNzdWVBY3Rpb24JAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAxzaGFyZVRva2VuSWQAAAAAAAAAAAEFAAAAA25pbAAAAAFpAQAAAANwdXQAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAAC2Jhc2VBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADmJhc2VBc3NldElkU3RyCQACWAAAAAEFAAAAC2Jhc2VBc3NldElkBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACGNmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAOYmFzZUFzc2V0SWRTdHIEAAAAD3NoYXJlVG9rZW5JZFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnU2hhcmVUb2tlbklkBAAAAAxzaGFyZVRva2VuSWQJAAJZAAAAAQUAAAAPc2hhcmVUb2tlbklkU3RyBAAAABZkZWNpbWFsc011bHRCb3RoVG9rZW5zCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhUb2tlbnMEAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlBAAAAAVwcmljZQkBAAAACWNhbGNQcmljZQAAAAQFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZVRva2VuSWQFAAAAFmRlY2ltYWxzTXVsdEJvdGhUb2tlbnMFAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAABBzaGFyZVRva2VuQW1vdW50CQAAawAAAAMIBQAAAANwbXQAAAAGYW1vdW50BQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAFcHJpY2UJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZVRva2VuSWQFAAAAEHNoYXJlVG9rZW5BbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAQc2hhcmVUb2tlbkFtb3VudAUAAAAMc2hhcmVUb2tlbklkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlPcGVyYXRpb24AAAAEAgAAAANwdXQFAAAADmJhc2VBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAANZGF0YU9wZXJhdGlvbgAAAAgCAAAACEZJTklTSEVECAUAAAADcG10AAAABmFtb3VudAUAAAAFcHJpY2UFAAAAEHNoYXJlVG9rZW5BbW91bnQFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAAA25pbAAAAAFpAQAAABBzdWJtaXRHZXRSZXF1ZXN0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAxzaGFyZUFzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAANc2hhcmVBc3NldFN0cgkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQEAAAADGNhbGxlclB1YlN0cgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJBZGRyZXNzU3RyCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAABBzaGFyZVRva2VuQW1vdW50CAUAAAADcG10AAAABmFtb3VudAQAAAAMYmFzZVRva2VuU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAD2tleVNoYXJlMkJhc2VJZAAAAAEFAAAADXNoYXJlQXNzZXRTdHIEAAAAC2Jhc2VUb2tlbklkCQACWQAAAAEFAAAADGJhc2VUb2tlblN0cgQAAAAIY2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlVG9rZW5TdHIEAAAAFmRlY2ltYWxzTXVsdEJvdGhUb2tlbnMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aFRva2VucwQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAADmdldERlbGF5QmxvY2tzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFElkeENmZ0dldERlbGF5QmxvY2tzBAAAAAVwcmljZQkBAAAACWNhbGNQcmljZQAAAAQFAAAAC2Jhc2VUb2tlbklkBQAAAAxzaGFyZUFzc2V0SWQFAAAAFmRlY2ltYWxzTXVsdEJvdGhUb2tlbnMFAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAAA9iYXNlVG9rZW5BbW91bnQJAABrAAAAAwUAAAAQc2hhcmVUb2tlbkFtb3VudAUAAAAFcHJpY2UFAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAAAxvcGVyYXRpb25LZXkJAQAAAAxrZXlPcGVyYXRpb24AAAAEAgAAAANnZXQFAAAADGJhc2VUb2tlblN0cgUAAAAOdXNlckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAANb3BlcmF0aW9uRGF0YQkBAAAADWRhdGFPcGVyYXRpb24AAAAIAgAAAAdQRU5ESU5HBQAAABBzaGFyZVRva2VuQW1vdW50BQAAAAVwcmljZQUAAAAPYmFzZVRva2VuQW1vdW50BQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAZAAAAAIFAAAABmhlaWdodAUAAAAOZ2V0RGVsYXlCbG9ja3MAAAAAAAAAAAAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAMb3BlcmF0aW9uS2V5BQAAAA1vcGVyYXRpb25EYXRhCQAETAAAAAIJAQAAABRpbmNyZW1lbnRUb3RhbExvY2tlZAAAAAMJAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEFAAAADGJhc2VUb2tlblN0cgUAAAAQc2hhcmVUb2tlbkFtb3VudAUAAAAPYmFzZVRva2VuQW1vdW50CQAETAAAAAIJAQAAABRpbmNyZW1lbnRUb3RhbExvY2tlZAAAAAMJAQAAABRrZXlUb3RhbExvY2tlZEJ5VXNlcgAAAAIFAAAADGJhc2VUb2tlblN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAAEHNoYXJlVG9rZW5BbW91bnQFAAAAD2Jhc2VUb2tlbkFtb3VudAUAAAADbmlsAAAAAWkBAAAAEWV4ZWN1dGVHZXRSZXF1ZXN0AAAAAwAAAAxiYXNlVG9rZW5TdHIAAAAOdXNlckFkZHJlc3NTdHIAAAAKZ2V0VHhJZFN0cgQAAAAMb3BlcmF0aW9uS2V5CQEAAAAMa2V5T3BlcmF0aW9uAAAABAIAAAADZ2V0BQAAAAxiYXNlVG9rZW5TdHIFAAAADnVzZXJBZGRyZXNzU3RyCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAADm9wZXJhdGlvbkFycmF5CQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAAAxvcGVyYXRpb25LZXkFAAAAA1NFUAUAAAADbmlsAAAAAWkBAAAADHRvcFVwQmFsYW5jZQAAAAAFAAAAA25pbAAAAADNraSW", "chainId": 84, "height": 1314145, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 4 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key)) | |
5 | + | ||
6 | + | ||
7 | + | func getInt (key) = valueOrElse(getInteger(this, key), 0) | |
8 | + | ||
9 | + | ||
10 | + | let SEP = "__" | |
11 | + | ||
12 | + | let IdxCfgShareTokenId = 1 | |
13 | + | ||
14 | + | let IdxCfgDecimalsMultBothTokens = 2 | |
15 | + | ||
16 | + | let IdxCfgDecimalsMultPrice = 3 | |
17 | + | ||
18 | + | let IdxCfgGetDelayBlocks = 4 | |
19 | + | ||
20 | + | let IdxTotalLockedShare = 1 | |
21 | + | ||
22 | + | let IdxTotalLockedBase = 2 | |
23 | + | ||
24 | + | func keyNextInternalTokenId () = "%s__nextInternalAssetId" | |
25 | + | ||
26 | + | ||
27 | + | func keyShare2BaseId (shareTokenStr) = ("%s%s%s__config__share2BaseAssetId__" + shareTokenStr) | |
28 | + | ||
29 | + | ||
30 | + | func keyAssetCfg (baseTokenStr) = ("%s%s%s__config__assetCfg__" + baseTokenStr) | |
31 | + | ||
32 | + | ||
33 | + | func keyTotalLocked (basetTokenStr) = ("%s%s%s__total__locked__" + basetTokenStr) | |
34 | + | ||
35 | + | ||
36 | + | func keyTotalLockedByUser (basetTokenStr,userAddressStr) = makeString(["%s%s%s%s__total__locked", basetTokenStr, userAddressStr], SEP) | |
37 | + | ||
38 | + | ||
39 | + | func dataTotalLocked (shareTokenAmount,baseTokenAmount) = makeString(["%d%d", toString(shareTokenAmount), toString(baseTokenAmount)], SEP) | |
40 | + | ||
41 | + | ||
42 | + | func keyOperation (operationType,baseAssetId,userAddress,txId) = makeString(["%s%s%s%s", operationType, baseAssetId, userAddress, txId], SEP) | |
43 | + | ||
44 | + | ||
45 | + | func dataOperation (status,inTokensAmount,price,outTokensAmount,startHeight,startTimestamp,endHeight,endTimestamp) = makeString(["%s%d%d%d%d%d%d%d", status, toString(inTokensAmount), toString(price), toString(outTokensAmount), toString(startHeight), toString(startTimestamp), toString(endHeight), toString(endTimestamp)], SEP) | |
46 | + | ||
47 | + | ||
48 | + | func readAssetCfgOrFail (baseAssetIdStr) = { | |
49 | + | let key = keyAssetCfg(baseAssetIdStr) | |
50 | + | split(getStringOrFail(key), SEP) | |
51 | + | } | |
52 | + | ||
53 | + | ||
54 | + | func readTotalLocked (key) = { | |
55 | + | let totalLockedArray = split(valueOrElse(getString(this, key), dataTotalLocked(0, 0)), SEP) | |
56 | + | [parseIntValue(totalLockedArray[0]), parseIntValue(totalLockedArray[1])] | |
57 | + | } | |
58 | + | ||
59 | + | ||
60 | + | func incrementTotalLocked (key,shareTokenAmount,baseTokenAmount) = { | |
61 | + | let dataArray = readTotalLocked(key) | |
62 | + | StringEntry(key, dataTotalLocked((dataArray[IdxTotalLockedShare] + shareTokenAmount), (dataArray[IdxTotalLockedBase] + baseTokenAmount))) | |
63 | + | } | |
64 | + | ||
65 | + | ||
66 | + | func calcPrice (baseAssetId,shareTokenId,decimalsMultBothTokens,decimalsMultPrice) = { | |
67 | + | let baseAssetBalance = assetBalance(this, baseAssetId) | |
68 | + | let shareEmission = value(assetInfo(shareTokenId)).quantity | |
69 | + | if ((shareEmission == 0)) | |
70 | + | then (1 * decimalsMultPrice) | |
71 | + | else fraction(baseAssetBalance, decimalsMultPrice, shareEmission) | |
72 | + | } | |
73 | + | ||
74 | + | ||
75 | + | @Callable(i) | |
76 | + | func adminRegisterAsset (baseTokenStr,shareTokenName,shareTokenDescr) = { | |
77 | + | let baseTokenId = fromBase58String(baseTokenStr) | |
78 | + | let decimals = value(assetInfo(baseTokenId)).decimals | |
79 | + | let shareTokenIssueAction = Issue(shareTokenName, shareTokenDescr, 1, decimals, true) | |
80 | + | let shareTokenId = calculateAssetId(shareTokenIssueAction) | |
81 | + | let shareTokenStr = toBase58String(shareTokenId) | |
82 | + | let decimalsMultPrice = ((100 * 1000) * 1000) | |
83 | + | let decimalsMultBothTokens = pow(10, 0, decimals, 0, 0, DOWN) | |
84 | + | let internalBaseTokentId = valueOrElse(getInteger(this, keyNextInternalTokenId()), 0) | |
85 | + | let internalBaseTokenStr = toString(internalBaseTokentId) | |
86 | + | [StringEntry(("%s%s%s__config__asset__" + baseTokenStr), makeString(["%s%s%d%d%d", shareTokenStr, internalBaseTokenStr, toString(decimalsMultBothTokens), toString(decimalsMultPrice), "1440"], SEP)), StringEntry(("%s%s%s__mappings__internal2baseAssetId__" + internalBaseTokenStr), baseTokenStr), StringEntry(("%s%s%s__mappings__baseAsset2internalId__" + baseTokenStr), internalBaseTokenStr), StringEntry(("%s%s%s__mappings__share2baseAssetId__" + shareTokenStr), baseTokenStr), IntegerEntry(keyNextInternalTokenId(), (internalBaseTokentId + 1)), shareTokenIssueAction, Burn(shareTokenId, 1)] | |
87 | + | } | |
88 | + | ||
89 | + | ||
90 | + | ||
91 | + | @Callable(i) | |
92 | + | func put () = { | |
93 | + | let pmt = value(i.payments[0]) | |
94 | + | let baseAssetId = value(pmt.assetId) | |
95 | + | let baseAssetIdStr = toBase58String(baseAssetId) | |
96 | + | let userAddressStr = toString(i.caller) | |
97 | + | let cfgArray = readAssetCfgOrFail(baseAssetIdStr) | |
98 | + | let shareTokenIdStr = cfgArray[IdxCfgShareTokenId] | |
99 | + | let shareTokenId = fromBase58String(shareTokenIdStr) | |
100 | + | let decimalsMultBothTokens = parseIntValue(cfgArray[IdxCfgDecimalsMultBothTokens]) | |
101 | + | let decimalsMultPrice = parseIntValue(cfgArray[IdxCfgDecimalsMultPrice]) | |
102 | + | let price = calcPrice(baseAssetId, shareTokenId, decimalsMultBothTokens, decimalsMultPrice) | |
103 | + | let shareTokenAmount = fraction(pmt.amount, decimalsMultPrice, price) | |
104 | + | [Reissue(shareTokenId, shareTokenAmount, true), ScriptTransfer(i.caller, shareTokenAmount, shareTokenId), StringEntry(keyOperation("put", baseAssetIdStr, userAddressStr, toBase58String(i.transactionId)), dataOperation("FINISHED", pmt.amount, price, shareTokenAmount, height, lastBlock.timestamp, height, lastBlock.timestamp))] | |
105 | + | } | |
106 | + | ||
107 | + | ||
108 | + | ||
109 | + | @Callable(i) | |
110 | + | func submitGetRequest () = { | |
111 | + | let pmt = value(i.payments[0]) | |
112 | + | let shareAssetId = value(pmt.assetId) | |
113 | + | let shareAssetStr = toBase58String(shareAssetId) | |
114 | + | let callerPubStr = toBase58String(i.callerPublicKey) | |
115 | + | let userAddress = i.caller | |
116 | + | let userAddressStr = toString(userAddress) | |
117 | + | let shareTokenAmount = pmt.amount | |
118 | + | let baseTokenStr = getStringOrFail(keyShare2BaseId(shareAssetStr)) | |
119 | + | let baseTokenId = fromBase58String(baseTokenStr) | |
120 | + | let cfgArray = readAssetCfgOrFail(baseTokenStr) | |
121 | + | let decimalsMultBothTokens = parseIntValue(cfgArray[IdxCfgDecimalsMultBothTokens]) | |
122 | + | let decimalsMultPrice = parseIntValue(cfgArray[IdxCfgDecimalsMultPrice]) | |
123 | + | let getDelayBlocks = parseIntValue(cfgArray[IdxCfgGetDelayBlocks]) | |
124 | + | let price = calcPrice(baseTokenId, shareAssetId, decimalsMultBothTokens, decimalsMultPrice) | |
125 | + | let baseTokenAmount = fraction(shareTokenAmount, price, decimalsMultPrice) | |
126 | + | let operationKey = keyOperation("get", baseTokenStr, userAddressStr, toBase58String(i.transactionId)) | |
127 | + | let operationData = dataOperation("PENDING", shareTokenAmount, price, baseTokenAmount, height, lastBlock.timestamp, (height + getDelayBlocks), 0) | |
128 | + | [StringEntry(operationKey, operationData), incrementTotalLocked(keyTotalLocked(baseTokenStr), shareTokenAmount, baseTokenAmount), incrementTotalLocked(keyTotalLockedByUser(baseTokenStr, userAddressStr), shareTokenAmount, baseTokenAmount)] | |
129 | + | } | |
130 | + | ||
131 | + | ||
132 | + | ||
133 | + | @Callable(i) | |
134 | + | func executeGetRequest (baseTokenStr,userAddressStr,getTxIdStr) = { | |
135 | + | let operationKey = keyOperation("get", baseTokenStr, userAddressStr, toBase58String(i.transactionId)) | |
136 | + | let operationArray = split(getStringOrFail(operationKey), SEP) | |
137 | + | nil | |
138 | + | } | |
139 | + | ||
140 | + | ||
141 | + | ||
142 | + | @Callable(i) | |
143 | + | func topUpBalance () = nil | |
144 | + | ||
145 | + |
github/deemru/w8io/873ac7e 19.57 ms ◑![]()