tx · 4S6fPjvpBc6biWiL5TY2MiSbbrf7NAxcWudm22ALdXgb

3NAg879tKUJh949h21umkwiaRQhwZftz1BE:  -1.00000000 Waves

2019.10.07 17:37 [709492] smart account 3NAg879tKUJh949h21umkwiaRQhwZftz1BE > SELF 0.00000000 Waves

{ "type": 13, "id": "4S6fPjvpBc6biWiL5TY2MiSbbrf7NAxcWudm22ALdXgb", "fee": 100000000, "feeAssetId": null, "timestamp": 1570459062733, "version": 1, "sender": "3NAg879tKUJh949h21umkwiaRQhwZftz1BE", "senderPublicKey": "BqY2jhkQCcbidtQdQZu6f9RV3AkFAS8VPToHxwYu1KdJ", "proofs": [ "3XPC8uzFFnmACLRLbuA5fP9tcpfgEGqDfrbPU7fvd57cmxveSR488Q9nnnUwBCaTu8WiPTGQqq3ayYVCqJ39Acb8" ], "script": "base64:AAIDAAAAAAAAABQIARIECgIICBIECgIICBIECgIICAAAACMAAAAAHHRpY2tlckNhdGFsb2d1ZU9yYWNsZUFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM014SHhXNVZXcTRLcldjYmhGZnhLcmFmWG00bUw2clpIZmoAAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABAgAAACMzTkFEcUhvTE1iTVRmWGRQMlRlQkJTeDVtUVhlUFZqM0tabQAAAAAdc3VzcGljaW91c1Rva2Vuc09yYWNsZUFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM01wYU1aSEd2MkhuZVByR051M05TTXE2VGtFSmlkMUZIbloAAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3ICAAAAGzxub3RTdXBwb3J0ZWRDdXJyZW5jeUVycm9yPgAAAAAXaXNzdWVyQWNjZXNzRGVuaWVkRXJyb3ICAAAAGTxpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcj4AAAAAFW5vdEVub3VnaFBheW1lbnRFcnJvcgIAAAAXPG5vdEVub3VnaFBheW1lbnRFcnJvcj4AAAAAJHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcgIAAAAmPHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcj4AAAAAInRpY2tlclZhbGlkYXRpb25UaWNrZXJJc0V4aXN0RXJyb3ICAAAAJDx0aWNrZXJWYWxpZGF0aW9uVGlja2VySXNFeGlzdEVycm9yPgAAAAAVdmFsdWVXcm9uZ0Zvcm1hdEVycm9yAgAAABc8dmFsdWVXcm9uZ0Zvcm1hdEVycm9yPgAAAAAVbm9uRXhpc3RlbnRBc3NldEVycm9yAgAAABc8bm9uRXhpc3RlbnRBc3NldEVycm9yPgAAAAAObm9QYXltZW50RXJyb3ICAAAAEDxub1BheW1lbnRFcnJvcj4AAAAAFnRpY2tlcklzSW1tdXRhYmxlRXJyb3ICAAAAGDx0aWNrZXJJc0ltbXV0YWJsZUVycm9yPgAAAAAUc3VzcGljaW91c0Fzc2V0RXJyb3ICAAAAFjxzdXNwaWNpb3VzQXNzZXRFcnJvcj4AAAAAA3d2cwAAAAAABfXhAAAAAAARdGlja2VyVXBkYXRlUHJpY2UJAABoAAAAAgAAAAAAAAAABQUAAAADd3ZzAAAAAA9saW5rVXBkYXRlUHJpY2UAAAAAAAL68IAAAAAAFmRlc2NyaXB0aW9uVXBkYXRlUHJpY2UAAAAAAAL68IAAAAAAD3RpY2tlck1pbkxlbmd0aAAAAAAAAAAAAQAAAAAPdGlja2VyTWF4TGVuZ3RoAAAAAAAAAAAGAAAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwIAAAAaQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoAAAAAD3Jlc2VydmVkVGlja2VycwIAAAElQlRDLEVUSCxYUlAsQkNILExUQyxCTkIsVVNEVCxFT1MsQlNWLFhNUixYTE0sTEVPLEFEQSxUUlgsREFTSCxMSU5LLFhUWixORU8sTUlPVEEsRVRDLEFUT00sWEVNLE1LUixDUk8sVVNEQyxPTlQsVlNZUyxaRUMsRE9HRSxWRVQsRENSLEhULEJBVCxCVEcsUVRVTSxIRURHLFRVU0QsUEFYLEVHVCxPTUcsQUxHTyxLQ1MsUlZOLExTSyxOQU5PLEJUVCxCQ0QsTlJHLExBTUIsSE9ULEJDTixER0IsUkVQLEJUUyxaUlgsWElOLEFPQSxJT1NULElDWCxORVQsR05ULFBQVCxSSE9DLFNOVCxBRSxXVEMsVkVSSSxSLFpJTCxCTlQBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIAAAAOYWNjb3VudEFkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAADmFjY291bnRBZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQAAAAAAAAAAAAEAAAANaXNTdWJzdHJFeGlzdAAAAAIAAAADc3RyAAAABnN1YnN0cgQAAAAHJG1hdGNoMAkABLMAAAACBQAAAANzdHIFAAAABnN1YnN0cgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVpbmRleAUAAAAHJG1hdGNoMAYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABWluZGV4BQAAAAckbWF0Y2gwBwkBAAAABXRocm93AAAAAAEAAAANaXNWYWxpZFRpY2tlcgAAAAEAAAAGdGlja2VyBAAAAA10aWNrZXJMZXR0ZXJzCQAEtQAAAAIFAAAABnRpY2tlcgIAAAAABAAAAAx0aWNrZXJMZW5ndGgJAAGQAAAAAQUAAAANdGlja2VyTGV0dGVycwQAAAAOaXNMZXR0ZXIxVmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAAQAAAAOaXNMZXR0ZXIyVmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAQQAAAAOaXNMZXR0ZXIzVmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAgQAAAAOaXNMZXR0ZXI0VmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAwQAAAAOaXNMZXR0ZXI1VmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAABAQAAAAOaXNMZXR0ZXI2VmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAABQMJAQAAAAIhPQAAAAIFAAAABnRpY2tlcgIAAAAAAwMJAABnAAAAAgUAAAAMdGlja2VyTGVuZ3RoBQAAAA90aWNrZXJNaW5MZW5ndGgJAABnAAAAAgUAAAAPdGlja2VyTWF4TGVuZ3RoBQAAAAx0aWNrZXJMZW5ndGgHAwkAAAAAAAACAAAAAAAAAAABBQAAAAx0aWNrZXJMZW5ndGgFAAAADmlzTGV0dGVyMVZhbGlkAwkAAAAAAAACAAAAAAAAAAACBQAAAAx0aWNrZXJMZW5ndGgDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHAwkAAAAAAAACAAAAAAAAAAADBQAAAAx0aWNrZXJMZW5ndGgDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHAwkAAAAAAAACAAAAAAAAAAAEBQAAAAx0aWNrZXJMZW5ndGgDAwMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcFAAAADmlzTGV0dGVyM1ZhbGlkBwUAAAAOaXNMZXR0ZXI0VmFsaWQHAwkAAAAAAAACAAAAAAAAAAAFBQAAAAx0aWNrZXJMZW5ndGgDAwMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcFAAAADmlzTGV0dGVyNFZhbGlkBwUAAAAOaXNMZXR0ZXI1VmFsaWQHAwkAAAAAAAACAAAAAAAAAAAGBQAAAAx0aWNrZXJMZW5ndGgDAwMDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHBQAAAA5pc0xldHRlcjRWYWxpZAcFAAAADmlzTGV0dGVyNVZhbGlkBwUAAAAOaXNMZXR0ZXI2VmFsaWQHBwcHAQAAABJpc1ZhbGlkRGVzY3JpcHRpb24AAAABAAAAC2Rlc2NyaXB0aW9uBAAAAA9kZXNjcmlwdGlvblNpemUJAAExAAAAAQUAAAALZGVzY3JpcHRpb24DAwkAAGYAAAACBQAAAA9kZXNjcmlwdGlvblNpemUAAAAAAAAAAAAJAABnAAAAAgAAAAAAAAAD6AUAAAAPZGVzY3JpcHRpb25TaXplBwYHAQAAABxpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQAAAAdhc3NldElkBAAAAA5hc3NldFJhdGluZ0tleQkAASwAAAACCQABLAAAAAICAAAADGFzc2V0UmF0aW5nXwUAAAAHYXNzZXRJZAIAAAACXzEEAAAAEGFzc2V0UmF0aW5nVmFsdWUJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MFAAAADmFzc2V0UmF0aW5nS2V5BAAAABNhc3NldFJhdGluZ1RyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzAgAAAA50aWNrZXJSYXRpbmdfMQkAAGcAAAACBQAAABBhc3NldFJhdGluZ1ZhbHVlBQAAABNhc3NldFJhdGluZ1RyZXNob2xkAQAAABxpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5V2VpZ2h0AAAAAQAAAAdhc3NldElkBAAAAA5hc3NldFdlaWdodEtleQkAASwAAAACAgAAAAxhc3NldFdlaWdodF8FAAAAB2Fzc2V0SWQEAAAAEGFzc2V0V2VpZ2h0VmFsdWUJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MFAAAADmFzc2V0V2VpZ2h0S2V5BAAAABNhc3NldFdlaWdodFRyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzAgAAAAx0aWNrZXJXZWlnaHQJAABnAAAAAgUAAAAQYXNzZXRXZWlnaHRWYWx1ZQUAAAATYXNzZXRXZWlnaHRUcmVzaG9sZAEAAAAbaXNBc3NldFVwZGF0ZUFsbG93ZWRCeVZvdGVzAAAAAQAAAAdhc3NldElkBAAAAA1hc3NldFZvdGVzS2V5CQABLAAAAAICAAAAC2Fzc2V0Vm90ZXNfBQAAAAdhc3NldElkBAAAAA9hc3NldFZvdGVzVmFsdWUJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MFAAAADWFzc2V0Vm90ZXNLZXkEAAAAEmFzc2V0Vm90ZXNUcmVzaG9sZAkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwIAAAALdGlja2VyVm90ZXMJAABnAAAAAgUAAAAPYXNzZXRWb3Rlc1ZhbHVlBQAAABJhc3NldFZvdGVzVHJlc2hvbGQBAAAAF2lzVXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQAAAAdhc3NldElkAwMJAQAAABxpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQUAAAAHYXNzZXRJZAkBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlXZWlnaHQAAAABBQAAAAdhc3NldElkBwkBAAAAG2lzQXNzZXRVcGRhdGVBbGxvd2VkQnlWb3RlcwAAAAEFAAAAB2Fzc2V0SWQHAQAAACBnZXRBc3NldElzc3VlckFkZHJlc3NGcm9tQXNzZXRJZAAAAAEAAAAHYXNzZXRJZAkABCUAAAABCAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAUAAAAVbm9uRXhpc3RlbnRBc3NldEVycm9yAAAABmlzc3VlcgEAAAAKZ2V0UGF5bWVudAAAAAEAAAABaQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCAUAAAABaQAAAAdwYXltZW50BQAAAA5ub1BheW1lbnRFcnJvcgEAAAAQaXNQYXltZW50SW5XYXZlcwAAAAEAAAABaQQAAAAHcGF5bWVudAkBAAAACmdldFBheW1lbnQAAAABBQAAAAFpAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAYHAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACAAAAAWkAAAAPcmVxdWlyZWRQYXltZW50BAAAAAdwYXltZW50CQEAAAAKZ2V0UGF5bWVudAAAAAEFAAAAAWkDCQAAZwAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAPcmVxdWlyZWRQYXltZW50BgcBAAAAE2lzQ2FsbGVyQXNzZXRJc3N1ZXIAAAACAAAAAWkAAAAHYXNzZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABFhc3NldElzc3VlckFkcmVzcwkBAAAAIGdldEFzc2V0SXNzdWVyQWRkcmVzc0Zyb21Bc3NldElkAAAAAQUAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAARYXNzZXRJc3N1ZXJBZHJlc3MGBwEAAAARaXNBc3NldFN1c3BpY2lvdXMAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAdc3VzcGljaW91c1Rva2Vuc09yYWNsZUFkZHJlc3MFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAXQFAAAAByRtYXRjaDAFAAAAAXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXQFAAAAByRtYXRjaDAHCQEAAAAFdGhyb3cAAAAAAAAAAwAAAAFpAQAAAAx1cGRhdGVUaWNrZXIAAAACAAAAB2Fzc2V0SWQAAAAGdGlja2VyBAAAAA9pc3N1ZXJUaWNrZXJLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADWlzc3VlclRpY2tlcl8CAAAAATwFAAAAB2Fzc2V0SWQCAAAAAT4EAAAAEGlzVGlja2VyUmVzZXJ2ZWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAPcmVzZXJ2ZWRUaWNrZXJzBQAAAAZ0aWNrZXIEAAAADGlzVGlja2VyRnJlZQQAAAAHJG1hdGNoMAkABB0AAAACBQAAABx0aWNrZXJDYXRhbG9ndWVPcmFjbGVBZGRyZXNzBQAAAAZ0aWNrZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABdAUAAAAHJG1hdGNoMAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXQFAAAAByRtYXRjaDAGCQEAAAAFdGhyb3cAAAAABAAAABlpc1RpY2tlck5vdEFzc2luZWRUb0Fzc2V0BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAD2lzc3VlclRpY2tlcktleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF0BQAAAAckbWF0Y2gwBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdAUAAAAHJG1hdGNoMAYJAQAAAAV0aHJvdwAAAAADCQEAAAABIQAAAAEJAQAAABFpc0Fzc2V0U3VzcGljaW91cwAAAAEFAAAAB2Fzc2V0SWQDCQEAAAAQaXNQYXltZW50SW5XYXZlcwAAAAEFAAAAAWkDCQEAAAAPaXNFbm91Z2hQYXltZW50AAAAAgUAAAABaQUAAAARdGlja2VyVXBkYXRlUHJpY2UDCQEAAAATaXNDYWxsZXJBc3NldElzc3VlcgAAAAIFAAAAAWkFAAAAB2Fzc2V0SWQDCQEAAAAXaXNVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABBQAAAAdhc3NldElkAwUAAAAZaXNUaWNrZXJOb3RBc3NpbmVkVG9Bc3NldAMDBQAAAAxpc1RpY2tlckZyZWUJAQAAAAEhAAAAAQUAAAAQaXNUaWNrZXJSZXNlcnZlZAcDCQEAAAANaXNWYWxpZFRpY2tlcgAAAAEFAAAABnRpY2tlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPaXNzdWVyVGlja2VyS2V5BQAAAAZ0aWNrZXIFAAAAA25pbAkAAAIAAAABBQAAABV2YWx1ZVdyb25nRm9ybWF0RXJyb3IJAAACAAAAAQUAAAAidGlja2VyVmFsaWRhdGlvblRpY2tlcklzRXhpc3RFcnJvcgkAAAIAAAABBQAAABZ0aWNrZXJJc0ltbXV0YWJsZUVycm9yCQAAAgAAAAEFAAAAJHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcgkAAAIAAAABBQAAABdpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcgkAAAIAAAABBQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IJAAACAAAAAQUAAAAZbm90U3VwcG9ydGVkQ3VycmVuY3lFcnJvcgkAAAIAAAABBQAAABRzdXNwaWNpb3VzQXNzZXRFcnJvcgAAAAFpAQAAABF1cGRhdGVEZXNjcmlwdGlvbgAAAAIAAAAHYXNzZXRJZAAAAAtkZXNjcmlwdGlvbgQAAAAUaXNzdWVyRGVzY3JpcHRpb25LZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEmlzc3VlckRlc2NyaXB0aW9uXwIAAAABPAUAAAAHYXNzZXRJZAIAAAABPgMJAQAAAAEhAAAAAQkBAAAAEWlzQXNzZXRTdXNwaWNpb3VzAAAAAQUAAAAHYXNzZXRJZAMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAABZkZXNjcmlwdGlvblVwZGF0ZVByaWNlAwkBAAAAE2lzQ2FsbGVyQXNzZXRJc3N1ZXIAAAACBQAAAAFpBQAAAAdhc3NldElkAwkBAAAAEmlzVmFsaWREZXNjcmlwdGlvbgAAAAEFAAAAC2Rlc2NyaXB0aW9uCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRpc3N1ZXJEZXNjcmlwdGlvbktleQUAAAALZGVzY3JpcHRpb24FAAAAA25pbAkAAAIAAAABBQAAABV2YWx1ZVdyb25nRm9ybWF0RXJyb3IJAAACAAAAAQUAAAAXaXNzdWVyQWNjZXNzRGVuaWVkRXJyb3IJAAACAAAAAQUAAAAVbm90RW5vdWdoUGF5bWVudEVycm9yCQAAAgAAAAEFAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3IJAAACAAAAAQUAAAAUc3VzcGljaW91c0Fzc2V0RXJyb3IAAAABaQEAAAAKdXBkYXRlTGluawAAAAIAAAAHYXNzZXRJZAAAAARsaW5rBAAAAA1pc3N1ZXJMaW5rS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtpc3N1ZXJMaW5rXwIAAAABPAUAAAAHYXNzZXRJZAIAAAABPgMJAQAAAAEhAAAAAQkBAAAAEWlzQXNzZXRTdXNwaWNpb3VzAAAAAQUAAAAHYXNzZXRJZAMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAAA9saW5rVXBkYXRlUHJpY2UDCQEAAAATaXNDYWxsZXJBc3NldElzc3VlcgAAAAIFAAAAAWkFAAAAB2Fzc2V0SWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWlzc3VlckxpbmtLZXkFAAAABGxpbmsFAAAAA25pbAkAAAIAAAABBQAAABdpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcgkAAAIAAAABBQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IJAAACAAAAAQUAAAAZbm90U3VwcG9ydGVkQ3VycmVuY3lFcnJvcgkAAAIAAAABBQAAABRzdXNwaWNpb3VzQXNzZXRFcnJvcgAAAADFlJRc", "chainId": 84, "height": 709492, "spentComplexity": 0 } View: original | compacted Prev: BmqF9mAsUZ6NXinUWu9NRZm9TGkum9UHL6pQKUjuCmiD Next: 9usmYQKij43m8HNgvRKf19DKLAmGj3iLA5WRtx5kiCg5 Diff:
OldNewDifferences
44 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
55
66 let tokenRatingOracleAddress = addressFromStringValue("3NADqHoLMbMTfXdP2TeBBSx5mQXePVj3KZm")
7+
8+let suspiciousTokensOracleAddress = addressFromStringValue("3MpaMZHGv2HnePrGNu3NSMq6TkEJid1FHnZ")
79
810 let notSupportedCurrencyError = "<notSupportedCurrencyError>"
911
2224 let noPaymentError = "<noPaymentError>"
2325
2426 let tickerIsImmutableError = "<tickerIsImmutableError>"
27+
28+let suspiciousAssetError = "<suspiciousAssetError>"
2529
2630 let wvs = 100000000
2731
190194 }
191195
192196
197+func isAssetSuspicious (assetId) = match getBoolean(suspiciousTokensOracleAddress, assetId) {
198+ case t: Boolean =>
199+ t
200+ case t: Unit =>
201+ false
202+ case _ =>
203+ throw()
204+}
205+
206+
193207 @Callable(i)
194208 func updateTicker (assetId,ticker) = {
195209 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
210224 case _ =>
211225 throw()
212226 }
213- if (isPaymentInWaves(i))
214- then if (isEnoughPayment(i, tickerUpdatePrice))
215- then if (isCallerAssetIssuer(i, assetId))
216- then if (isUpdateAllowedByRating(assetId))
217- then if (isTickerNotAssinedToAsset)
218- then if (if (isTickerFree)
219- then !(isTickerReserved)
220- else false)
221- then if (isValidTicker(ticker))
222- then WriteSet([DataEntry(issuerTickerKey, ticker)])
223- else throw(valueWrongFormatError)
224- else throw(tickerValidationTickerIsExistError)
225- else throw(tickerIsImmutableError)
226- else throw(tickerValidationNotEnoughRatingError)
227- else throw(issuerAccessDeniedError)
228- else throw(notEnoughPaymentError)
229- else throw(notSupportedCurrencyError)
227+ if (!(isAssetSuspicious(assetId)))
228+ then if (isPaymentInWaves(i))
229+ then if (isEnoughPayment(i, tickerUpdatePrice))
230+ then if (isCallerAssetIssuer(i, assetId))
231+ then if (isUpdateAllowedByRating(assetId))
232+ then if (isTickerNotAssinedToAsset)
233+ then if (if (isTickerFree)
234+ then !(isTickerReserved)
235+ else false)
236+ then if (isValidTicker(ticker))
237+ then WriteSet([DataEntry(issuerTickerKey, ticker)])
238+ else throw(valueWrongFormatError)
239+ else throw(tickerValidationTickerIsExistError)
240+ else throw(tickerIsImmutableError)
241+ else throw(tickerValidationNotEnoughRatingError)
242+ else throw(issuerAccessDeniedError)
243+ else throw(notEnoughPaymentError)
244+ else throw(notSupportedCurrencyError)
245+ else throw(suspiciousAssetError)
230246 }
231247
232248
234250 @Callable(i)
235251 func updateDescription (assetId,description) = {
236252 let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
237- if (isPaymentInWaves(i))
238- then if (isEnoughPayment(i, descriptionUpdatePrice))
239- then if (isCallerAssetIssuer(i, assetId))
240- then if (isValidDescription(description))
241- then WriteSet([DataEntry(issuerDescriptionKey, description)])
242- else throw(valueWrongFormatError)
243- else throw(issuerAccessDeniedError)
244- else throw(notEnoughPaymentError)
245- else throw(notSupportedCurrencyError)
253+ if (!(isAssetSuspicious(assetId)))
254+ then if (isPaymentInWaves(i))
255+ then if (isEnoughPayment(i, descriptionUpdatePrice))
256+ then if (isCallerAssetIssuer(i, assetId))
257+ then if (isValidDescription(description))
258+ then WriteSet([DataEntry(issuerDescriptionKey, description)])
259+ else throw(valueWrongFormatError)
260+ else throw(issuerAccessDeniedError)
261+ else throw(notEnoughPaymentError)
262+ else throw(notSupportedCurrencyError)
263+ else throw(suspiciousAssetError)
246264 }
247265
248266
250268 @Callable(i)
251269 func updateLink (assetId,link) = {
252270 let issuerLinkKey = ((("issuerLink_" + "<") + assetId) + ">")
253- if (isPaymentInWaves(i))
254- then if (isEnoughPayment(i, linkUpdatePrice))
255- then if (isCallerAssetIssuer(i, assetId))
256- then WriteSet([DataEntry(issuerLinkKey, link)])
257- else throw(issuerAccessDeniedError)
258- else throw(notEnoughPaymentError)
259- else throw(notSupportedCurrencyError)
271+ if (!(isAssetSuspicious(assetId)))
272+ then if (isPaymentInWaves(i))
273+ then if (isEnoughPayment(i, linkUpdatePrice))
274+ then if (isCallerAssetIssuer(i, assetId))
275+ then WriteSet([DataEntry(issuerLinkKey, link)])
276+ else throw(issuerAccessDeniedError)
277+ else throw(notEnoughPaymentError)
278+ else throw(notSupportedCurrencyError)
279+ else throw(suspiciousAssetError)
260280 }
261281
262282
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")
7+
8+let suspiciousTokensOracleAddress = addressFromStringValue("3MpaMZHGv2HnePrGNu3NSMq6TkEJid1FHnZ")
79
810 let notSupportedCurrencyError = "<notSupportedCurrencyError>"
911
1012 let issuerAccessDeniedError = "<issuerAccessDeniedError>"
1113
1214 let notEnoughPaymentError = "<notEnoughPaymentError>"
1315
1416 let tickerValidationNotEnoughRatingError = "<tickerValidationNotEnoughRatingError>"
1517
1618 let tickerValidationTickerIsExistError = "<tickerValidationTickerIsExistError>"
1719
1820 let valueWrongFormatError = "<valueWrongFormatError>"
1921
2022 let nonExistentAssetError = "<nonExistentAssetError>"
2123
2224 let noPaymentError = "<noPaymentError>"
2325
2426 let tickerIsImmutableError = "<tickerIsImmutableError>"
27+
28+let suspiciousAssetError = "<suspiciousAssetError>"
2529
2630 let wvs = 100000000
2731
2832 let tickerUpdatePrice = (5 * wvs)
2933
3034 let linkUpdatePrice = 50000000
3135
3236 let descriptionUpdatePrice = 50000000
3337
3438 let tickerMinLength = 1
3539
3640 let tickerMaxLength = 6
3741
3842 let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3943
4044 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"
4145
4246 func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
4347 case i: Int =>
4448 i
4549 case _ =>
4650 0
4751 }
4852
4953
5054 func isSubstrExist (str,substr) = match indexOf(str, substr) {
5155 case index: Int =>
5256 true
5357 case index: Unit =>
5458 false
5559 case _ =>
5660 throw()
5761 }
5862
5963
6064 func isValidTicker (ticker) = {
6165 let tickerLetters = split(ticker, "")
6266 let tickerLength = size(tickerLetters)
6367 let isLetter1Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[0])
6468 let isLetter2Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[1])
6569 let isLetter3Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[2])
6670 let isLetter4Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[3])
6771 let isLetter5Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[4])
6872 let isLetter6Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[5])
6973 if ((ticker != ""))
7074 then if (if ((tickerLength >= tickerMinLength))
7175 then (tickerMaxLength >= tickerLength)
7276 else false)
7377 then if ((1 == tickerLength))
7478 then isLetter1Valid
7579 else if ((2 == tickerLength))
7680 then if (isLetter1Valid)
7781 then isLetter2Valid
7882 else false
7983 else if ((3 == tickerLength))
8084 then if (if (isLetter1Valid)
8185 then isLetter2Valid
8286 else false)
8387 then isLetter3Valid
8488 else false
8589 else if ((4 == tickerLength))
8690 then if (if (if (isLetter1Valid)
8791 then isLetter2Valid
8892 else false)
8993 then isLetter3Valid
9094 else false)
9195 then isLetter4Valid
9296 else false
9397 else if ((5 == tickerLength))
9498 then if (if (if (if (isLetter1Valid)
9599 then isLetter2Valid
96100 else false)
97101 then isLetter3Valid
98102 else false)
99103 then isLetter4Valid
100104 else false)
101105 then isLetter5Valid
102106 else false
103107 else if ((6 == tickerLength))
104108 then if (if (if (if (if (isLetter1Valid)
105109 then isLetter2Valid
106110 else false)
107111 then isLetter3Valid
108112 else false)
109113 then isLetter4Valid
110114 else false)
111115 then isLetter5Valid
112116 else false)
113117 then isLetter6Valid
114118 else false
115119 else false
116120 else false
117121 else false
118122 }
119123
120124
121125 func isValidDescription (description) = {
122126 let descriptionSize = size(description)
123127 if (if ((descriptionSize > 0))
124128 then (1000 >= descriptionSize)
125129 else false)
126130 then true
127131 else false
128132 }
129133
130134
131135 func isAssetUpdateAllowedByRating (assetId) = {
132136 let assetRatingKey = (("assetRating_" + assetId) + "_1")
133137 let assetRatingValue = getIntegerFromAccount(tokenRatingOracleAddress, assetRatingKey)
134138 let assetRatingTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerRating_1")
135139 (assetRatingValue >= assetRatingTreshold)
136140 }
137141
138142
139143 func isAssetUpdateAllowedByWeight (assetId) = {
140144 let assetWeightKey = ("assetWeight_" + assetId)
141145 let assetWeightValue = getIntegerFromAccount(tokenRatingOracleAddress, assetWeightKey)
142146 let assetWeightTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerWeight")
143147 (assetWeightValue >= assetWeightTreshold)
144148 }
145149
146150
147151 func isAssetUpdateAllowedByVotes (assetId) = {
148152 let assetVotesKey = ("assetVotes_" + assetId)
149153 let assetVotesValue = getIntegerFromAccount(tokenRatingOracleAddress, assetVotesKey)
150154 let assetVotesTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerVotes")
151155 (assetVotesValue >= assetVotesTreshold)
152156 }
153157
154158
155159 func isUpdateAllowedByRating (assetId) = if (if (isAssetUpdateAllowedByRating(assetId))
156160 then isAssetUpdateAllowedByWeight(assetId)
157161 else false)
158162 then isAssetUpdateAllowedByVotes(assetId)
159163 else false
160164
161165
162166 func getAssetIssuerAddressFromAssetId (assetId) = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), nonExistentAssetError).issuer)
163167
164168
165169 func getPayment (i) = valueOrErrorMessage(i.payment, noPaymentError)
166170
167171
168172 func isPaymentInWaves (i) = {
169173 let payment = getPayment(i)
170174 if (!(isDefined(payment.assetId)))
171175 then true
172176 else false
173177 }
174178
175179
176180 func isEnoughPayment (i,requiredPayment) = {
177181 let payment = getPayment(i)
178182 if ((payment.amount >= requiredPayment))
179183 then true
180184 else false
181185 }
182186
183187
184188 func isCallerAssetIssuer (i,assetId) = {
185189 let callerAddress = toBase58String(i.caller.bytes)
186190 let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
187191 if ((callerAddress == assetIssuerAdress))
188192 then true
189193 else false
190194 }
191195
192196
197+func isAssetSuspicious (assetId) = match getBoolean(suspiciousTokensOracleAddress, assetId) {
198+ case t: Boolean =>
199+ t
200+ case t: Unit =>
201+ false
202+ case _ =>
203+ throw()
204+}
205+
206+
193207 @Callable(i)
194208 func updateTicker (assetId,ticker) = {
195209 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
196210 let isTickerReserved = isSubstrExist(reservedTickers, ticker)
197211 let isTickerFree = match getString(tickerCatalogueOracleAddress, ticker) {
198212 case t: String =>
199213 false
200214 case t: Unit =>
201215 true
202216 case _ =>
203217 throw()
204218 }
205219 let isTickerNotAssinedToAsset = match getString(this, issuerTickerKey) {
206220 case t: String =>
207221 false
208222 case t: Unit =>
209223 true
210224 case _ =>
211225 throw()
212226 }
213- if (isPaymentInWaves(i))
214- then if (isEnoughPayment(i, tickerUpdatePrice))
215- then if (isCallerAssetIssuer(i, assetId))
216- then if (isUpdateAllowedByRating(assetId))
217- then if (isTickerNotAssinedToAsset)
218- then if (if (isTickerFree)
219- then !(isTickerReserved)
220- else false)
221- then if (isValidTicker(ticker))
222- then WriteSet([DataEntry(issuerTickerKey, ticker)])
223- else throw(valueWrongFormatError)
224- else throw(tickerValidationTickerIsExistError)
225- else throw(tickerIsImmutableError)
226- else throw(tickerValidationNotEnoughRatingError)
227- else throw(issuerAccessDeniedError)
228- else throw(notEnoughPaymentError)
229- else throw(notSupportedCurrencyError)
227+ if (!(isAssetSuspicious(assetId)))
228+ then if (isPaymentInWaves(i))
229+ then if (isEnoughPayment(i, tickerUpdatePrice))
230+ then if (isCallerAssetIssuer(i, assetId))
231+ then if (isUpdateAllowedByRating(assetId))
232+ then if (isTickerNotAssinedToAsset)
233+ then if (if (isTickerFree)
234+ then !(isTickerReserved)
235+ else false)
236+ then if (isValidTicker(ticker))
237+ then WriteSet([DataEntry(issuerTickerKey, ticker)])
238+ else throw(valueWrongFormatError)
239+ else throw(tickerValidationTickerIsExistError)
240+ else throw(tickerIsImmutableError)
241+ else throw(tickerValidationNotEnoughRatingError)
242+ else throw(issuerAccessDeniedError)
243+ else throw(notEnoughPaymentError)
244+ else throw(notSupportedCurrencyError)
245+ else throw(suspiciousAssetError)
230246 }
231247
232248
233249
234250 @Callable(i)
235251 func updateDescription (assetId,description) = {
236252 let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
237- if (isPaymentInWaves(i))
238- then if (isEnoughPayment(i, descriptionUpdatePrice))
239- then if (isCallerAssetIssuer(i, assetId))
240- then if (isValidDescription(description))
241- then WriteSet([DataEntry(issuerDescriptionKey, description)])
242- else throw(valueWrongFormatError)
243- else throw(issuerAccessDeniedError)
244- else throw(notEnoughPaymentError)
245- else throw(notSupportedCurrencyError)
253+ if (!(isAssetSuspicious(assetId)))
254+ then if (isPaymentInWaves(i))
255+ then if (isEnoughPayment(i, descriptionUpdatePrice))
256+ then if (isCallerAssetIssuer(i, assetId))
257+ then if (isValidDescription(description))
258+ then WriteSet([DataEntry(issuerDescriptionKey, description)])
259+ else throw(valueWrongFormatError)
260+ else throw(issuerAccessDeniedError)
261+ else throw(notEnoughPaymentError)
262+ else throw(notSupportedCurrencyError)
263+ else throw(suspiciousAssetError)
246264 }
247265
248266
249267
250268 @Callable(i)
251269 func updateLink (assetId,link) = {
252270 let issuerLinkKey = ((("issuerLink_" + "<") + assetId) + ">")
253- if (isPaymentInWaves(i))
254- then if (isEnoughPayment(i, linkUpdatePrice))
255- then if (isCallerAssetIssuer(i, assetId))
256- then WriteSet([DataEntry(issuerLinkKey, link)])
257- else throw(issuerAccessDeniedError)
258- else throw(notEnoughPaymentError)
259- else throw(notSupportedCurrencyError)
271+ if (!(isAssetSuspicious(assetId)))
272+ then if (isPaymentInWaves(i))
273+ then if (isEnoughPayment(i, linkUpdatePrice))
274+ then if (isCallerAssetIssuer(i, assetId))
275+ then WriteSet([DataEntry(issuerLinkKey, link)])
276+ else throw(issuerAccessDeniedError)
277+ else throw(notEnoughPaymentError)
278+ else throw(notSupportedCurrencyError)
279+ else throw(suspiciousAssetError)
260280 }
261281
262282

github/deemru/w8io/3ef1775 
69.75 ms