tx · 57doWTnCgpAQWtBvqTQDEhQMCBYXhGx9maxXkgA81Myy

3NAg879tKUJh949h21umkwiaRQhwZftz1BE:  -1.00000000 Waves

2019.09.10 16:28 [670076] smart account 3NAg879tKUJh949h21umkwiaRQhwZftz1BE > SELF 0.00000000 Waves

{ "type": 13, "id": "57doWTnCgpAQWtBvqTQDEhQMCBYXhGx9maxXkgA81Myy", "fee": 100000000, "feeAssetId": null, "timestamp": 1568122097093, "version": 1, "sender": "3NAg879tKUJh949h21umkwiaRQhwZftz1BE", "senderPublicKey": "BqY2jhkQCcbidtQdQZu6f9RV3AkFAS8VPToHxwYu1KdJ", "proofs": [ "3v1ycSzGT9XapwCgJB4RDEPfRQLLMUXMCN9vDqCw6EPMqwUunZ45UgscfrRr8i7EfBjQZ9ALg9RSt2bknddKKMdb" ], "script": "base64:AAIDAAAAAAAAAAAAAAAgAAAAABx0aWNrZXJDYXRhbG9ndWVPcmFjbGVBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNNeEh4VzVWV3E0S3JXY2JoRmZ4S3JhZlhtNG1MNnJaSGZqAAAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM05BRHFIb0xNYk1UZlhkUDJUZUJCU3g1bVFYZVBWajNLWm0AAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3ICAAAAGzxub3RTdXBwb3J0ZWRDdXJyZW5jeUVycm9yPgAAAAAXaXNzdWVyQWNjZXNzRGVuaWVkRXJyb3ICAAAAGTxpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcj4AAAAAFW5vdEVub3VnaFBheW1lbnRFcnJvcgIAAAAXPG5vdEVub3VnaFBheW1lbnRFcnJvcj4AAAAAJHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcgIAAAAmPHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcj4AAAAAInRpY2tlclZhbGlkYXRpb25UaWNrZXJJc0V4aXN0RXJyb3ICAAAAJDx0aWNrZXJWYWxpZGF0aW9uVGlja2VySXNFeGlzdEVycm9yPgAAAAAVdmFsdWVXcm9uZ0Zvcm1hdEVycm9yAgAAABc8dmFsdWVXcm9uZ0Zvcm1hdEVycm9yPgAAAAAVbm9uRXhpc3RlbnRBc3NldEVycm9yAgAAABc8bm9uRXhpc3RlbnRBc3NldEVycm9yPgAAAAAObm9QYXltZW50RXJyb3ICAAAAEDxub1BheW1lbnRFcnJvcj4AAAAAFnRpY2tlcklzSW1tdXRhYmxlRXJyb3ICAAAAGDx0aWNrZXJJc0ltbXV0YWJsZUVycm9yPgAAAAADd3ZzAAAAAAAF9eEAAAAAABF0aWNrZXJVcGRhdGVQcmljZQkAAGgAAAACAAAAAAAAAAACBQAAAAN3dnMAAAAAD2xpbmtVcGRhdGVQcmljZQAAAAAAAvrwgAAAAAAWZGVzY3JpcHRpb25VcGRhdGVQcmljZQAAAAAAAvrwgAAAAAAPdGlja2VyTWluTGVuZ3RoAAAAAAAAAAABAAAAAA90aWNrZXJNYXhMZW5ndGgAAAAAAAAAAAYAAAAAFHRpY2tlckFsbG93ZWRMZXR0ZXJzAgAAABpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgAAAAAPcmVzZXJ2ZWRUaWNrZXJzAgAAASVCVEMsRVRILFhSUCxCQ0gsTFRDLEJOQixVU0RULEVPUyxCU1YsWE1SLFhMTSxMRU8sQURBLFRSWCxEQVNILExJTkssWFRaLE5FTyxNSU9UQSxFVEMsQVRPTSxYRU0sTUtSLENSTyxVU0RDLE9OVCxWU1lTLFpFQyxET0dFLFZFVCxEQ1IsSFQsQkFULEJURyxRVFVNLEhFREcsVFVTRCxQQVgsRUdULE9NRyxBTEdPLEtDUyxSVk4sTFNLLE5BTk8sQlRULEJDRCxOUkcsTEFNQixIT1QsQkNOLERHQixSRVAsQlRTLFpSWCxYSU4sQU9BLElPU1QsSUNYLE5FVCxHTlQsUFBULFJIT0MsU05ULEFFLFdUQyxWRVJJLFIsWklMLEJOVAEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgAAAA5hY2NvdW50QWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAOYWNjb3VudEFkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAAAAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgAAAANzdHIAAAAGc3Vic3RyBAAAAAckbWF0Y2gwCQAEswAAAAIFAAAAA3N0cgUAAAAGc3Vic3RyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABWluZGV4BQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFaW5kZXgFAAAAByRtYXRjaDAHCQEAAAAFdGhyb3cAAAAAAQAAAA1pc1ZhbGlkVGlja2VyAAAAAQAAAAZ0aWNrZXIEAAAADXRpY2tlckxldHRlcnMJAAS1AAAAAgUAAAAGdGlja2VyAgAAAAAEAAAADHRpY2tlckxlbmd0aAkAAZAAAAABBQAAAA10aWNrZXJMZXR0ZXJzBAAAAA5pc0xldHRlcjFWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAABAAAAA5pc0xldHRlcjJWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAABBAAAAA5pc0xldHRlcjNWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAACBAAAAA5pc0xldHRlcjRWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAADBAAAAA5pc0xldHRlcjVWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAEBAAAAA5pc0xldHRlcjZWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAFAwkBAAAAAiE9AAAAAgUAAAAGdGlja2VyAgAAAAADAwkAAGcAAAACBQAAAAx0aWNrZXJMZW5ndGgFAAAAD3RpY2tlck1pbkxlbmd0aAkAAGcAAAACBQAAAA90aWNrZXJNYXhMZW5ndGgFAAAADHRpY2tlckxlbmd0aAcDCQAAAAAAAAIAAAAAAAAAAAEFAAAADHRpY2tlckxlbmd0aAUAAAAOaXNMZXR0ZXIxVmFsaWQDCQAAAAAAAAIAAAAAAAAAAAIFAAAADHRpY2tlckxlbmd0aAMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAMFAAAADHRpY2tlckxlbmd0aAMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAQFAAAADHRpY2tlckxlbmd0aAMDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHBQAAAA5pc0xldHRlcjRWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAUFAAAADHRpY2tlckxlbmd0aAMDAwMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcFAAAADmlzTGV0dGVyM1ZhbGlkBwUAAAAOaXNMZXR0ZXI0VmFsaWQHBQAAAA5pc0xldHRlcjVWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAYFAAAADHRpY2tlckxlbmd0aAMDAwMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcFAAAADmlzTGV0dGVyNFZhbGlkBwUAAAAOaXNMZXR0ZXI1VmFsaWQHBQAAAA5pc0xldHRlcjZWYWxpZAcHBwcBAAAAEmlzVmFsaWREZXNjcmlwdGlvbgAAAAEAAAALZGVzY3JpcHRpb24EAAAAD2Rlc2NyaXB0aW9uU2l6ZQkAATEAAAABBQAAAAtkZXNjcmlwdGlvbgMDCQAAZgAAAAIFAAAAD2Rlc2NyaXB0aW9uU2l6ZQAAAAAAAAAAAAkAAGcAAAACAAAAAAAAAAPoBQAAAA9kZXNjcmlwdGlvblNpemUHBgcBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABAAAAB2Fzc2V0SWQEAAAADmFzc2V0UmF0aW5nS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAMYXNzZXRSYXRpbmdfBQAAAAdhc3NldElkAgAAAAJfMQQAAAAQYXNzZXRSYXRpbmdWYWx1ZQkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwUAAAAOYXNzZXRSYXRpbmdLZXkEAAAAE2Fzc2V0UmF0aW5nVHJlc2hvbGQJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MCAAAADnRpY2tlclJhdGluZ18xCQAAZwAAAAIFAAAAEGFzc2V0UmF0aW5nVmFsdWUFAAAAE2Fzc2V0UmF0aW5nVHJlc2hvbGQBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlXZWlnaHQAAAABAAAAB2Fzc2V0SWQEAAAADmFzc2V0V2VpZ2h0S2V5CQABLAAAAAICAAAADGFzc2V0V2VpZ2h0XwUAAAAHYXNzZXRJZAQAAAAQYXNzZXRXZWlnaHRWYWx1ZQkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwUAAAAOYXNzZXRXZWlnaHRLZXkEAAAAE2Fzc2V0V2VpZ2h0VHJlc2hvbGQJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MCAAAADHRpY2tlcldlaWdodAkAAGcAAAACBQAAABBhc3NldFdlaWdodFZhbHVlBQAAABNhc3NldFdlaWdodFRyZXNob2xkAQAAABtpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5Vm90ZXMAAAABAAAAB2Fzc2V0SWQEAAAADWFzc2V0Vm90ZXNLZXkJAAEsAAAAAgIAAAALYXNzZXRWb3Rlc18FAAAAB2Fzc2V0SWQEAAAAD2Fzc2V0Vm90ZXNWYWx1ZQkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwUAAAANYXNzZXRWb3Rlc0tleQQAAAASYXNzZXRWb3Rlc1RyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzAgAAAAt0aWNrZXJWb3RlcwkAAGcAAAACBQAAAA9hc3NldFZvdGVzVmFsdWUFAAAAEmFzc2V0Vm90ZXNUcmVzaG9sZAEAAAAXaXNVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABAAAAB2Fzc2V0SWQDAwkBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABBQAAAAdhc3NldElkCQEAAAAcaXNBc3NldFVwZGF0ZUFsbG93ZWRCeVdlaWdodAAAAAEFAAAAB2Fzc2V0SWQHCQEAAAAbaXNBc3NldFVwZGF0ZUFsbG93ZWRCeVZvdGVzAAAAAQUAAAAHYXNzZXRJZAcBAAAAIGdldEFzc2V0SXNzdWVyQWRkcmVzc0Zyb21Bc3NldElkAAAAAQAAAAdhc3NldElkCQAEJQAAAAEICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAAdhc3NldElkBQAAABVub25FeGlzdGVudEFzc2V0RXJyb3IAAAAGaXNzdWVyAQAAAApnZXRQYXltZW50AAAAAQAAAAFpCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIIBQAAAAFpAAAAB3BheW1lbnQFAAAADm5vUGF5bWVudEVycm9yAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQAAAAFpBAAAAAdwYXltZW50CQEAAAAKZ2V0UGF5bWVudAAAAAEFAAAAAWkDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBgcBAAAAD2lzRW5vdWdoUGF5bWVudAAAAAIAAAABaQAAAA9yZXF1aXJlZFBheW1lbnQEAAAAB3BheW1lbnQJAQAAAApnZXRQYXltZW50AAAAAQUAAAABaQMJAABnAAAAAggFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAA9yZXF1aXJlZFBheW1lbnQGBwEAAAATaXNDYWxsZXJBc3NldElzc3VlcgAAAAIAAAABaQAAAAdhc3NldElkBAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAEWFzc2V0SXNzdWVyQWRyZXNzCQEAAAAgZ2V0QXNzZXRJc3N1ZXJBZGRyZXNzRnJvbUFzc2V0SWQAAAABBQAAAAdhc3NldElkAwkAAAAAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAABFhc3NldElzc3VlckFkcmVzcwYHAAAAAwAAAAFpAQAAAAx1cGRhdGVUaWNrZXIAAAACAAAAB2Fzc2V0SWQAAAAGdGlja2VyBAAAAA9pc3N1ZXJUaWNrZXJLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADWlzc3VlclRpY2tlcl8CAAAAATwFAAAAB2Fzc2V0SWQCAAAAAT4EAAAAEGlzVGlja2VyUmVzZXJ2ZWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAPcmVzZXJ2ZWRUaWNrZXJzBQAAAAZ0aWNrZXIEAAAADGlzVGlja2VyRnJlZQQAAAAHJG1hdGNoMAkABB0AAAACBQAAABx0aWNrZXJDYXRhbG9ndWVPcmFjbGVBZGRyZXNzBQAAAAZ0aWNrZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABdAUAAAAHJG1hdGNoMAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXQFAAAAByRtYXRjaDAGCQEAAAAFdGhyb3cAAAAABAAAABlpc1RpY2tlck5vdEFzc2luZWRUb0Fzc2V0BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAD2lzc3VlclRpY2tlcktleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF0BQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdAUAAAAHJG1hdGNoMAYJAQAAAAV0aHJvdwAAAAADCQEAAAAQaXNQYXltZW50SW5XYXZlcwAAAAEFAAAAAWkDCQEAAAAPaXNFbm91Z2hQYXltZW50AAAAAgUAAAABaQUAAAARdGlja2VyVXBkYXRlUHJpY2UDCQEAAAATaXNDYWxsZXJBc3NldElzc3VlcgAAAAIFAAAAAWkFAAAAB2Fzc2V0SWQDCQEAAAAXaXNVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABBQAAAAdhc3NldElkAwUAAAAZaXNUaWNrZXJOb3RBc3NpbmVkVG9Bc3NldAMDBQAAAAxpc1RpY2tlckZyZWUJAQAAAAEhAAAAAQUAAAAQaXNUaWNrZXJSZXNlcnZlZAcDCQEAAAANaXNWYWxpZFRpY2tlcgAAAAEFAAAABnRpY2tlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPaXNzdWVyVGlja2VyS2V5BQAAAAZ0aWNrZXIFAAAAA25pbAkAAAIAAAABBQAAABV2YWx1ZVdyb25nRm9ybWF0RXJyb3IJAAACAAAAAQUAAAAidGlja2VyVmFsaWRhdGlvblRpY2tlcklzRXhpc3RFcnJvcgkAAAIAAAABBQAAABZ0aWNrZXJJc0ltbXV0YWJsZUVycm9yCQAAAgAAAAEFAAAAJHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcgkAAAIAAAABBQAAABdpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcgkAAAIAAAABBQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IJAAACAAAAAQUAAAAZbm90U3VwcG9ydGVkQ3VycmVuY3lFcnJvcgAAAAFpAQAAABF1cGRhdGVEZXNjcmlwdGlvbgAAAAIAAAAHYXNzZXRJZAAAAAtkZXNjcmlwdGlvbgQAAAAUaXNzdWVyRGVzY3JpcHRpb25LZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEmlzc3VlckRlc2NyaXB0aW9uXwIAAAABPAUAAAAHYXNzZXRJZAIAAAABPgMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAABZkZXNjcmlwdGlvblVwZGF0ZVByaWNlAwkBAAAAE2lzQ2FsbGVyQXNzZXRJc3N1ZXIAAAACBQAAAAFpBQAAAAdhc3NldElkAwkBAAAAEmlzVmFsaWREZXNjcmlwdGlvbgAAAAEFAAAAC2Rlc2NyaXB0aW9uCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRpc3N1ZXJEZXNjcmlwdGlvbktleQUAAAALZGVzY3JpcHRpb24FAAAAA25pbAkAAAIAAAABBQAAABV2YWx1ZVdyb25nRm9ybWF0RXJyb3IJAAACAAAAAQUAAAAXaXNzdWVyQWNjZXNzRGVuaWVkRXJyb3IJAAACAAAAAQUAAAAVbm90RW5vdWdoUGF5bWVudEVycm9yCQAAAgAAAAEFAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3IAAAABaQEAAAAKdXBkYXRlTGluawAAAAIAAAAHYXNzZXRJZAAAAARsaW5rBAAAAA1pc3N1ZXJMaW5rS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtpc3N1ZXJMaW5rXwIAAAABPAUAAAAHYXNzZXRJZAIAAAABPgMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAAA9saW5rVXBkYXRlUHJpY2UDCQEAAAATaXNDYWxsZXJBc3NldElzc3VlcgAAAAIFAAAAAWkFAAAAB2Fzc2V0SWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWlzc3VlckxpbmtLZXkFAAAABGxpbmsFAAAAA25pbAkAAAIAAAABBQAAABdpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcgkAAAIAAAABBQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IJAAACAAAAAQUAAAAZbm90U3VwcG9ydGVkQ3VycmVuY3lFcnJvcgAAAAB1Lhey", "chainId": 84, "height": 670076, "spentComplexity": 0 } View: original | compacted Prev: 4F3Yy5REKBAEcqLy4ATSwkKqX57g725JquLXTvjiRout Next: BmqF9mAsUZ6NXinUWu9NRZm9TGkum9UHL6pQKUjuCmiD Diff:
OldNewDifferences
1515
1616 let tickerValidationTickerIsExistError = "<tickerValidationTickerIsExistError>"
1717
18-let tickerValidationWrongFormatError = "<tickerValidationWrongFormatError>"
18+let valueWrongFormatError = "<valueWrongFormatError>"
1919
2020 let nonExistentAssetError = "<nonExistentAssetError>"
2121
118118 }
119119
120120
121+func isValidDescription (description) = {
122+ let descriptionSize = size(description)
123+ if (if ((descriptionSize > 0))
124+ then (1000 >= descriptionSize)
125+ else false)
126+ then true
127+ else false
128+ }
129+
130+
121131 func isAssetUpdateAllowedByRating (assetId) = {
122132 let assetRatingKey = (("assetRating_" + assetId) + "_1")
123133 let assetRatingValue = getIntegerFromAccount(tokenRatingOracleAddress, assetRatingKey)
210220 else false)
211221 then if (isValidTicker(ticker))
212222 then WriteSet([DataEntry(issuerTickerKey, ticker)])
213- else throw(tickerValidationWrongFormatError)
223+ else throw(valueWrongFormatError)
214224 else throw(tickerValidationTickerIsExistError)
215225 else throw(tickerIsImmutableError)
216226 else throw(tickerValidationNotEnoughRatingError)
227237 if (isPaymentInWaves(i))
228238 then if (isEnoughPayment(i, descriptionUpdatePrice))
229239 then if (isCallerAssetIssuer(i, assetId))
230- then WriteSet([DataEntry(issuerDescriptionKey, description)])
240+ then if (isValidDescription(description))
241+ then WriteSet([DataEntry(issuerDescriptionKey, description)])
242+ else throw(valueWrongFormatError)
231243 else throw(issuerAccessDeniedError)
232244 else throw(notEnoughPaymentError)
233245 else throw(notSupportedCurrencyError)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
55
66 let tokenRatingOracleAddress = addressFromStringValue("3NADqHoLMbMTfXdP2TeBBSx5mQXePVj3KZm")
77
88 let notSupportedCurrencyError = "<notSupportedCurrencyError>"
99
1010 let issuerAccessDeniedError = "<issuerAccessDeniedError>"
1111
1212 let notEnoughPaymentError = "<notEnoughPaymentError>"
1313
1414 let tickerValidationNotEnoughRatingError = "<tickerValidationNotEnoughRatingError>"
1515
1616 let tickerValidationTickerIsExistError = "<tickerValidationTickerIsExistError>"
1717
18-let tickerValidationWrongFormatError = "<tickerValidationWrongFormatError>"
18+let valueWrongFormatError = "<valueWrongFormatError>"
1919
2020 let nonExistentAssetError = "<nonExistentAssetError>"
2121
2222 let noPaymentError = "<noPaymentError>"
2323
2424 let tickerIsImmutableError = "<tickerIsImmutableError>"
2525
2626 let wvs = 100000000
2727
2828 let tickerUpdatePrice = (2 * wvs)
2929
3030 let linkUpdatePrice = 50000000
3131
3232 let descriptionUpdatePrice = 50000000
3333
3434 let tickerMinLength = 1
3535
3636 let tickerMaxLength = 6
3737
3838 let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3939
4040 let reservedTickers = "BTC,ETH,XRP,BCH,LTC,BNB,USDT,EOS,BSV,XMR,XLM,LEO,ADA,TRX,DASH,LINK,XTZ,NEO,MIOTA,ETC,ATOM,XEM,MKR,CRO,USDC,ONT,VSYS,ZEC,DOGE,VET,DCR,HT,BAT,BTG,QTUM,HEDG,TUSD,PAX,EGT,OMG,ALGO,KCS,RVN,LSK,NANO,BTT,BCD,NRG,LAMB,HOT,BCN,DGB,REP,BTS,ZRX,XIN,AOA,IOST,ICX,NET,GNT,PPT,RHOC,SNT,AE,WTC,VERI,R,ZIL,BNT"
4141
4242 func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
4343 case i: Int =>
4444 i
4545 case _ =>
4646 0
4747 }
4848
4949
5050 func isSubstrExist (str,substr) = match indexOf(str, substr) {
5151 case index: Int =>
5252 true
5353 case index: Unit =>
5454 false
5555 case _ =>
5656 throw()
5757 }
5858
5959
6060 func isValidTicker (ticker) = {
6161 let tickerLetters = split(ticker, "")
6262 let tickerLength = size(tickerLetters)
6363 let isLetter1Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[0])
6464 let isLetter2Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[1])
6565 let isLetter3Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[2])
6666 let isLetter4Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[3])
6767 let isLetter5Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[4])
6868 let isLetter6Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[5])
6969 if ((ticker != ""))
7070 then if (if ((tickerLength >= tickerMinLength))
7171 then (tickerMaxLength >= tickerLength)
7272 else false)
7373 then if ((1 == tickerLength))
7474 then isLetter1Valid
7575 else if ((2 == tickerLength))
7676 then if (isLetter1Valid)
7777 then isLetter2Valid
7878 else false
7979 else if ((3 == tickerLength))
8080 then if (if (isLetter1Valid)
8181 then isLetter2Valid
8282 else false)
8383 then isLetter3Valid
8484 else false
8585 else if ((4 == tickerLength))
8686 then if (if (if (isLetter1Valid)
8787 then isLetter2Valid
8888 else false)
8989 then isLetter3Valid
9090 else false)
9191 then isLetter4Valid
9292 else false
9393 else if ((5 == tickerLength))
9494 then if (if (if (if (isLetter1Valid)
9595 then isLetter2Valid
9696 else false)
9797 then isLetter3Valid
9898 else false)
9999 then isLetter4Valid
100100 else false)
101101 then isLetter5Valid
102102 else false
103103 else if ((6 == tickerLength))
104104 then if (if (if (if (if (isLetter1Valid)
105105 then isLetter2Valid
106106 else false)
107107 then isLetter3Valid
108108 else false)
109109 then isLetter4Valid
110110 else false)
111111 then isLetter5Valid
112112 else false)
113113 then isLetter6Valid
114114 else false
115115 else false
116116 else false
117117 else false
118118 }
119119
120120
121+func isValidDescription (description) = {
122+ let descriptionSize = size(description)
123+ if (if ((descriptionSize > 0))
124+ then (1000 >= descriptionSize)
125+ else false)
126+ then true
127+ else false
128+ }
129+
130+
121131 func isAssetUpdateAllowedByRating (assetId) = {
122132 let assetRatingKey = (("assetRating_" + assetId) + "_1")
123133 let assetRatingValue = getIntegerFromAccount(tokenRatingOracleAddress, assetRatingKey)
124134 let assetRatingTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerRating_1")
125135 (assetRatingValue >= assetRatingTreshold)
126136 }
127137
128138
129139 func isAssetUpdateAllowedByWeight (assetId) = {
130140 let assetWeightKey = ("assetWeight_" + assetId)
131141 let assetWeightValue = getIntegerFromAccount(tokenRatingOracleAddress, assetWeightKey)
132142 let assetWeightTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerWeight")
133143 (assetWeightValue >= assetWeightTreshold)
134144 }
135145
136146
137147 func isAssetUpdateAllowedByVotes (assetId) = {
138148 let assetVotesKey = ("assetVotes_" + assetId)
139149 let assetVotesValue = getIntegerFromAccount(tokenRatingOracleAddress, assetVotesKey)
140150 let assetVotesTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerVotes")
141151 (assetVotesValue >= assetVotesTreshold)
142152 }
143153
144154
145155 func isUpdateAllowedByRating (assetId) = if (if (isAssetUpdateAllowedByRating(assetId))
146156 then isAssetUpdateAllowedByWeight(assetId)
147157 else false)
148158 then isAssetUpdateAllowedByVotes(assetId)
149159 else false
150160
151161
152162 func getAssetIssuerAddressFromAssetId (assetId) = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), nonExistentAssetError).issuer)
153163
154164
155165 func getPayment (i) = valueOrErrorMessage(i.payment, noPaymentError)
156166
157167
158168 func isPaymentInWaves (i) = {
159169 let payment = getPayment(i)
160170 if (!(isDefined(payment.assetId)))
161171 then true
162172 else false
163173 }
164174
165175
166176 func isEnoughPayment (i,requiredPayment) = {
167177 let payment = getPayment(i)
168178 if ((payment.amount >= requiredPayment))
169179 then true
170180 else false
171181 }
172182
173183
174184 func isCallerAssetIssuer (i,assetId) = {
175185 let callerAddress = toBase58String(i.caller.bytes)
176186 let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
177187 if ((callerAddress == assetIssuerAdress))
178188 then true
179189 else false
180190 }
181191
182192
183193 @Callable(i)
184194 func updateTicker (assetId,ticker) = {
185195 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
186196 let isTickerReserved = isSubstrExist(reservedTickers, ticker)
187197 let isTickerFree = match getString(tickerCatalogueOracleAddress, ticker) {
188198 case t: String =>
189199 false
190200 case t: Unit =>
191201 true
192202 case _ =>
193203 throw()
194204 }
195205 let isTickerNotAssinedToAsset = match getString(this, issuerTickerKey) {
196206 case t: String =>
197207 false
198208 case t: Unit =>
199209 true
200210 case _ =>
201211 throw()
202212 }
203213 if (isPaymentInWaves(i))
204214 then if (isEnoughPayment(i, tickerUpdatePrice))
205215 then if (isCallerAssetIssuer(i, assetId))
206216 then if (isUpdateAllowedByRating(assetId))
207217 then if (isTickerNotAssinedToAsset)
208218 then if (if (isTickerFree)
209219 then !(isTickerReserved)
210220 else false)
211221 then if (isValidTicker(ticker))
212222 then WriteSet([DataEntry(issuerTickerKey, ticker)])
213- else throw(tickerValidationWrongFormatError)
223+ else throw(valueWrongFormatError)
214224 else throw(tickerValidationTickerIsExistError)
215225 else throw(tickerIsImmutableError)
216226 else throw(tickerValidationNotEnoughRatingError)
217227 else throw(issuerAccessDeniedError)
218228 else throw(notEnoughPaymentError)
219229 else throw(notSupportedCurrencyError)
220230 }
221231
222232
223233
224234 @Callable(i)
225235 func updateDescription (assetId,description) = {
226236 let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
227237 if (isPaymentInWaves(i))
228238 then if (isEnoughPayment(i, descriptionUpdatePrice))
229239 then if (isCallerAssetIssuer(i, assetId))
230- then WriteSet([DataEntry(issuerDescriptionKey, description)])
240+ then if (isValidDescription(description))
241+ then WriteSet([DataEntry(issuerDescriptionKey, description)])
242+ else throw(valueWrongFormatError)
231243 else throw(issuerAccessDeniedError)
232244 else throw(notEnoughPaymentError)
233245 else throw(notSupportedCurrencyError)
234246 }
235247
236248
237249
238250 @Callable(i)
239251 func updateLink (assetId,link) = {
240252 let issuerLinkKey = ((("issuerLink_" + "<") + assetId) + ">")
241253 if (isPaymentInWaves(i))
242254 then if (isEnoughPayment(i, linkUpdatePrice))
243255 then if (isCallerAssetIssuer(i, assetId))
244256 then WriteSet([DataEntry(issuerLinkKey, link)])
245257 else throw(issuerAccessDeniedError)
246258 else throw(notEnoughPaymentError)
247259 else throw(notSupportedCurrencyError)
248260 }
249261
250262

github/deemru/w8io/3ef1775 
57.86 ms