tx · GVYMmqts5DKYxqJvC6jo5JagdRyYQ98DLn4rbEKcjaNM

3MvJDKBFzztnd7KCU78zgJ8qUuzVux4c9yw:  -0.01000000 Waves

2022.10.23 14:13 [2284970] smart account 3MvJDKBFzztnd7KCU78zgJ8qUuzVux4c9yw > SELF 0.00000000 Waves

{ "type": 13, "id": "GVYMmqts5DKYxqJvC6jo5JagdRyYQ98DLn4rbEKcjaNM", "fee": 1000000, "feeAssetId": null, "timestamp": 1666523670388, "version": 2, "chainId": 84, "sender": "3MvJDKBFzztnd7KCU78zgJ8qUuzVux4c9yw", "senderPublicKey": "9gVuyFNzke49pnadJxJ312ZWhYudDhdcqP5hsm5pGQw6", "proofs": [ "2VCFLBYAV8dEgybfg3CxeQMJbsen1gbm5XZv3VawCPprpcfGGEAM4M3kgnVnM9NaeEBdVEeNsirxcevTRMQGTaC7" ], "script": "base64:BgIyCAISAwoBCBIDCgEIEgYKBAgBAQgSBQoDCAEIEgUKAwgIARIAEgQKAggEEgQKAggEEgAtAAl1bmRlZmluZWQCCXVuZGVmaW5lZAAJc2VwYXJhdG9yAgE7ABBjb25maWdBZGRyZXNzS2V5AgZjb25maWcAE2NvbGxlY3RvckFkZHJlc3NLZXkCEWNvbGxlY3Rvcl9hZGRyZXNzABFoaXN0b3J5QWRkcmVzc0tleQIPaGlzdG9yeV9hZGRyZXNzABJwYXltYWtlckFkZHJlc3NLZXkCEHBheW1ha2VyX2FkZHJlc3MACWFkbWluc0tleQIGYWRtaW5zAA1jb25maWdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRBjb25maWdBZGRyZXNzS2V5ABBjb2xsZWN0b3JBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1jb25maWdBZGRyZXNzBRNjb2xsZWN0b3JBZGRyZXNzS2V5AA5oaXN0b3J5QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUNY29uZmlnQWRkcmVzcwURaGlzdG9yeUFkZHJlc3NLZXkAD3BheW1ha2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUNY29uZmlnQWRkcmVzcwUScGF5bWFrZXJBZGRyZXNzS2V5AQdpc0FkbWluAQZjYWxsZXIEBmFkbVJvdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1jb25maWdBZGRyZXNzBQlhZG1pbnNLZXkCAAMDCQAAAgUGY2FsbGVyBQR0aGlzBgkBCGNvbnRhaW5zAgUGYWRtUm93CQClCAEFBmNhbGxlcgYHAQ1nZXRDaGVja2VyS2V5AQdjaGVja2VyCQCsAgICCGNoZWNrZXJfBQdjaGVja2VyAQlpc0NoZWNrZXIBB2NoZWNrZXIECGlzRXhpc3RzCQEJaXNEZWZpbmVkAQkAmwgCBQ1jb25maWdBZGRyZXNzCQENZ2V0Q2hlY2tlcktleQEFB2NoZWNrZXIFCGlzRXhpc3RzAARVU0ROASAYZnRB0PLZIchHiUNJCnGtXhPXO6NBZoIwBSXE8y+z0AAJbWluQW1vdW50AICt4gQADGZlZU51bWVyYXRvcgAFAA5mZWVEZW5vbWluYXRvcgBkAA5tYXhCZXRzT25QcmljZQADAA1maXJzdEV2ZW50S2V5AgtmaXJzdF9ldmVudAAMbGFzdEV2ZW50S2V5AgpsYXN0X2V2ZW50ABVmaXNydEZpbmlzaGVkRXZlbnRLZXkCFGZpcnN0X2ZpbmlzaGVkX2V2ZW50ABRsYXN0RmluaXNoZWRFdmVudEtleQITbGFzdF9maW5pc2hlZF9ldmVudAATZmlzcnRBY3RpdmVFdmVudEtleQISZmlyc3RfYWN0aXZlX2V2ZW50ABJsYXN0QWN0aXZlRXZlbnRLZXkCEWxhc3RfYWN0aXZlX2V2ZW50ARBnZXRTdGFydEJsb2NrS2V5AQdldmVudElkCQCsAgIFB2V2ZW50SWQCDF9zdGFydF9ibG9jawEOZ2V0RW5kQmxvY2tLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIKX2VuZF9ibG9jawEOZ2V0RmluaXNoQXRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIQX2ZpbmlzaF9hdF9ibG9jawEIZ2V0SWRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIDX2lkAQxnZXRTdGF0dXNLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIHX3N0YXR1cwEKZ2V0RGVzY0tleQEHZXZlbnRJZAkArAICBQdldmVudElkAgxfZGVzY3JpcHRpb24BD2dldFByZXZFdmVudEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAgtfcHJldl9ldmVudAEPZ2V0TmV4dEV2ZW50S2V5AQdldmVudElkCQCsAgIFB2V2ZW50SWQCC19uZXh0X2V2ZW50AQ1nZXRBc3NldElkS2V5AQdldmVudElkCQCsAgIFB2V2ZW50SWQCCV9hc3NldF9pZAERZ2V0VG90YWxBbW91bnRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAINX3RvdGFsX2Ftb3VudAEXZ2V0UHJpY2VzR3JvdXBzQ291bnRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAITX3ByaWNlc19ncm91cF9jb3VudAEWZ2V0UHJpY2VzTGlzdHNDb3VudEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAhJfcHJpY2VzX2xpc3RfY291bnQBEWdldFByaWNlc0xpc3ROS2V5AgdldmVudElkAW4JAKwCAgkArAICBQdldmVudElkAg1fcHJpY2VzX2xpc3RfCQCkAwEFAW4BEWdldFByaWNlQmV0c0NvdW50AgdldmVudElkBXByaWNlCQCsAgIJAKwCAgkArAICBQdldmVudElkAgFfCQCkAwEFBXByaWNlAgtfYmV0c19jb3VudAESZ2V0UHJpY2VBZGRyZXNzS2V5AgdldmVudElkB2FkZHJlc3MJAKwCAgkArAICCQCsAgIFB2V2ZW50SWQCAV8FB2FkZHJlc3MCBl9wcmljZQEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4BAF0BQckbWF0Y2gwCQACAQIEI2VycgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwBQF4CQACAQIEI2VycgEMZ2V0QXNzZXRJbmZvAQhhc3NldFN0cgQHYXNzZXRJZAkA2QQBBQhhc3NldFN0cgQBeAQHJG1hdGNoMAkA7AcBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAkAlAoCBQhhc3NldFN0cggFBWFzc2V0CGRlY2ltYWxzCQCUCgICBVdBVkVTAAAFAXgBCWdldFN0YXR1cwEHZXZlbnRJZAQGc3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEMZ2V0U3RhdHVzS2V5AQUHZXZlbnRJZAMDAwkAAAIFBnN0YXR1cwIIZmluaXNoZWQGCQAAAgUGc3RhdHVzAgEjBgkAAAIFBnN0YXR1cwIFZW5kZWQFBnN0YXR1cwQIZmluaXNoQXQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ5nZXRGaW5pc2hBdEtleQEFB2V2ZW50SWQECnN0YXJ0QmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARBnZXRTdGFydEJsb2NrS2V5AQUHZXZlbnRJZAQIZW5kQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ5nZXRFbmRCbG9ja0tleQEFB2V2ZW50SWQDCQBmAgUKc3RhcnRCbG9jawUGaGVpZ2h0Aghhd2FpdGluZwMDCQBnAgUGaGVpZ2h0BQpzdGFydEJsb2NrCQBnAgUIZW5kQmxvY2sFBmhlaWdodAcCBmFjdGl2ZQMDCQBmAgUGaGVpZ2h0BQhlbmRCbG9jawkAZwIFCGZpbmlzaEF0BQZoZWlnaHQHAgxjb25maXJtYXRpb24DCQBmAgUGaGVpZ2h0BQhmaW5pc2hBdAIIZmluaXNoZWQJAAIBAg51bmtub3duIHN0YXR1cwENcmVnaXN0ZXJFdmVudAYEdHhpZARkZXNjCnN0YXJ0QmxvY2sIZW5kQmxvY2sIZmluaXNoQXQIYXNzZXRTdHIEB2V2ZW50SWQFBHR4aWQEBmluc2VydAkA/AcEBQR0aGlzAgxpbnNlcnRUb0xpc3QJAMwIAgUHZXZlbnRJZAkAzAgCBgUDbmlsBQNuaWwDCQAAAgUGaW5zZXJ0BQZpbnNlcnQEBmNvbmNhdAkA/AcEBQR0aGlzAgtjb25jYXRMaXN0cwUDbmlsBQNuaWwDCQAAAgUGY29uY2F0BQZjb25jYXQECyR0MDQ4Njc0OTIwCQEMZ2V0QXNzZXRJbmZvAQUIYXNzZXRTdHIEB2Fzc2V0SWQIBQskdDA0ODY3NDkyMAJfMQQNYXNzZXREZWNpbWFscwgFCyR0MDQ4Njc0OTIwAl8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQZ2V0U3RhcnRCbG9ja0tleQEFB2V2ZW50SWQFCnN0YXJ0QmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5nZXRFbmRCbG9ja0tleQEFB2V2ZW50SWQFCGVuZEJsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOZ2V0RmluaXNoQXRLZXkBBQdldmVudElkBQhmaW5pc2hBdAkAzAgCCQELU3RyaW5nRW50cnkCCQEKZ2V0RGVzY0tleQEFB2V2ZW50SWQFBGRlc2MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGdldFN0YXR1c0tleQEFB2V2ZW50SWQCA25ldwkAzAgCCQELU3RyaW5nRW50cnkCCQEIZ2V0SWRLZXkBBQdldmVudElkBQdldmVudElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1nZXRBc3NldElkS2V5AQUHZXZlbnRJZAUHYXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQFpAQRpbml0AQZjb25maWcDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhBvbmx5IG1haW4gY2FuIGRvBAhpc0V4aXN0cwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUQY29uZmlnQWRkcmVzc0tleQMJAQEhAQUIaXNFeGlzdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUQY29uZmlnQWRkcmVzc0tleQUGY29uZmlnBQNuaWwJAAIBAg5hbHJlYWR5IGluaXRlZAFpAQ1hcHBlbmRFdmVudGVyAQRkZXNjAwkBASEBCQEHaXNBZG1pbgEIBQFpBmNhbGxlcgkAAgECEW9ubHkgYWRtaW4gY2FuIGRvBANpbnYJAPwHBAUNY29uZmlnQWRkcmVzcwIKc2V0RXZlbnRlcgkAzAgCCQClCAEFBHRoaXMJAMwIAgUEZGVzYwUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFmdWxsUmVnaXN0ZXJFdmVudAQEZGVzYwpzdGFydEJsb2NrCGR1cmF0aW9uCGFzc2V0U3RyBA1uZXdTdGFydEJsb2NrAwkAAAIFCnN0YXJ0QmxvY2sAAAUGaGVpZ2h0BQpzdGFydEJsb2NrBAhlbmRCbG9jawkAZAIFDW5ld1N0YXJ0QmxvY2sFCGR1cmF0aW9uBAhmaW5pc2hBdAkAZAIFCGVuZEJsb2NrAKALAwkBASEBCQEHaXNBZG1pbgEIBQFpBmNhbGxlcgkAAgECEW9ubHkgYWRtaW4gY2FuIGRvBAR0eGlkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAQ1yZWdpc3RlckV2ZW50BgUEdHhpZAUEZGVzYwUNbmV3U3RhcnRCbG9jawUIZW5kQmxvY2sFCGZpbmlzaEF0BQhhc3NldFN0cgFpAQZjaG9pY2UDB2V2ZW50SWQFcHJpY2UHYWRkcmVzcwQGc3RhdHVzCQEJZ2V0U3RhdHVzAQUHZXZlbnRJZAMJAAACBQZzdGF0dXMCBmFjdGl2ZQQMbmVlZGVkQW1vdW50AICt4gQEC25lZWRlZEFzc2V0BQRVU0ROAwMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQtuZWVkZWRBc3NldAcJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUMbmVlZGVkQW1vdW50BwQJaW52QXBwZW5kCQD8BwQFBHRoaXMCDmFwcGVuZEJldHNMaXN0CQDMCAIFB2V2ZW50SWQJAMwIAgUHYWRkcmVzcwkAzAgCBQVwcmljZQUDbmlsBQNuaWwDCQAAAgUJaW52QXBwZW5kBQlpbnZBcHBlbmQEBHNhdmUJAPwHBAUOaGlzdG9yeUFkZHJlc3MCDXNhdmVUb0hpc3RvcnkJAMwIAgUHZXZlbnRJZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQRzYXZlBQRzYXZlBAxjdXJyZW50VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEWdldFRvdGFsQW1vdW50S2V5AQUHZXZlbnRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERZ2V0VG90YWxBbW91bnRLZXkBBQdldmVudElkCQBkAgUMY3VycmVudFRvdGFsCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILQmFkIHBheW1lbnQJAAIBAg9Zb3UgY2FuYHQgZG8gaXQBaQEOYXBwZW5kQmV0c0xpc3QDB2V2ZW50SWQKYWRkcmVzc1N0cgVwcmljZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEG9ubHkgbWFpbiBjYW4gZG8DCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQESZ2V0UHJpY2VBZGRyZXNzS2V5AgUHZXZlbnRJZAUKYWRkcmVzc1N0cgkAAgECI2JldHRpbmcgZnJvbSB0aGlzIGFkZHJlc3MgaXMgZXhpc3RzBA5jb3VudEJldHNQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQERZ2V0UHJpY2VCZXRzQ291bnQCBQdldmVudElkBQVwcmljZQAAAwkAZwIFDmNvdW50QmV0c1ByaWNlBQ5tYXhCZXRzT25QcmljZQkAAgECDHRvIG1hbnkgYmV0cwQJbGlzdEluZGV4CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRQcmljZXNMaXN0c0NvdW50S2V5AQUHZXZlbnRJZAABBA1jdXJyZW50UHJpY2VzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARFnZXRQcmljZXNMaXN0TktleQIFB2V2ZW50SWQFCWxpc3RJbmRleAIABBFjdXJyZW50UHJpY2VzTGlzdAkAvAkCBQ1jdXJyZW50UHJpY2VzBQlzZXBhcmF0b3IECGxpc3RTaXplCQCQAwEFEWN1cnJlbnRQcmljZXNMaXN0BAluZXdQcmljZXMDCQAAAgUOY291bnRCZXRzUHJpY2UAAAMJAGYCAGQFCGxpc3RTaXplAwkAAAIJALECAQUNY3VycmVudFByaWNlcwAACQCkAwEFBXByaWNlCQCsAgIJAKwCAgUNY3VycmVudFByaWNlcwUJc2VwYXJhdG9yCQCkAwEFBXByaWNlCQCkAwEFBXByaWNlBQ1jdXJyZW50UHJpY2VzBAxuZXdMaXN0SW5kZXgDAwkAZwIFCGxpc3RTaXplAGQJAAACBQ5jb3VudEJldHNQcmljZQAABwUJbGlzdEluZGV4CQBkAgUJbGlzdEluZGV4AAEEDm5ld0dyb3Vwc0NvdW50CQBkAgkAaQIJAGUCBQxuZXdMaXN0SW5kZXgAAQAKAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRQcmljZUFkZHJlc3NLZXkCBQdldmVudElkBQphZGRyZXNzU3RyBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmdldFByaWNlc0xpc3RzQ291bnRLZXkBBQdldmVudElkBQxuZXdMaXN0SW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJARdnZXRQcmljZXNHcm91cHNDb3VudEtleQEFB2V2ZW50SWQFDm5ld0dyb3Vwc0NvdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARFnZXRQcmljZXNMaXN0TktleQIFB2V2ZW50SWQFDG5ld0xpc3RJbmRleAUJbmV3UHJpY2VzBQNuaWwBaQEJcmVzZXRMaXN0AAMJAQEhAQkBB2lzQWRtaW4BCAUBaQZjYWxsZXIJAAIBAhFvbmx5IGFkbWluIGNhbiBkbwkAzAgCCQELU3RyaW5nRW50cnkCBQ1maXJzdEV2ZW50S2V5BQl1bmRlZmluZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMbGFzdEV2ZW50S2V5BQl1bmRlZmluZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUTZmlzcnRBY3RpdmVFdmVudEtleQUJdW5kZWZpbmVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEmxhc3RBY3RpdmVFdmVudEtleQUJdW5kZWZpbmVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFWZpc3J0RmluaXNoZWRFdmVudEtleQUJdW5kZWZpbmVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGxhc3RGaW5pc2hlZEV2ZW50S2V5BQl1bmRlZmluZWQFA25pbAFpAQxpbnNlcnRUb0xpc3QCB2V2ZW50SWQIaXNBY3RpdmUDCQECIT0CBQR0aGlzCAUBaQZjYWxsZXIJAAIBAhBvbmx5IG1haW4gY2FuIGRvBAdsYXN0S2V5AwUIaXNBY3RpdmUFEmxhc3RBY3RpdmVFdmVudEtleQUUbGFzdEZpbmlzaGVkRXZlbnRLZXkECGZpcnN0S2V5AwUIaXNBY3RpdmUFE2Zpc3J0QWN0aXZlRXZlbnRLZXkFFWZpc3J0RmluaXNoZWRFdmVudEtleQQKZmlyc3RFdmVudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQhmaXJzdEtleQUJdW5kZWZpbmVkBAlsYXN0RXZlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUHbGFzdEtleQUJdW5kZWZpbmVkBBBuZXdMYXN0T3JQcmV2S2V5AwkAAAIFCWxhc3RFdmVudAUJdW5kZWZpbmVkBQdsYXN0S2V5CQEPZ2V0UHJldkV2ZW50S2V5AQUKZmlyc3RFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCBQhmaXJzdEtleQUHZXZlbnRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBuZXdMYXN0T3JQcmV2S2V5BQdldmVudElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXROZXh0RXZlbnRLZXkBBQdldmVudElkBQpmaXJzdEV2ZW50BQNuaWwBaQEOZGVsZXRlRnJvbUxpc3QCB2V2ZW50SWQIaXNBY3RpdmUDCQECIT0CBQR0aGlzCAUBaQZjYWxsZXIJAAIBAhBvbmx5IG1haW4gY2FuIGRvBAdsYXN0S2V5AwUIaXNBY3RpdmUFEmxhc3RBY3RpdmVFdmVudEtleQUUbGFzdEZpbmlzaGVkRXZlbnRLZXkECGZpcnN0S2V5AwUIaXNBY3RpdmUFE2Zpc3J0QWN0aXZlRXZlbnRLZXkFFWZpc3J0RmluaXNoZWRFdmVudEtleQQKZmlyc3RFdmVudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQhmaXJzdEtleQUJdW5kZWZpbmVkBAlsYXN0RXZlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUHbGFzdEtleQUJdW5kZWZpbmVkBA1wcmV2RXZlbnRUZW1wCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9nZXRQcmV2RXZlbnRLZXkBBQdldmVudElkBQl1bmRlZmluZWQEDW5leHRFdmVudFRlbXAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2dldE5leHRFdmVudEtleQEFB2V2ZW50SWQFCXVuZGVmaW5lZAQJcHJldkV2ZW50AwkAAAIFB2V2ZW50SWQFCmZpcnN0RXZlbnQFCXVuZGVmaW5lZAUNcHJldkV2ZW50VGVtcAQJbmV4dEV2ZW50AwkAAAIFB2V2ZW50SWQFCWxhc3RFdmVudAUJdW5kZWZpbmVkBQ1uZXh0RXZlbnRUZW1wAwMJAAACBQlwcmV2RXZlbnQFCXVuZGVmaW5lZAkAAAIFCW5leHRFdmVudAUJdW5kZWZpbmVkBwkAzAgCCQELU3RyaW5nRW50cnkCBQhmaXJzdEtleQUJdW5kZWZpbmVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2xhc3RLZXkFCXVuZGVmaW5lZAUDbmlsAwMJAQIhPQIFCXByZXZFdmVudAUJdW5kZWZpbmVkCQECIT0CBQluZXh0RXZlbnQFCXVuZGVmaW5lZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2dldFByZXZFdmVudEtleQEFCW5leHRFdmVudAUJcHJldkV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXROZXh0RXZlbnRLZXkBBQlwcmV2RXZlbnQFCW5leHRFdmVudAUDbmlsAwkBAiE9AgUJcHJldkV2ZW50BQl1bmRlZmluZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUHbGFzdEtleQUJcHJldkV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXROZXh0RXZlbnRLZXkBBQlwcmV2RXZlbnQFCXVuZGVmaW5lZAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGZpcnN0S2V5BQluZXh0RXZlbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2dldFByZXZFdmVudEtleQEFCW5leHRFdmVudAUJdW5kZWZpbmVkBQNuaWwBaQELY29uY2F0TGlzdHMAAwkBASEBCQEHaXNBZG1pbgEIBQFpBmNhbGxlcgkAAgECEW9ubHkgYWRtaW4gY2FuIGRvBBBmaXJzdEFjdGl2ZUV2ZW50CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFE2Zpc3J0QWN0aXZlRXZlbnRLZXkFCXVuZGVmaW5lZAQPbGFzdEFjdGl2ZUV2ZW50CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFEmxhc3RBY3RpdmVFdmVudEtleQUJdW5kZWZpbmVkBBJmaXJzdEZpbmlzaGVkRXZlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUVZmlzcnRGaW5pc2hlZEV2ZW50S2V5BQl1bmRlZmluZWQEEWxhc3RGaW5pc2hlZEV2ZW50CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFFGxhc3RGaW5pc2hlZEV2ZW50S2V5BQl1bmRlZmluZWQECmZpcnN0RXZlbnQDCQECIT0CBRBmaXJzdEFjdGl2ZUV2ZW50BQl1bmRlZmluZWQFEGZpcnN0QWN0aXZlRXZlbnQFEmZpcnN0RmluaXNoZWRFdmVudAQJbGFzdEV2ZW50AwkBAiE9AgURbGFzdEZpbmlzaGVkRXZlbnQFCXVuZGVmaW5lZAURbGFzdEZpbmlzaGVkRXZlbnQFD2xhc3RBY3RpdmVFdmVudAMDCQECIT0CBRJmaXJzdEZpbmlzaGVkRXZlbnQFCXVuZGVmaW5lZAkBAiE9AgUPbGFzdEFjdGl2ZUV2ZW50BQl1bmRlZmluZWQHCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWZpcnN0RXZlbnRLZXkFCmZpcnN0RXZlbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMbGFzdEV2ZW50S2V5BQlsYXN0RXZlbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2dldE5leHRFdmVudEtleQEFD2xhc3RBY3RpdmVFdmVudAUSZmlyc3RGaW5pc2hlZEV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXRQcmV2RXZlbnRLZXkBBRJmaXJzdEZpbmlzaGVkRXZlbnQFD2xhc3RBY3RpdmVFdmVudAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWZpcnN0RXZlbnRLZXkFCmZpcnN0RXZlbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMbGFzdEV2ZW50S2V5BQlsYXN0RXZlbnQFA25pbAAMvZe+", "height": 2284970, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H3taGjmNoyFNt69DDoMdQMm6YDtDRVWUKQopSLUWVhop Next: ERvswQ6XDy5xjMvC1oBeMZbf2AiX16vNEKryiocJUvTW Diff:
OldNewDifferences
4242 }
4343
4444
45-let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
45+let USDN = base58'2eFPx8M5qwNFRbW91pzsyBKMz1FZmYMUW3BVZzTQmbFD'
4646
4747 let minAmount = 10000000
4848
230230 func choice (eventId,price,address) = {
231231 let status = getStatus(eventId)
232232 if ((status == "active"))
233- then if (if ((size(i.payments) == 1))
234- then (i.payments[0].assetId == USDN)
235- else false)
236- then {
237- let paumentAmount = i.payments[0].amount
238- if ((minAmount > paumentAmount))
239- then throw("amount is less than allowed")
240- else {
241- let invAppend = invoke(this, "appendBetsList", [eventId, address, price], nil)
242- if ((invAppend == invAppend))
243- then {
244- let save = invoke(historyAddress, "saveToHistory", [eventId, address], nil)
245- if ((save == save))
246- then {
247- let currentTotal = valueOrElse(getInteger(this, getTotalAmountKey(eventId)), 0)
248-[IntegerEntry(getTotalAmountKey(eventId), (currentTotal + paumentAmount))]
249- }
250- else throw("Strict value is not equal to itself.")
251- }
252- else throw("Strict value is not equal to itself.")
253- }
254- }
255- else throw("Bad payment")
233+ then {
234+ let neededAmount = 10000000
235+ let neededAsset = USDN
236+ if (if (if ((size(i.payments) == 1))
237+ then (i.payments[0].assetId == neededAsset)
238+ else false)
239+ then (i.payments[0].amount == neededAmount)
240+ else false)
241+ then {
242+ let invAppend = invoke(this, "appendBetsList", [eventId, address, price], nil)
243+ if ((invAppend == invAppend))
244+ then {
245+ let save = invoke(historyAddress, "saveToHistory", [eventId, address], nil)
246+ if ((save == save))
247+ then {
248+ let currentTotal = valueOrElse(getInteger(this, getTotalAmountKey(eventId)), 0)
249+[IntegerEntry(getTotalAmountKey(eventId), (currentTotal + i.payments[0].amount))]
250+ }
251+ else throw("Strict value is not equal to itself.")
252+ }
253+ else throw("Strict value is not equal to itself.")
254+ }
255+ else throw("Bad payment")
256+ }
256257 else throw("You can`t do it")
257258 }
258259
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let undefined = "undefined"
55
66 let separator = ";"
77
88 let configAddressKey = "config"
99
1010 let collectorAddressKey = "collector_address"
1111
1212 let historyAddressKey = "history_address"
1313
1414 let paymakerAddressKey = "paymaker_address"
1515
1616 let adminsKey = "admins"
1717
1818 let configAddress = addressFromStringValue(getStringValue(this, configAddressKey))
1919
2020 let collectorAddress = addressFromStringValue(getStringValue(configAddress, collectorAddressKey))
2121
2222 let historyAddress = addressFromStringValue(getStringValue(configAddress, historyAddressKey))
2323
2424 let paymakerAddress = addressFromStringValue(getStringValue(configAddress, paymakerAddressKey))
2525
2626 func isAdmin (caller) = {
2727 let admRow = valueOrElse(getString(configAddress, adminsKey), "")
2828 if (if ((caller == this))
2929 then true
3030 else contains(admRow, toString(caller)))
3131 then true
3232 else false
3333 }
3434
3535
3636 func getCheckerKey (checker) = ("checker_" + checker)
3737
3838
3939 func isChecker (checker) = {
4040 let isExists = isDefined(getBoolean(configAddress, getCheckerKey(checker)))
4141 isExists
4242 }
4343
4444
45-let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
45+let USDN = base58'2eFPx8M5qwNFRbW91pzsyBKMz1FZmYMUW3BVZzTQmbFD'
4646
4747 let minAmount = 10000000
4848
4949 let feeNumerator = 5
5050
5151 let feeDenominator = 100
5252
5353 let maxBetsOnPrice = 3
5454
5555 let firstEventKey = "first_event"
5656
5757 let lastEventKey = "last_event"
5858
5959 let fisrtFinishedEventKey = "first_finished_event"
6060
6161 let lastFinishedEventKey = "last_finished_event"
6262
6363 let fisrtActiveEventKey = "first_active_event"
6464
6565 let lastActiveEventKey = "last_active_event"
6666
6767 func getStartBlockKey (eventId) = (eventId + "_start_block")
6868
6969
7070 func getEndBlockKey (eventId) = (eventId + "_end_block")
7171
7272
7373 func getFinishAtKey (eventId) = (eventId + "_finish_at_block")
7474
7575
7676 func getIdKey (eventId) = (eventId + "_id")
7777
7878
7979 func getStatusKey (eventId) = (eventId + "_status")
8080
8181
8282 func getDescKey (eventId) = (eventId + "_description")
8383
8484
8585 func getPrevEventKey (eventId) = (eventId + "_prev_event")
8686
8787
8888 func getNextEventKey (eventId) = (eventId + "_next_event")
8989
9090
9191 func getAssetIdKey (eventId) = (eventId + "_asset_id")
9292
9393
9494 func getTotalAmountKey (eventId) = (eventId + "_total_amount")
9595
9696
9797 func getPricesGroupsCountKey (eventId) = (eventId + "_prices_group_count")
9898
9999
100100 func getPricesListsCountKey (eventId) = (eventId + "_prices_list_count")
101101
102102
103103 func getPricesListNKey (eventId,n) = ((eventId + "_prices_list_") + toString(n))
104104
105105
106106 func getPriceBetsCount (eventId,price) = (((eventId + "_") + toString(price)) + "_bets_count")
107107
108108
109109 func getPriceAddressKey (eventId,address) = (((eventId + "_") + address) + "_price")
110110
111111
112112 func asInt (v) = match v {
113113 case x: Int =>
114114 x
115115 case t =>
116116 throw("#err")
117117 }
118118
119119
120120 func asString (v) = match v {
121121 case x: String =>
122122 x
123123 case _ =>
124124 throw("#err")
125125 }
126126
127127
128128 func getAssetInfo (assetStr) = {
129129 let assetId = fromBase58String(assetStr)
130130 let x = match assetInfo(assetId) {
131131 case asset: Asset =>
132132 $Tuple2(assetStr, asset.decimals)
133133 case _ =>
134134 $Tuple2("WAVES", 0)
135135 }
136136 x
137137 }
138138
139139
140140 func getStatus (eventId) = {
141141 let status = getStringValue(this, getStatusKey(eventId))
142142 if (if (if ((status == "finished"))
143143 then true
144144 else (status == "#"))
145145 then true
146146 else (status == "ended"))
147147 then status
148148 else {
149149 let finishAt = getIntegerValue(this, getFinishAtKey(eventId))
150150 let startBlock = getIntegerValue(this, getStartBlockKey(eventId))
151151 let endBlock = getIntegerValue(this, getEndBlockKey(eventId))
152152 if ((startBlock > height))
153153 then "awaiting"
154154 else if (if ((height >= startBlock))
155155 then (endBlock >= height)
156156 else false)
157157 then "active"
158158 else if (if ((height > endBlock))
159159 then (finishAt >= height)
160160 else false)
161161 then "confirmation"
162162 else if ((height > finishAt))
163163 then "finished"
164164 else throw("unknown status")
165165 }
166166 }
167167
168168
169169 func registerEvent (txid,desc,startBlock,endBlock,finishAt,assetStr) = {
170170 let eventId = txid
171171 let insert = invoke(this, "insertToList", [eventId, true], nil)
172172 if ((insert == insert))
173173 then {
174174 let concat = invoke(this, "concatLists", nil, nil)
175175 if ((concat == concat))
176176 then {
177177 let $t048674920 = getAssetInfo(assetStr)
178178 let assetId = $t048674920._1
179179 let assetDecimals = $t048674920._2
180180 [IntegerEntry(getStartBlockKey(eventId), startBlock), IntegerEntry(getEndBlockKey(eventId), endBlock), IntegerEntry(getFinishAtKey(eventId), finishAt), StringEntry(getDescKey(eventId), desc), StringEntry(getStatusKey(eventId), "new"), StringEntry(getIdKey(eventId), eventId), StringEntry(getAssetIdKey(eventId), assetId)]
181181 }
182182 else throw("Strict value is not equal to itself.")
183183 }
184184 else throw("Strict value is not equal to itself.")
185185 }
186186
187187
188188 @Callable(i)
189189 func init (config) = if ((i.caller != this))
190190 then throw("only main can do")
191191 else {
192192 let isExists = isDefined(getString(this, configAddressKey))
193193 if (!(isExists))
194194 then [StringEntry(configAddressKey, config)]
195195 else throw("already inited")
196196 }
197197
198198
199199
200200 @Callable(i)
201201 func appendEventer (desc) = if (!(isAdmin(i.caller)))
202202 then throw("only admin can do")
203203 else {
204204 let inv = invoke(configAddress, "setEventer", [toString(this), desc], nil)
205205 if ((inv == inv))
206206 then nil
207207 else throw("Strict value is not equal to itself.")
208208 }
209209
210210
211211
212212 @Callable(i)
213213 func fullRegisterEvent (desc,startBlock,duration,assetStr) = {
214214 let newStartBlock = if ((startBlock == 0))
215215 then height
216216 else startBlock
217217 let endBlock = (newStartBlock + duration)
218218 let finishAt = (endBlock + 1440)
219219 if (!(isAdmin(i.caller)))
220220 then throw("only admin can do")
221221 else {
222222 let txid = toBase58String(i.transactionId)
223223 registerEvent(txid, desc, newStartBlock, endBlock, finishAt, assetStr)
224224 }
225225 }
226226
227227
228228
229229 @Callable(i)
230230 func choice (eventId,price,address) = {
231231 let status = getStatus(eventId)
232232 if ((status == "active"))
233- then if (if ((size(i.payments) == 1))
234- then (i.payments[0].assetId == USDN)
235- else false)
236- then {
237- let paumentAmount = i.payments[0].amount
238- if ((minAmount > paumentAmount))
239- then throw("amount is less than allowed")
240- else {
241- let invAppend = invoke(this, "appendBetsList", [eventId, address, price], nil)
242- if ((invAppend == invAppend))
243- then {
244- let save = invoke(historyAddress, "saveToHistory", [eventId, address], nil)
245- if ((save == save))
246- then {
247- let currentTotal = valueOrElse(getInteger(this, getTotalAmountKey(eventId)), 0)
248-[IntegerEntry(getTotalAmountKey(eventId), (currentTotal + paumentAmount))]
249- }
250- else throw("Strict value is not equal to itself.")
251- }
252- else throw("Strict value is not equal to itself.")
253- }
254- }
255- else throw("Bad payment")
233+ then {
234+ let neededAmount = 10000000
235+ let neededAsset = USDN
236+ if (if (if ((size(i.payments) == 1))
237+ then (i.payments[0].assetId == neededAsset)
238+ else false)
239+ then (i.payments[0].amount == neededAmount)
240+ else false)
241+ then {
242+ let invAppend = invoke(this, "appendBetsList", [eventId, address, price], nil)
243+ if ((invAppend == invAppend))
244+ then {
245+ let save = invoke(historyAddress, "saveToHistory", [eventId, address], nil)
246+ if ((save == save))
247+ then {
248+ let currentTotal = valueOrElse(getInteger(this, getTotalAmountKey(eventId)), 0)
249+[IntegerEntry(getTotalAmountKey(eventId), (currentTotal + i.payments[0].amount))]
250+ }
251+ else throw("Strict value is not equal to itself.")
252+ }
253+ else throw("Strict value is not equal to itself.")
254+ }
255+ else throw("Bad payment")
256+ }
256257 else throw("You can`t do it")
257258 }
258259
259260
260261
261262 @Callable(i)
262263 func appendBetsList (eventId,addressStr,price) = if ((i.caller != this))
263264 then throw("only main can do")
264265 else if (isDefined(getString(this, getPriceAddressKey(eventId, addressStr))))
265266 then throw("betting from this address is exists")
266267 else {
267268 let countBetsPrice = valueOrElse(getInteger(this, getPriceBetsCount(eventId, price)), 0)
268269 if ((countBetsPrice >= maxBetsOnPrice))
269270 then throw("to many bets")
270271 else {
271272 let listIndex = valueOrElse(getInteger(this, getPricesListsCountKey(eventId)), 1)
272273 let currentPrices = valueOrElse(getString(this, getPricesListNKey(eventId, listIndex)), "")
273274 let currentPricesList = split_4C(currentPrices, separator)
274275 let listSize = size(currentPricesList)
275276 let newPrices = if ((countBetsPrice == 0))
276277 then if ((100 > listSize))
277278 then if ((size(currentPrices) == 0))
278279 then toString(price)
279280 else ((currentPrices + separator) + toString(price))
280281 else toString(price)
281282 else currentPrices
282283 let newListIndex = if (if ((listSize >= 100))
283284 then (countBetsPrice == 0)
284285 else false)
285286 then listIndex
286287 else (listIndex + 1)
287288 let newGroupsCount = (((newListIndex - 1) / 10) + 1)
288289 [IntegerEntry(getPriceAddressKey(eventId, addressStr), price), IntegerEntry(getPricesListsCountKey(eventId), newListIndex), IntegerEntry(getPricesGroupsCountKey(eventId), newGroupsCount), StringEntry(getPricesListNKey(eventId, newListIndex), newPrices)]
289290 }
290291 }
291292
292293
293294
294295 @Callable(i)
295296 func resetList () = if (!(isAdmin(i.caller)))
296297 then throw("only admin can do")
297298 else [StringEntry(firstEventKey, undefined), StringEntry(lastEventKey, undefined), StringEntry(fisrtActiveEventKey, undefined), StringEntry(lastActiveEventKey, undefined), StringEntry(fisrtFinishedEventKey, undefined), StringEntry(lastFinishedEventKey, undefined)]
298299
299300
300301
301302 @Callable(i)
302303 func insertToList (eventId,isActive) = if ((this != i.caller))
303304 then throw("only main can do")
304305 else {
305306 let lastKey = if (isActive)
306307 then lastActiveEventKey
307308 else lastFinishedEventKey
308309 let firstKey = if (isActive)
309310 then fisrtActiveEventKey
310311 else fisrtFinishedEventKey
311312 let firstEvent = valueOrElse(getString(this, firstKey), undefined)
312313 let lastEvent = valueOrElse(getString(this, lastKey), undefined)
313314 let newLastOrPrevKey = if ((lastEvent == undefined))
314315 then lastKey
315316 else getPrevEventKey(firstEvent)
316317 [StringEntry(firstKey, eventId), StringEntry(newLastOrPrevKey, eventId), StringEntry(getNextEventKey(eventId), firstEvent)]
317318 }
318319
319320
320321
321322 @Callable(i)
322323 func deleteFromList (eventId,isActive) = if ((this != i.caller))
323324 then throw("only main can do")
324325 else {
325326 let lastKey = if (isActive)
326327 then lastActiveEventKey
327328 else lastFinishedEventKey
328329 let firstKey = if (isActive)
329330 then fisrtActiveEventKey
330331 else fisrtFinishedEventKey
331332 let firstEvent = valueOrElse(getString(this, firstKey), undefined)
332333 let lastEvent = valueOrElse(getString(this, lastKey), undefined)
333334 let prevEventTemp = valueOrElse(getString(this, getPrevEventKey(eventId)), undefined)
334335 let nextEventTemp = valueOrElse(getString(this, getNextEventKey(eventId)), undefined)
335336 let prevEvent = if ((eventId == firstEvent))
336337 then undefined
337338 else prevEventTemp
338339 let nextEvent = if ((eventId == lastEvent))
339340 then undefined
340341 else nextEventTemp
341342 if (if ((prevEvent == undefined))
342343 then (nextEvent == undefined)
343344 else false)
344345 then [StringEntry(firstKey, undefined), StringEntry(lastKey, undefined)]
345346 else if (if ((prevEvent != undefined))
346347 then (nextEvent != undefined)
347348 else false)
348349 then [StringEntry(getPrevEventKey(nextEvent), prevEvent), StringEntry(getNextEventKey(prevEvent), nextEvent)]
349350 else if ((prevEvent != undefined))
350351 then [StringEntry(lastKey, prevEvent), StringEntry(getNextEventKey(prevEvent), undefined)]
351352 else [StringEntry(firstKey, nextEvent), StringEntry(getPrevEventKey(nextEvent), undefined)]
352353 }
353354
354355
355356
356357 @Callable(i)
357358 func concatLists () = if (!(isAdmin(i.caller)))
358359 then throw("only admin can do")
359360 else {
360361 let firstActiveEvent = valueOrElse(getString(this, fisrtActiveEventKey), undefined)
361362 let lastActiveEvent = valueOrElse(getString(this, lastActiveEventKey), undefined)
362363 let firstFinishedEvent = valueOrElse(getString(this, fisrtFinishedEventKey), undefined)
363364 let lastFinishedEvent = valueOrElse(getString(this, lastFinishedEventKey), undefined)
364365 let firstEvent = if ((firstActiveEvent != undefined))
365366 then firstActiveEvent
366367 else firstFinishedEvent
367368 let lastEvent = if ((lastFinishedEvent != undefined))
368369 then lastFinishedEvent
369370 else lastActiveEvent
370371 if (if ((firstFinishedEvent != undefined))
371372 then (lastActiveEvent != undefined)
372373 else false)
373374 then [StringEntry(firstEventKey, firstEvent), StringEntry(lastEventKey, lastEvent), StringEntry(getNextEventKey(lastActiveEvent), firstFinishedEvent), StringEntry(getPrevEventKey(firstFinishedEvent), lastActiveEvent)]
374375 else [StringEntry(firstEventKey, firstEvent), StringEntry(lastEventKey, lastEvent)]
375376 }
376377
377378

github/deemru/w8io/c3f4982 
37.73 ms