tx · Bk8w45sSDtTiaQXh5HsoZBzCCwVMVYRGFSqNidFWPJwP

3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7:  -0.01400000 Waves

2020.11.01 22:38 [2310453] smart account 3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7 > SELF 0.00000000 Waves

{ "type": 13, "id": "Bk8w45sSDtTiaQXh5HsoZBzCCwVMVYRGFSqNidFWPJwP", "fee": 1400000, "feeAssetId": null, "timestamp": 1604259308848, "version": 2, "chainId": 87, "sender": "3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7", "senderPublicKey": "7S371VYZXa9KW7x4AJBpEjaBU2BcrhPYVgAs5nCvbbtj", "proofs": [ "dUzzwCa2sen6jexEDv5JRGQDzPmAtWSRu7Q76DwX9fvrbZd3jWo5mjPJD3xbiYFjdmrmFz7ibis1LL3kyrucPzr", "3fCh6d19kkB45b6XxDbatxvgoXSazckE35pQq2BEpAbEKyWG4NY4ysvg5rreQdLnon2nJsgvaJFd7UE4RCyzVM9q" ], "script": "base64:AAIEAAAAAAAAAAgIAhIAEgASAAAAACgAAAAADXNjcmlwdFZlcnNpb24CAAAAFHY2LjAwLWZpbmFsXzIwMjAxMTAxAAAAAAdwZXJjZW50AAAAAAAAAYagAAAAAAdkZWNpbWFsAAAAAAAF9eEAAAAAAAxmdGVhbVBlcmNlbnQAAAAAAAAAJxAAAAAADGxlYXNlUGVyY2VudAAAAAAAAAEZQAAAAAAMZmRhcHBQZXJjZW50AAAAAAAAAE4gAAAAAA5hZG1pblB1YmxpY0tleQEAAAAg/80L/cbafiMInJkqv+2Ad6sxfHWERCnAfK19W9oTVwMAAAAADm1tYm90UHVibGljS2V5AQAAACBKoJMPsxlJ96JeVnuvXXY1Z75gYAAjtyjlItmo+AHsLwAAAAAOd3hjaGdQdWJsaWNLZXkBAAAAIIAKtroM3gxerJBtUzvV4/Tc4iQv++nOA7a6Q5y/1XtuAAAAAApndWFyYW50b3JzCQAETQAAAAIJAARMAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBwAAAACBQAAAAR0aGlzAgAAAApndWFyYW50b3IxAQAAAAAJAARMAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBwAAAACBQAAAAR0aGlzAgAAAApndWFyYW50b3IyAQAAAAAJAARMAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBwAAAACBQAAAAR0aGlzAgAAAApndWFyYW50b3IzAQAAAAAJAARMAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBwAAAACBQAAAAR0aGlzAgAAAApndWFyYW50b3I0AQAAAAAJAARMAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBwAAAACBQAAAAR0aGlzAgAAAApndWFyYW50b3I1AQAAAAAFAAAAA25pbAEAAAAAAAAAAAphY3R1YWxTaXplCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAACmd1YXJhbnRvcnMBAAAAAAAAAAANbWluU2lnbmF0dXJlcwkAAGQAAAACCQAAaQAAAAIFAAAACmFjdHVhbFNpemUAAAAAAAAAAAIJAABqAAAAAgUAAAAKYWN0dWFsU2l6ZQAAAAAAAAAAAgAAAAAIYnRjQXNzZXQBAAAAIGz6av/F7aqMC3+1KpPSogwvgoLbdHoEjFP7/RMfc6D/AAAAAAhldGhBc3NldAEAAAAgLiDD9uqKn4lRu7/oiBETNux+2MJCA3JlDVjNcyZCZYIAAAAACXVzZHRBc3NldAEAAAAgHpQHE1J2oSWV/chhqIJfEH/fOk8pu/yaRj9a/TZPn5EAAAAACWZtbXRBc3NldAEAAAAgZivx3DxMNqe5Oqj6+zVD3E24B4WnU3ZlP3VejOt/OPQAAAAACXhmZWVBc3NldAEAAAAgPtqpo25+ABHwB4wBPcXeLo1HMTudGEE43iw65h6utjcAAAAACXBvcnRmb2xpbwkABE0AAAACCQAETAAAAAIFAAAACXVzZHRBc3NldAkABEwAAAACBQAAAAhidGNBc3NldAkABEwAAAACBQAAAAR1bml0CQAETAAAAAIFAAAACGV0aEFzc2V0CQAETAAAAAIBAAAAIA6xAmoMPp9H9+RGlOdOtre8Q3x+ZWnQ6RibIuYJ8ujOCQAETAAAAAIBAAAAIPYeNkLTl93yWlgVIO4sD9otRgaKgDaSrlWJWZ6wxSyhCQAETAAAAAIBAAAAIJVTIBcyx/f4MW1SqI21WdPP6/Jz7ZRxV+WdJufOh2rgCQAETAAAAAIBAAAAIEMY9Bt1UjCPu/oiZL8EKE63pKHJnG4Ygp3RBr/LwCQCCQAETAAAAAIBAAAAIKFSWtVJ1nG6w68fhsmSf+oPilocH5ikK3MGjsya/tVnBQAAAANuaWwFAAAACWZtbXRBc3NldAAAAAAFZnNhbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVcx/k3CU2WHWTlUVkTM2fb+AWXrmiVfMwkAAAAABWZkYXBwCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXlBjOKoGGbEMXkLYvPqBcwClDZ2ShsgYNAAAAAAVmY29sZAkBAAAAB0FkZHJlc3MAAAABAQAAABoBV360Duo7pwBQsbjpbsN3eh/rMJVFBpHXbAAAAAAFYWRtaW4JAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVfK8FMYnc+eIGLh09VaqNvL6A9/0AfaxDUAAAAABWZ0ZWFtCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXELsZRzok6Xd6uG+EH6cv3ZF8SS6dkm6XAAAAAApzYWxlU3VwcGx5CQAAaAAAAAIAAAAAAAAAJxAAAAAAAAABhqAAAAAACmNpcmNTdXBwbHkJAABlAAAAAgkAAGUAAAACCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAlmbW10QXNzZXQAAAAIcXVhbnRpdHkJAABkAAAAAgkAA/AAAAACBQAAAAVmZGFwcAUAAAAJZm1tdEFzc2V0CQAD8AAAAAIFAAAABHRoaXMFAAAACWZtbXRBc3NldAUAAAAKc2FsZVN1cHBseQAAAAAKZnRlYW1GdW5kcwkAA/AAAAACBQAAAAVmdGVhbQUAAAAJZm1tdEFzc2V0AAAAAAt0cmFkZVN1cHBseQkAAZYAAAABCQAETAAAAAIAAAAAAAAAAAAJAARMAAAAAgkAAGUAAAACBQAAAApjaXJjU3VwcGx5BQAAAApmdGVhbUZ1bmRzBQAAAANuaWwAAAAADHdhdmVzUmVndWxhcggJAAPvAAAAAQUAAAAEdGhpcwAAAAdyZWd1bGFyAAAAAA53YXZlc0F2YWlsYWJsZQgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUAAAAAD2xvZ0VudHJ5RGF0YUtleQIAAAAIbG9nRW50cnkAAAAAEHRpbWVzdGFtcERhdGFLZXkCAAAACXRpbWVzdGFtcAAAAAAOcGF5b3V0c0RhdGFLZXkCAAAAC3RlYW1QYXlvdXRzAAAAAA52ZXJzaW9uRGF0YUtleQIAAAANc2NyaXB0VmVyc2lvbgEAAAAIdmFsaWRhdGUAAAABAAAACHBvc1ZhbHVlCQABlgAAAAEJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACBQAAAAhwb3NWYWx1ZQUAAAADbmlsAQAAAAl0b0RhdGFLZXkAAAABAAAAB2Fzc2V0SWQJAAJYAAAAAQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAAHYXNzZXRJZAEAAAAEE6vZMwEAAAAPaXNBc3NldERpc2FibGVkAAAAAQAAAAdhc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABWFkbWluCQEAAAAJdG9EYXRhS2V5AAAAAQUAAAAHYXNzZXRJZAcBAAAADXRvRmxvYXRTdHJpbmcAAAACAAAAA251bQAAAANkZWMDCQAAAAAAAAIFAAAAA251bQAAAAAAAAAAAAIAAAABMAMJAABmAAAAAgUAAAADbnVtAAAAAAAAAAAACQAEsAAAAAEJAADLAAAAAgkAAMsAAAACCQABmwAAAAEJAAGkAAAAAQkAAGkAAAACBQAAAANudW0FAAAAA2RlYwEAAAABLgkAAMoAAAACCQABmwAAAAEJAAGkAAAAAQkAAGQAAAACCQAAagAAAAIFAAAAA251bQUAAAADZGVjBQAAAANkZWMAAAAAAAAAAAEJAAACAAAAAQIAAAAhTmVnYXRpdmUgYW1vdW50cyBhcmUgbm90IGFsbG93ZWQhAQAAAApkaWZmZXJlbmNlAAAAAgAAAApmZGFwcEZ1bmRzAAAACmZjb2xkRnVuZHMEAAAABXRvdGFsCQAAZAAAAAIFAAAACmZkYXBwRnVuZHMFAAAACmZjb2xkRnVuZHMEAAAABmFtb3VudAkAAGUAAAACCQAAawAAAAMFAAAABXRvdGFsBQAAAAxmZGFwcFBlcmNlbnQFAAAAB3BlcmNlbnQFAAAACmZkYXBwRnVuZHMDCQAAZgAAAAIJAABpAAAAAgUAAAAFdG90YWwAAAAAAAAAAGQFAAAABmFtb3VudAAAAAAAAAAAAAUAAAAGYW1vdW50AQAAABFyZWJhbGFuY2luZ0Ftb3VudAAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAJAQAAAApkaWZmZXJlbmNlAAAAAgkAA/AAAAACBQAAAAVmZGFwcAUAAAACaWQJAAPwAAAAAgUAAAAEdGhpcwUAAAACaWQJAQAAAApkaWZmZXJlbmNlAAAAAggJAAPvAAAAAQUAAAAFZmRhcHAAAAAHcmVndWxhcggJAAPvAAAAAQUAAAAEdGhpcwAAAAdyZWd1bGFyAQAAABFnZXRTY3JpcHRUcmFuc2ZlcgAAAAMAAAAHYWRkcmVzcwAAAAZhbW91bnQAAAAHYXNzZXRJZAMJAABnAAAAAgAAAAAAAAAAAAUAAAAGYW1vdW50BQAAAANuaWwJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAHYWRkcmVzcwUAAAAGYW1vdW50BQAAAAdhc3NldElkBQAAAANuaWwAAAADAAAAAWkBAAAADWF1dG9SZWJhbGFuY2UAAAAABAAAAA93YXZlc0RpZmZlcmVuY2UJAQAAABFyZWJhbGFuY2luZ0Ftb3VudAAAAAEJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAACAwMDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADmFkbWluUHVibGljS2V5CQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADm1tYm90UHVibGljS2V5BwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAKZ3VhcmFudG9ycwgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BwkAAAIAAAABAgAAAENUaGlzIGFjdGlvbiBjYW4gb25seSBiZSBwZXJmb3JtZWQgYnkgYW4gYWRtaW5pc3RyYXRvciBvciBndWFyYW50b3IhAwkAAGYAAAACBQAAAA93YXZlc0RpZmZlcmVuY2UFAAAADndhdmVzQXZhaWxhYmxlCQAAAgAAAAECAAAASUluc3VmZmljaWVudCBiYWxhbmNlISBTZW5kIGEgUE0gdG8gdGhlIGFkbWluaXN0cmF0b3Igb3IgY2FuY2VsIHRoZSBsZWFzZS4DCQAAZgAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAzRG9uJ3QgYXR0YWNoIHBheW1lbnQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gLi4uBAAAAA5mbW10RGlmZmVyZW5jZQMJAQAAAA9pc0Fzc2V0RGlzYWJsZWQAAAABBQAAAAlmbW10QXNzZXQAAAAAAAAAAAAJAABlAAAAAgUAAAAKc2FsZVN1cHBseQkAA/AAAAACBQAAAAVmZGFwcAUAAAAJZm1tdEFzc2V0BAAAAAtzcG9uc29yc2hpcAkAAZcAAAABCQAETAAAAAIAAAAAAAAHoSAJAARMAAAAAgkAA/AAAAACBQAAAAR0aGlzBQAAAAl4ZmVlQXNzZXQFAAAAA25pbAQAAAAPc2NyaXB0VHJhbnNmZXJzCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAAJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAAACQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAEJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAABCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAUAAAAPd2F2ZXNEaWZmZXJlbmNlBQAAAAR1bml0CQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAMJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAADCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAQJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAAECQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAUJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAAFCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAYJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAAGCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAcJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAAHCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAkBAAAAEXJlYmFsYW5jaW5nQW1vdW50AAAAAQkAAZEAAAACBQAAAAlwb3J0Zm9saW8AAAAAAAAAAAgJAAGRAAAAAgUAAAAJcG9ydGZvbGlvAAAAAAAAAAAICQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmZGFwcAUAAAAOZm1tdERpZmZlcmVuY2UFAAAACWZtbXRBc3NldAQAAAARbG9nRW50cnlEYXRhVmFsdWUJAAEsAAAAAgIAAAAuRGVGaSBGcmFua2xpbiAoRk1NVCk6IGF1dG9SZWJhbGFuY2UgKCkgPT4gdHg6IAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkAwkAAAAAAAACCQABkAAAAAEFAAAAD3NjcmlwdFRyYW5zZmVycwAAAAAAAAAAAAkAAAIAAAABAgAAACtUaGVyZSBhcmUgY3VycmVudGx5IG5vIHRyYW5zZmVycyBhdmFpbGFibGUuCQAETQAAAAIJAARNAAAAAgkABE4AAAACBQAAAA9zY3JpcHRUcmFuc2ZlcnMJAQAAABFnZXRTY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAALc3BvbnNvcnNoaXAFAAAACXhmZWVBc3NldAkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAPbG9nRW50cnlEYXRhS2V5BQAAABFsb2dFbnRyeURhdGFWYWx1ZQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEHRpbWVzdGFtcERhdGFLZXkIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAWkBAAAAD3NlbmRUZWFtUGF5b3V0cwAAAAADAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5hZG1pblB1YmxpY0tleQkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5tbWJvdFB1YmxpY0tleQcJAAACAAAAAQIAAAA2VGhpcyBhY3Rpb24gY2FuIG9ubHkgYmUg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cgQAAAABbwUAAAAHJG1hdGNoMAMDAwUAAAAMaXNWYWxpZE1NQm90AwMDCQAAAAAAAAIIBQAAAAFvAAAACW9yZGVyVHlwZQUAAAADQnV5CQEAAAACIT0AAAACCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQFAAAACXhmZWVBc3NldAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAApwcmljZUFzc2V0BwYDAwkAAAAAAAACCAUAAAABbwAAAAlvcmRlclR5cGUFAAAABFNlbGwJAQAAAAIhPQAAAAIICAUAAAABbwAAAAlhc3NldFBhaXIAAAALYW1vdW50QXNzZXQFAAAACXhmZWVBc3NldAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgIBQAAAAFvAAAACWFzc2V0UGFpcgAAAAthbW91bnRBc3NldAcHCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAABbwAAABFtYXRjaGVyRmVlQXNzZXRJZAcJAAAAAAAAAggFAAAAAW8AAAAQbWF0Y2hlclB1YmxpY0tleQUAAAAOd3hjaGdQdWJsaWNLZXkHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwAwMDBQAAAAxpc1ZhbGlkT3duZXIJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAHYXNzZXRJZAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAKZmVlQXNzZXRJZAcGAwMDBQAAAAxpc1ZhbGlkQWRtaW4JAAAAAAAAAggFAAAAAXQAAAAHYXNzZXRJZAUAAAAJZm1tdEFzc2V0BwkAAGcAAAACBQAAAA1tYXhTYWxlQW1vdW50CAUAAAABdAAAAAZhbW91bnQHCQAAAAAAAAIJAAQkAAAAAQgFAAAAAXQAAAAJcmVjaXBpZW50BQAAAAVmc2FsZQcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAEExlYXNlVHJhbnNhY3Rpb24EAAAAAWwFAAAAByRtYXRjaDADBQAAAAxpc1ZhbGlkTU1Cb3QJAABnAAAAAgUAAAAObWF4TGVhc2VBbW91bnQIBQAAAAFsAAAABmFtb3VudAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24DBQAAAAxpc1ZhbGlkTU1Cb3QGBQAAABFhbnlWYWxpZEd1YXJhbnRvcgMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBgkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24DBQAAAAxpc1ZhbGlkQWRtaW4FAAAAEWlzVmFsaWRHdWFyYW50b3JzBwdiJwJ1", "height": 2310453, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6YwWGNdeztvdfysNQpAnZGKgaK1bq8aqbaByv8HusP6t Next: 4qwhWhuHsxF8dPYyX6P3AcTpGJFbs241cizrAthEumGB Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let scriptVersion = "v5.10-final_20201026"
4+let scriptVersion = "v6.00-final_20201101"
55
66 let percent = 100000
77
7070 func validate (posValue) = max([0, posValue])
7171
7272
73-func toFloatString (num,dec) = toUtf8String(if ((num == 0))
74- then base58'q'
73+func toDataKey (assetId) = toBase58String(valueOrElse(assetId, base58'WAVES'))
74+
75+
76+func isAssetDisabled (assetId) = valueOrElse(getBoolean(admin, toDataKey(assetId)), false)
77+
78+
79+func toFloatString (num,dec) = if ((num == 0))
80+ then "0"
7581 else if ((num > 0))
76- then ((toBytes(toString((num / dec))) + base58'o') + drop(toBytes(toString(((num % dec) + dec))), 1))
77- else throw("Negative amounts are not allowed! Send a PM to the administrator ..."))
82+ then toUtf8String(((toBytes(toString((num / dec))) + base58'o') + drop(toBytes(toString(((num % dec) + dec))), 1)))
83+ else throw("Negative amounts are not allowed!")
7884
7985
8086 func difference (fdappFunds,fcoldFunds) = {
81- let minAmount = fraction(fdappFunds, (percent / 100), fdappPercent)
82- let diffAmount = (fraction((fdappFunds + fcoldFunds), fdappPercent, percent) - fdappFunds)
83- if ((minAmount > diffAmount))
87+ let total = (fdappFunds + fcoldFunds)
88+ let amount = (fraction(total, fdappPercent, percent) - fdappFunds)
89+ if (((total / 100) > amount))
8490 then 0
85- else diffAmount
91+ else amount
8692 }
8793
8894
94100 }
95101
96102
97-func getScriptTransfer (address,amount,assetId) = if ((amount > 0))
98- then [ScriptTransfer(address, amount, assetId)]
99- else nil
103+func getScriptTransfer (address,amount,assetId) = if ((0 >= amount))
104+ then nil
105+ else [ScriptTransfer(address, amount, assetId)]
100106
101107
102108 @Callable(i)
109115 else false)
110116 then throw("This action can only be performed by an administrator or guarantor!")
111117 else if ((wavesDifference > wavesAvailable))
112- then throw("Not enough Waves balance! Send a PM to the administrator or cancel the lease.")
118+ then throw("Insufficient balance! Send a PM to the administrator or cancel the lease.")
113119 else if ((size(i.payments) > 0))
114120 then throw("Don't attach payment when calling this function ...")
115121 else {
122+ let fmmtDifference = if (isAssetDisabled(fmmtAsset))
123+ then 0
124+ else (saleSupply - assetBalance(fdapp, fmmtAsset))
116125 let sponsorship = min([500000, assetBalance(this, xfeeAsset)])
117- let fmmtDifference = (saleSupply - assetBalance(fdapp, fmmtAsset))
118126 let scriptTransfers = (((((((((getScriptTransfer(fdapp, rebalancingAmount(portfolio[0]), portfolio[0]) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[1]), portfolio[1])) ++ getScriptTransfer(fdapp, wavesDifference, unit)) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[3]), portfolio[3])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[4]), portfolio[4])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[5]), portfolio[5])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[6]), portfolio[6])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[7]), portfolio[7])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[8]), portfolio[8])) ++ getScriptTransfer(fdapp, fmmtDifference, fmmtAsset))
119127 let logEntryDataValue = ("DeFi Franklin (FMMT): autoRebalance () => tx: " + toBase58String(i.transactionId))
120- if ((size(scriptTransfers) > 0))
121- then (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
122- else throw("There are currently no transfers available.")
128+ if ((size(scriptTransfers) == 0))
129+ then throw("There are currently no transfers available.")
130+ else (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
123131 }
124132 }
125133
137145 let teamPayouts = fraction(tradeSupply, fteamPercent, percent)
138146 let amount = validate((teamPayouts - oldPayouts))
139147 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): sendTeamPayouts () =>", "amount:", toFloatString(amount, 100000), "FMMT"], " ")
140- if ((amount > 0))
141- then [ScriptTransfer(fteam, amount, fmmtAsset), IntegerEntry(payoutsDataKey, teamPayouts), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
142- else throw("There are currently no payments available.")
148+ if ((amount == 0))
149+ then throw("There are currently no payments available.")
150+ else [ScriptTransfer(fteam, amount, fmmtAsset), IntegerEntry(payoutsDataKey, teamPayouts), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
143151 }
144152
145153
153161 let oldVersion = valueOrElse(getString(this, versionDataKey), "")
154162 let versionList = split(drop(scriptVersion, 1), "_")
155163 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): setScriptVersion () =>", "version:", (versionList[0] + ";"), "updated:", makeString([take(versionList[1], 4), take(drop(versionList[1], 4), 2), drop(versionList[1], 6)], "-")], " ")
156- if ((oldVersion != scriptVersion))
157- then [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
158- else throw(("The script version has already been updated: " + scriptVersion))
164+ if ((oldVersion == scriptVersion))
165+ then throw(("The script version has already been updated: " + scriptVersion))
166+ else [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
159167 }
160168
161169
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let scriptVersion = "v5.10-final_20201026"
4+let scriptVersion = "v6.00-final_20201101"
55
66 let percent = 100000
77
88 let decimal = 100000000
99
1010 let fteamPercent = 10000
1111
1212 let leasePercent = 72000
1313
1414 let fdappPercent = 20000
1515
1616 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
1717
1818 let mmbotPublicKey = base58'62KBavoHK4TtCYmURFVeNC8j3gL8Jo7WwcrweoBLWofc'
1919
2020 let wxchgPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5'
2121
2222 let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58''), valueOrElse(getBinary(this, "guarantor4"), base58''), valueOrElse(getBinary(this, "guarantor5"), base58'')] :+ base58'')
2323
2424 let actualSize = value(indexOf(guarantors, base58''))
2525
2626 let minSignatures = ((actualSize / 2) + (actualSize % 2))
2727
2828 let btcAsset = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
2929
3030 let ethAsset = base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu'
3131
3232 let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
3333
3434 let fmmtAsset = base58'7sqT7HvCVtcrCTQV72FM5so65wjzM164rzoqDZRsRXg7'
3535
3636 let xfeeAsset = base58'5EMfVQiB8NF4HuhaXrZzDM637whWuVBsduq59ZaCSNqk'
3737
3838 let portfolio = ([usdtAsset, btcAsset, unit, ethAsset, base58'zMFqXuoyrn5w17PFurTqxB7GsS71fp9dfk6XFwxbPCy', base58'HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk', base58'B3uGHFRpSUuGEDWjqB9LWWxafQj8VTvpMucEyoxzws5H', base58'5WvPKSJXzVE2orvbkJ8wsQmmQKqTv9sGBPksV4adViw3', base58'BrjUWjndUanm5VsJkbUip8VRYy6LWJePtxya3FNv4TQa'] :+ fmmtAsset)
3939
4040 let fsale = Address(base58'3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2')
4141
4242 let fdapp = Address(base58'3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL')
4343
4444 let fcold = Address(base58'3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7')
4545
4646 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
4747
4848 let fteam = Address(base58'3P3TMgAUVtJKWHxQMdt8Ao6A1qnRyVmCSr2')
4949
5050 let saleSupply = (10000 * 100000)
5151
5252 let circSupply = ((value(assetInfo(fmmtAsset)).quantity - (assetBalance(fdapp, fmmtAsset) + assetBalance(this, fmmtAsset))) - saleSupply)
5353
5454 let fteamFunds = assetBalance(fteam, fmmtAsset)
5555
5656 let tradeSupply = max([0, (circSupply - fteamFunds)])
5757
5858 let wavesRegular = wavesBalance(this).regular
5959
6060 let wavesAvailable = wavesBalance(this).available
6161
6262 let logEntryDataKey = "logEntry"
6363
6464 let timestampDataKey = "timestamp"
6565
6666 let payoutsDataKey = "teamPayouts"
6767
6868 let versionDataKey = "scriptVersion"
6969
7070 func validate (posValue) = max([0, posValue])
7171
7272
73-func toFloatString (num,dec) = toUtf8String(if ((num == 0))
74- then base58'q'
73+func toDataKey (assetId) = toBase58String(valueOrElse(assetId, base58'WAVES'))
74+
75+
76+func isAssetDisabled (assetId) = valueOrElse(getBoolean(admin, toDataKey(assetId)), false)
77+
78+
79+func toFloatString (num,dec) = if ((num == 0))
80+ then "0"
7581 else if ((num > 0))
76- then ((toBytes(toString((num / dec))) + base58'o') + drop(toBytes(toString(((num % dec) + dec))), 1))
77- else throw("Negative amounts are not allowed! Send a PM to the administrator ..."))
82+ then toUtf8String(((toBytes(toString((num / dec))) + base58'o') + drop(toBytes(toString(((num % dec) + dec))), 1)))
83+ else throw("Negative amounts are not allowed!")
7884
7985
8086 func difference (fdappFunds,fcoldFunds) = {
81- let minAmount = fraction(fdappFunds, (percent / 100), fdappPercent)
82- let diffAmount = (fraction((fdappFunds + fcoldFunds), fdappPercent, percent) - fdappFunds)
83- if ((minAmount > diffAmount))
87+ let total = (fdappFunds + fcoldFunds)
88+ let amount = (fraction(total, fdappPercent, percent) - fdappFunds)
89+ if (((total / 100) > amount))
8490 then 0
85- else diffAmount
91+ else amount
8692 }
8793
8894
8995 func rebalancingAmount (assetId) = match assetId {
9096 case id: ByteVector =>
9197 difference(assetBalance(fdapp, id), assetBalance(this, id))
9298 case _ =>
9399 difference(wavesBalance(fdapp).regular, wavesBalance(this).regular)
94100 }
95101
96102
97-func getScriptTransfer (address,amount,assetId) = if ((amount > 0))
98- then [ScriptTransfer(address, amount, assetId)]
99- else nil
103+func getScriptTransfer (address,amount,assetId) = if ((0 >= amount))
104+ then nil
105+ else [ScriptTransfer(address, amount, assetId)]
100106
101107
102108 @Callable(i)
103109 func autoRebalance () = {
104110 let wavesDifference = rebalancingAmount(portfolio[2])
105111 if (if (if ((i.callerPublicKey != adminPublicKey))
106112 then (i.callerPublicKey != mmbotPublicKey)
107113 else false)
108114 then !(containsElement(guarantors, i.callerPublicKey))
109115 else false)
110116 then throw("This action can only be performed by an administrator or guarantor!")
111117 else if ((wavesDifference > wavesAvailable))
112- then throw("Not enough Waves balance! Send a PM to the administrator or cancel the lease.")
118+ then throw("Insufficient balance! Send a PM to the administrator or cancel the lease.")
113119 else if ((size(i.payments) > 0))
114120 then throw("Don't attach payment when calling this function ...")
115121 else {
122+ let fmmtDifference = if (isAssetDisabled(fmmtAsset))
123+ then 0
124+ else (saleSupply - assetBalance(fdapp, fmmtAsset))
116125 let sponsorship = min([500000, assetBalance(this, xfeeAsset)])
117- let fmmtDifference = (saleSupply - assetBalance(fdapp, fmmtAsset))
118126 let scriptTransfers = (((((((((getScriptTransfer(fdapp, rebalancingAmount(portfolio[0]), portfolio[0]) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[1]), portfolio[1])) ++ getScriptTransfer(fdapp, wavesDifference, unit)) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[3]), portfolio[3])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[4]), portfolio[4])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[5]), portfolio[5])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[6]), portfolio[6])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[7]), portfolio[7])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[8]), portfolio[8])) ++ getScriptTransfer(fdapp, fmmtDifference, fmmtAsset))
119127 let logEntryDataValue = ("DeFi Franklin (FMMT): autoRebalance () => tx: " + toBase58String(i.transactionId))
120- if ((size(scriptTransfers) > 0))
121- then (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
122- else throw("There are currently no transfers available.")
128+ if ((size(scriptTransfers) == 0))
129+ then throw("There are currently no transfers available.")
130+ else (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
123131 }
124132 }
125133
126134
127135
128136 @Callable(i)
129137 func sendTeamPayouts () = if (if ((i.callerPublicKey != adminPublicKey))
130138 then (i.callerPublicKey != mmbotPublicKey)
131139 else false)
132140 then throw("This action can only be performed by an administrator!")
133141 else if ((size(i.payments) > 0))
134142 then throw("Don't attach payment when calling this function ...")
135143 else {
136144 let oldPayouts = valueOrElse(getInteger(this, payoutsDataKey), 0)
137145 let teamPayouts = fraction(tradeSupply, fteamPercent, percent)
138146 let amount = validate((teamPayouts - oldPayouts))
139147 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): sendTeamPayouts () =>", "amount:", toFloatString(amount, 100000), "FMMT"], " ")
140- if ((amount > 0))
141- then [ScriptTransfer(fteam, amount, fmmtAsset), IntegerEntry(payoutsDataKey, teamPayouts), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
142- else throw("There are currently no payments available.")
148+ if ((amount == 0))
149+ then throw("There are currently no payments available.")
150+ else [ScriptTransfer(fteam, amount, fmmtAsset), IntegerEntry(payoutsDataKey, teamPayouts), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
143151 }
144152
145153
146154
147155 @Callable(i)
148156 func setScriptVersion () = if ((i.callerPublicKey != adminPublicKey))
149157 then throw("This action can only be performed by an administrator!")
150158 else if ((size(i.payments) > 0))
151159 then throw("Don't attach payment when calling this function ...")
152160 else {
153161 let oldVersion = valueOrElse(getString(this, versionDataKey), "")
154162 let versionList = split(drop(scriptVersion, 1), "_")
155163 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): setScriptVersion () =>", "version:", (versionList[0] + ";"), "updated:", makeString([take(versionList[1], 4), take(drop(versionList[1], 4), 2), drop(versionList[1], 6)], "-")], " ")
156- if ((oldVersion != scriptVersion))
157- then [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
158- else throw(("The script version has already been updated: " + scriptVersion))
164+ if ((oldVersion == scriptVersion))
165+ then throw(("The script version has already been updated: " + scriptVersion))
166+ else [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
159167 }
160168
161169
162170 @Verifier(tx)
163171 func verify () = {
164172 let isValidOwner = sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
165173 let isValidMMBot = if (isValidOwner)
166174 then true
167175 else sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], mmbotPublicKey)
168176 let isValidAdmin = if (isValidOwner)
169177 then true
170178 else sigVerify_16Kb(tx.bodyBytes, tx.proofs[1], adminPublicKey)
171179 let validGuarantors = (((((if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
172180 then 1
173181 else 0) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
174182 then 1
175183 else 0)) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
176184 then 1
177185 else 0)) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[4], guarantors[3]))
178186 then 1
179187 else 0)) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[5], guarantors[4]))
180188 then 1
181189 else 0))
182190 let anyValidGuarantor = (validGuarantors > 0)
183191 let isValidGuarantors = (validGuarantors >= minSignatures)
184192 let wavesLease = (wavesRegular - wavesAvailable)
185193 let wavesFunds = (wavesRegular + wavesBalance(fdapp).regular)
186194 let maxSaleAmount = validate((saleSupply - assetBalance(fsale, fmmtAsset)))
187195 let maxLeaseAmount = validate((fraction(wavesFunds, leasePercent, percent) - wavesLease))
188196 match tx {
189197 case o: Order =>
190198 if (if (if (isValidMMBot)
191199 then if (if (if ((o.orderType == Buy))
192200 then (o.assetPair.priceAsset != xfeeAsset)
193201 else false)
194202 then !(containsElement(portfolio, o.assetPair.priceAsset))
195203 else false)
196204 then true
197205 else if (if ((o.orderType == Sell))
198206 then (o.assetPair.amountAsset != xfeeAsset)
199207 else false)
200208 then !(containsElement(portfolio, o.assetPair.amountAsset))
201209 else false
202210 else false)
203211 then !(isDefined(o.matcherFeeAssetId))
204212 else false)
205213 then (o.matcherPublicKey == wxchgPublicKey)
206214 else false
207215 case t: TransferTransaction =>
208216 if (if (if (isValidOwner)
209217 then !(containsElement(portfolio, t.assetId))
210218 else false)
211219 then !(containsElement(portfolio, t.feeAssetId))
212220 else false)
213221 then true
214222 else if (if (if (isValidAdmin)
215223 then (t.assetId == fmmtAsset)
216224 else false)
217225 then (maxSaleAmount >= t.amount)
218226 else false)
219227 then (addressFromRecipient(t.recipient) == fsale)
220228 else false
221229 case l: LeaseTransaction =>
222230 if (isValidMMBot)
223231 then (maxLeaseAmount >= l.amount)
224232 else false
225233 case _: LeaseCancelTransaction =>
226234 if (isValidMMBot)
227235 then true
228236 else anyValidGuarantor
229237 case _: SetScriptTransaction|DataTransaction =>
230238 if (isValidAdmin)
231239 then isValidGuarantors
232240 else false
233241 case _ =>
234242 false
235243 }
236244 }
237245

github/deemru/w8io/0e76f2f 
77.47 ms