tx · 875SoMuHxnMqy7ggeMyp6koSoZruGEvWkGysjeAnJB9Y

3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH:  -0.01400000 Waves

2021.03.30 15:25 [1460496] smart account 3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH > SELF 0.00000000 Waves

{ "type": 13, "id": "875SoMuHxnMqy7ggeMyp6koSoZruGEvWkGysjeAnJB9Y", "fee": 1400000, "feeAssetId": null, "timestamp": 1617107122688, "version": 1, "sender": "3NC9wWawxuFG6a3sZdfckGwoMeVhLFjZFwH", "senderPublicKey": "HoEvP2nFKMAsffQ9PUyAm6auWisyHgusY9HxDeMASrzZ", "proofs": [ "37tJPUdjQVvtGPmpo94EWrmNVYXLVDepPz3WDSY7Tqqm5osAo2NC1wL71uvxq6tZHRhQxsrkiX4tvTmQsbAEVtRQ" ], "script": "base64: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AAAACQAAAAZzdGF0dXMAAAANaW5Bc3NldEFtb3VudAAAAAVwcmljZQAAAA5vdXRBc3NldEFtb3VudAAAAAtzdGFydEhlaWdodAAAAA5zdGFydFRpbWVzdGFtcAAAAAllbmRIZWlnaHQAAAAMZW5kVGltZXN0YW1wAAAADnRvcHVwVW5sb2NrSWR4CQEAAAAecHJpdmF0ZURhdGFPcGVyYXRpb25BbGxTdHJpbmdzAAAACQUAAAAGc3RhdHVzCQABpAAAAAEFAAAADWluQXNzZXRBbW91bnQJAAGkAAAAAQUAAAAFcHJpY2UJAAGkAAAAAQUAAAAOb3V0QXNzZXRBbW91bnQJAAGkAAAAAQUAAAALc3RhcnRIZWlnaHQJAAGkAAAAAQUAAAAOc3RhcnRUaW1lc3RhbXAJAAGkAAAAAQUAAAAJZW5kSGVpZ2h0CQABpAAAAAEFAAAADGVuZFRpbWVzdGFtcAkAAaQAAAABBQAAAA50b3B1cFVubG9ja0lkeAEAAAAcZGF0YU9wZXJhdGlvbkV4ZWN1dGlvblVwZGF0ZQAAAAQAAAANY3Vyck9wZXJBcnJheQAAAAluZXdTdGF0dXMAAAAIbmV3UHJpY2UAAAAMbmV3T3V0QW1vdW50CQEAAAAecHJpdmF0ZURhdGFPcGVyYXRpb25BbGxTdHJpbmdzAAAACQUAAAAJbmV3U3RhdHVzCQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAABHYxMjQJAAGkAAAAAQUAAAAIbmV3UHJpY2UJAAGkAAAAAQUAAAAMbmV3T3V0QW1vdW50CQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAABHYxMjcJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAEdjEyOAkAAaQAAAABBQAAAAZoZWlnaHQJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAEdjEzMQEAAAAEZjEzMgAAAAEAAAAEdjEzMwQAAAADa2V5CQEAAAADZjIzAAAAAQUAAAAEdjEzMwkABLUAAAACCQEAAAACZjAAAAABBQAAAANrZXkFAAAAA1NFUAAAAAAEdjEzNAAAAAAAAAAAAQAAAAAEdjEzNQAAAAAAAAAAAgEA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ZWdlckVudHJ5AAAAAgIAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwUAAAAEdjIxMwkBAAAADEludGVnZXJFbnRyeQAAAAICAAAACHByaWNlQVRIBQAAAAR2MjE3CQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAJcHJpY2VMYXN0BQAAAAR2MjE5AAAACgAAAAFpAQAAABJhZG1pblJlZ2lzdGVyQXNzZXQAAAAOAAAADGJhc2VBc3NldFN0cgAAAA5zaGFyZUFzc2V0TmFtZQAAAA9zaGFyZUFzc2V0RGVzY3IAAAAQZ2V0RGVsYXlpbkJsb2NrcwAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzAAAACnN0YXJ0UHJpY2UAAAAVdG9wdXBJbnRlcnZhbEluQmxvY2tzAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0AAAAE3RvcHVwTWFuYWdlckFkZHJlc3MAAAATc3VibWl0TGltaXRzQmFzZU1heAAAABVzdWJtaXRMaW1pdHNCYXNlUmVzZXQAAAAUc3VibWl0TGltaXRzU2hhcmVNYXgAAAAWc3VibWl0TGltaXRzU2hhcmVSZXNldAAAAAxhZG1pbkFkZHJlc3MEAAAABHYyMjEJAAJZAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAAR2MjIyCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAR2MjIxAAAACGRlY2ltYWxzBAAAAAR2MjIzCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAABHYyMjIAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAABHYyMjQJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoBAAAAAR2MjI1CQAAawAAAAMFAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0AAAAAAAAAABkBQAAAAR2MjIzBAAAAAR2MjI2CQAD8AAAAAIFAAAABHRoaXMFAAAABHYyMjEDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkAAAAAAAACBQAAAAR2MjI2AAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEFAAAABHRoaXMCAAAAIiBtdXN0IGhhdmUgYW55IGluaXRpYWwgYmFsYW5jZSBvZiAFAAAADGJhc2VBc3NldFN0cgMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAANmMjMAAAABBQAAAAxiYXNlQXNzZXRTdHIJAAACAAAAAQkAASwAAAACBQAAAAxiYXNlQXNzZXRTdHICAAAAHCBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQDCQEAAAACIT0AAAACCQAEJQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MFAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MJAAACAAAAAQIAAAAeaW52YWxpZCBzaHV0ZG93bk1hbmFnZXJBZGRyZXNzAwkBAAAAAiE9AAAAAgkABCUAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABN0b3B1cE1hbmFnZXJBZGRyZXNzBQAAABN0b3B1cE1hbmFnZXJBZGRyZXNzCQAAAgAAAAECAAAAG2ludmFsaWQgdG9wdXBNYW5hZ2VyQWRkcmVzcwMJAABmAAAAAgAAAAAAAAAAAAUAAAAQZ2V0RGVsYXlpbkJsb2NrcwkAAAIAAAABCQABLAAAAAICAAAAGWludmFsaWQgZ2V0RGVsYXlpbkJsb2Nrcz0JAAGkAAAAAQUAAAAQZ2V0RGVsYXlpbkJsb2NrcwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAABHYyMjUGCQAAZwAAAAIFAAAABHYyMjUAAAAAAAAAAGMJAAACAAAAAQIAAAAmaW52YWxpZCB0b3B1cE1heE5lZ2F0aXZlUGFydCBwYXJhbWV0ZXIEAAAABHYyMjcJAQAAAANmMTkAAAADBQAAAAR2MjI2BQAAAApzdGFydFByaWNlBQAAAAR2MjI0BAAAAAR2MjI4CQAEQgAAAAUFAAAADnNoYXJlQXNzZXROYW1lBQAAAA9zaGFyZUFzc2V0RGVzY3IFAAAABHYyMjcFAAAABHYyMjIGBAAAAAR2MjI5CQAEOAAAAAEFAAAABHYyMjgEAAAABHYyMzAJAAJYAAAAAQUAAAAEdjIyOQQAAAAEdjIzMQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAADZjI1AAAAAAAAAAAAAAAAAAQAAAAEdjIzMgkAAaQAAAABBQAAAAR2MjMxCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAANmMjMAAAABBQAAAAxiYXNlQXNzZXRTdHIJAQAAAAxkYXRhQXNzZXRDZmcAAAANBQAAAAR2MjMwBQAAAAR2MjMyBQAAAAR2MjIzBQAAAAR2MjI0BQAAABBnZXREZWxheWluQmxvY2tzBQAAABV0b3B1cEludGVydmFsSW5CbG9ja3MFAAAAFHRvcHVwTWF4TmVnYXRpdmVQYXJ0BQAAABN0b3B1cE1hbmFnZXJBZGRyZXNzBQAAABNzdWJtaXRMaW1pdHNCYXNlTWF4BQAAABVzdWJtaXRMaW1pdHNCYXNlUmVzZXQFAAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4BQAAABZzdWJtaXRMaW1pdHNTaGFyZVJlc2V0BQAAAAxhZG1pbkFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAA2Y0MQAAAAEFAAAABHYyMzEFAAAADGJhc2VBc3NldFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAADZjQzAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAAAR2MjMyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAANmNDUAAAABBQAAAAR2MjMwBQAAAAxiYXNlQXNzZXRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAA2Y0NwAAAAEFAAAADGJhc2VBc3NldFN0cgUAAAAEdjIzMAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAA2Y0OQAAAAEFAAAABHYyMzIHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAANmNTEAAAABBQAAAAR2MjMyBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAADZjI1AAAAAAkAAGQAAAACBQAAAAR2MjMxAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAADZjI2AAAAAQUAAAAEdjIzMgUAAAAKc3RhcnRQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAA2YzMwAAAAMFAAAABHYyMzIFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAACnN0YXJ0UHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAANmNTMAAAABBQAAAAR2MjMyAAAAAAAAAAAACQAETAAAAAIJAQAAAARmMTM2AAAAAwkBAAAAA2Y2MwAAAAEFAAAABHYyMzIFAAAAE3N1Ym1pdExpbWl0c0Jhc2VNYXgFAAAAFHN1Ym1pdExpbWl0c1NoYXJlTWF4CQAETAAAAAIFAAAABHYyMjgJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAATdG9wdXBNYW5hZ2VyQWRkcmVzcwUAAAAEdjIyNwUAAAAEdjIyOQUAAAADbmlsAAAAAWkBAAAADmFkbWluVXBkYXRlQ2ZnAAAAAwAAAAR2MjMzAAAABHYyMzQAAAAEdjIzNQQAAAAEdjIzNgkBAAAABGYxMzIAAAABBQAAAAR2MjMzBQAAAANuaWwAAAABaQEAAAAPc2h1dGRvd25TdWJtaXRzAAAAAQAAAAR2MjMxBAAAAAR2MjM3CQABpAAAAAEFAAAABHYyMzEEAAAABHYyMzgJAQAAAAJmMAAAAAEJAQAAAANmNDEAAAABBQAAAAR2MjMxBAAAAAR2MjM5CQEAAAACZjAAAAABCQEAAAADZjUxAAAAAQUAAAAEdjIzNwMJAABmAAAAAgAAAAAAAAAAAQkAATEAAAABBQAAAAR2MjM4CQAAAgAAAAECAAAADGludmFsaWQgdjIzMQMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR2MjM5CQAAAgAAAAECAAAADWFjY2VzcyBkZW5pZWQJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAANmNDkAAAABCQABpAAAAAEFAAAABHYyMzEGBQAAAANuaWwAAAABaQEAAAAJc3VibWl0UHV0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAR2MjQwCAUAAAADcG10AAAABmFtb3VudAQAAAAEdjI0MQkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAR2MjQyCQACWAAAAAEFAAAABHYyNDEJAQAAAARmMTYzAAAABQIAAAABUAUAAAABaQUAAAAEdjI0MAUAAAAEdjI0MQUAAAAEdjI0MgAAAAFpAQAAAAlzdWJtaXRHZXQAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABHYyNDMIBQAAAANwbXQAAAAGYW1vdW50BAAAAAR2MjQ0CQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAABHYyMzAJAAJYAAAAAQUAAAAEdjI0NAQAAAAEdjI0NQkBAAAAAmYwAAAAAQkBAAAAA2Y0NQAAAAEFAAAABHYyMzAJAQAAAARmMTYzAAAABQIAAAABRwUAAAABaQUAAAAEdjI0MwUAAAAEdjI0NAUAAAAEdjI0NQAAAAFpAQAAAApleGVjdXRlUHV0AAAAAwAAAAR2MjQ2AAAABHYyNDcAAAAEdjI0OAkBAAAABGYxODYAAAAEAgAAAAFQBQAAAAR2MjQ2BQAAAAR2MjQ3BQAAAAR2MjQ4AAAAAWkBAAAACmV4ZWN1dGVHZXQAAAADAAAABHYyNDkAAAAEdjI1MAAAAAR2MjUxCQEAAAAEZjE4NgAAAAQCAAAAAUcFAAAABHYyNDkFAAAABHYyNTAFAAAABHYyNTEAAAABaQEAAAAPb3BlcmF0aW9uc011dGV4AAAAAQAAAAR2MjUyBAAAAAR2MjUzCQEAAAAEZjEzMgAAAAEFAAAABHYyNTIEAAAABHYyNTQJAAGRAAAAAgUAAAAEdjI1MwUAAAADdjcyBAAAAAR2MjMyCQABkQAAAAIFAAAABHYyNTMFAAAAA3Y2NgMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR2MjU0CQEAAAADZjEzAAAAAQUAAAAEdjI1NAkABEwAAAACCQEAAAAEZjEzOQAAAAIFAAAABHYyMzIFAAAABmhlaWdodAUAAAADbmlsAAAAAWkBAAAADHRvcFVwQmFsYW5jZQAAAAIAAAAEdjI1NQAAAAR2MjU2BAAAAAR2MjIxCQACWQAAAAEFAAAABHYyNTUEAAAABHYyNTcJAQAAAARmMTMyAAAAAQUAAAAEdjI1NQQAAAAEdjIyOQkAAlkAAAABCQABkQAAAAIFAAAABHYyNTcFAAAAA3Y2NQQAAAAEdjI1OAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAABHYyNTcFAAAAA3Y2OAQAAAAEdjI1OQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAABHYyNTcFAAAAA3Y2NwQAAAAEdjI2MAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAABHYyNTcFAAAAA3Y3MAQAAAAEdjI2MQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAABHYyNTcFAAAAA3Y3MQQAAAAEdjIzMgkAAZEAAAACBQAAAAR2MjU3BQAAAAN2NjYEAAAABHYyNjIJAAGRAAAAAgUAAAAEdjI1NwUAAAADdjcyBAAAAAR2MjYzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAEdjI1NwUAAAADdjczBAAAAAR2MjY0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAEdjI1NwUAAAADdjc1BAAAAAR2MjY1CQEAAAADZjUzAAAAAQUAAAAEdjIzMgQAAAAEdjI2NgkBAAAAAmYyAAAAAQUAAAAEdjI2NQQAAAAEdjI2NwkAAGQAAAACBQAAAAR2MjY2AAAAAAAAAAABBAAAAAR2MjY4AwkAAGYAAAACBQAAAAR2MjU2AAAAAAAAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABHYyNjkJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAMJAQAAAAIhPQAAAAIFAAAABHYyMjEFAAAABHYyNjkJAAACAAAAAQIAAAA2YXR0YWNoZWQgcGF5bWVudCdzIGFzc2V0IGlkIGlzIE5PVCBtYXRjaGVkIHBhc3NlZCB2MjU1AwkAAGYAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAIG9ubHkgb25lIHBheW1lbnQgY2FuIGJlIGF0dGFjaGVkAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAABHYyNTYJAAACAAAAAQIAAAA7YXR0YWNoZWQgcGF5bWVudC5hbW91bnQgaXMgTk9UIG1hdGNoZWQgcGFzc2VkIHYyNTYgYXJndW1lbnQGAwkAAGYAAAACAAAAAAAAAAAABQAAAAR2MjU2BAAAAAR2MjcwCQAD8AAAAAIFAAAABHRoaXMFAAAABHYyMjEEAAAABHYyNzEJAABrAAAAAwUAAAAEdjI2MQUAAAAEdjI3MAUAAAAEdjI1OQMJAABmAAAAAgkBAAAAAS0AAAABBQAAAAR2MjU2BQAAAAR2MjcxCQAAAgAAAAEJAAEsAAAAAgIAAAAtdG9wdXAgbmVnYXRpdmUgdjI1NiBjb3VsZG4ndCBiZSBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAABHYyNzEGCQAAAgAAAAECAAAAGHplcm8gdjI1NiBpcyBub3QgYWxsb3dlZAQAAAAEdjI3MgkBAAAAA2Y1NQAAAAIFAAAABHYyMzIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAR2MjczCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAABHYyNzIAAAAAAAAAAAADCQEAAAACIT0AAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdjI2MgkBAAAAA2YxMwAAAAEFAAAABHYyNjIDCQEAAAABIQAAAAEFAAAABHYyNjgJAAACAAAAAQIAAAARdmFsaWRhdGlvbiBmYWlsZWQDCQAAZgAAAAIFAAAABHYyNjAJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAAR2MjczCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAwxIHRvcHVwIHBlciAJAAGkAAAAAQUAAAAEdjI2MAIAAAAoIGJsb2NrcyBmcm9tIHRoZSBzYW1lIGFkZHJlc3MgaXMgYWxsb3dlZAQAAAAEdjI3NAgJAQAAAARmMTQyAAAABQUAAAAEdjIzMgUAAAAEdjIyMQUAAAAEdjI1NgUAAAAEdjIyOQUAAAAEdjI1OAAAAAJfMQQAAAAEdjI3NQkBAAAAA2Y5NAAAAAgCAAAABXRvcHVwAgAAAAAFAAAABHYyMzIFAAAABHYyNzQFAAAABHYyNTgAAAAAAAAAAAAFAAAABHYyMjEFAAAABHYyMjkEAAAABHYyNzYIBQAAAAR2Mjc1AAAAAl8xBAAAAAR2Mjc3CQEAAAADZjI4AAAAAQUAAAAEdjIzMgQAAAAEdjI3OAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAR2Mjc3AAAAAAAAAAAACQAETgAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAADZjI2AAAAAQUAAAAEdjIzMgUAAAAEdjI3NAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAA2YzMwAAAAMFAAAABHYyMzIFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAABHYyNzQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAANmMzAAAAACBQAAAAR2MjMyBQAAAAR2MjY3BQAAAAR2Mjc0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAR2MjY1BQAAAAR2MjY3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAR2Mjc3AwkAAGYAAAACBQAAAAR2Mjc0BQAAAAR2Mjc4BQAAAAR2Mjc0BQAAAAR2Mjc4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAR2MjcyBQAAAAZoZWlnaHQFAAAAA25pbAkBAAAAFlRvdGFsTG9ja2VkU3RyaW5nRW50cnkAAAADAgAAAAlERUNSRU1FTlQJAQAAAANmMzYAAAABBQAAAAR2MjMyBQAAAAR2Mjc2CQEAAAAEZjEzOQAAAAIFAAAABHYyMzIAAAAAAAAAAAAJAQAAAARmMTM2AAAAAwkBAAAAA2Y2MwAAAAEFAAAABHYyMzIFAAAABHYyNjMFAAAABHYyNjQJAQAAAARCdXJuAAAAAgUAAAAEdjIyOQkAAZEAAAACBQAAAAR2Mjc2BQAAAAN2NzgJAQAAAAdSZWlzc3VlAAAAAwUAAAAEdjIyOQkBAAAAAS0AAAABCQABkQAAAAIFAAAABHYyNzYFAAAAA3Y4MQYDCQAAZgAAAAIAAAAAAAAAAAAFAAAABHYyNTYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQEAAAABLQAAAAEFAAAABHYyNTYFAAAABHYyMjEFAAAAA25pbAUAAAADbmlsAAAAAWkBAAAAFGN1cnJlbnRTeXNQYXJhbXNSRVNUAAAAAQAAAAR2Mjc5BAAAAAR2MjgwCQEAAAAEZjIwNwAAAAEFAAAABHYyNzkEAAAABHYyODEICAUAAAAEdjI4MAAAAAJfMQAAAAV2YWx1ZQQAAAAEdjIyNAgIBQAAAAR2MjgwAAAAAl8yAAAABXZhbHVlBAAAAAR2MjI2CAgFAAAABHYyODAAAAACXzMAAAAFdmFsdWUEAAAABHYyODIICAUAAAAEdjI4MAAAAAJfNAAAAAV2YWx1ZQQAAAAEdjI4MwgIBQAAAAR2MjgwAAAAAl81AAAABXZhbHVlBAAAAAR2Mjg0CAgFAAAABHYyODAAAAACXzYAAAAFdmFsdWUEAAAABHYyODUICAUAAAAEdjI4MAAAAAJfNwAAAAV2YWx1ZQQAAAAEdjI4NggIBQAAAAR2MjgwAAAAAl84AAAABXZhbHVlBAAAAAR2Mjg3CAgFAAAABHYyODAAAAACXzkAAAAFdmFsdWUEAAAABHYyODgICAUAAAAEdjI4MAAAAANfMTAAAAAFdmFsdWUEAAAABHYyMjMICAUAAAAEdjI4MAAAAANfMTEAAAAFdmFsdWUEAAAABHYyODkICAUAAAAEdjI4MAAAAANfMTIAAAAFdmFsdWUEAAAABHYyOTAICAUAAAAEdjI4MAAAAANfMTMAAAAFdmFsdWUEAAAABHYyOTEJAAS5AAAAAgkABEwAAAACAgAAABlzdGFydEN1cnJlbnRTeXNQYXJhbXNSRVNUCQAETAAAAAIJAAGkAAAAAQUAAAAEdjI4MQkABEwAAAACCQABpAAAAAEFAAAABHYyMjQJAARMAAAAAgkAAaQAAAABBQAAAAR2MjI2CQAETAAAAAIJAAGkAAAAAQUAAAAEdjI4MgkABEwAAAACCQABpAAAAAEFAAAABHYyODMJAARMAAAAAgkAAaQAAAABBQAAAAR2Mjg0CQAETAAAAAIJAAGkAAAAAQUAAAAEdjI4NQkABEwAAAACCQABpAAAAAEFAAAABHYyODYJAARMAAAAAgkAAaQAAAABBQAAAAR2Mjg3CQAETAAAAAIJAAGkAAAAAQUAAAAEdjI4OAkABEwAAAACCQABpAAAAAEFAAAABHYyMjMJAARMAAAAAgkAAaQAAAABBQAAAAR2Mjg5CQAETAAAAAIJAAGkAAAAAQUAAAAEdjI5MAkABEwAAAACAgAAABdlbmRDdXJyZW50U3lzUGFyYW1zUkVTVAUAAAADbmlsBQAAAANTRVAJAAACAAAAAQUAAAAEdjI5MQAAAACSVqp8", "chainId": 84, "height": 1460496, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BLbkqpPGTNExpoLzGNZ4nQxGbzkLbLes6u9Ca2VEq9hA Next: 8DsMsYYj9ZoEGcdykZH5NwbgvcANa6LcspaU62oh65dK Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
6-func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
6+func f0 (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
77
88
9-func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
9+func f1 (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
1010
1111
12-func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
12+func f2 (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
1313
1414
15-func failExecuteGet (msg,baseAssetStr,userAddressStr,submitTxIdStr,operationType) = throw(((((((((msg + ": baseAsset=") + baseAssetStr) + " userAddress=") + userAddressStr) + " submitTxId=") + submitTxIdStr) + " operation=") + operationType))
15+func f3 (msg,v4,v5,v6,v7) = throw(((((((((msg + ": baseAsset=") + v4) + " userAddress=") + v5) + " submitTxId=") + v6) + " operation=") + v7))
1616
1717
18-func failSubmitLimitsExceeds (remainingBase,remainingShare,newRemainingBase,newRemainingShare) = throw((((((((("submit operation limits have been reached: " + " remainingBaseVal=") + toString(remainingBase)) + " remainingShareVal=") + toString(remainingShare)) + " newRemainingBaseVal=") + toString(newRemainingBase)) + " newRemainingShareVal=") + toString(newRemainingShare)))
18+func f8 (v9,v10,v11,v12) = throw((((((((("submit operation limits have been reached: " + " remainingBaseVal=") + toString(v9)) + " remainingShareVal=") + toString(v10)) + " newRemainingBaseVal=") + toString(v11)) + " newRemainingShareVal=") + toString(v12)))
1919
2020
21-func failTopupManagerOnly (topupManagerAddress) = throw((("opertion denied: only topUpManager=" + topupManagerAddress) + " can send such transactions"))
21+func f13 (v14) = throw((("opertion denied: only topUpManager=" + v14) + " can send such transactions"))
2222
2323
24-func convertShare2Base (shareAmount,price,priceMult) = fraction(shareAmount, price, priceMult)
24+func f15 (v16,v17,v18) = fraction(v16, v17, v18)
2525
2626
27-func convertBase2Share (baseAmount,price,priceMult) = fraction(baseAmount, priceMult, price)
27+func f19 (v20,v21,v22) = fraction(v20, v22, v21)
2828
2929
30-func keyAssetCfg (baseAssetStr) = ("%s%s%s__config__asset__" + baseAssetStr)
30+func f23 (v24) = ("%s%s%s__config__asset__" + v24)
3131
3232
33-func keyNextInternalAssetId () = "%s__nextInternalAssetId"
33+func f25 () = "%s__nextInternalAssetId"
3434
3535
36-func keyPriceLast (internalBasetAssetStr) = ("%s%s%d__price__last__" + internalBasetAssetStr)
36+func f26 (v27) = ("%s%s%d__price__last__" + v27)
3737
3838
39-func keyPriceATH (internalBasetAssetStr) = ("%s%s%d__price__ath__" + internalBasetAssetStr)
39+func f28 (v29) = ("%s%s%d__price__ath__" + v29)
4040
4141
42-func keyPriceByTopUpIdx (internalBaseAssetStr,topUpIdx) = makeString(["%s%s%d%d__price__byTopUpIdx", internalBaseAssetStr, toString(topUpIdx)], SEP)
42+func f30 (v31,v32) = makeString(["%s%s%d%d__price__byTopUpIdx", v31, toString(v32)], SEP)
4343
4444
45-func keyPriceHistory (internalBasetAssetStr,h,timestamp) = makeString(["%s%s%d%d%d__price__history", internalBasetAssetStr, toString(h), toString(timestamp)], SEP)
45+func f33 (v34,h,v35) = makeString(["%s%s%d%d%d__price__history", v34, toString(h), toString(v35)], SEP)
4646
4747
48-func keyTotalLocked (internalBasetAssetStr) = ("%s%s%d__total__locked__" + internalBasetAssetStr)
48+func f36 (v37) = ("%s%s%d__total__locked__" + v37)
4949
5050
51-func keyTotalLockedByUser (internalBaseAssetStr,userAddressStr) = makeString(["%s%s%d%s__total__locked", internalBaseAssetStr, userAddressStr], SEP)
51+func f38 (v39,v40) = makeString(["%s%s%d%s__total__locked", v39, v40], SEP)
5252
5353
54-func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
54+func f41 (v42) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(v42))
5555
5656
57-func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
57+func f43 (v44) = ("%s%s%s__mappings__baseAsset2internalId__" + v44)
5858
5959
60-func keyMappingsShare2baseAssetId (shareAssetStr) = ("%s%s%s__mappings__share2baseAssetId__" + shareAssetStr)
60+func f45 (v46) = ("%s%s%s__mappings__share2baseAssetId__" + v46)
6161
6262
63-func keyMappingsBaseAsset2shareId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2shareId__" + baseAssetStr)
63+func f47 (v48) = ("%s%s%s__mappings__baseAsset2shareId__" + v48)
6464
6565
66-func keyShutdownSubmitOperation (internalBaseAssetStr) = ("%s%s%d__shutdown__submit__" + internalBaseAssetStr)
66+func f49 (v50) = ("%s%s%d__shutdown__submit__" + v50)
6767
6868
69-func keyShutdownManager (internalBaseAssetStr) = ("%s%s%d__shutdown__manager__" + internalBaseAssetStr)
69+func f51 (v52) = ("%s%s%d__shutdown__manager__" + v52)
7070
7171
72-func keyTopUpCurrentIdx (internalBaseAssetStr) = ("%s%s%d__topup__currentIdx__" + internalBaseAssetStr)
72+func f53 (v54) = ("%s%s%d__topup__currentIdx__" + v54)
7373
7474
75-func keyTopUpLastHeight (internalBasetAssetStr,sender) = makeString(["%s%s%s%d%s__topup__last__height", internalBasetAssetStr, sender], SEP)
75+func f55 (v56,v57) = makeString(["%s%s%s%d%s__topup__last__height", v56, v57], SEP)
7676
7777
78-func keyTopupMutext (internalBasetAssetStr) = ("%s%s%d__topup__mutex__" + internalBasetAssetStr)
78+func f58 (v59) = ("%s%s%d__topup__mutex__" + v59)
7979
8080
81-func keyTopupHistory (internalBasetAssetStr,topupIdx) = makeString(["%s%s%d%d__topup__history", internalBasetAssetStr, toString(topupIdx)], SEP)
81+func f60 (v61,v62) = makeString(["%s%s%d%d__topup__history", v61, toString(v62)], SEP)
8282
8383
84-func keyLimitsRemaining (internalBasetAssetStr) = ("%s%s%d__limits__remaining__" + internalBasetAssetStr)
84+func f63 (v64) = ("%s%s%d__limits__remaining__" + v64)
8585
8686
87-let IdxCfgShareAssetId = 1
87+let v65 = 1
8888
89-let IdxCfgInternalBaseAsset = 2
89+let v66 = 2
9090
91-let IdxCfgDecimalsMultBothAssets = 3
91+let v67 = 3
9292
93-let IdxCfgDecimalsMultPrice = 4
93+let v68 = 4
9494
95-let IdxCfgGetDelayBlocks = 5
95+let v69 = 5
9696
97-let IdxCfgTopupIntervalInBlocks = 6
97+let v70 = 6
9898
99-let IdxCfgTopupMaxNegativePart = 7
99+let v71 = 7
100100
101-let IdxCfgTopupManagerAddress = 8
101+let v72 = 8
102102
103-let IdxCfgSubmitLimitsBaseMax = 9
103+let v73 = 9
104104
105-let IdxCfgSubmitLimitsBaseReset = 10
105+let v74 = 10
106106
107-let IdxCfgSubmitLimitsShareMax = 11
107+let v75 = 11
108108
109-let IdxCfgSubmitLimitsShareReset = 12
109+let v76 = 12
110110
111-let IdxCfgAdminAddress = 13
111+let v77 = 13
112112
113113 func dataAssetCfg (shareAssetStr,internalBaseAssetStr,decimalsMultBothAssets,decimalsMultPrice,getDelayInBlocks,topupIntervalInBlocks,topupMaxNegativePart,topupManagerAddress,submitLimitsBaseMax,submitLimitsBaseReset,submitLimitsShareMax,submitLimitsShareReset,adminAddress) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", shareAssetStr, internalBaseAssetStr, toString(decimalsMultBothAssets), toString(decimalsMultPrice), toString(getDelayInBlocks), toString(topupIntervalInBlocks), toString(topupMaxNegativePart), topupManagerAddress, toString(submitLimitsBaseMax), toString(submitLimitsBaseReset), toString(submitLimitsShareMax), toString(submitLimitsShareReset), adminAddress], SEP)
114114
115115
116-let IdxTotalLockedInShare = 1
116+let v78 = 1
117117
118-let IdxTotalLockedOutBase = 2
118+let v79 = 2
119119
120-let IdxTotalLockedInBase = 3
120+let v80 = 3
121121
122-let IdxTotalLockedOutShare = 4
122+let v81 = 4
123123
124-func dataTotalLocked (inShareAmount,outBaseAmount,inBaseAmount,outShareAmount) = makeString(["%d%d%d%d", toString(inShareAmount), toString(outBaseAmount), toString(inBaseAmount), toString(outShareAmount)], SEP)
124+func f82 (v83,v84,v85,v86) = makeString(["%d%d%d%d", toString(v83), toString(v84), toString(v85), toString(v86)], SEP)
125125
126126
127-func dataTotalLockedInt (inShareAmount,outBaseAmount,inBaseAmount,outShareAmount) = [-1, inShareAmount, outBaseAmount, inBaseAmount, outShareAmount]
127+func f87 (v88,v89,v90,v91) = [-1, v88, v89, v90, v91]
128128
129129
130-func readTotalLocked (key) = {
131- let totalLockedArray = split(valueOrElse(getString(this, key), dataTotalLocked(0, 0, 0, 0)), SEP)
132- dataTotalLockedInt(parseIntValue(totalLockedArray[IdxTotalLockedInShare]), parseIntValue(totalLockedArray[IdxTotalLockedOutBase]), parseIntValue(totalLockedArray[IdxTotalLockedInBase]), parseIntValue(totalLockedArray[IdxTotalLockedOutShare]))
130+func f92 (key) = {
131+ let v93 = split(valueOrElse(getString(this, key), f82(0, 0, 0, 0)), SEP)
132+ f87(parseIntValue(v93[v78]), parseIntValue(v93[v79]), parseIntValue(v93[v80]), parseIntValue(v93[v81]))
133133 }
134134
135135
136-func calcTotalLockedDiff (direction,operationType,internalBaseAssetStr,price,priceMult,inAmount,baseAssetId,shareAssetId) = {
137- let t = (direction + operationType)
136+func f94 (v95,v96,v97,v98,v99,v100,v101,v102) = {
137+ let t = (v95 + v96)
138138 if ((t == "submitP"))
139139 then {
140- let totalDiff = dataTotalLockedInt(0, 0, inAmount, 0)
141- let userDiff = totalDiff
142- $Tuple4(totalDiff, userDiff, 0, fromBase58String(""))
140+ let v103 = f87(0, 0, v100, 0)
141+ let v104 = v103
142+ $Tuple4(v103, v104, 0, fromBase58String(""))
143143 }
144144 else if ((t == "submitG"))
145145 then {
146- let totalDiff = dataTotalLockedInt(inAmount, 0, 0, 0)
147- let userDiff = totalDiff
148- $Tuple4(totalDiff, userDiff, 0, fromBase58String(""))
146+ let v105 = f87(v100, 0, 0, 0)
147+ let v106 = v105
148+ $Tuple4(v105, v106, 0, fromBase58String(""))
149149 }
150150 else if ((t == "executeP"))
151151 then {
152- let outAmount = convertBase2Share(inAmount, price, priceMult)
153- let totalDiff = dataTotalLockedInt(0, 0, 0, outAmount)
154- let userDiff = dataTotalLockedInt(0, 0, inAmount, 0)
155- $Tuple4(totalDiff, userDiff, outAmount, shareAssetId)
152+ let v107 = f19(v100, v98, v99)
153+ let v108 = f87(0, 0, 0, v107)
154+ let v109 = f87(0, 0, v100, 0)
155+ $Tuple4(v108, v109, v107, v102)
156156 }
157157 else if ((t == "executeG"))
158158 then {
159- let outAmount = convertShare2Base(inAmount, price, priceMult)
160- let totalDiff = dataTotalLockedInt(0, outAmount, 0, 0)
161- let userDiff = dataTotalLockedInt(inAmount, 0, 0, 0)
162- $Tuple4(totalDiff, userDiff, outAmount, baseAssetId)
159+ let v110 = f15(v100, v98, v99)
160+ let v111 = f87(0, v110, 0, 0)
161+ let v112 = f87(v100, 0, 0, 0)
162+ $Tuple4(v111, v112, v110, v101)
163163 }
164164 else if ((t == "topup"))
165165 then {
166- let totalLockedArray = readTotalLocked(keyTotalLocked(internalBaseAssetStr))
167- let totalLockedInBaseAmount = totalLockedArray[IdxTotalLockedInBase]
168- let totalLockedInShareAmount = totalLockedArray[IdxTotalLockedInShare]
169- let totalDiff = dataTotalLockedInt(totalLockedInShareAmount, (-1 * convertShare2Base(totalLockedInShareAmount, price, priceMult)), totalLockedInBaseAmount, (-1 * convertBase2Share(totalLockedInBaseAmount, price, priceMult)))
170- $Tuple4(totalDiff, nil, 0, fromBase58String(""))
166+ let v113 = f92(f36(v97))
167+ let v114 = v113[v80]
168+ let v115 = v113[v78]
169+ let v116 = f87(v115, (-1 * f15(v115, v98, v99)), v114, (-1 * f19(v114, v98, v99)))
170+ $Tuple4(v116, nil, 0, fromBase58String(""))
171171 }
172172 else throw(("Unsupported Type " + t))
173173 }
174174
175175
176176 func TotalLockedStringEntry (action,key,diff) = {
177- func UPDATE (a,b) = if ((action == "INCREMENT"))
177+ func f117 (a,b) = if ((action == "INCREMENT"))
178178 then (a + b)
179179 else if ((action == "DECREMENT"))
180180 then (a - b)
181181 else throw(("Unsupported action " + action))
182182
183- let dataArray = readTotalLocked(key)
184- StringEntry(key, dataTotalLocked(UPDATE(dataArray[IdxTotalLockedInShare], diff[IdxTotalLockedInShare]), UPDATE(dataArray[IdxTotalLockedOutBase], diff[IdxTotalLockedOutBase]), UPDATE(dataArray[IdxTotalLockedInBase], diff[IdxTotalLockedInBase]), UPDATE(dataArray[IdxTotalLockedOutShare], diff[IdxTotalLockedOutShare])))
183+ let v118 = f92(key)
184+ StringEntry(key, f82(f117(v118[v78], diff[v78]), f117(v118[v79], diff[v79]), f117(v118[v80], diff[v80]), f117(v118[v81], diff[v81])))
185185 }
186186
187187
188-func keyOperation (operationType,internalBaseAssetStr,userAddress,txId) = makeString(["%s%d%s%s", operationType, internalBaseAssetStr, userAddress, txId], SEP)
188+func f119 (v120,v121,v122,txId) = makeString(["%s%d%s%s", v120, v121, v122, txId], SEP)
189189
190190
191-let IdxOperStatus = 1
191+let v123 = 1
192192
193-let IdxOperInAmount = 2
193+let v124 = 2
194194
195-let IdxOperPrice = 3
195+let v125 = 3
196196
197-let IdxOperOutAmount = 4
197+let v126 = 4
198198
199-let IdxOperStartHeight = 5
199+let v127 = 5
200200
201-let IdxOperStartTimestamp = 6
201+let v128 = 6
202202
203-let IdxOperEndHeight = 7
203+let v129 = 7
204204
205-let IdxOperEndTimestamp = 8
205+let v130 = 8
206206
207-let IdxOperTopupUnlockIdx = 9
207+let v131 = 9
208208
209209 func privateDataOperationAllStrings (status,inAssetAmount,price,outAssetAmount,startHeight,startTimestamp,endHeight,endTimestamp,lock) = makeString(["%s%d%d%d%d%d%d%d%d", status, inAssetAmount, price, outAssetAmount, startHeight, startTimestamp, endHeight, endTimestamp, lock], SEP)
210210
212212 func dataOperation (status,inAssetAmount,price,outAssetAmount,startHeight,startTimestamp,endHeight,endTimestamp,topupUnlockIdx) = privateDataOperationAllStrings(status, toString(inAssetAmount), toString(price), toString(outAssetAmount), toString(startHeight), toString(startTimestamp), toString(endHeight), toString(endTimestamp), toString(topupUnlockIdx))
213213
214214
215-func dataOperationExecutionUpdate (currOperArray,newStatus,newPrice,newOutAmount) = privateDataOperationAllStrings(newStatus, currOperArray[IdxOperInAmount], toString(newPrice), toString(newOutAmount), currOperArray[IdxOperStartHeight], currOperArray[IdxOperStartTimestamp], toString(height), toString(lastBlock.timestamp), currOperArray[IdxOperTopupUnlockIdx])
215+func dataOperationExecutionUpdate (currOperArray,newStatus,newPrice,newOutAmount) = privateDataOperationAllStrings(newStatus, currOperArray[v124], toString(newPrice), toString(newOutAmount), currOperArray[v127], currOperArray[v128], toString(height), toString(lastBlock.timestamp), currOperArray[v131])
216216
217217
218-func readAssetCfgOrFail (baseAssetStr) = {
219- let key = keyAssetCfg(baseAssetStr)
220- split(getStringOrFail(key), SEP)
218+func f132 (v133) = {
219+ let key = f23(v133)
220+ split(f0(key), SEP)
221221 }
222222
223223
224-let IdxLimitsRemainingBase = 1
224+let v134 = 1
225225
226-let IdxLimitsRemainingShare = 2
226+let v135 = 2
227227
228-func RemainingLimitsStringEntry (key,baseRemainingLimit,shareRemainingLimit) = StringEntry(key, makeString(["%d%d", toString(baseRemainingLimit), toString(shareRemainingLimit)], SEP))
228+func f136 (key,v137,v138) = StringEntry(key, makeString(["%d%d", toString(v137), toString(v138)], SEP))
229229
230230
231-func TopupMutexIntEntry (internalBaseAssetStr,acquiredHeight) = IntegerEntry(keyTopupMutext(internalBaseAssetStr), acquiredHeight)
231+func f139 (v140,v141) = IntegerEntry(f58(v140), v141)
232232
233233
234-func genericCalcPrice (internalBaseAssetStr,baseAssetId,topUpBaseAmount,shareAssetId,decimalsMultPrice) = {
235- let totalLockedArray = readTotalLocked(keyTotalLocked(internalBaseAssetStr))
236- let totalLockedOutBaseAmount = totalLockedArray[IdxTotalLockedOutBase]
237- let currIterTotalInBaseAmount = totalLockedArray[IdxTotalLockedInBase]
238- let baseAssetBalance = assetBalance(this, baseAssetId)
239- let baseAssetBalanceWCO = (((baseAssetBalance + topUpBaseAmount) - currIterTotalInBaseAmount) - totalLockedOutBaseAmount)
240- let totalLockedOutShareAmount = totalLockedArray[IdxTotalLockedOutShare]
241- let currIterTotalInShareAmount = totalLockedArray[IdxTotalLockedInShare]
242- let shareEmission = value(assetInfo(shareAssetId)).quantity
243- if ((0 > baseAssetBalanceWCO))
244- then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString(baseAssetBalance)) + " baseAssetBalanceWCO=") + toString(baseAssetBalanceWCO)))
234+func f142 (v143,v144,v145,v146,v147) = {
235+ let v148 = f92(f36(v143))
236+ let v149 = v148[v79]
237+ let v150 = v148[v80]
238+ let v151 = assetBalance(this, v144)
239+ let v152 = (((v151 + v145) - v150) - v149)
240+ let v153 = v148[v81]
241+ let v154 = v148[v78]
242+ let v155 = value(assetInfo(v146)).quantity
243+ if ((0 > v152))
244+ then throw(((("v152 < 0: v151=" + toString(v151)) + " v152=") + toString(v152)))
245245 else {
246- let lastPrice = getIntOrFail(keyPriceLast(internalBaseAssetStr))
247- let price = if ((shareEmission == 0))
248- then lastPrice
249- else fraction(baseAssetBalanceWCO, decimalsMultPrice, shareEmission)
250- $Tuple9(price, baseAssetBalance, -1, baseAssetBalanceWCO, shareEmission, currIterTotalInBaseAmount, currIterTotalInShareAmount, totalLockedOutBaseAmount, totalLockedOutShareAmount)
246+ let v156 = f2(f26(v143))
247+ let v157 = if ((v155 == 0))
248+ then v156
249+ else fraction(v152, v147, v155)
250+ $Tuple9(v157, v151, -1, v152, v155, v150, v154, v149, v153)
251251 }
252252 }
253253
254254
255-func calcPrice (internalBaseAssetStr,baseAssetId,shareAssetId,decimalsMultPrice) = genericCalcPrice(internalBaseAssetStr, baseAssetId, 0, shareAssetId, decimalsMultPrice)
255+func f158 (v159,v160,v161,v162) = f142(v159, v160, 0, v161, v162)
256256
257257
258-func commonSubmit (operationType,i,inAmount,inAssetId,baseAssetStr) = {
259- let inAssetStr = toBase58String(inAssetId)
260- let userAddressStr = toString(i.caller)
261- let baseAssetId = fromBase58String(baseAssetStr)
262- let cfgArray = readAssetCfgOrFail(baseAssetStr)
263- let shareAssetStr = cfgArray[IdxCfgShareAssetId]
264- let shareAssetId = fromBase58String(shareAssetStr)
265- let decimalsMultBothAssets = parseIntValue(cfgArray[IdxCfgDecimalsMultBothAssets])
266- let internalBaseAssetStr = cfgArray[IdxCfgInternalBaseAsset]
267- let limitsKEY = keyLimitsRemaining(internalBaseAssetStr)
268- let limitsCfgArray = split(getStringOrFail(limitsKEY), SEP)
269- let limitsRemainingBase = parseIntValue(limitsCfgArray[IdxLimitsRemainingBase])
270- let limitsRemainingShare = parseIntValue(limitsCfgArray[IdxLimitsRemainingShare])
271- let isSubmitBlocked = valueOrElse(getBoolean(this, keyShutdownSubmitOperation(internalBaseAssetStr)), false)
272- if (isSubmitBlocked)
258+func f163 (v164,i,v165,v166,v167) = {
259+ let v168 = toBase58String(v166)
260+ let v169 = toString(i.caller)
261+ let v170 = fromBase58String(v167)
262+ let v171 = f132(v167)
263+ let v172 = v171[v65]
264+ let v173 = fromBase58String(v172)
265+ let v174 = parseIntValue(v171[v67])
266+ let v175 = v171[v66]
267+ let v176 = f63(v175)
268+ let v177 = split(f0(v176), SEP)
269+ let v178 = parseIntValue(v177[v134])
270+ let v179 = parseIntValue(v177[v135])
271+ let v180 = valueOrElse(getBoolean(this, f49(v175)), false)
272+ if (v180)
273273 then throw("submit operation is blocked")
274274 else {
275- let operationsMutex = valueOrElse(getInteger(this, keyTopupMutext(internalBaseAssetStr)), 0)
276- if (((operationsMutex + 60) > height))
275+ let v181 = valueOrElse(getInteger(this, f58(v175)), 0)
276+ if (((v181 + 60) > height))
277277 then throw("submit operations are blocked by topup manager")
278278 else {
279- let diffTuple = calcTotalLockedDiff("submit", operationType, internalBaseAssetStr, 0, 0, inAmount, baseAssetId, shareAssetId)
280- let limitsRemainingBaseNew = (limitsRemainingBase - diffTuple._2[IdxTotalLockedInBase])
281- let limitsRemainingShareNew = (limitsRemainingShare - diffTuple._2[IdxTotalLockedInShare])
282- if (if ((0 > limitsRemainingBaseNew))
279+ let v182 = f94("submit", v164, v175, 0, 0, v165, v170, v173)
280+ let v183 = (v178 - v182._2[v80])
281+ let v184 = (v179 - v182._2[v78])
282+ if (if ((0 > v183))
283283 then true
284- else (0 > limitsRemainingShareNew))
285- then failSubmitLimitsExceeds(limitsRemainingBase, limitsRemainingShare, limitsRemainingBaseNew, limitsRemainingShareNew)
284+ else (0 > v184))
285+ then f8(v178, v179, v183, v184)
286286 else {
287- let topUpCurrentIdx = getIntOrFail(keyTopUpCurrentIdx(internalBaseAssetStr))
288- ((([StringEntry(keyOperation(operationType, internalBaseAssetStr, userAddressStr, toBase58String(i.transactionId)), dataOperation("PENDING", inAmount, 0, 0, height, lastBlock.timestamp, 0, 0, (topUpCurrentIdx + 1)))] :+ TotalLockedStringEntry("INCREMENT", keyTotalLocked(internalBaseAssetStr), diffTuple._1)) :+ TotalLockedStringEntry("INCREMENT", keyTotalLockedByUser(internalBaseAssetStr, userAddressStr), diffTuple._2)) :+ RemainingLimitsStringEntry(limitsKEY, limitsRemainingBaseNew, limitsRemainingShareNew))
287+ let v185 = f2(f53(v175))
288+ ((([StringEntry(f119(v164, v175, v169, toBase58String(i.transactionId)), dataOperation("PENDING", v165, 0, 0, height, lastBlock.timestamp, 0, 0, (v185 + 1)))] :+ TotalLockedStringEntry("INCREMENT", f36(v175), v182._1)) :+ TotalLockedStringEntry("INCREMENT", f38(v175, v169), v182._2)) :+ f136(v176, v183, v184))
289289 }
290290 }
291291 }
292292 }
293293
294294
295-func commonExecute (operationType,baseAssetStr,userAddressStr,submitTxIdStr) = {
296- let userAddress = addressFromStringValue(userAddressStr)
297- let assetCfgArray = readAssetCfgOrFail(baseAssetStr)
298- let shareAssetId = fromBase58String(assetCfgArray[IdxCfgShareAssetId])
299- let internalBaseAssetStr = assetCfgArray[IdxCfgInternalBaseAsset]
300- let decimalsMultPrice = parseIntValue(assetCfgArray[IdxCfgDecimalsMultPrice])
301- let baseAssetId = fromBase58String(baseAssetStr)
302- let operationKey = keyOperation(operationType, internalBaseAssetStr, userAddressStr, submitTxIdStr)
303- let operationArray = split(getStringOrFail(operationKey), SEP)
304- let status = operationArray[IdxOperStatus]
305- let inAmount = parseIntValue(operationArray[IdxOperInAmount])
306- let topupUnlockIdx = parseIntValue(operationArray[IdxOperTopupUnlockIdx])
307- let currTopUpIdx = getIntOrFail(keyTopUpCurrentIdx(internalBaseAssetStr))
308- let priceByTopUpId = getIntOrFail(keyPriceByTopUpIdx(internalBaseAssetStr, topupUnlockIdx))
309- if ((status != "PENDING"))
310- then failExecuteGet("Status is not PENDING", baseAssetStr, userAddressStr, submitTxIdStr, operationType)
311- else if ((topupUnlockIdx > currTopUpIdx))
312- then failExecuteGet(((("OperLock[" + toString(topupUnlockIdx)) + "] > ") + toString(currTopUpIdx)), baseAssetStr, userAddressStr, submitTxIdStr, operationType)
295+func f186 (v187,v188,v189,v190) = {
296+ let v191 = addressFromStringValue(v189)
297+ let v192 = f132(v188)
298+ let v193 = fromBase58String(v192[v65])
299+ let v194 = v192[v66]
300+ let v195 = parseIntValue(v192[v68])
301+ let v196 = fromBase58String(v188)
302+ let v197 = f119(v187, v194, v189, v190)
303+ let v198 = split(f0(v197), SEP)
304+ let v199 = v198[v123]
305+ let v200 = parseIntValue(v198[v124])
306+ let v201 = parseIntValue(v198[v131])
307+ let v202 = f2(f53(v194))
308+ let v203 = f2(f30(v194, v201))
309+ if ((v199 != "PENDING"))
310+ then f3("Status is not PENDING", v188, v189, v190, v187)
311+ else if ((v201 > v202))
312+ then f3(((("OperLock[" + toString(v201)) + "] > ") + toString(v202)), v188, v189, v190, v187)
313313 else {
314- let diffTuple = calcTotalLockedDiff("execute", operationType, internalBaseAssetStr, priceByTopUpId, decimalsMultPrice, inAmount, baseAssetId, shareAssetId)
315- let outAmount = diffTuple._3
316- let outTransferData = if ((diffTuple._4 == baseAssetId))
317- then [ScriptTransfer(userAddress, outAmount, baseAssetId)]
318- else [ScriptTransfer(userAddress, outAmount, shareAssetId)]
319- (((outTransferData :+ StringEntry(operationKey, dataOperationExecutionUpdate(operationArray, "FINISHED", priceByTopUpId, outAmount))) :+ TotalLockedStringEntry("DECREMENT", keyTotalLocked(internalBaseAssetStr), diffTuple._1)) :+ TotalLockedStringEntry("DECREMENT", keyTotalLockedByUser(internalBaseAssetStr, userAddressStr), diffTuple._2))
314+ let v204 = f94("execute", v187, v194, v203, v195, v200, v196, v193)
315+ let v205 = v204._3
316+ let v206 = if ((v204._4 == v196))
317+ then [ScriptTransfer(v191, v205, v196)]
318+ else [ScriptTransfer(v191, v205, v193)]
319+ (((v206 :+ StringEntry(v197, dataOperationExecutionUpdate(v198, "FINISHED", v203, v205))) :+ TotalLockedStringEntry("DECREMENT", f36(v194), v204._1)) :+ TotalLockedStringEntry("DECREMENT", f38(v194, v189), v204._2))
320320 }
321321 }
322322
323323
324-func privateCurrentSysParamsREST (baseAssetStr) = {
325- let baseAssetId = fromBase58String(baseAssetStr)
326- let cfgArray = readAssetCfgOrFail(baseAssetStr)
327- let shareAssetStr = cfgArray[IdxCfgShareAssetId]
328- let shareAssetId = fromBase58String(shareAssetStr)
329- let decimalsMultBothAssetsVal = parseIntValue(cfgArray[IdxCfgDecimalsMultBothAssets])
330- let decimalsMultPriceVal = parseIntValue(cfgArray[IdxCfgDecimalsMultPrice])
331- let internalBaseAssetStr = cfgArray[IdxCfgInternalBaseAsset]
332- let priceAthKEY = keyPriceATH(internalBaseAssetStr)
333- let priceAthVal = valueOrElse(getInteger(this, priceAthKEY), 0)
334- let priceLastKEY = keyPriceLast(internalBaseAssetStr)
335- let priceLastVal = valueOrElse(getInteger(this, priceLastKEY), 0)
336- let sysState = calcPrice(internalBaseAssetStr, baseAssetId, shareAssetId, decimalsMultPriceVal)
337- $Tuple13(IntegerEntry("price", sysState._1), IntegerEntry("decimalsMultPrice", decimalsMultPriceVal), IntegerEntry("baseAssetBalance", sysState._2), IntegerEntry("-1", sysState._3), IntegerEntry("baseAssetBalanceWCO", sysState._4), IntegerEntry("shareEmission", sysState._5), IntegerEntry("currIterTotalInBaseAmount", sysState._6), IntegerEntry("currIterTotalInShareAmount", sysState._7), IntegerEntry("totalLockedOutBaseAmount", sysState._8), IntegerEntry("totalLockedOutShareAmount", sysState._9), IntegerEntry("decimalsMultBothAssets", decimalsMultBothAssetsVal), IntegerEntry("priceATH", priceAthVal), IntegerEntry("priceLast", priceLastVal))
324+func f207 (v208) = {
325+ let v209 = fromBase58String(v208)
326+ let v210 = f132(v208)
327+ let v211 = v210[v65]
328+ let v212 = fromBase58String(v211)
329+ let v213 = parseIntValue(v210[v67])
330+ let v214 = parseIntValue(v210[v68])
331+ let v215 = v210[v66]
332+ let v216 = f28(v215)
333+ let v217 = valueOrElse(getInteger(this, v216), 0)
334+ let v218 = f26(v215)
335+ let v219 = valueOrElse(getInteger(this, v218), 0)
336+ let v220 = f158(v215, v209, v212, v214)
337+ $Tuple13(IntegerEntry("price", v220._1), IntegerEntry("decimalsMultPrice", v214), IntegerEntry("baseAssetBalance", v220._2), IntegerEntry("-1", v220._3), IntegerEntry("baseAssetBalanceWCO", v220._4), IntegerEntry("shareEmission", v220._5), IntegerEntry("currIterTotalInBaseAmount", v220._6), IntegerEntry("currIterTotalInShareAmount", v220._7), IntegerEntry("totalLockedOutBaseAmount", v220._8), IntegerEntry("totalLockedOutShareAmount", v220._9), IntegerEntry("decimalsMultBothAssets", v213), IntegerEntry("priceATH", v217), IntegerEntry("priceLast", v219))
338338 }
339339
340340
341341 @Callable(i)
342342 func adminRegisterAsset (baseAssetStr,shareAssetName,shareAssetDescr,getDelayinBlocks,shutdownManagerAddress,startPrice,topupIntervalInBlocks,topupMaxNegativePart,topupManagerAddress,submitLimitsBaseMax,submitLimitsBaseReset,submitLimitsShareMax,submitLimitsShareReset,adminAddress) = {
343- let baseAssetId = fromBase58String(baseAssetStr)
344- let bothAssetsDecimals = value(assetInfo(baseAssetId)).decimals
345- let decimalsMultBothAssets = pow(10, 0, bothAssetsDecimals, 0, 0, DOWN)
346- let decimalsMultPrice = ((100 * 1000) * 1000)
347- let topupMaxNegativePercents = fraction(topupMaxNegativePart, 100, decimalsMultBothAssets)
348- let baseAssetBalance = assetBalance(this, baseAssetId)
343+ let v221 = fromBase58String(baseAssetStr)
344+ let v222 = value(assetInfo(v221)).decimals
345+ let v223 = pow(10, 0, v222, 0, 0, DOWN)
346+ let v224 = ((100 * 1000) * 1000)
347+ let v225 = fraction(topupMaxNegativePart, 100, v223)
348+ let v226 = assetBalance(this, v221)
349349 if ((i.caller != this))
350350 then throw("permissions denied")
351- else if ((baseAssetBalance == 0))
351+ else if ((v226 == 0))
352352 then throw(((toString(this) + " must have any initial balance of ") + baseAssetStr))
353- else if (isDefined(getString(this, keyAssetCfg(baseAssetStr))))
353+ else if (isDefined(getString(this, f23(baseAssetStr))))
354354 then throw((baseAssetStr + " has been already registered"))
355355 else if ((toString(addressFromStringValue(shutdownManagerAddress)) != shutdownManagerAddress))
356356 then throw("invalid shutdownManagerAddress")
358358 then throw("invalid topupManagerAddress")
359359 else if ((0 > getDelayinBlocks))
360360 then throw(("invalid getDelayinBlocks=" + toString(getDelayinBlocks)))
361- else if (if ((0 >= topupMaxNegativePercents))
361+ else if (if ((0 >= v225))
362362 then true
363- else (topupMaxNegativePercents >= 99))
363+ else (v225 >= 99))
364364 then throw("invalid topupMaxNegativePart parameter")
365365 else {
366- let shareInitAmount = convertBase2Share(baseAssetBalance, startPrice, decimalsMultPrice)
367- let shareAssetIssueAction = Issue(shareAssetName, shareAssetDescr, shareInitAmount, bothAssetsDecimals, true)
368- let shareAssetId = calculateAssetId(shareAssetIssueAction)
369- let shareAssetStr = toBase58String(shareAssetId)
370- let internalBaseAssetId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
371- let internalBaseAssetStr = toString(internalBaseAssetId)
372-[StringEntry(keyAssetCfg(baseAssetStr), dataAssetCfg(shareAssetStr, internalBaseAssetStr, decimalsMultBothAssets, decimalsMultPrice, getDelayinBlocks, topupIntervalInBlocks, topupMaxNegativePart, topupManagerAddress, submitLimitsBaseMax, submitLimitsBaseReset, submitLimitsShareMax, submitLimitsShareReset, adminAddress)), StringEntry(keyMappingsInternal2baseAssetId(internalBaseAssetId), baseAssetStr), StringEntry(keyMappingsBaseAsset2internalId(baseAssetStr), internalBaseAssetStr), StringEntry(keyMappingsShare2baseAssetId(shareAssetStr), baseAssetStr), StringEntry(keyMappingsBaseAsset2shareId(baseAssetStr), shareAssetStr), BooleanEntry(keyShutdownSubmitOperation(internalBaseAssetStr), false), StringEntry(keyShutdownManager(internalBaseAssetStr), shutdownManagerAddress), IntegerEntry(keyNextInternalAssetId(), (internalBaseAssetId + 1)), IntegerEntry(keyPriceLast(internalBaseAssetStr), startPrice), IntegerEntry(keyPriceHistory(internalBaseAssetStr, height, lastBlock.timestamp), startPrice), IntegerEntry(keyTopUpCurrentIdx(internalBaseAssetStr), 0), RemainingLimitsStringEntry(keyLimitsRemaining(internalBaseAssetStr), submitLimitsBaseMax, submitLimitsShareMax), shareAssetIssueAction, ScriptTransfer(addressFromStringValue(topupManagerAddress), shareInitAmount, shareAssetId)]
366+ let v227 = f19(v226, startPrice, v224)
367+ let v228 = Issue(shareAssetName, shareAssetDescr, v227, v222, true)
368+ let v229 = calculateAssetId(v228)
369+ let v230 = toBase58String(v229)
370+ let v231 = valueOrElse(getInteger(this, f25()), 0)
371+ let v232 = toString(v231)
372+[StringEntry(f23(baseAssetStr), dataAssetCfg(v230, v232, v223, v224, getDelayinBlocks, topupIntervalInBlocks, topupMaxNegativePart, topupManagerAddress, submitLimitsBaseMax, submitLimitsBaseReset, submitLimitsShareMax, submitLimitsShareReset, adminAddress)), StringEntry(f41(v231), baseAssetStr), StringEntry(f43(baseAssetStr), v232), StringEntry(f45(v230), baseAssetStr), StringEntry(f47(baseAssetStr), v230), BooleanEntry(f49(v232), false), StringEntry(f51(v232), shutdownManagerAddress), IntegerEntry(f25(), (v231 + 1)), IntegerEntry(f26(v232), startPrice), IntegerEntry(f33(v232, height, lastBlock.timestamp), startPrice), IntegerEntry(f53(v232), 0), f136(f63(v232), submitLimitsBaseMax, submitLimitsShareMax), v228, ScriptTransfer(addressFromStringValue(topupManagerAddress), v227, v229)]
373373 }
374374 }
375375
376376
377377
378378 @Callable(i)
379-func adminUpdateCfg (baseAssetStr,idxCfg,cfgVal) = {
380- let cfgArray = readAssetCfgOrFail(baseAssetStr)
379+func adminUpdateCfg (v233,v234,v235) = {
380+ let v236 = f132(v233)
381381 nil
382382 }
383383
384384
385385
386386 @Callable(i)
387-func shutdownSubmits (internalBaseAssetId) = {
388- let internalBaseAssetIdStr = toString(internalBaseAssetId)
389- let baseAssetIdStr = getStringOrFail(keyMappingsInternal2baseAssetId(internalBaseAssetId))
390- let shutdownManagerAddress = getStringOrFail(keyShutdownManager(internalBaseAssetIdStr))
391- if ((1 > size(baseAssetIdStr)))
392- then throw("invalid internalBaseAssetId")
393- else if ((toString(i.caller) != shutdownManagerAddress))
387+func shutdownSubmits (v231) = {
388+ let v237 = toString(v231)
389+ let v238 = f0(f41(v231))
390+ let v239 = f0(f51(v237))
391+ if ((1 > size(v238)))
392+ then throw("invalid v231")
393+ else if ((toString(i.caller) != v239))
394394 then throw("access denied")
395- else [BooleanEntry(keyShutdownSubmitOperation(toString(internalBaseAssetId)), true)]
395+ else [BooleanEntry(f49(toString(v231)), true)]
396396 }
397397
398398
400400 @Callable(i)
401401 func submitPut () = {
402402 let pmt = value(i.payments[0])
403- let inAmount = pmt.amount
404- let inAssetId = value(pmt.assetId)
405- let baseAssetStr = toBase58String(inAssetId)
406- commonSubmit("P", i, inAmount, inAssetId, baseAssetStr)
403+ let v240 = pmt.amount
404+ let v241 = value(pmt.assetId)
405+ let v242 = toBase58String(v241)
406+ f163("P", i, v240, v241, v242)
407407 }
408408
409409
411411 @Callable(i)
412412 func submitGet () = {
413413 let pmt = value(i.payments[0])
414- let inAmount = pmt.amount
415- let inAssetId = value(pmt.assetId)
416- let shareAssetStr = toBase58String(inAssetId)
417- let baseAssetStr = getStringOrFail(keyMappingsShare2baseAssetId(shareAssetStr))
418- commonSubmit("G", i, inAmount, inAssetId, baseAssetStr)
414+ let v243 = pmt.amount
415+ let v244 = value(pmt.assetId)
416+ let v230 = toBase58String(v244)
417+ let v245 = f0(f45(v230))
418+ f163("G", i, v243, v244, v245)
419419 }
420420
421421
422422
423423 @Callable(i)
424-func executePut (baseAssetStr,userAddressStr,submitTxIdStr) = commonExecute("P", baseAssetStr, userAddressStr, submitTxIdStr)
424+func executePut (v246,v247,v248) = f186("P", v246, v247, v248)
425425
426426
427427
428428 @Callable(i)
429-func executeGet (baseAssetStr,userAddressStr,submitTxIdStr) = commonExecute("G", baseAssetStr, userAddressStr, submitTxIdStr)
429+func executeGet (v249,v250,v251) = f186("G", v249, v250, v251)
430430
431431
432432
433433 @Callable(i)
434-func operationsMutex (baseAssetStr) = {
435- let assetCfgArray = readAssetCfgOrFail(baseAssetStr)
436- let topUpManagerAddressStr = assetCfgArray[IdxCfgTopupManagerAddress]
437- let internalBaseAssetStr = assetCfgArray[IdxCfgInternalBaseAsset]
438- if ((toString(i.caller) != topUpManagerAddressStr))
439- then failTopupManagerOnly(topUpManagerAddressStr)
440- else [TopupMutexIntEntry(internalBaseAssetStr, height)]
434+func operationsMutex (v252) = {
435+ let v253 = f132(v252)
436+ let v254 = v253[v72]
437+ let v232 = v253[v66]
438+ if ((toString(i.caller) != v254))
439+ then f13(v254)
440+ else [f139(v232, height)]
441441 }
442442
443443
444444
445445 @Callable(i)
446-func topUpBalance (baseAssetStr,income) = {
447- let baseAssetId = fromBase58String(baseAssetStr)
448- let assetCfgArray = readAssetCfgOrFail(baseAssetStr)
449- let shareAssetId = fromBase58String(assetCfgArray[IdxCfgShareAssetId])
450- let priceMult = parseIntValue(assetCfgArray[IdxCfgDecimalsMultPrice])
451- let bothAssetMult = parseIntValue(assetCfgArray[IdxCfgDecimalsMultBothAssets])
452- let topupIntervalInBlocks = parseIntValue(assetCfgArray[IdxCfgTopupIntervalInBlocks])
453- let topupMaxNegativePart = parseIntValue(assetCfgArray[IdxCfgTopupMaxNegativePart])
454- let internalBaseAssetStr = assetCfgArray[IdxCfgInternalBaseAsset]
455- let topUpManagerAddressStr = assetCfgArray[IdxCfgTopupManagerAddress]
456- let submitLimitsBaseMax = parseIntValue(assetCfgArray[IdxCfgSubmitLimitsBaseMax])
457- let submitLimitsShareMax = parseIntValue(assetCfgArray[IdxCfgSubmitLimitsShareMax])
458- let topUpCurrentIdxKEY = keyTopUpCurrentIdx(internalBaseAssetStr)
459- let prevTopUpIdx = getIntOrFail(topUpCurrentIdxKEY)
460- let currentTopUpIdx = (prevTopUpIdx + 1)
461- let valid = if ((income > 0))
446+func topUpBalance (v255,v256) = {
447+ let v221 = fromBase58String(v255)
448+ let v257 = f132(v255)
449+ let v229 = fromBase58String(v257[v65])
450+ let v258 = parseIntValue(v257[v68])
451+ let v259 = parseIntValue(v257[v67])
452+ let v260 = parseIntValue(v257[v70])
453+ let v261 = parseIntValue(v257[v71])
454+ let v232 = v257[v66]
455+ let v262 = v257[v72]
456+ let v263 = parseIntValue(v257[v73])
457+ let v264 = parseIntValue(v257[v75])
458+ let v265 = f53(v232)
459+ let v266 = f2(v265)
460+ let v267 = (v266 + 1)
461+ let v268 = if ((v256 > 0))
462462 then {
463463 let pmt = value(i.payments[0])
464- let pmtAssetId = value(pmt.assetId)
465- if ((baseAssetId != pmtAssetId))
466- then throw("attached payment's asset id is NOT matched passed baseAssetStr")
464+ let v269 = value(pmt.assetId)
465+ if ((v221 != v269))
466+ then throw("attached payment's asset id is NOT matched passed v255")
467467 else if ((size(i.payments) > 1))
468468 then throw("only one payment can be attached")
469- else if ((pmt.amount != income))
470- then throw("attached payment.amount is NOT matched passed income argument")
469+ else if ((pmt.amount != v256))
470+ then throw("attached payment.amount is NOT matched passed v256 argument")
471471 else true
472472 }
473- else if ((0 > income))
473+ else if ((0 > v256))
474474 then {
475- let baseBalance = assetBalance(this, baseAssetId)
476- let allowedAmount = fraction(topupMaxNegativePart, baseBalance, bothAssetMult)
477- if ((-(income) > allowedAmount))
478- then throw(("topup negative income couldn't be greater than " + toString(allowedAmount)))
475+ let v270 = assetBalance(this, v221)
476+ let v271 = fraction(v261, v270, v259)
477+ if ((-(v256) > v271))
478+ then throw(("topup negative v256 couldn't be greater than " + toString(v271)))
479479 else true
480480 }
481- else throw("zero income is not allowed")
482- let topUpLastHeightKEY = keyTopUpLastHeight(internalBaseAssetStr, toString(i.caller))
483- let topUpLastHeight = valueOrElse(getInteger(this, topUpLastHeightKEY), 0)
484- if ((toString(i.caller) != topUpManagerAddressStr))
485- then failTopupManagerOnly(topUpManagerAddressStr)
486- else if (!(valid))
481+ else throw("zero v256 is not allowed")
482+ let v272 = f55(v232, toString(i.caller))
483+ let v273 = valueOrElse(getInteger(this, v272), 0)
484+ if ((toString(i.caller) != v262))
485+ then f13(v262)
486+ else if (!(v268))
487487 then throw("validation failed")
488- else if ((topupIntervalInBlocks > (height - topUpLastHeight)))
489- then throw((("1 topup per " + toString(topupIntervalInBlocks)) + " blocks from the same address is allowed"))
488+ else if ((v260 > (height - v273)))
489+ then throw((("1 topup per " + toString(v260)) + " blocks from the same address is allowed"))
490490 else {
491- let price = genericCalcPrice(internalBaseAssetStr, baseAssetId, income, shareAssetId, priceMult)._1
492- let diffTuple = calcTotalLockedDiff("topup", "", internalBaseAssetStr, price, priceMult, 0, baseAssetId, shareAssetId)
493- let topupTotalDiff = diffTuple._1
494- let priceAthKEY = keyPriceATH(internalBaseAssetStr)
495- let prevPriceATH = valueOrElse(getInteger(this, priceAthKEY), 0)
496- (((((([IntegerEntry(keyPriceLast(internalBaseAssetStr), price), IntegerEntry(keyPriceHistory(internalBaseAssetStr, height, lastBlock.timestamp), price), IntegerEntry(keyPriceByTopUpIdx(internalBaseAssetStr, currentTopUpIdx), price), IntegerEntry(topUpCurrentIdxKEY, currentTopUpIdx), IntegerEntry(priceAthKEY, if ((price > prevPriceATH))
497- then price
498- else prevPriceATH), IntegerEntry(topUpLastHeightKEY, height)] :+ TotalLockedStringEntry("DECREMENT", keyTotalLocked(internalBaseAssetStr), topupTotalDiff)) :+ TopupMutexIntEntry(internalBaseAssetStr, 0)) :+ RemainingLimitsStringEntry(keyLimitsRemaining(internalBaseAssetStr), submitLimitsBaseMax, submitLimitsShareMax)) :+ Burn(shareAssetId, topupTotalDiff[IdxTotalLockedInShare])) :+ Reissue(shareAssetId, -(topupTotalDiff[IdxTotalLockedOutShare]), true)) ++ (if ((0 > income))
499- then [ScriptTransfer(i.caller, -(income), baseAssetId)]
491+ let v274 = f142(v232, v221, v256, v229, v258)._1
492+ let v275 = f94("topup", "", v232, v274, v258, 0, v221, v229)
493+ let v276 = v275._1
494+ let v277 = f28(v232)
495+ let v278 = valueOrElse(getInteger(this, v277), 0)
496+ (((((([IntegerEntry(f26(v232), v274), IntegerEntry(f33(v232, height, lastBlock.timestamp), v274), IntegerEntry(f30(v232, v267), v274), IntegerEntry(v265, v267), IntegerEntry(v277, if ((v274 > v278))
497+ then v274
498+ else v278), IntegerEntry(v272, height)] :+ TotalLockedStringEntry("DECREMENT", f36(v232), v276)) :+ f139(v232, 0)) :+ f136(f63(v232), v263, v264)) :+ Burn(v229, v276[v78])) :+ Reissue(v229, -(v276[v81]), true)) ++ (if ((0 > v256))
499+ then [ScriptTransfer(i.caller, -(v256), v221)]
500500 else nil))
501501 }
502502 }
504504
505505
506506 @Callable(i)
507-func currentSysParamsREST (baseAssetStr) = {
508- let sysStateTuple = privateCurrentSysParamsREST(baseAssetStr)
509- let price = sysStateTuple._1.value
510- let decimalsMultPrice = sysStateTuple._2.value
511- let baseAssetBalance = sysStateTuple._3.value
512- let totalLockedBaseAmount = sysStateTuple._4.value
513- let baseAssetBalanceWCO = sysStateTuple._5.value
514- let shareEmission = sysStateTuple._6.value
515- let currIterTotalInBaseAmount = sysStateTuple._7.value
516- let currIterTotalInShareAmount = sysStateTuple._8.value
517- let totalLockedOutBaseAmount = sysStateTuple._9.value
518- let totalLockedOutShareAmount = sysStateTuple._10.value
519- let decimalsMultBothAssets = sysStateTuple._11.value
520- let priceATH = sysStateTuple._12.value
521- let priceLast = sysStateTuple._13.value
522- let restData = makeString(["startCurrentSysParamsREST", toString(price), toString(decimalsMultPrice), toString(baseAssetBalance), toString(totalLockedBaseAmount), toString(baseAssetBalanceWCO), toString(shareEmission), toString(currIterTotalInBaseAmount), toString(currIterTotalInShareAmount), toString(totalLockedOutBaseAmount), toString(totalLockedOutShareAmount), toString(decimalsMultBothAssets), toString(priceATH), toString(priceLast), "endCurrentSysParamsREST"], SEP)
523- throw(restData)
507+func currentSysParamsREST (v279) = {
508+ let v280 = f207(v279)
509+ let v281 = v280._1.value
510+ let v224 = v280._2.value
511+ let v226 = v280._3.value
512+ let v282 = v280._4.value
513+ let v283 = v280._5.value
514+ let v284 = v280._6.value
515+ let v285 = v280._7.value
516+ let v286 = v280._8.value
517+ let v287 = v280._9.value
518+ let v288 = v280._10.value
519+ let v223 = v280._11.value
520+ let v289 = v280._12.value
521+ let v290 = v280._13.value
522+ let v291 = makeString(["startCurrentSysParamsREST", toString(v281), toString(v224), toString(v226), toString(v282), toString(v283), toString(v284), toString(v285), toString(v286), toString(v287), toString(v288), toString(v223), toString(v289), toString(v290), "endCurrentSysParamsREST"], SEP)
523+ throw(v291)
524524 }
525525
526526
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
6-func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
6+func f0 (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
77
88
9-func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
9+func f1 (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
1010
1111
12-func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
12+func f2 (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
1313
1414
15-func failExecuteGet (msg,baseAssetStr,userAddressStr,submitTxIdStr,operationType) = throw(((((((((msg + ": baseAsset=") + baseAssetStr) + " userAddress=") + userAddressStr) + " submitTxId=") + submitTxIdStr) + " operation=") + operationType))
15+func f3 (msg,v4,v5,v6,v7) = throw(((((((((msg + ": baseAsset=") + v4) + " userAddress=") + v5) + " submitTxId=") + v6) + " operation=") + v7))
1616
1717
18-func failSubmitLimitsExceeds (remainingBase,remainingShare,newRemainingBase,newRemainingShare) = throw((((((((("submit operation limits have been reached: " + " remainingBaseVal=") + toString(remainingBase)) + " remainingShareVal=") + toString(remainingShare)) + " newRemainingBaseVal=") + toString(newRemainingBase)) + " newRemainingShareVal=") + toString(newRemainingShare)))
18+func f8 (v9,v10,v11,v12) = throw((((((((("submit operation limits have been reached: " + " remainingBaseVal=") + toString(v9)) + " remainingShareVal=") + toString(v10)) + " newRemainingBaseVal=") + toString(v11)) + " newRemainingShareVal=") + toString(v12)))
1919
2020
21-func failTopupManagerOnly (topupManagerAddress) = throw((("opertion denied: only topUpManager=" + topupManagerAddress) + " can send such transactions"))
21+func f13 (v14) = throw((("opertion denied: only topUpManager=" + v14) + " can send such transactions"))
2222
2323
24-func convertShare2Base (shareAmount,price,priceMult) = fraction(shareAmount, price, priceMult)
24+func f15 (v16,v17,v18) = fraction(v16, v17, v18)
2525
2626
27-func convertBase2Share (baseAmount,price,priceMult) = fraction(baseAmount, priceMult, price)
27+func f19 (v20,v21,v22) = fraction(v20, v22, v21)
2828
2929
30-func keyAssetCfg (baseAssetStr) = ("%s%s%s__config__asset__" + baseAssetStr)
30+func f23 (v24) = ("%s%s%s__config__asset__" + v24)
3131
3232
33-func keyNextInternalAssetId () = "%s__nextInternalAssetId"
33+func f25 () = "%s__nextInternalAssetId"
3434
3535
36-func keyPriceLast (internalBasetAssetStr) = ("%s%s%d__price__last__" + internalBasetAssetStr)
36+func f26 (v27) = ("%s%s%d__price__last__" + v27)
3737
3838
39-func keyPriceATH (internalBasetAssetStr) = ("%s%s%d__price__ath__" + internalBasetAssetStr)
39+func f28 (v29) = ("%s%s%d__price__ath__" + v29)
4040
4141
42-func keyPriceByTopUpIdx (internalBaseAssetStr,topUpIdx) = makeString(["%s%s%d%d__price__byTopUpIdx", internalBaseAssetStr, toString(topUpIdx)], SEP)
42+func f30 (v31,v32) = makeString(["%s%s%d%d__price__byTopUpIdx", v31, toString(v32)], SEP)
4343
4444
45-func keyPriceHistory (internalBasetAssetStr,h,timestamp) = makeString(["%s%s%d%d%d__price__history", internalBasetAssetStr, toString(h), toString(timestamp)], SEP)
45+func f33 (v34,h,v35) = makeString(["%s%s%d%d%d__price__history", v34, toString(h), toString(v35)], SEP)
4646
4747
48-func keyTotalLocked (internalBasetAssetStr) = ("%s%s%d__total__locked__" + internalBasetAssetStr)
48+func f36 (v37) = ("%s%s%d__total__locked__" + v37)
4949
5050
51-func keyTotalLockedByUser (internalBaseAssetStr,userAddressStr) = makeString(["%s%s%d%s__total__locked", internalBaseAssetStr, userAddressStr], SEP)
51+func f38 (v39,v40) = makeString(["%s%s%d%s__total__locked", v39, v40], SEP)
5252
5353
54-func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
54+func f41 (v42) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(v42))
5555
5656
57-func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
57+func f43 (v44) = ("%s%s%s__mappings__baseAsset2internalId__" + v44)
5858
5959
60-func keyMappingsShare2baseAssetId (shareAssetStr) = ("%s%s%s__mappings__share2baseAssetId__" + shareAssetStr)
60+func f45 (v46) = ("%s%s%s__mappings__share2baseAssetId__" + v46)
6161
6262
63-func keyMappingsBaseAsset2shareId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2shareId__" + baseAssetStr)
63+func f47 (v48) = ("%s%s%s__mappings__baseAsset2shareId__" + v48)
6464
6565
66-func keyShutdownSubmitOperation (internalBaseAssetStr) = ("%s%s%d__shutdown__submit__" + internalBaseAssetStr)
66+func f49 (v50) = ("%s%s%d__shutdown__submit__" + v50)
6767
6868
69-func keyShutdownManager (internalBaseAssetStr) = ("%s%s%d__shutdown__manager__" + internalBaseAssetStr)
69+func f51 (v52) = ("%s%s%d__shutdown__manager__" + v52)
7070
7171
72-func keyTopUpCurrentIdx (internalBaseAssetStr) = ("%s%s%d__topup__currentIdx__" + internalBaseAssetStr)
72+func f53 (v54) = ("%s%s%d__topup__currentIdx__" + v54)
7373
7474
75-func keyTopUpLastHeight (internalBasetAssetStr,sender) = makeString(["%s%s%s%d%s__topup__last__height", internalBasetAssetStr, sender], SEP)
75+func f55 (v56,v57) = makeString(["%s%s%s%d%s__topup__last__height", v56, v57], SEP)
7676
7777
78-func keyTopupMutext (internalBasetAssetStr) = ("%s%s%d__topup__mutex__" + internalBasetAssetStr)
78+func f58 (v59) = ("%s%s%d__topup__mutex__" + v59)
7979
8080
81-func keyTopupHistory (internalBasetAssetStr,topupIdx) = makeString(["%s%s%d%d__topup__history", internalBasetAssetStr, toString(topupIdx)], SEP)
81+func f60 (v61,v62) = makeString(["%s%s%d%d__topup__history", v61, toString(v62)], SEP)
8282
8383
84-func keyLimitsRemaining (internalBasetAssetStr) = ("%s%s%d__limits__remaining__" + internalBasetAssetStr)
84+func f63 (v64) = ("%s%s%d__limits__remaining__" + v64)
8585
8686
87-let IdxCfgShareAssetId = 1
87+let v65 = 1
8888
89-let IdxCfgInternalBaseAsset = 2
89+let v66 = 2
9090
91-let IdxCfgDecimalsMultBothAssets = 3
91+let v67 = 3
9292
93-let IdxCfgDecimalsMultPrice = 4
93+let v68 = 4
9494
95-let IdxCfgGetDelayBlocks = 5
95+let v69 = 5
9696
97-let IdxCfgTopupIntervalInBlocks = 6
97+let v70 = 6
9898
99-let IdxCfgTopupMaxNegativePart = 7
99+let v71 = 7
100100
101-let IdxCfgTopupManagerAddress = 8
101+let v72 = 8
102102
103-let IdxCfgSubmitLimitsBaseMax = 9
103+let v73 = 9
104104
105-let IdxCfgSubmitLimitsBaseReset = 10
105+let v74 = 10
106106
107-let IdxCfgSubmitLimitsShareMax = 11
107+let v75 = 11
108108
109-let IdxCfgSubmitLimitsShareReset = 12
109+let v76 = 12
110110
111-let IdxCfgAdminAddress = 13
111+let v77 = 13
112112
113113 func dataAssetCfg (shareAssetStr,internalBaseAssetStr,decimalsMultBothAssets,decimalsMultPrice,getDelayInBlocks,topupIntervalInBlocks,topupMaxNegativePart,topupManagerAddress,submitLimitsBaseMax,submitLimitsBaseReset,submitLimitsShareMax,submitLimitsShareReset,adminAddress) = makeString(["%s%d%d%d%d%d%d%s%d%d%d%d", shareAssetStr, internalBaseAssetStr, toString(decimalsMultBothAssets), toString(decimalsMultPrice), toString(getDelayInBlocks), toString(topupIntervalInBlocks), toString(topupMaxNegativePart), topupManagerAddress, toString(submitLimitsBaseMax), toString(submitLimitsBaseReset), toString(submitLimitsShareMax), toString(submitLimitsShareReset), adminAddress], SEP)
114114
115115
116-let IdxTotalLockedInShare = 1
116+let v78 = 1
117117
118-let IdxTotalLockedOutBase = 2
118+let v79 = 2
119119
120-let IdxTotalLockedInBase = 3
120+let v80 = 3
121121
122-let IdxTotalLockedOutShare = 4
122+let v81 = 4
123123
124-func dataTotalLocked (inShareAmount,outBaseAmount,inBaseAmount,outShareAmount) = makeString(["%d%d%d%d", toString(inShareAmount), toString(outBaseAmount), toString(inBaseAmount), toString(outShareAmount)], SEP)
124+func f82 (v83,v84,v85,v86) = makeString(["%d%d%d%d", toString(v83), toString(v84), toString(v85), toString(v86)], SEP)
125125
126126
127-func dataTotalLockedInt (inShareAmount,outBaseAmount,inBaseAmount,outShareAmount) = [-1, inShareAmount, outBaseAmount, inBaseAmount, outShareAmount]
127+func f87 (v88,v89,v90,v91) = [-1, v88, v89, v90, v91]
128128
129129
130-func readTotalLocked (key) = {
131- let totalLockedArray = split(valueOrElse(getString(this, key), dataTotalLocked(0, 0, 0, 0)), SEP)
132- dataTotalLockedInt(parseIntValue(totalLockedArray[IdxTotalLockedInShare]), parseIntValue(totalLockedArray[IdxTotalLockedOutBase]), parseIntValue(totalLockedArray[IdxTotalLockedInBase]), parseIntValue(totalLockedArray[IdxTotalLockedOutShare]))
130+func f92 (key) = {
131+ let v93 = split(valueOrElse(getString(this, key), f82(0, 0, 0, 0)), SEP)
132+ f87(parseIntValue(v93[v78]), parseIntValue(v93[v79]), parseIntValue(v93[v80]), parseIntValue(v93[v81]))
133133 }
134134
135135
136-func calcTotalLockedDiff (direction,operationType,internalBaseAssetStr,price,priceMult,inAmount,baseAssetId,shareAssetId) = {
137- let t = (direction + operationType)
136+func f94 (v95,v96,v97,v98,v99,v100,v101,v102) = {
137+ let t = (v95 + v96)
138138 if ((t == "submitP"))
139139 then {
140- let totalDiff = dataTotalLockedInt(0, 0, inAmount, 0)
141- let userDiff = totalDiff
142- $Tuple4(totalDiff, userDiff, 0, fromBase58String(""))
140+ let v103 = f87(0, 0, v100, 0)
141+ let v104 = v103
142+ $Tuple4(v103, v104, 0, fromBase58String(""))
143143 }
144144 else if ((t == "submitG"))
145145 then {
146- let totalDiff = dataTotalLockedInt(inAmount, 0, 0, 0)
147- let userDiff = totalDiff
148- $Tuple4(totalDiff, userDiff, 0, fromBase58String(""))
146+ let v105 = f87(v100, 0, 0, 0)
147+ let v106 = v105
148+ $Tuple4(v105, v106, 0, fromBase58String(""))
149149 }
150150 else if ((t == "executeP"))
151151 then {
152- let outAmount = convertBase2Share(inAmount, price, priceMult)
153- let totalDiff = dataTotalLockedInt(0, 0, 0, outAmount)
154- let userDiff = dataTotalLockedInt(0, 0, inAmount, 0)
155- $Tuple4(totalDiff, userDiff, outAmount, shareAssetId)
152+ let v107 = f19(v100, v98, v99)
153+ let v108 = f87(0, 0, 0, v107)
154+ let v109 = f87(0, 0, v100, 0)
155+ $Tuple4(v108, v109, v107, v102)
156156 }
157157 else if ((t == "executeG"))
158158 then {
159- let outAmount = convertShare2Base(inAmount, price, priceMult)
160- let totalDiff = dataTotalLockedInt(0, outAmount, 0, 0)
161- let userDiff = dataTotalLockedInt(inAmount, 0, 0, 0)
162- $Tuple4(totalDiff, userDiff, outAmount, baseAssetId)
159+ let v110 = f15(v100, v98, v99)
160+ let v111 = f87(0, v110, 0, 0)
161+ let v112 = f87(v100, 0, 0, 0)
162+ $Tuple4(v111, v112, v110, v101)
163163 }
164164 else if ((t == "topup"))
165165 then {
166- let totalLockedArray = readTotalLocked(keyTotalLocked(internalBaseAssetStr))
167- let totalLockedInBaseAmount = totalLockedArray[IdxTotalLockedInBase]
168- let totalLockedInShareAmount = totalLockedArray[IdxTotalLockedInShare]
169- let totalDiff = dataTotalLockedInt(totalLockedInShareAmount, (-1 * convertShare2Base(totalLockedInShareAmount, price, priceMult)), totalLockedInBaseAmount, (-1 * convertBase2Share(totalLockedInBaseAmount, price, priceMult)))
170- $Tuple4(totalDiff, nil, 0, fromBase58String(""))
166+ let v113 = f92(f36(v97))
167+ let v114 = v113[v80]
168+ let v115 = v113[v78]
169+ let v116 = f87(v115, (-1 * f15(v115, v98, v99)), v114, (-1 * f19(v114, v98, v99)))
170+ $Tuple4(v116, nil, 0, fromBase58String(""))
171171 }
172172 else throw(("Unsupported Type " + t))
173173 }
174174
175175
176176 func TotalLockedStringEntry (action,key,diff) = {
177- func UPDATE (a,b) = if ((action == "INCREMENT"))
177+ func f117 (a,b) = if ((action == "INCREMENT"))
178178 then (a + b)
179179 else if ((action == "DECREMENT"))
180180 then (a - b)
181181 else throw(("Unsupported action " + action))
182182
183- let dataArray = readTotalLocked(key)
184- StringEntry(key, dataTotalLocked(UPDATE(dataArray[IdxTotalLockedInShare], diff[IdxTotalLockedInShare]), UPDATE(dataArray[IdxTotalLockedOutBase], diff[IdxTotalLockedOutBase]), UPDATE(dataArray[IdxTotalLockedInBase], diff[IdxTotalLockedInBase]), UPDATE(dataArray[IdxTotalLockedOutShare], diff[IdxTotalLockedOutShare])))
183+ let v118 = f92(key)
184+ StringEntry(key, f82(f117(v118[v78], diff[v78]), f117(v118[v79], diff[v79]), f117(v118[v80], diff[v80]), f117(v118[v81], diff[v81])))
185185 }
186186
187187
188-func keyOperation (operationType,internalBaseAssetStr,userAddress,txId) = makeString(["%s%d%s%s", operationType, internalBaseAssetStr, userAddress, txId], SEP)
188+func f119 (v120,v121,v122,txId) = makeString(["%s%d%s%s", v120, v121, v122, txId], SEP)
189189
190190
191-let IdxOperStatus = 1
191+let v123 = 1
192192
193-let IdxOperInAmount = 2
193+let v124 = 2
194194
195-let IdxOperPrice = 3
195+let v125 = 3
196196
197-let IdxOperOutAmount = 4
197+let v126 = 4
198198
199-let IdxOperStartHeight = 5
199+let v127 = 5
200200
201-let IdxOperStartTimestamp = 6
201+let v128 = 6
202202
203-let IdxOperEndHeight = 7
203+let v129 = 7
204204
205-let IdxOperEndTimestamp = 8
205+let v130 = 8
206206
207-let IdxOperTopupUnlockIdx = 9
207+let v131 = 9
208208
209209 func privateDataOperationAllStrings (status,inAssetAmount,price,outAssetAmount,startHeight,startTimestamp,endHeight,endTimestamp,lock) = makeString(["%s%d%d%d%d%d%d%d%d", status, inAssetAmount, price, outAssetAmount, startHeight, startTimestamp, endHeight, endTimestamp, lock], SEP)
210210
211211
212212 func dataOperation (status,inAssetAmount,price,outAssetAmount,startHeight,startTimestamp,endHeight,endTimestamp,topupUnlockIdx) = privateDataOperationAllStrings(status, toString(inAssetAmount), toString(price), toString(outAssetAmount), toString(startHeight), toString(startTimestamp), toString(endHeight), toString(endTimestamp), toString(topupUnlockIdx))
213213
214214
215-func dataOperationExecutionUpdate (currOperArray,newStatus,newPrice,newOutAmount) = privateDataOperationAllStrings(newStatus, currOperArray[IdxOperInAmount], toString(newPrice), toString(newOutAmount), currOperArray[IdxOperStartHeight], currOperArray[IdxOperStartTimestamp], toString(height), toString(lastBlock.timestamp), currOperArray[IdxOperTopupUnlockIdx])
215+func dataOperationExecutionUpdate (currOperArray,newStatus,newPrice,newOutAmount) = privateDataOperationAllStrings(newStatus, currOperArray[v124], toString(newPrice), toString(newOutAmount), currOperArray[v127], currOperArray[v128], toString(height), toString(lastBlock.timestamp), currOperArray[v131])
216216
217217
218-func readAssetCfgOrFail (baseAssetStr) = {
219- let key = keyAssetCfg(baseAssetStr)
220- split(getStringOrFail(key), SEP)
218+func f132 (v133) = {
219+ let key = f23(v133)
220+ split(f0(key), SEP)
221221 }
222222
223223
224-let IdxLimitsRemainingBase = 1
224+let v134 = 1
225225
226-let IdxLimitsRemainingShare = 2
226+let v135 = 2
227227
228-func RemainingLimitsStringEntry (key,baseRemainingLimit,shareRemainingLimit) = StringEntry(key, makeString(["%d%d", toString(baseRemainingLimit), toString(shareRemainingLimit)], SEP))
228+func f136 (key,v137,v138) = StringEntry(key, makeString(["%d%d", toString(v137), toString(v138)], SEP))
229229
230230
231-func TopupMutexIntEntry (internalBaseAssetStr,acquiredHeight) = IntegerEntry(keyTopupMutext(internalBaseAssetStr), acquiredHeight)
231+func f139 (v140,v141) = IntegerEntry(f58(v140), v141)
232232
233233
234-func genericCalcPrice (internalBaseAssetStr,baseAssetId,topUpBaseAmount,shareAssetId,decimalsMultPrice) = {
235- let totalLockedArray = readTotalLocked(keyTotalLocked(internalBaseAssetStr))
236- let totalLockedOutBaseAmount = totalLockedArray[IdxTotalLockedOutBase]
237- let currIterTotalInBaseAmount = totalLockedArray[IdxTotalLockedInBase]
238- let baseAssetBalance = assetBalance(this, baseAssetId)
239- let baseAssetBalanceWCO = (((baseAssetBalance + topUpBaseAmount) - currIterTotalInBaseAmount) - totalLockedOutBaseAmount)
240- let totalLockedOutShareAmount = totalLockedArray[IdxTotalLockedOutShare]
241- let currIterTotalInShareAmount = totalLockedArray[IdxTotalLockedInShare]
242- let shareEmission = value(assetInfo(shareAssetId)).quantity
243- if ((0 > baseAssetBalanceWCO))
244- then throw(((("baseAssetBalanceWCO < 0: baseAssetBalance=" + toString(baseAssetBalance)) + " baseAssetBalanceWCO=") + toString(baseAssetBalanceWCO)))
234+func f142 (v143,v144,v145,v146,v147) = {
235+ let v148 = f92(f36(v143))
236+ let v149 = v148[v79]
237+ let v150 = v148[v80]
238+ let v151 = assetBalance(this, v144)
239+ let v152 = (((v151 + v145) - v150) - v149)
240+ let v153 = v148[v81]
241+ let v154 = v148[v78]
242+ let v155 = value(assetInfo(v146)).quantity
243+ if ((0 > v152))
244+ then throw(((("v152 < 0: v151=" + toString(v151)) + " v152=") + toString(v152)))
245245 else {
246- let lastPrice = getIntOrFail(keyPriceLast(internalBaseAssetStr))
247- let price = if ((shareEmission == 0))
248- then lastPrice
249- else fraction(baseAssetBalanceWCO, decimalsMultPrice, shareEmission)
250- $Tuple9(price, baseAssetBalance, -1, baseAssetBalanceWCO, shareEmission, currIterTotalInBaseAmount, currIterTotalInShareAmount, totalLockedOutBaseAmount, totalLockedOutShareAmount)
246+ let v156 = f2(f26(v143))
247+ let v157 = if ((v155 == 0))
248+ then v156
249+ else fraction(v152, v147, v155)
250+ $Tuple9(v157, v151, -1, v152, v155, v150, v154, v149, v153)
251251 }
252252 }
253253
254254
255-func calcPrice (internalBaseAssetStr,baseAssetId,shareAssetId,decimalsMultPrice) = genericCalcPrice(internalBaseAssetStr, baseAssetId, 0, shareAssetId, decimalsMultPrice)
255+func f158 (v159,v160,v161,v162) = f142(v159, v160, 0, v161, v162)
256256
257257
258-func commonSubmit (operationType,i,inAmount,inAssetId,baseAssetStr) = {
259- let inAssetStr = toBase58String(inAssetId)
260- let userAddressStr = toString(i.caller)
261- let baseAssetId = fromBase58String(baseAssetStr)
262- let cfgArray = readAssetCfgOrFail(baseAssetStr)
263- let shareAssetStr = cfgArray[IdxCfgShareAssetId]
264- let shareAssetId = fromBase58String(shareAssetStr)
265- let decimalsMultBothAssets = parseIntValue(cfgArray[IdxCfgDecimalsMultBothAssets])
266- let internalBaseAssetStr = cfgArray[IdxCfgInternalBaseAsset]
267- let limitsKEY = keyLimitsRemaining(internalBaseAssetStr)
268- let limitsCfgArray = split(getStringOrFail(limitsKEY), SEP)
269- let limitsRemainingBase = parseIntValue(limitsCfgArray[IdxLimitsRemainingBase])
270- let limitsRemainingShare = parseIntValue(limitsCfgArray[IdxLimitsRemainingShare])
271- let isSubmitBlocked = valueOrElse(getBoolean(this, keyShutdownSubmitOperation(internalBaseAssetStr)), false)
272- if (isSubmitBlocked)
258+func f163 (v164,i,v165,v166,v167) = {
259+ let v168 = toBase58String(v166)
260+ let v169 = toString(i.caller)
261+ let v170 = fromBase58String(v167)
262+ let v171 = f132(v167)
263+ let v172 = v171[v65]
264+ let v173 = fromBase58String(v172)
265+ let v174 = parseIntValue(v171[v67])
266+ let v175 = v171[v66]
267+ let v176 = f63(v175)
268+ let v177 = split(f0(v176), SEP)
269+ let v178 = parseIntValue(v177[v134])
270+ let v179 = parseIntValue(v177[v135])
271+ let v180 = valueOrElse(getBoolean(this, f49(v175)), false)
272+ if (v180)
273273 then throw("submit operation is blocked")
274274 else {
275- let operationsMutex = valueOrElse(getInteger(this, keyTopupMutext(internalBaseAssetStr)), 0)
276- if (((operationsMutex + 60) > height))
275+ let v181 = valueOrElse(getInteger(this, f58(v175)), 0)
276+ if (((v181 + 60) > height))
277277 then throw("submit operations are blocked by topup manager")
278278 else {
279- let diffTuple = calcTotalLockedDiff("submit", operationType, internalBaseAssetStr, 0, 0, inAmount, baseAssetId, shareAssetId)
280- let limitsRemainingBaseNew = (limitsRemainingBase - diffTuple._2[IdxTotalLockedInBase])
281- let limitsRemainingShareNew = (limitsRemainingShare - diffTuple._2[IdxTotalLockedInShare])
282- if (if ((0 > limitsRemainingBaseNew))
279+ let v182 = f94("submit", v164, v175, 0, 0, v165, v170, v173)
280+ let v183 = (v178 - v182._2[v80])
281+ let v184 = (v179 - v182._2[v78])
282+ if (if ((0 > v183))
283283 then true
284- else (0 > limitsRemainingShareNew))
285- then failSubmitLimitsExceeds(limitsRemainingBase, limitsRemainingShare, limitsRemainingBaseNew, limitsRemainingShareNew)
284+ else (0 > v184))
285+ then f8(v178, v179, v183, v184)
286286 else {
287- let topUpCurrentIdx = getIntOrFail(keyTopUpCurrentIdx(internalBaseAssetStr))
288- ((([StringEntry(keyOperation(operationType, internalBaseAssetStr, userAddressStr, toBase58String(i.transactionId)), dataOperation("PENDING", inAmount, 0, 0, height, lastBlock.timestamp, 0, 0, (topUpCurrentIdx + 1)))] :+ TotalLockedStringEntry("INCREMENT", keyTotalLocked(internalBaseAssetStr), diffTuple._1)) :+ TotalLockedStringEntry("INCREMENT", keyTotalLockedByUser(internalBaseAssetStr, userAddressStr), diffTuple._2)) :+ RemainingLimitsStringEntry(limitsKEY, limitsRemainingBaseNew, limitsRemainingShareNew))
287+ let v185 = f2(f53(v175))
288+ ((([StringEntry(f119(v164, v175, v169, toBase58String(i.transactionId)), dataOperation("PENDING", v165, 0, 0, height, lastBlock.timestamp, 0, 0, (v185 + 1)))] :+ TotalLockedStringEntry("INCREMENT", f36(v175), v182._1)) :+ TotalLockedStringEntry("INCREMENT", f38(v175, v169), v182._2)) :+ f136(v176, v183, v184))
289289 }
290290 }
291291 }
292292 }
293293
294294
295-func commonExecute (operationType,baseAssetStr,userAddressStr,submitTxIdStr) = {
296- let userAddress = addressFromStringValue(userAddressStr)
297- let assetCfgArray = readAssetCfgOrFail(baseAssetStr)
298- let shareAssetId = fromBase58String(assetCfgArray[IdxCfgShareAssetId])
299- let internalBaseAssetStr = assetCfgArray[IdxCfgInternalBaseAsset]
300- let decimalsMultPrice = parseIntValue(assetCfgArray[IdxCfgDecimalsMultPrice])
301- let baseAssetId = fromBase58String(baseAssetStr)
302- let operationKey = keyOperation(operationType, internalBaseAssetStr, userAddressStr, submitTxIdStr)
303- let operationArray = split(getStringOrFail(operationKey), SEP)
304- let status = operationArray[IdxOperStatus]
305- let inAmount = parseIntValue(operationArray[IdxOperInAmount])
306- let topupUnlockIdx = parseIntValue(operationArray[IdxOperTopupUnlockIdx])
307- let currTopUpIdx = getIntOrFail(keyTopUpCurrentIdx(internalBaseAssetStr))
308- let priceByTopUpId = getIntOrFail(keyPriceByTopUpIdx(internalBaseAssetStr, topupUnlockIdx))
309- if ((status != "PENDING"))
310- then failExecuteGet("Status is not PENDING", baseAssetStr, userAddressStr, submitTxIdStr, operationType)
311- else if ((topupUnlockIdx > currTopUpIdx))
312- then failExecuteGet(((("OperLock[" + toString(topupUnlockIdx)) + "] > ") + toString(currTopUpIdx)), baseAssetStr, userAddressStr, submitTxIdStr, operationType)
295+func f186 (v187,v188,v189,v190) = {
296+ let v191 = addressFromStringValue(v189)
297+ let v192 = f132(v188)
298+ let v193 = fromBase58String(v192[v65])
299+ let v194 = v192[v66]
300+ let v195 = parseIntValue(v192[v68])
301+ let v196 = fromBase58String(v188)
302+ let v197 = f119(v187, v194, v189, v190)
303+ let v198 = split(f0(v197), SEP)
304+ let v199 = v198[v123]
305+ let v200 = parseIntValue(v198[v124])
306+ let v201 = parseIntValue(v198[v131])
307+ let v202 = f2(f53(v194))
308+ let v203 = f2(f30(v194, v201))
309+ if ((v199 != "PENDING"))
310+ then f3("Status is not PENDING", v188, v189, v190, v187)
311+ else if ((v201 > v202))
312+ then f3(((("OperLock[" + toString(v201)) + "] > ") + toString(v202)), v188, v189, v190, v187)
313313 else {
314- let diffTuple = calcTotalLockedDiff("execute", operationType, internalBaseAssetStr, priceByTopUpId, decimalsMultPrice, inAmount, baseAssetId, shareAssetId)
315- let outAmount = diffTuple._3
316- let outTransferData = if ((diffTuple._4 == baseAssetId))
317- then [ScriptTransfer(userAddress, outAmount, baseAssetId)]
318- else [ScriptTransfer(userAddress, outAmount, shareAssetId)]
319- (((outTransferData :+ StringEntry(operationKey, dataOperationExecutionUpdate(operationArray, "FINISHED", priceByTopUpId, outAmount))) :+ TotalLockedStringEntry("DECREMENT", keyTotalLocked(internalBaseAssetStr), diffTuple._1)) :+ TotalLockedStringEntry("DECREMENT", keyTotalLockedByUser(internalBaseAssetStr, userAddressStr), diffTuple._2))
314+ let v204 = f94("execute", v187, v194, v203, v195, v200, v196, v193)
315+ let v205 = v204._3
316+ let v206 = if ((v204._4 == v196))
317+ then [ScriptTransfer(v191, v205, v196)]
318+ else [ScriptTransfer(v191, v205, v193)]
319+ (((v206 :+ StringEntry(v197, dataOperationExecutionUpdate(v198, "FINISHED", v203, v205))) :+ TotalLockedStringEntry("DECREMENT", f36(v194), v204._1)) :+ TotalLockedStringEntry("DECREMENT", f38(v194, v189), v204._2))
320320 }
321321 }
322322
323323
324-func privateCurrentSysParamsREST (baseAssetStr) = {
325- let baseAssetId = fromBase58String(baseAssetStr)
326- let cfgArray = readAssetCfgOrFail(baseAssetStr)
327- let shareAssetStr = cfgArray[IdxCfgShareAssetId]
328- let shareAssetId = fromBase58String(shareAssetStr)
329- let decimalsMultBothAssetsVal = parseIntValue(cfgArray[IdxCfgDecimalsMultBothAssets])
330- let decimalsMultPriceVal = parseIntValue(cfgArray[IdxCfgDecimalsMultPrice])
331- let internalBaseAssetStr = cfgArray[IdxCfgInternalBaseAsset]
332- let priceAthKEY = keyPriceATH(internalBaseAssetStr)
333- let priceAthVal = valueOrElse(getInteger(this, priceAthKEY), 0)
334- let priceLastKEY = keyPriceLast(internalBaseAssetStr)
335- let priceLastVal = valueOrElse(getInteger(this, priceLastKEY), 0)
336- let sysState = calcPrice(internalBaseAssetStr, baseAssetId, shareAssetId, decimalsMultPriceVal)
337- $Tuple13(IntegerEntry("price", sysState._1), IntegerEntry("decimalsMultPrice", decimalsMultPriceVal), IntegerEntry("baseAssetBalance", sysState._2), IntegerEntry("-1", sysState._3), IntegerEntry("baseAssetBalanceWCO", sysState._4), IntegerEntry("shareEmission", sysState._5), IntegerEntry("currIterTotalInBaseAmount", sysState._6), IntegerEntry("currIterTotalInShareAmount", sysState._7), IntegerEntry("totalLockedOutBaseAmount", sysState._8), IntegerEntry("totalLockedOutShareAmount", sysState._9), IntegerEntry("decimalsMultBothAssets", decimalsMultBothAssetsVal), IntegerEntry("priceATH", priceAthVal), IntegerEntry("priceLast", priceLastVal))
324+func f207 (v208) = {
325+ let v209 = fromBase58String(v208)
326+ let v210 = f132(v208)
327+ let v211 = v210[v65]
328+ let v212 = fromBase58String(v211)
329+ let v213 = parseIntValue(v210[v67])
330+ let v214 = parseIntValue(v210[v68])
331+ let v215 = v210[v66]
332+ let v216 = f28(v215)
333+ let v217 = valueOrElse(getInteger(this, v216), 0)
334+ let v218 = f26(v215)
335+ let v219 = valueOrElse(getInteger(this, v218), 0)
336+ let v220 = f158(v215, v209, v212, v214)
337+ $Tuple13(IntegerEntry("price", v220._1), IntegerEntry("decimalsMultPrice", v214), IntegerEntry("baseAssetBalance", v220._2), IntegerEntry("-1", v220._3), IntegerEntry("baseAssetBalanceWCO", v220._4), IntegerEntry("shareEmission", v220._5), IntegerEntry("currIterTotalInBaseAmount", v220._6), IntegerEntry("currIterTotalInShareAmount", v220._7), IntegerEntry("totalLockedOutBaseAmount", v220._8), IntegerEntry("totalLockedOutShareAmount", v220._9), IntegerEntry("decimalsMultBothAssets", v213), IntegerEntry("priceATH", v217), IntegerEntry("priceLast", v219))
338338 }
339339
340340
341341 @Callable(i)
342342 func adminRegisterAsset (baseAssetStr,shareAssetName,shareAssetDescr,getDelayinBlocks,shutdownManagerAddress,startPrice,topupIntervalInBlocks,topupMaxNegativePart,topupManagerAddress,submitLimitsBaseMax,submitLimitsBaseReset,submitLimitsShareMax,submitLimitsShareReset,adminAddress) = {
343- let baseAssetId = fromBase58String(baseAssetStr)
344- let bothAssetsDecimals = value(assetInfo(baseAssetId)).decimals
345- let decimalsMultBothAssets = pow(10, 0, bothAssetsDecimals, 0, 0, DOWN)
346- let decimalsMultPrice = ((100 * 1000) * 1000)
347- let topupMaxNegativePercents = fraction(topupMaxNegativePart, 100, decimalsMultBothAssets)
348- let baseAssetBalance = assetBalance(this, baseAssetId)
343+ let v221 = fromBase58String(baseAssetStr)
344+ let v222 = value(assetInfo(v221)).decimals
345+ let v223 = pow(10, 0, v222, 0, 0, DOWN)
346+ let v224 = ((100 * 1000) * 1000)
347+ let v225 = fraction(topupMaxNegativePart, 100, v223)
348+ let v226 = assetBalance(this, v221)
349349 if ((i.caller != this))
350350 then throw("permissions denied")
351- else if ((baseAssetBalance == 0))
351+ else if ((v226 == 0))
352352 then throw(((toString(this) + " must have any initial balance of ") + baseAssetStr))
353- else if (isDefined(getString(this, keyAssetCfg(baseAssetStr))))
353+ else if (isDefined(getString(this, f23(baseAssetStr))))
354354 then throw((baseAssetStr + " has been already registered"))
355355 else if ((toString(addressFromStringValue(shutdownManagerAddress)) != shutdownManagerAddress))
356356 then throw("invalid shutdownManagerAddress")
357357 else if ((toString(addressFromStringValue(topupManagerAddress)) != topupManagerAddress))
358358 then throw("invalid topupManagerAddress")
359359 else if ((0 > getDelayinBlocks))
360360 then throw(("invalid getDelayinBlocks=" + toString(getDelayinBlocks)))
361- else if (if ((0 >= topupMaxNegativePercents))
361+ else if (if ((0 >= v225))
362362 then true
363- else (topupMaxNegativePercents >= 99))
363+ else (v225 >= 99))
364364 then throw("invalid topupMaxNegativePart parameter")
365365 else {
366- let shareInitAmount = convertBase2Share(baseAssetBalance, startPrice, decimalsMultPrice)
367- let shareAssetIssueAction = Issue(shareAssetName, shareAssetDescr, shareInitAmount, bothAssetsDecimals, true)
368- let shareAssetId = calculateAssetId(shareAssetIssueAction)
369- let shareAssetStr = toBase58String(shareAssetId)
370- let internalBaseAssetId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
371- let internalBaseAssetStr = toString(internalBaseAssetId)
372-[StringEntry(keyAssetCfg(baseAssetStr), dataAssetCfg(shareAssetStr, internalBaseAssetStr, decimalsMultBothAssets, decimalsMultPrice, getDelayinBlocks, topupIntervalInBlocks, topupMaxNegativePart, topupManagerAddress, submitLimitsBaseMax, submitLimitsBaseReset, submitLimitsShareMax, submitLimitsShareReset, adminAddress)), StringEntry(keyMappingsInternal2baseAssetId(internalBaseAssetId), baseAssetStr), StringEntry(keyMappingsBaseAsset2internalId(baseAssetStr), internalBaseAssetStr), StringEntry(keyMappingsShare2baseAssetId(shareAssetStr), baseAssetStr), StringEntry(keyMappingsBaseAsset2shareId(baseAssetStr), shareAssetStr), BooleanEntry(keyShutdownSubmitOperation(internalBaseAssetStr), false), StringEntry(keyShutdownManager(internalBaseAssetStr), shutdownManagerAddress), IntegerEntry(keyNextInternalAssetId(), (internalBaseAssetId + 1)), IntegerEntry(keyPriceLast(internalBaseAssetStr), startPrice), IntegerEntry(keyPriceHistory(internalBaseAssetStr, height, lastBlock.timestamp), startPrice), IntegerEntry(keyTopUpCurrentIdx(internalBaseAssetStr), 0), RemainingLimitsStringEntry(keyLimitsRemaining(internalBaseAssetStr), submitLimitsBaseMax, submitLimitsShareMax), shareAssetIssueAction, ScriptTransfer(addressFromStringValue(topupManagerAddress), shareInitAmount, shareAssetId)]
366+ let v227 = f19(v226, startPrice, v224)
367+ let v228 = Issue(shareAssetName, shareAssetDescr, v227, v222, true)
368+ let v229 = calculateAssetId(v228)
369+ let v230 = toBase58String(v229)
370+ let v231 = valueOrElse(getInteger(this, f25()), 0)
371+ let v232 = toString(v231)
372+[StringEntry(f23(baseAssetStr), dataAssetCfg(v230, v232, v223, v224, getDelayinBlocks, topupIntervalInBlocks, topupMaxNegativePart, topupManagerAddress, submitLimitsBaseMax, submitLimitsBaseReset, submitLimitsShareMax, submitLimitsShareReset, adminAddress)), StringEntry(f41(v231), baseAssetStr), StringEntry(f43(baseAssetStr), v232), StringEntry(f45(v230), baseAssetStr), StringEntry(f47(baseAssetStr), v230), BooleanEntry(f49(v232), false), StringEntry(f51(v232), shutdownManagerAddress), IntegerEntry(f25(), (v231 + 1)), IntegerEntry(f26(v232), startPrice), IntegerEntry(f33(v232, height, lastBlock.timestamp), startPrice), IntegerEntry(f53(v232), 0), f136(f63(v232), submitLimitsBaseMax, submitLimitsShareMax), v228, ScriptTransfer(addressFromStringValue(topupManagerAddress), v227, v229)]
373373 }
374374 }
375375
376376
377377
378378 @Callable(i)
379-func adminUpdateCfg (baseAssetStr,idxCfg,cfgVal) = {
380- let cfgArray = readAssetCfgOrFail(baseAssetStr)
379+func adminUpdateCfg (v233,v234,v235) = {
380+ let v236 = f132(v233)
381381 nil
382382 }
383383
384384
385385
386386 @Callable(i)
387-func shutdownSubmits (internalBaseAssetId) = {
388- let internalBaseAssetIdStr = toString(internalBaseAssetId)
389- let baseAssetIdStr = getStringOrFail(keyMappingsInternal2baseAssetId(internalBaseAssetId))
390- let shutdownManagerAddress = getStringOrFail(keyShutdownManager(internalBaseAssetIdStr))
391- if ((1 > size(baseAssetIdStr)))
392- then throw("invalid internalBaseAssetId")
393- else if ((toString(i.caller) != shutdownManagerAddress))
387+func shutdownSubmits (v231) = {
388+ let v237 = toString(v231)
389+ let v238 = f0(f41(v231))
390+ let v239 = f0(f51(v237))
391+ if ((1 > size(v238)))
392+ then throw("invalid v231")
393+ else if ((toString(i.caller) != v239))
394394 then throw("access denied")
395- else [BooleanEntry(keyShutdownSubmitOperation(toString(internalBaseAssetId)), true)]
395+ else [BooleanEntry(f49(toString(v231)), true)]
396396 }
397397
398398
399399
400400 @Callable(i)
401401 func submitPut () = {
402402 let pmt = value(i.payments[0])
403- let inAmount = pmt.amount
404- let inAssetId = value(pmt.assetId)
405- let baseAssetStr = toBase58String(inAssetId)
406- commonSubmit("P", i, inAmount, inAssetId, baseAssetStr)
403+ let v240 = pmt.amount
404+ let v241 = value(pmt.assetId)
405+ let v242 = toBase58String(v241)
406+ f163("P", i, v240, v241, v242)
407407 }
408408
409409
410410
411411 @Callable(i)
412412 func submitGet () = {
413413 let pmt = value(i.payments[0])
414- let inAmount = pmt.amount
415- let inAssetId = value(pmt.assetId)
416- let shareAssetStr = toBase58String(inAssetId)
417- let baseAssetStr = getStringOrFail(keyMappingsShare2baseAssetId(shareAssetStr))
418- commonSubmit("G", i, inAmount, inAssetId, baseAssetStr)
414+ let v243 = pmt.amount
415+ let v244 = value(pmt.assetId)
416+ let v230 = toBase58String(v244)
417+ let v245 = f0(f45(v230))
418+ f163("G", i, v243, v244, v245)
419419 }
420420
421421
422422
423423 @Callable(i)
424-func executePut (baseAssetStr,userAddressStr,submitTxIdStr) = commonExecute("P", baseAssetStr, userAddressStr, submitTxIdStr)
424+func executePut (v246,v247,v248) = f186("P", v246, v247, v248)
425425
426426
427427
428428 @Callable(i)
429-func executeGet (baseAssetStr,userAddressStr,submitTxIdStr) = commonExecute("G", baseAssetStr, userAddressStr, submitTxIdStr)
429+func executeGet (v249,v250,v251) = f186("G", v249, v250, v251)
430430
431431
432432
433433 @Callable(i)
434-func operationsMutex (baseAssetStr) = {
435- let assetCfgArray = readAssetCfgOrFail(baseAssetStr)
436- let topUpManagerAddressStr = assetCfgArray[IdxCfgTopupManagerAddress]
437- let internalBaseAssetStr = assetCfgArray[IdxCfgInternalBaseAsset]
438- if ((toString(i.caller) != topUpManagerAddressStr))
439- then failTopupManagerOnly(topUpManagerAddressStr)
440- else [TopupMutexIntEntry(internalBaseAssetStr, height)]
434+func operationsMutex (v252) = {
435+ let v253 = f132(v252)
436+ let v254 = v253[v72]
437+ let v232 = v253[v66]
438+ if ((toString(i.caller) != v254))
439+ then f13(v254)
440+ else [f139(v232, height)]
441441 }
442442
443443
444444
445445 @Callable(i)
446-func topUpBalance (baseAssetStr,income) = {
447- let baseAssetId = fromBase58String(baseAssetStr)
448- let assetCfgArray = readAssetCfgOrFail(baseAssetStr)
449- let shareAssetId = fromBase58String(assetCfgArray[IdxCfgShareAssetId])
450- let priceMult = parseIntValue(assetCfgArray[IdxCfgDecimalsMultPrice])
451- let bothAssetMult = parseIntValue(assetCfgArray[IdxCfgDecimalsMultBothAssets])
452- let topupIntervalInBlocks = parseIntValue(assetCfgArray[IdxCfgTopupIntervalInBlocks])
453- let topupMaxNegativePart = parseIntValue(assetCfgArray[IdxCfgTopupMaxNegativePart])
454- let internalBaseAssetStr = assetCfgArray[IdxCfgInternalBaseAsset]
455- let topUpManagerAddressStr = assetCfgArray[IdxCfgTopupManagerAddress]
456- let submitLimitsBaseMax = parseIntValue(assetCfgArray[IdxCfgSubmitLimitsBaseMax])
457- let submitLimitsShareMax = parseIntValue(assetCfgArray[IdxCfgSubmitLimitsShareMax])
458- let topUpCurrentIdxKEY = keyTopUpCurrentIdx(internalBaseAssetStr)
459- let prevTopUpIdx = getIntOrFail(topUpCurrentIdxKEY)
460- let currentTopUpIdx = (prevTopUpIdx + 1)
461- let valid = if ((income > 0))
446+func topUpBalance (v255,v256) = {
447+ let v221 = fromBase58String(v255)
448+ let v257 = f132(v255)
449+ let v229 = fromBase58String(v257[v65])
450+ let v258 = parseIntValue(v257[v68])
451+ let v259 = parseIntValue(v257[v67])
452+ let v260 = parseIntValue(v257[v70])
453+ let v261 = parseIntValue(v257[v71])
454+ let v232 = v257[v66]
455+ let v262 = v257[v72]
456+ let v263 = parseIntValue(v257[v73])
457+ let v264 = parseIntValue(v257[v75])
458+ let v265 = f53(v232)
459+ let v266 = f2(v265)
460+ let v267 = (v266 + 1)
461+ let v268 = if ((v256 > 0))
462462 then {
463463 let pmt = value(i.payments[0])
464- let pmtAssetId = value(pmt.assetId)
465- if ((baseAssetId != pmtAssetId))
466- then throw("attached payment's asset id is NOT matched passed baseAssetStr")
464+ let v269 = value(pmt.assetId)
465+ if ((v221 != v269))
466+ then throw("attached payment's asset id is NOT matched passed v255")
467467 else if ((size(i.payments) > 1))
468468 then throw("only one payment can be attached")
469- else if ((pmt.amount != income))
470- then throw("attached payment.amount is NOT matched passed income argument")
469+ else if ((pmt.amount != v256))
470+ then throw("attached payment.amount is NOT matched passed v256 argument")
471471 else true
472472 }
473- else if ((0 > income))
473+ else if ((0 > v256))
474474 then {
475- let baseBalance = assetBalance(this, baseAssetId)
476- let allowedAmount = fraction(topupMaxNegativePart, baseBalance, bothAssetMult)
477- if ((-(income) > allowedAmount))
478- then throw(("topup negative income couldn't be greater than " + toString(allowedAmount)))
475+ let v270 = assetBalance(this, v221)
476+ let v271 = fraction(v261, v270, v259)
477+ if ((-(v256) > v271))
478+ then throw(("topup negative v256 couldn't be greater than " + toString(v271)))
479479 else true
480480 }
481- else throw("zero income is not allowed")
482- let topUpLastHeightKEY = keyTopUpLastHeight(internalBaseAssetStr, toString(i.caller))
483- let topUpLastHeight = valueOrElse(getInteger(this, topUpLastHeightKEY), 0)
484- if ((toString(i.caller) != topUpManagerAddressStr))
485- then failTopupManagerOnly(topUpManagerAddressStr)
486- else if (!(valid))
481+ else throw("zero v256 is not allowed")
482+ let v272 = f55(v232, toString(i.caller))
483+ let v273 = valueOrElse(getInteger(this, v272), 0)
484+ if ((toString(i.caller) != v262))
485+ then f13(v262)
486+ else if (!(v268))
487487 then throw("validation failed")
488- else if ((topupIntervalInBlocks > (height - topUpLastHeight)))
489- then throw((("1 topup per " + toString(topupIntervalInBlocks)) + " blocks from the same address is allowed"))
488+ else if ((v260 > (height - v273)))
489+ then throw((("1 topup per " + toString(v260)) + " blocks from the same address is allowed"))
490490 else {
491- let price = genericCalcPrice(internalBaseAssetStr, baseAssetId, income, shareAssetId, priceMult)._1
492- let diffTuple = calcTotalLockedDiff("topup", "", internalBaseAssetStr, price, priceMult, 0, baseAssetId, shareAssetId)
493- let topupTotalDiff = diffTuple._1
494- let priceAthKEY = keyPriceATH(internalBaseAssetStr)
495- let prevPriceATH = valueOrElse(getInteger(this, priceAthKEY), 0)
496- (((((([IntegerEntry(keyPriceLast(internalBaseAssetStr), price), IntegerEntry(keyPriceHistory(internalBaseAssetStr, height, lastBlock.timestamp), price), IntegerEntry(keyPriceByTopUpIdx(internalBaseAssetStr, currentTopUpIdx), price), IntegerEntry(topUpCurrentIdxKEY, currentTopUpIdx), IntegerEntry(priceAthKEY, if ((price > prevPriceATH))
497- then price
498- else prevPriceATH), IntegerEntry(topUpLastHeightKEY, height)] :+ TotalLockedStringEntry("DECREMENT", keyTotalLocked(internalBaseAssetStr), topupTotalDiff)) :+ TopupMutexIntEntry(internalBaseAssetStr, 0)) :+ RemainingLimitsStringEntry(keyLimitsRemaining(internalBaseAssetStr), submitLimitsBaseMax, submitLimitsShareMax)) :+ Burn(shareAssetId, topupTotalDiff[IdxTotalLockedInShare])) :+ Reissue(shareAssetId, -(topupTotalDiff[IdxTotalLockedOutShare]), true)) ++ (if ((0 > income))
499- then [ScriptTransfer(i.caller, -(income), baseAssetId)]
491+ let v274 = f142(v232, v221, v256, v229, v258)._1
492+ let v275 = f94("topup", "", v232, v274, v258, 0, v221, v229)
493+ let v276 = v275._1
494+ let v277 = f28(v232)
495+ let v278 = valueOrElse(getInteger(this, v277), 0)
496+ (((((([IntegerEntry(f26(v232), v274), IntegerEntry(f33(v232, height, lastBlock.timestamp), v274), IntegerEntry(f30(v232, v267), v274), IntegerEntry(v265, v267), IntegerEntry(v277, if ((v274 > v278))
497+ then v274
498+ else v278), IntegerEntry(v272, height)] :+ TotalLockedStringEntry("DECREMENT", f36(v232), v276)) :+ f139(v232, 0)) :+ f136(f63(v232), v263, v264)) :+ Burn(v229, v276[v78])) :+ Reissue(v229, -(v276[v81]), true)) ++ (if ((0 > v256))
499+ then [ScriptTransfer(i.caller, -(v256), v221)]
500500 else nil))
501501 }
502502 }
503503
504504
505505
506506 @Callable(i)
507-func currentSysParamsREST (baseAssetStr) = {
508- let sysStateTuple = privateCurrentSysParamsREST(baseAssetStr)
509- let price = sysStateTuple._1.value
510- let decimalsMultPrice = sysStateTuple._2.value
511- let baseAssetBalance = sysStateTuple._3.value
512- let totalLockedBaseAmount = sysStateTuple._4.value
513- let baseAssetBalanceWCO = sysStateTuple._5.value
514- let shareEmission = sysStateTuple._6.value
515- let currIterTotalInBaseAmount = sysStateTuple._7.value
516- let currIterTotalInShareAmount = sysStateTuple._8.value
517- let totalLockedOutBaseAmount = sysStateTuple._9.value
518- let totalLockedOutShareAmount = sysStateTuple._10.value
519- let decimalsMultBothAssets = sysStateTuple._11.value
520- let priceATH = sysStateTuple._12.value
521- let priceLast = sysStateTuple._13.value
522- let restData = makeString(["startCurrentSysParamsREST", toString(price), toString(decimalsMultPrice), toString(baseAssetBalance), toString(totalLockedBaseAmount), toString(baseAssetBalanceWCO), toString(shareEmission), toString(currIterTotalInBaseAmount), toString(currIterTotalInShareAmount), toString(totalLockedOutBaseAmount), toString(totalLockedOutShareAmount), toString(decimalsMultBothAssets), toString(priceATH), toString(priceLast), "endCurrentSysParamsREST"], SEP)
523- throw(restData)
507+func currentSysParamsREST (v279) = {
508+ let v280 = f207(v279)
509+ let v281 = v280._1.value
510+ let v224 = v280._2.value
511+ let v226 = v280._3.value
512+ let v282 = v280._4.value
513+ let v283 = v280._5.value
514+ let v284 = v280._6.value
515+ let v285 = v280._7.value
516+ let v286 = v280._8.value
517+ let v287 = v280._9.value
518+ let v288 = v280._10.value
519+ let v223 = v280._11.value
520+ let v289 = v280._12.value
521+ let v290 = v280._13.value
522+ let v291 = makeString(["startCurrentSysParamsREST", toString(v281), toString(v224), toString(v226), toString(v282), toString(v283), toString(v284), toString(v285), toString(v286), toString(v287), toString(v288), toString(v223), toString(v289), toString(v290), "endCurrentSysParamsREST"], SEP)
523+ throw(v291)
524524 }
525525
526526

github/deemru/w8io/873ac7e 
285.21 ms