tx · HfSSG4pWBmrH1tbbForU1m6iSGwkLhW2PSZPxakwmw78

3PEPqj1G2ojFxEedmurfArjHizqSKvgr83i:  -0.01400000 Waves

2022.10.06 16:32 [3326012] smart account 3PEPqj1G2ojFxEedmurfArjHizqSKvgr83i > SELF 0.00000000 Waves

{ "type": 13, "id": "HfSSG4pWBmrH1tbbForU1m6iSGwkLhW2PSZPxakwmw78", "fee": 1400000, "feeAssetId": null, "timestamp": 1665063203101, "version": 2, "chainId": 87, "sender": "3PEPqj1G2ojFxEedmurfArjHizqSKvgr83i", "senderPublicKey": "BHQCrVui8yMCTkaj3qGe2T3DHMytib6GniBPVM3Zxhaa", "proofs": [ "3TGD7zjzCFtjh4eHkxjX3eGrQyMwLexYmiK7nTCjJEPDXKQjnM4wPFJuGEsdgtLYpRwa4NCaSExLiTJGzXbuKYXF" ], "script": "base64:BgIxCAISBQoDCAEIEgcKBQgBAQEIEgQKAggBEgMKAQgSAwoBCBIDCgEIEgASBAoCCAgSACMABFVTRE4BILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAApmZWVBZGRyZXNzCQEHQWRkcmVzcwEBGgFXH6pIrzY5PGamOPVRxf+tjuT3DS6jcjv6AAltaW5BbW91bnQAgK3iBAAMZmVlTnVtZXJhdG9yAAUADmZlZURlbm9taW5hdG9yAGQACXVuZGVmaW5lZAIJdW5kZWZpbmVkAA1maXJzdEV2ZW50S2V5AgtmaXJzdF9ldmVudAAMbGFzdEV2ZW50S2V5AgpsYXN0X2V2ZW50ARBnZXRTdGFydEJsb2NrS2V5AQdldmVudElkCQCsAgIFB2V2ZW50SWQCDF9zdGFydF9ibG9jawEOZ2V0RW5kQmxvY2tLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIKX2VuZF9ibG9jawEOZ2V0RmluaXNoQXRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIQX2ZpbmlzaF9hdF9ibG9jawEXZ2V0QW5zd2VyRGFwcEFkZHJlc3NLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIMX2Fuc3dlcl9kYXBwARdnZXRBbnN3ZXJGdW5jQWRkcmVzc0tleQEHZXZlbnRJZAkArAICBQdldmVudElkAgxfYW5zd2VyX2Z1bmMBDGdldFJlc3VsdEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAgdfcmVzdWx0AQhnZXRJZEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAgNfaWQBDWdldEFuc3dlck5LZXkCB2V2ZW50SWQBbgkArAICCQCsAgIFB2V2ZW50SWQCCF9hbnN3ZXJfCQCkAwEFAW4BEmdldEFuc3dlcnNDb3VudEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAg5fYW5zd2Vyc19jb3VudAEMZ2V0U3RhdHVzS2V5AQdldmVudElkCQCsAgIFB2V2ZW50SWQCB19zdGF0dXMBCmdldERlc2NLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAIMX2Rlc2NyaXB0aW9uAQ9nZXRQcmV2RXZlbnRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAILX3ByZXZfZXZlbnQBD2dldE5leHRFdmVudEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAgtfbmV4dF9ldmVudAERZ2V0VG90YWxBbW91bnRLZXkBB2V2ZW50SWQJAKwCAgUHZXZlbnRJZAINX3RvdGFsX2Ftb3VudAEZZ2V0Q2xhaW1lZFdpbm5lcnNDb3VudEtleQEHZXZlbnRJZAkArAICBQdldmVudElkAhZfY2xhaW1lZF93aW5uZXJzX2NvdW50AQ1nZXRBbW91bnROS2V5AgdldmVudElkAW4JAKwCAgkArAICCQCsAgIFB2V2ZW50SWQCAV8JAKQDAQUBbgIHX2Ftb3VudAEMZ2V0Q291bnROS2V5AgdldmVudElkAW4JAKwCAgkArAICCQCsAgIFB2V2ZW50SWQCAV8JAKQDAQUBbgIGX2NvdW50ARNnZXRBbW91bnRBZGRyZXNzS2V5AgdldmVudElkB2FkZHJlc3MJAKwCAgkArAICCQCsAgIFB2V2ZW50SWQCAV8FB2FkZHJlc3MCB19hbW91bnQBE2dldENob2ljZUFkZHJlc3NLZXkCB2V2ZW50SWQHYWRkcmVzcwkArAICCQCsAgIJAKwCAgUHZXZlbnRJZAIBXwUHYWRkcmVzcwIHX2Nob2ljZQEbZ2V0QWxyZWFkeUNsYWltZWRBZGRyZXNzS2V5AgdldmVudElkB2FkZHJlc3MJAKwCAgkArAICCQCsAgIFB2V2ZW50SWQCAV8FB2FkZHJlc3MCEF9hbHJlYWR5X2NsYWltZWQBD2dldEFuc3dlclJlc3VsdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgQjZXJyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAFAXgJAAIBAgQjZXJyAQlnZXRTdGF0dXMBB2V2ZW50SWQEBnN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEMZ2V0U3RhdHVzS2V5AQUHZXZlbnRJZAIBIwMDAwkAAAIFBnN0YXR1cwIIZmluaXNoZWQGCQAAAgUGc3RhdHVzAgEjBgkAAAIFBnN0YXR1cwIGY2xvc2VkBQZzdGF0dXMECGZpbmlzaEF0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOZ2V0RmluaXNoQXRLZXkBBQdldmVudElkBApzdGFydEJsb2NrCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEQZ2V0U3RhcnRCbG9ja0tleQEFB2V2ZW50SWQECGVuZEJsb2NrCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOZ2V0RW5kQmxvY2tLZXkBBQdldmVudElkAwMJAGcCBQZoZWlnaHQFCnN0YXJ0QmxvY2sJAGcCBQhlbmRCbG9jawUGaGVpZ2h0BwIGYWN0aXZlAwMJAGYCBQZoZWlnaHQFCGVuZEJsb2NrCQBnAgUIZmluaXNoQXQFBmhlaWdodAcCBHdhaXQDCQBmAgUGaGVpZ2h0BQhmaW5pc2hBdAIIZmluaXNoZWQJAAIBAg51bmtub3duIHN0YXR1cwEHaXNBZG1pbgEGY2FsbGVyAwkAAAIFBmNhbGxlcgUEdGhpcwYHAQ1yZWdpc3RlckV2ZW50BwR0eGlkBGRlc2MKc3RhcnRCbG9jawhlbmRCbG9jawhmaW5pc2hBdAtjaGVja2VyRGFwcAtjaGVja2VyRnVuYwQHZXZlbnRJZAUEdHhpZAQMYW5zd2VyUmVzdWx0CQEPZ2V0QW5zd2VyUmVzdWx0AQkA/AcEBQR0aGlzAgVjaGVjawkAzAgCBQtjaGVja2VyRGFwcAkAzAgCBQtjaGVja2VyRnVuYwUDbmlsBQNuaWwDCQAAAgUMYW5zd2VyUmVzdWx0BQxhbnN3ZXJSZXN1bHQECmZpcnN0RXZlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNZmlyc3RFdmVudEtleQUJdW5kZWZpbmVkBAlsYXN0RXZlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUMbGFzdEV2ZW50S2V5BQl1bmRlZmluZWQEGG5ld0ZpcnN0T3JOZXh0Rm9yUHJldktleQMJAAACBQpmaXJzdEV2ZW50BQl1bmRlZmluZWQFDWZpcnN0RXZlbnRLZXkJAQ9nZXROZXh0RXZlbnRLZXkBBQlsYXN0RXZlbnQEDG5ld0xhc3RFdmVudAUHZXZlbnRJZAQJcHJldkV2ZW50BQlsYXN0RXZlbnQECW5leHRFdmVudAUJdW5kZWZpbmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQZ2V0U3RhcnRCbG9ja0tleQEFB2V2ZW50SWQFCnN0YXJ0QmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5nZXRFbmRCbG9ja0tleQEFB2V2ZW50SWQFCGVuZEJsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOZ2V0RmluaXNoQXRLZXkBBQdldmVudElkBQhmaW5pc2hBdAkAzAgCCQELU3RyaW5nRW50cnkCCQEXZ2V0QW5zd2VyRGFwcEFkZHJlc3NLZXkBBQdldmVudElkBQtjaGVja2VyRGFwcAkAzAgCCQELU3RyaW5nRW50cnkCCQEXZ2V0QW5zd2VyRnVuY0FkZHJlc3NLZXkBBQdldmVudElkBQtjaGVja2VyRnVuYwkAzAgCCQELU3RyaW5nRW50cnkCCQEKZ2V0RGVzY0tleQEFB2V2ZW50SWQFBGRlc2MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGdldFN0YXR1c0tleQEFB2V2ZW50SWQCBmFjdGl2ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEIZ2V0SWRLZXkBBQdldmVudElkBQdldmVudElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1nZXRBbnN3ZXJOS2V5AgUHZXZlbnRJZAABAgJOTwkAzAgCCQELU3RyaW5nRW50cnkCCQENZ2V0QW5zd2VyTktleQIFB2V2ZW50SWQAAgIDWUVTCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESZ2V0QW5zd2Vyc0NvdW50S2V5AQUHZXZlbnRJZAACCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMZ2V0UmVzdWx0S2V5AQUHZXZlbnRJZAABCQDMCAIJAQtTdHJpbmdFbnRyeQIFGG5ld0ZpcnN0T3JOZXh0Rm9yUHJldktleQUHZXZlbnRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQxsYXN0RXZlbnRLZXkFDG5ld0xhc3RFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEPZ2V0UHJldkV2ZW50S2V5AQUHZXZlbnRJZAUJcHJldkV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXROZXh0RXZlbnRLZXkBBQdldmVudElkBQluZXh0RXZlbnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEHZ2V0SnNvbgEHc3RhcnRJZAQHZXZlbnRJZAkBCGFzU3RyaW5nAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEIZ2V0SWRLZXkBBQdzdGFydElkCQCdCAIFBHRoaXMFDWZpcnN0RXZlbnRLZXkEC25leHRFdmVudElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEPZ2V0TmV4dEV2ZW50S2V5AQUHZXZlbnRJZAQKc3RhcnRCbG9jawkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBEGdldFN0YXJ0QmxvY2tLZXkBBQdldmVudElkBAhlbmRCbG9jawkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDmdldEVuZEJsb2NrS2V5AQUHZXZlbnRJZAQLZmluaXNoQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ5nZXRGaW5pc2hBdEtleQEFB2V2ZW50SWQEC2NoZWNrZXJEYXBwCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEXZ2V0QW5zd2VyRGFwcEFkZHJlc3NLZXkBBQdldmVudElkBAtjaGVja2VyRnVuYwkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBF2dldEFuc3dlckZ1bmNBZGRyZXNzS2V5AQUHZXZlbnRJZAQGc3RhdHVzCQEJZ2V0U3RhdHVzAQUHZXZlbnRJZAQGcmVzdWx0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEMZ2V0UmVzdWx0S2V5AQUHZXZlbnRJZAQMYW5zd2Vyc0NvdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQESZ2V0QW5zd2Vyc0NvdW50S2V5AQUHZXZlbnRJZAQMYW5zd2Vyc0FycmF5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgFbAwkAZwIFDGFuc3dlcnNDb3VudAABCQCsAgICAAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBDWdldEFuc3dlck5LZXkCBQdldmVudElkAAECAAMJAGcCBQxhbnN3ZXJzQ291bnQAAgkArAICAgEsCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQENZ2V0QW5zd2VyTktleQIFB2V2ZW50SWQAAgIAAwkAZwIFDGFuc3dlcnNDb3VudAADCQCsAgICASwJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAQ1nZXRBbnN3ZXJOS2V5AgUHZXZlbnRJZAADAgADCQBnAgUMYW5zd2Vyc0NvdW50AAQJAKwCAgIBLAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBDWdldEFuc3dlck5LZXkCBQdldmVudElkAAQCAAMJAGcCBQxhbnN3ZXJzQ291bnQABQkArAICAgEsCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQENZ2V0QW5zd2VyTktleQIFB2V2ZW50SWQABQIAAgFdBARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIBIgICaWQCASICAToCASIFB2V2ZW50SWQCASICASwCASICCnN0YXJ0QmxvY2sCASICAToJAKQDAQUKc3RhcnRCbG9jawIBLAIBIgIIZW5kQmxvY2sCASICAToJAKQDAQUIZW5kQmxvY2sCASwCASICC2ZpbmlzaEJsb2NrAgEiAgE6CQCkAwEFC2ZpbmlzaEJsb2NrAgEsAgEiAgtjaGVja2VyRGFwcAIBIgIBOgIBIgULY2hlY2tlckRhcHACASICASwCASICC2NoZWNrZXJGdW5jAgEiAgE6AgEiBQtjaGVja2VyRnVuYwIBIgIBLAIBIgIGc3RhdHVzAgEiAgE6AgEiBQZzdGF0dXMCASICASwCASICBnJlc3VsdAIBIgIBOgkApAMBBQZyZXN1bHQCASwCASICDGFuc3dlcnNDb3VudAIBIgIBOgkApAMBBQxhbnN3ZXJzQ291bnQCASwCASICB2Fuc3dlcnMCASICAToCASIFDGFuc3dlcnNBcnJheQIBIgIBLAIBfQkAlAoCBQtuZXh0RXZlbnRJZAUEanNvbgEMZ2V0SnNvbkFycmF5AgdzdGFydElkBWNvdW50AwMDCQECIT0CBQVjb3VudAADBgkBAiE9AgUFY291bnQABgYJAQIhPQIFBWNvdW50AAkJAAIBAhhvbmx5IDMsIDYgYW5kIDkgaW4gYXJyYXkEA2V2MQkBB2dldEpzb24BBQdzdGFydElkBANldjIDCQECIT0CCAUDZXYxAl8xBQl1bmRlZmluZWQJAQdnZXRKc29uAQgFA2V2MQJfMQkAlAoCBQl1bmRlZmluZWQCAAQDZXYzAwkBAiE9AggFA2V2MgJfMQUJdW5kZWZpbmVkCQEHZ2V0SnNvbgEIBQNldjICXzEJAJQKAgUJdW5kZWZpbmVkAgAEA2V2NAMDCQBnAgUFY291bnQABgkBAiE9AggFA2V2MwJfMQUJdW5kZWZpbmVkBwkBB2dldEpzb24BCAUDZXYzAl8xCQCUCgIFCXVuZGVmaW5lZAIABANldjUDAwkAZwIFBWNvdW50AAYJAQIhPQIIBQNldjQCXzEFCXVuZGVmaW5lZAcJAQdnZXRKc29uAQgFA2V2NAJfMQkAlAoCBQl1bmRlZmluZWQCAAQDZXY2AwMJAGcCBQVjb3VudAAGCQECIT0CCAUDZXY1Al8xBQl1bmRlZmluZWQHCQEHZ2V0SnNvbgEIBQNldjUCXzEJAJQKAgUJdW5kZWZpbmVkAgAEA2V2NwMDCQBnAgUFY291bnQACQkBAiE9AggFA2V2NgJfMQUJdW5kZWZpbmVkBwkBB2dldEpzb24BCAUDZXY2Al8xCQCUCgIFCXVuZGVmaW5lZAIABANldjgDAwkAZwIFBWNvdW50AAkJAQIhPQIIBQNldjcCXzEFCXVuZGVmaW5lZAcJAQdnZXRKc29uAQgFA2V2NwJfMQkAlAoCBQl1bmRlZmluZWQCAAQDZXY5AwMJAGcCBQVjb3VudAAJCQECIT0CCAUDZXY4Al8xBQl1bmRlZmluZWQHCQEHZ2V0SnNvbgEIBQNldjgCXzEJAJQKAgUJdW5kZWZpbmVkAgAEBWFycmF5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAVsDCQECIT0CCAUDZXYxAl8xBQl1bmRlZmluZWQJAKwCAgIACAUDZXYxAl8yAgADCQECIT0CCAUDZXYyAl8xBQl1bmRlZmluZWQJAKwCAgIBLAgFA2V2MgJfMgIAAwkBAiE9AggFA2V2MwJfMQUJdW5kZWZpbmVkCQCsAgICASwIBQNldjMCXzICAAMJAQIhPQIIBQNldjQCXzEFCXVuZGVmaW5lZAkArAICAgEsCAUDZXY0Al8yAgADCQECIT0CCAUDZXY1Al8xBQl1bmRlZmluZWQJAKwCAgIBLAgFA2V2NQJfMgIAAwkBAiE9AggFA2V2NgJfMQUJdW5kZWZpbmVkCQCsAgICASwIBQNldjYCXzICAAMJAQIhPQIIBQNldjcCXzEFCXVuZGVmaW5lZAkArAICAgEsCAUDZXY3Al8yAgADCQECIT0CCAUDZXY4Al8xBQl1bmRlZmluZWQJAKwCAgIBLAgFA2V2OAJfMgIAAwkBAiE9AggFA2V2OQJfMQUJdW5kZWZpbmVkCQCsAgICASwIBQNldjkCXzICAAIBXQkAlAoCCAUDZXY5Al8xBQVhcnJheQkBaQETc2ltcGxlUmVnaXN0ZXJFdmVudAMEZGVzYwpzdGFydEJsb2NrC2NoZWNrZXJGdW5jAwkBASEBCQEHaXNBZG1pbgEIBQFpBmNhbGxlcgkAAgECEW9ubHkgYWRtaW4gY2FuIGRvBAR0eGlkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQECGVuZEJsb2NrCQBkAgUKc3RhcnRCbG9jawCgCwQIZmluaXNoQXQJAGQCBQhlbmRCbG9jawCgCwQLY2hlY2tlckRhcHAJAKUIAQUEdGhpcwkBDXJlZ2lzdGVyRXZlbnQHBQR0eGlkBQRkZXNjBQpzdGFydEJsb2NrBQhlbmRCbG9jawUIZmluaXNoQXQFC2NoZWNrZXJEYXBwBQtjaGVja2VyRnVuYwFpARFmdWxsUmVnaXN0ZXJFdmVudAUEZGVzYwpzdGFydEJsb2NrCGVuZEJsb2NrCGZpbmlzaEF0C2NoZWNrZXJGdW5jAwkBASEBCQEHaXNBZG1pbgEIBQFpBmNhbGxlcgkAAgECEW9ubHkgYWRtaW4gY2FuIGRvBAR0eGlkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEC2NoZWNrZXJEYXBwCQClCAEFBHRoaXMJAQ1yZWdpc3RlckV2ZW50BwUEdHhpZAUEZGVzYwUKc3RhcnRCbG9jawUIZW5kQmxvY2sFCGZpbmlzaEF0BQtjaGVja2VyRGFwcAULY2hlY2tlckZ1bmMBaQEGY2hvaWNlAgdldmVudElkBmNob2ljZQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWNoZWNrCQD8BwQFBHRoaXMCC2NoZWNrUmVzdWx0CQDMCAIFB2V2ZW50SWQFA25pbAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawQGc3RhdHVzCQEJZ2V0U3RhdHVzAQUHZXZlbnRJZAMJAAACBQZzdGF0dXMCBmFjdGl2ZQMDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQRVU0ROBwQGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMJAGYCBQltaW5BbW91bnQFBmFtb3VudAkAAgECG2Ftb3VudCBpcyBsZXNzIHRoYW4gYWxsb3dlZAQMYW5zd2Vyc0NvdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQESZ2V0QW5zd2Vyc0NvdW50S2V5AQUHZXZlbnRJZAMDCQAAAgUGY2hvaWNlAAAGCQBmAgUGY2hvaWNlBQxhbnN3ZXJzQ291bnQJAAIBAhFjaG9pY2UgaXMgaW52YWxpZAQMY3VycmVudFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARFnZXRUb3RhbEFtb3VudEtleQEFB2V2ZW50SWQAAAQLY2hvaWNlVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDWdldEFtb3VudE5LZXkCBQdldmVudElkBQZjaG9pY2UAAAQLY2hvaWNlQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDGdldENvdW50TktleQIFB2V2ZW50SWQFBmNob2ljZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERZ2V0VG90YWxBbW91bnRLZXkBBQdldmVudElkCQBkAgUMY3VycmVudFRvdGFsBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1nZXRBbW91bnROS2V5AgUHZXZlbnRJZAUGY2hvaWNlCQBkAgULY2hvaWNlVG90YWwFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGdldENvdW50TktleQIFB2V2ZW50SWQFBmNob2ljZQkAZAIFC2Nob2ljZUNvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARNnZXRDaG9pY2VBZGRyZXNzS2V5AgUHZXZlbnRJZAUHYWRkcmVzcwUGY2hvaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETZ2V0QW1vdW50QWRkcmVzc0tleQIFB2V2ZW50SWQFB2FkZHJlc3MFBmFtb3VudAUDbmlsCQACAQILQmFkIHBheW1lbnQJAAIBAg9Zb3UgY2FuYHQgZG8gaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFY2xhaW0BB2V2ZW50SWQEB2FkZHJlc3MIBQFpBmNhbGxlcgQGc3RhdHVzCQEJZ2V0U3RhdHVzAQUHZXZlbnRJZAMJAAACBQZzdGF0dXMCCGZpbmlzaGVkBAt0b3RhbEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBEWdldFRvdGFsQW1vdW50S2V5AQUHZXZlbnRJZAQOYWxyZWFkeUNsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBG2dldEFscmVhZHlDbGFpbWVkQWRkcmVzc0tleQIFB2V2ZW50SWQJAKUIAQUHYWRkcmVzcwcDBQ5hbHJlYWR5Q2xhaW1lZAkAAgECFlJld2FyZCBhbHJlYWR5IGNsYWltZWQEDWFkZHJlc3NDaG9pY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARNnZXRDaG9pY2VBZGRyZXNzS2V5AgUHZXZlbnRJZAkApQgBBQdhZGRyZXNzBAZyZXN1bHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQxnZXRSZXN1bHRLZXkBBQdldmVudElkBAtjaG9pY2VUb3RhbAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDWdldEFtb3VudE5LZXkCBQdldmVudElkBQZyZXN1bHQEDWFkZHJlc3NBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARNnZXRBbW91bnRBZGRyZXNzS2V5AgUHZXZlbnRJZAkApQgBBQdhZGRyZXNzAwkAAAIFDWFkZHJlc3NDaG9pY2UFBnJlc3VsdAQNYWRkcmVzc1Jld2FyZAkAawMFC3RvdGFsQW1vdW50BQ1hZGRyZXNzQW1vdW50BQtjaG9pY2VUb3RhbAQDZmVlCQBrAwUNYWRkcmVzc1Jld2FyZAUMZmVlTnVtZXJhdG9yBQ5mZWVEZW5vbWluYXRvcgQOY2xhaW1lZFdpbm5lcnMJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARlnZXRDbGFpbWVkV2lubmVyc0NvdW50S2V5AQUHZXZlbnRJZAAAAAEEC2Nob2ljZUNvdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEMZ2V0Q291bnROS2V5AgUHZXZlbnRJZAUGcmVzdWx0AwkAAAIFDmNsYWltZWRXaW5uZXJzBQtjaG9pY2VDb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEMZ2V0U3RhdHVzS2V5AQUHZXZlbnRJZAIFZW5kZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARNnZXRDaG9pY2VBZGRyZXNzS2V5AgUHZXZlbnRJZAkApQgBBQdhZGRyZXNzBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWdldENsYWltZWRXaW5uZXJzQ291bnRLZXkBBQdldmVudElkBQ5jbGFpbWVkV2lubmVycwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzBQ1hZGRyZXNzUmV3YXJkBQRVU0ROCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCmZlZUFkZHJlc3MFA2ZlZQUEVVNETgUDbmlsCQDMCAIJAQxCb29sZWFuRW50cnkCCQETZ2V0Q2hvaWNlQWRkcmVzc0tleQIFB2V2ZW50SWQJAKUIAQUHYWRkcmVzcwYJAMwIAgkBDEludGVnZXJFbnRyeQIJARlnZXRDbGFpbWVkV2lubmVyc0NvdW50S2V5AQUHZXZlbnRJZAUOY2xhaW1lZFdpbm5lcnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUHYWRkcmVzcwUNYWRkcmVzc1Jld2FyZAUEVVNETgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpmZWVBZGRyZXNzBQNmZWUFBFVTRE4FA25pbAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nCQACAQIPWW91IGNhbmB0IGRvIGl0AWkBC2NoZWNrUmVzdWx0AQdldmVudElkBAZzdGF0dXMJAQlnZXRTdGF0dXMBBQdldmVudElkAwMJAAACBQZzdGF0dXMCBmFjdGl2ZQYJAAACBQZzdGF0dXMCBHdhaXQEC2NoZWNrZXJEYXBwCQCdCAIFBHRoaXMJARdnZXRBbnN3ZXJEYXBwQWRkcmVzc0tleQEFB2V2ZW50SWQEC2NoZWNrZXJGdW5jCQCdCAIFBHRoaXMJARdnZXRBbnN3ZXJGdW5jQWRkcmVzc0tleQEFB2V2ZW50SWQEDWN1cnJlbnRSZXN1bHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQxnZXRSZXN1bHRLZXkBBQdldmVudElkBAxhbnN3ZXJSZXN1bHQJAQ9nZXRBbnN3ZXJSZXN1bHQBCQD8BwQFBHRoaXMCBWNoZWNrCQDMCAIFC2NoZWNrZXJEYXBwCQDMCAIFC2NoZWNrZXJGdW5jBQNuaWwFA25pbAMJAAACBQxhbnN3ZXJSZXN1bHQFDGFuc3dlclJlc3VsdAMJAQIhPQIFDGFuc3dlclJlc3VsdAUNY3VycmVudFJlc3VsdAQDaW52CQD8BwQFBHRoaXMCCmNoYW5nZUxpc3QJAMwIAgUHZXZlbnRJZAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGdldFN0YXR1c0tleQEFB2V2ZW50SWQCCGZpbmlzaGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMZ2V0UmVzdWx0S2V5AQUHZXZlbnRJZAUMYW5zd2VyUmVzdWx0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAggFAWkGY2FsbGVyBQR0aGlzBQNuaWwJAQV0aHJvdwAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhBFdmVudCBub3QgYWN0aXZlAWkBCmNoYW5nZUxpc3QBB2V2ZW50SWQDCQECIT0CBQR0aGlzCAUBaQZjYWxsZXIJAAIBAhBvbmx5IG1haW4gY2FuIGRvBAlwcmV2RXZlbnQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAQ9nZXRQcmV2RXZlbnRLZXkBBQdldmVudElkBAluZXh0RXZlbnQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAQ9nZXROZXh0RXZlbnRLZXkBBQdldmVudElkAwMJAAACBQlwcmV2RXZlbnQFCXVuZGVmaW5lZAkAAAIFCW5leHRFdmVudAUJdW5kZWZpbmVkBwkAzAgCCQELU3RyaW5nRW50cnkCBQ1maXJzdEV2ZW50S2V5BQl1bmRlZmluZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMbGFzdEV2ZW50S2V5BQl1bmRlZmluZWQFA25pbAMDCQECIT0CBQlwcmV2RXZlbnQFCXVuZGVmaW5lZAkBAiE9AgUJbmV4dEV2ZW50BQl1bmRlZmluZWQHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXRQcmV2RXZlbnRLZXkBBQluZXh0RXZlbnQFCXByZXZFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEPZ2V0TmV4dEV2ZW50S2V5AQUJcHJldkV2ZW50BQluZXh0RXZlbnQFA25pbAMJAQIhPQIFCXByZXZFdmVudAUJdW5kZWZpbmVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGxhc3RFdmVudEtleQUJcHJldkV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9nZXROZXh0RXZlbnRLZXkBBQlwcmV2RXZlbnQFCXVuZGVmaW5lZAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWZpcnN0RXZlbnRLZXkFCW5leHRFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEPZ2V0UHJldkV2ZW50S2V5AQUJbmV4dEV2ZW50BQl1bmRlZmluZWQFA25pbAFpAQlyZXNldExpc3QAAwkBAiE9AgUEdGhpcwgFAWkGY2FsbGVyCQACAQIQb25seSBtYWluIGNhbiBkbwkAzAgCCQELU3RyaW5nRW50cnkCBQ1maXJzdEV2ZW50S2V5BQl1bmRlZmluZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMbGFzdEV2ZW50S2V5BQl1bmRlZmluZWQFA25pbAFpAQVjaGVjawIEZGFwcAhmdW5jdGlvbgMJAQIhPQIFBHRoaXMIBQFpBmNhbGxlcgkAAgECEG9ubHkgbWFpbiBjYW4gZG8EDGFuc3dlclJlc3VsdAkBD2dldEFuc3dlclJlc3VsdAEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEZGFwcAUIZnVuY3Rpb24FA25pbAUDbmlsCQCUCgIFA25pbAUMYW5zd2VyUmVzdWx0AWkBEWNoZWNrVmlyZXNWZXN0aW5nAAMJAQIhPQIFBHRoaXMIBQFpBmNhbGxlcgkAAgECEG9ubHkgbWFpbiBjYW4gZG8EDm9wVmlyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUDJySkdmYjVNYmVpdlpOU3FkVm1zRDFZMk16OHk2SnIzWgQIZW5hYmxlZDAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUOb3BWaXJlc0FkZHJlc3MCDXN5c3RlbV9wYXVzZWQGBAhlbmFibGVkMQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ5vcFZpcmVzQWRkcmVzcwIlb3BfbGlxdWlkYW9fYWxsX3dpdGhkcmF3VmVzdGVkX3BhdXNlZAYECGVuYWJsZWQyCQELdmFsdWVPckVsc2UCCQCbCAIFDm9wVmlyZXNBZGRyZXNzAipvcF9saXF1aWRhb19hbGxfd2l0aGRyYXdWZXN0ZWRfdXNkbl9wYXVzZWQGAwMDBQhlbmFibGVkMAUIZW5hYmxlZDEHBQhlbmFibGVkMgcJAJQKAgUDbmlsAAIJAJQKAgUDbmlsAAEAZuTiqg==", "height": 3326012, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: NKtdkTf3q1ecJg6v2zubajwRspiZsTckLrtW3RKn3uK Next: HkAqwNVyVSV7rVjYhZt5rnV9zc2LRQMY32a5tcdoFRWg Diff:
OldNewDifferences
133133 let firstEvent = valueOrElse(getString(this, firstEventKey), undefined)
134134 let lastEvent = valueOrElse(getString(this, lastEventKey), undefined)
135135 let newFirstOrNextForPrevKey = if ((firstEvent == undefined))
136- then firstEvent
136+ then firstEventKey
137137 else getNextEventKey(lastEvent)
138138 let newLastEvent = eventId
139139 let prevEvent = lastEvent
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
55
66 let feeAddress = Address(base58'3P4pKfj9UZHqj6pb18921oSftYuQw35gExR')
77
88 let minAmount = 10000000
99
1010 let feeNumerator = 5
1111
1212 let feeDenominator = 100
1313
1414 let undefined = "undefined"
1515
1616 let firstEventKey = "first_event"
1717
1818 let lastEventKey = "last_event"
1919
2020 func getStartBlockKey (eventId) = (eventId + "_start_block")
2121
2222
2323 func getEndBlockKey (eventId) = (eventId + "_end_block")
2424
2525
2626 func getFinishAtKey (eventId) = (eventId + "_finish_at_block")
2727
2828
2929 func getAnswerDappAddressKey (eventId) = (eventId + "_answer_dapp")
3030
3131
3232 func getAnswerFuncAddressKey (eventId) = (eventId + "_answer_func")
3333
3434
3535 func getResultKey (eventId) = (eventId + "_result")
3636
3737
3838 func getIdKey (eventId) = (eventId + "_id")
3939
4040
4141 func getAnswerNKey (eventId,n) = ((eventId + "_answer_") + toString(n))
4242
4343
4444 func getAnswersCountKey (eventId) = (eventId + "_answers_count")
4545
4646
4747 func getStatusKey (eventId) = (eventId + "_status")
4848
4949
5050 func getDescKey (eventId) = (eventId + "_description")
5151
5252
5353 func getPrevEventKey (eventId) = (eventId + "_prev_event")
5454
5555
5656 func getNextEventKey (eventId) = (eventId + "_next_event")
5757
5858
5959 func getTotalAmountKey (eventId) = (eventId + "_total_amount")
6060
6161
6262 func getClaimedWinnersCountKey (eventId) = (eventId + "_claimed_winners_count")
6363
6464
6565 func getAmountNKey (eventId,n) = (((eventId + "_") + toString(n)) + "_amount")
6666
6767
6868 func getCountNKey (eventId,n) = (((eventId + "_") + toString(n)) + "_count")
6969
7070
7171 func getAmountAddressKey (eventId,address) = (((eventId + "_") + address) + "_amount")
7272
7373
7474 func getChoiceAddressKey (eventId,address) = (((eventId + "_") + address) + "_choice")
7575
7676
7777 func getAlreadyClaimedAddressKey (eventId,address) = (((eventId + "_") + address) + "_already_claimed")
7878
7979
8080 func getAnswerResult (v) = match v {
8181 case x: Int =>
8282 x
8383 case t =>
8484 throw("#err")
8585 }
8686
8787
8888 func asString (v) = match v {
8989 case x: String =>
9090 x
9191 case _ =>
9292 throw("#err")
9393 }
9494
9595
9696 func getStatus (eventId) = {
9797 let status = valueOrElse(getString(this, getStatusKey(eventId)), "#")
9898 if (if (if ((status == "finished"))
9999 then true
100100 else (status == "#"))
101101 then true
102102 else (status == "closed"))
103103 then status
104104 else {
105105 let finishAt = getIntegerValue(this, getFinishAtKey(eventId))
106106 let startBlock = getIntegerValue(this, getStartBlockKey(eventId))
107107 let endBlock = getIntegerValue(this, getEndBlockKey(eventId))
108108 if (if ((height >= startBlock))
109109 then (endBlock >= height)
110110 else false)
111111 then "active"
112112 else if (if ((height > endBlock))
113113 then (finishAt >= height)
114114 else false)
115115 then "wait"
116116 else if ((height > finishAt))
117117 then "finished"
118118 else throw("unknown status")
119119 }
120120 }
121121
122122
123123 func isAdmin (caller) = if ((caller == this))
124124 then true
125125 else false
126126
127127
128128 func registerEvent (txid,desc,startBlock,endBlock,finishAt,checkerDapp,checkerFunc) = {
129129 let eventId = txid
130130 let answerResult = getAnswerResult(invoke(this, "check", [checkerDapp, checkerFunc], nil))
131131 if ((answerResult == answerResult))
132132 then {
133133 let firstEvent = valueOrElse(getString(this, firstEventKey), undefined)
134134 let lastEvent = valueOrElse(getString(this, lastEventKey), undefined)
135135 let newFirstOrNextForPrevKey = if ((firstEvent == undefined))
136- then firstEvent
136+ then firstEventKey
137137 else getNextEventKey(lastEvent)
138138 let newLastEvent = eventId
139139 let prevEvent = lastEvent
140140 let nextEvent = undefined
141141 [IntegerEntry(getStartBlockKey(eventId), startBlock), IntegerEntry(getEndBlockKey(eventId), endBlock), IntegerEntry(getFinishAtKey(eventId), finishAt), StringEntry(getAnswerDappAddressKey(eventId), checkerDapp), StringEntry(getAnswerFuncAddressKey(eventId), checkerFunc), StringEntry(getDescKey(eventId), desc), StringEntry(getStatusKey(eventId), "active"), StringEntry(getIdKey(eventId), eventId), StringEntry(getAnswerNKey(eventId, 1), "NO"), StringEntry(getAnswerNKey(eventId, 2), "YES"), IntegerEntry(getAnswersCountKey(eventId), 2), IntegerEntry(getResultKey(eventId), 1), StringEntry(newFirstOrNextForPrevKey, eventId), StringEntry(lastEventKey, newLastEvent), StringEntry(getPrevEventKey(eventId), prevEvent), StringEntry(getNextEventKey(eventId), nextEvent)]
142142 }
143143 else throw("Strict value is not equal to itself.")
144144 }
145145
146146
147147 func getJson (startId) = {
148148 let eventId = asString(valueOrElse(getString(this, getIdKey(startId)), getString(this, firstEventKey)))
149149 let nextEventId = getStringValue(this, getNextEventKey(eventId))
150150 let startBlock = getIntegerValue(this, getStartBlockKey(eventId))
151151 let endBlock = getIntegerValue(this, getEndBlockKey(eventId))
152152 let finishBlock = getIntegerValue(this, getFinishAtKey(eventId))
153153 let checkerDapp = getStringValue(this, getAnswerDappAddressKey(eventId))
154154 let checkerFunc = getStringValue(this, getAnswerFuncAddressKey(eventId))
155155 let status = getStatus(eventId)
156156 let result = getIntegerValue(this, getResultKey(eventId))
157157 let answersCount = getIntegerValue(this, getAnswersCountKey(eventId))
158158 let answersArray = (((((("[" + (if ((answersCount >= 1))
159159 then ("" + getStringValue(this, getAnswerNKey(eventId, 1)))
160160 else "")) + (if ((answersCount >= 2))
161161 then ("," + getStringValue(this, getAnswerNKey(eventId, 2)))
162162 else "")) + (if ((answersCount >= 3))
163163 then ("," + getStringValue(this, getAnswerNKey(eventId, 3)))
164164 else "")) + (if ((answersCount >= 4))
165165 then ("," + getStringValue(this, getAnswerNKey(eventId, 4)))
166166 else "")) + (if ((answersCount >= 5))
167167 then ("," + getStringValue(this, getAnswerNKey(eventId, 5)))
168168 else "")) + "]")
169169 let json = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"") + "id") + "\"") + ":") + "\"") + eventId) + "\"") + ",") + "\"") + "startBlock") + "\"") + ":") + toString(startBlock)) + ",") + "\"") + "endBlock") + "\"") + ":") + toString(endBlock)) + ",") + "\"") + "finishBlock") + "\"") + ":") + toString(finishBlock)) + ",") + "\"") + "checkerDapp") + "\"") + ":") + "\"") + checkerDapp) + "\"") + ",") + "\"") + "checkerFunc") + "\"") + ":") + "\"") + checkerFunc) + "\"") + ",") + "\"") + "status") + "\"") + ":") + "\"") + status) + "\"") + ",") + "\"") + "result") + "\"") + ":") + toString(result)) + ",") + "\"") + "answersCount") + "\"") + ":") + toString(answersCount)) + ",") + "\"") + "answers") + "\"") + ":") + "\"") + answersArray) + "\"") + ",") + "}")
170170 $Tuple2(nextEventId, json)
171171 }
172172
173173
174174 func getJsonArray (startId,count) = if (if (if ((count != 3))
175175 then true
176176 else (count != 6))
177177 then true
178178 else (count != 9))
179179 then throw("only 3, 6 and 9 in array")
180180 else {
181181 let ev1 = getJson(startId)
182182 let ev2 = if ((ev1._1 != undefined))
183183 then getJson(ev1._1)
184184 else $Tuple2(undefined, "")
185185 let ev3 = if ((ev2._1 != undefined))
186186 then getJson(ev2._1)
187187 else $Tuple2(undefined, "")
188188 let ev4 = if (if ((count >= 6))
189189 then (ev3._1 != undefined)
190190 else false)
191191 then getJson(ev3._1)
192192 else $Tuple2(undefined, "")
193193 let ev5 = if (if ((count >= 6))
194194 then (ev4._1 != undefined)
195195 else false)
196196 then getJson(ev4._1)
197197 else $Tuple2(undefined, "")
198198 let ev6 = if (if ((count >= 6))
199199 then (ev5._1 != undefined)
200200 else false)
201201 then getJson(ev5._1)
202202 else $Tuple2(undefined, "")
203203 let ev7 = if (if ((count >= 9))
204204 then (ev6._1 != undefined)
205205 else false)
206206 then getJson(ev6._1)
207207 else $Tuple2(undefined, "")
208208 let ev8 = if (if ((count >= 9))
209209 then (ev7._1 != undefined)
210210 else false)
211211 then getJson(ev7._1)
212212 else $Tuple2(undefined, "")
213213 let ev9 = if (if ((count >= 9))
214214 then (ev8._1 != undefined)
215215 else false)
216216 then getJson(ev8._1)
217217 else $Tuple2(undefined, "")
218218 let array = (((((((((("[" + (if ((ev1._1 != undefined))
219219 then ("" + ev1._2)
220220 else "")) + (if ((ev2._1 != undefined))
221221 then ("," + ev2._2)
222222 else "")) + (if ((ev3._1 != undefined))
223223 then ("," + ev3._2)
224224 else "")) + (if ((ev4._1 != undefined))
225225 then ("," + ev4._2)
226226 else "")) + (if ((ev5._1 != undefined))
227227 then ("," + ev5._2)
228228 else "")) + (if ((ev6._1 != undefined))
229229 then ("," + ev6._2)
230230 else "")) + (if ((ev7._1 != undefined))
231231 then ("," + ev7._2)
232232 else "")) + (if ((ev8._1 != undefined))
233233 then ("," + ev8._2)
234234 else "")) + (if ((ev9._1 != undefined))
235235 then ("," + ev9._2)
236236 else "")) + "]")
237237 $Tuple2(ev9._1, array)
238238 }
239239
240240
241241 @Callable(i)
242242 func simpleRegisterEvent (desc,startBlock,checkerFunc) = if (!(isAdmin(i.caller)))
243243 then throw("only admin can do")
244244 else {
245245 let txid = toBase58String(i.transactionId)
246246 let endBlock = (startBlock + 1440)
247247 let finishAt = (endBlock + 1440)
248248 let checkerDapp = toString(this)
249249 registerEvent(txid, desc, startBlock, endBlock, finishAt, checkerDapp, checkerFunc)
250250 }
251251
252252
253253
254254 @Callable(i)
255255 func fullRegisterEvent (desc,startBlock,endBlock,finishAt,checkerFunc) = if (!(isAdmin(i.caller)))
256256 then throw("only admin can do")
257257 else {
258258 let txid = toBase58String(i.transactionId)
259259 let checkerDapp = toString(this)
260260 registerEvent(txid, desc, startBlock, endBlock, finishAt, checkerDapp, checkerFunc)
261261 }
262262
263263
264264
265265 @Callable(i)
266266 func choice (eventId,choice) = {
267267 let address = toString(i.caller)
268268 let check = invoke(this, "checkResult", [eventId], nil)
269269 if ((check == check))
270270 then {
271271 let status = getStatus(eventId)
272272 if ((status == "active"))
273273 then if (if ((size(i.payments) == 1))
274274 then (i.payments[0].assetId == USDN)
275275 else false)
276276 then {
277277 let amount = i.payments[0].amount
278278 if ((minAmount > amount))
279279 then throw("amount is less than allowed")
280280 else {
281281 let answersCount = getIntegerValue(this, getAnswersCountKey(eventId))
282282 if (if ((choice == 0))
283283 then true
284284 else (choice > answersCount))
285285 then throw("choice is invalid")
286286 else {
287287 let currentTotal = valueOrElse(getInteger(this, getTotalAmountKey(eventId)), 0)
288288 let choiceTotal = valueOrElse(getInteger(this, getAmountNKey(eventId, choice)), 0)
289289 let choiceCount = valueOrElse(getInteger(this, getCountNKey(eventId, choice)), 0)
290290 [IntegerEntry(getTotalAmountKey(eventId), (currentTotal + amount)), IntegerEntry(getAmountNKey(eventId, choice), (choiceTotal + amount)), IntegerEntry(getCountNKey(eventId, choice), (choiceCount + 1)), IntegerEntry(getChoiceAddressKey(eventId, address), choice), IntegerEntry(getAmountAddressKey(eventId, address), amount)]
291291 }
292292 }
293293 }
294294 else throw("Bad payment")
295295 else throw("You can`t do it")
296296 }
297297 else throw("Strict value is not equal to itself.")
298298 }
299299
300300
301301
302302 @Callable(i)
303303 func claim (eventId) = {
304304 let address = i.caller
305305 let status = getStatus(eventId)
306306 if ((status == "finished"))
307307 then {
308308 let totalAmount = getIntegerValue(this, getTotalAmountKey(eventId))
309309 let alreadyClaimed = valueOrElse(getBoolean(this, getAlreadyClaimedAddressKey(eventId, toString(address))), false)
310310 if (alreadyClaimed)
311311 then throw("Reward already claimed")
312312 else {
313313 let addressChoice = getIntegerValue(this, getChoiceAddressKey(eventId, toString(address)))
314314 let result = getIntegerValue(this, getResultKey(eventId))
315315 let choiceTotal = getIntegerValue(this, getAmountNKey(eventId, result))
316316 let addressAmount = getIntegerValue(this, getAmountAddressKey(eventId, toString(address)))
317317 if ((addressChoice == result))
318318 then {
319319 let addressReward = fraction(totalAmount, addressAmount, choiceTotal)
320320 let fee = fraction(addressReward, feeNumerator, feeDenominator)
321321 let claimedWinners = (valueOrElse(getInteger(this, getClaimedWinnersCountKey(eventId)), 0) + 1)
322322 let choiceCount = getIntegerValue(this, getCountNKey(eventId, result))
323323 if ((claimedWinners == choiceCount))
324324 then [StringEntry(getStatusKey(eventId), "ended"), BooleanEntry(getChoiceAddressKey(eventId, toString(address)), true), IntegerEntry(getClaimedWinnersCountKey(eventId), claimedWinners), ScriptTransfer(address, addressReward, USDN), ScriptTransfer(feeAddress, fee, USDN)]
325325 else [BooleanEntry(getChoiceAddressKey(eventId, toString(address)), true), IntegerEntry(getClaimedWinnersCountKey(eventId), claimedWinners), ScriptTransfer(address, addressReward, USDN), ScriptTransfer(feeAddress, fee, USDN)]
326326 }
327327 else throw("Something went wrong")
328328 }
329329 }
330330 else throw("You can`t do it")
331331 }
332332
333333
334334
335335 @Callable(i)
336336 func checkResult (eventId) = {
337337 let status = getStatus(eventId)
338338 if (if ((status == "active"))
339339 then true
340340 else (status == "wait"))
341341 then {
342342 let checkerDapp = getString(this, getAnswerDappAddressKey(eventId))
343343 let checkerFunc = getString(this, getAnswerFuncAddressKey(eventId))
344344 let currentResult = getIntegerValue(this, getResultKey(eventId))
345345 let answerResult = getAnswerResult(invoke(this, "check", [checkerDapp, checkerFunc], nil))
346346 if ((answerResult == answerResult))
347347 then if ((answerResult != currentResult))
348348 then {
349349 let inv = invoke(this, "changeList", [eventId], nil)
350350 if ((inv == inv))
351351 then [StringEntry(getStatusKey(eventId), "finished"), IntegerEntry(getResultKey(eventId), answerResult)]
352352 else throw("Strict value is not equal to itself.")
353353 }
354354 else if ((i.caller == this))
355355 then nil
356356 else throw()
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else throw("Event not active")
360360 }
361361
362362
363363
364364 @Callable(i)
365365 func changeList (eventId) = if ((this != i.caller))
366366 then throw("only main can do")
367367 else {
368368 let prevEvent = getStringValue(this, getPrevEventKey(eventId))
369369 let nextEvent = getStringValue(this, getNextEventKey(eventId))
370370 if (if ((prevEvent == undefined))
371371 then (nextEvent == undefined)
372372 else false)
373373 then [StringEntry(firstEventKey, undefined), StringEntry(lastEventKey, undefined)]
374374 else if (if ((prevEvent != undefined))
375375 then (nextEvent != undefined)
376376 else false)
377377 then [StringEntry(getPrevEventKey(nextEvent), prevEvent), StringEntry(getNextEventKey(prevEvent), nextEvent)]
378378 else if ((prevEvent != undefined))
379379 then [StringEntry(lastEventKey, prevEvent), StringEntry(getNextEventKey(prevEvent), undefined)]
380380 else [StringEntry(firstEventKey, nextEvent), StringEntry(getPrevEventKey(nextEvent), undefined)]
381381 }
382382
383383
384384
385385 @Callable(i)
386386 func resetList () = if ((this != i.caller))
387387 then throw("only main can do")
388388 else [StringEntry(firstEventKey, undefined), StringEntry(lastEventKey, undefined)]
389389
390390
391391
392392 @Callable(i)
393393 func check (dapp,function) = if ((this != i.caller))
394394 then throw("only main can do")
395395 else {
396396 let answerResult = getAnswerResult(invoke(addressFromStringValue(dapp), function, nil, nil))
397397 $Tuple2(nil, answerResult)
398398 }
399399
400400
401401
402402 @Callable(i)
403403 func checkViresVesting () = if ((this != i.caller))
404404 then throw("only main can do")
405405 else {
406406 let opViresAddress = addressFromStringValue("3P2rJGfb5MbeivZNSqdVmsD1Y2Mz8y6Jr3Z")
407407 let enabled0 = valueOrElse(getBoolean(opViresAddress, "system_paused"), true)
408408 let enabled1 = valueOrElse(getBoolean(opViresAddress, "op_liquidao_all_withdrawVested_paused"), true)
409409 let enabled2 = valueOrElse(getBoolean(opViresAddress, "op_liquidao_all_withdrawVested_usdn_paused"), true)
410410 if (if (if (enabled0)
411411 then enabled1
412412 else false)
413413 then enabled2
414414 else false)
415415 then $Tuple2(nil, 2)
416416 else $Tuple2(nil, 1)
417417 }
418418
419419

github/deemru/w8io/6500d08 
49.98 ms