tx · AYkn12axefTFFN1YpXRJhpvQqEBP71V9Vdph9F6nGRHu

3M7uzD8rT54fKQcP4s417if1VKU8yromEP2:  -0.05500000 Waves

2025.10.15 13:56 [471708] smart account 3M7uzD8rT54fKQcP4s417if1VKU8yromEP2 > SELF 0.00000000 Waves

{ "type": 13, "id": "AYkn12axefTFFN1YpXRJhpvQqEBP71V9Vdph9F6nGRHu", "fee": 5500000, "feeAssetId": null, "timestamp": 1760525798074, "version": 2, "chainId": 82, "sender": "3M7uzD8rT54fKQcP4s417if1VKU8yromEP2", "senderPublicKey": "2eFPamS5zez1159HEFEJaxs2XPq3AupPbNApNGffRjqf", "proofs": [ "4r3XjTB2VgNVH4e3199vUQuDiuGLLo56CDxkkMsn8TvqdseDiUnywS3tvGWXVzyXWSvoeuBqbSp8hJW5dW8Mtje" ], "script": "base64:BgJNCAISBAoCGAESAwoBCBIDCgEIEgMKAQgSAwoBCBIHCgUICAgICBIDCgEIEgMKAQgSCQoHCAgIAQgICBIDCgEIEgMKAQgSAwoBARIAEgANAAdWRVJTSU9OAgUxLjAuMAAFTElNSVQAAgAIa19BRE1JTlMCC0FETUlOU19QQktTAAprX01BTkFHRVJTAg1NQU5BR0VSU19QQktTAAdrX0xJTUlUAgxWT1RFU19RVU9SVU0ADmtfU0NSSVBUX1RZUEVTAgxTQ1JJUFRfVFlQRVMBDF92YWxpZGF0ZVBiawEDcGJrBAdhZGRyZXNzCQCnCAEJANkEAQUDcGJrAwkAAAIFB2FkZHJlc3MFB2FkZHJlc3MECmFkZHJlc3NTdHIJAKUIAQUHYWRkcmVzcwMJAAACBQphZGRyZXNzU3RyBQphZGRyZXNzU3RyBgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEQX3ZhbGlkYXRlQWRkcmVzcwEHYWRkcmVzcwQEYWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwMJAAACBQRhZGRyBQRhZGRyBgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEJX2dldExpbWl0AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB2tfTElNSVQCGFF1b3J1bSBsaW1pdCBub3QgZGVmaW5lZAEIX2lzQWRtaW4BA3BiawQJYWRtaW5zU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFCGtfQURNSU5TAgAEBmFkbWlucwkAtQkCBQlhZG1pbnNTdHICASwJAQIhPQIJAM8IAgUGYWRtaW5zBQNwYmsFBHVuaXQBCl9pc01hbmFnZXIBA3BiawQLbWFuYWdlcnNTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUKa19NQU5BR0VSUwIABAhtYW5hZ2VycwkAtQkCBQttYW5hZ2Vyc1N0cgIBLAkBAiE9AgkAzwgCBQhtYW5hZ2VycwUDcGJrBQR1bml0ARBfaXNWYWxpZE9wZXJhdG9yAQNwYmsEC21hbmFnZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFCmtfTUFOQUdFUlMCAAQIbWFuYWdlcnMJALUJAgULbWFuYWdlcnNTdHICASwEB2lzQWRtaW4JAQhfaXNBZG1pbgEFA3BiawQJaXNNYW5hZ2VyCQEKX2lzTWFuYWdlcgEFA3BiawMFB2lzQWRtaW4GBQlpc01hbmFnZXIBCnNhdmVUeERhdGECBnRhc2tJZARkYXRhBAdpbmRpY2VzCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgUDbmlsBAhkYXRhU2l6ZQkAsQIBBQRkYXRhBAppc05vdEVtcHR5AwkBAiE9AgUIZGF0YVNpemUAAAYJAAIBAh1zYXZlVHhEYXRhOiBFbXB0eSBkYXRhIHBhc3NlZAMJAAACBQppc05vdEVtcHR5BQppc05vdEVtcHR5BAljaHVua1NpemUAsOoBBAtjaHVua3NDb3VudAMJAAACCQBqAgUIZGF0YVNpemUFCWNodW5rU2l6ZQAACQBpAgUIZGF0YVNpemUFCWNodW5rU2l6ZQkAZAIJAGkCBQhkYXRhU2l6ZQUJY2h1bmtTaXplAAEKAQptYWtlQ2h1bmtzAgVhY2N1bQVpbmRleAQFY2h1bmsJAK8CAggFBWFjY3VtAl8xBQljaHVua1NpemUDCQAAAgkAsQIBBQVjaHVuawAABQVhY2N1bQQIbmV4dERhdGEJALACAggFBWFjY3VtAl8xBQljaHVua1NpemUJAJQKAgUIbmV4dERhdGEJAM0IAggFBWFjY3VtAl8yCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGdGFza0lkAglfX3R4ZGF0YV8JAKQDAQUFaW5kZXgFBWNodW5rBAdlbnRyaWVzCgACJGwFB2luZGljZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFBGRhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCD19fdHhkYXRhX2NodW5rcwkApAMBBQtjaHVua3NDb3VudAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQptYWtlQ2h1bmtzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCAUHZW50cmllcwJfMgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLg4BaQEEaW5pdAILYWRtaW5zX3Bia3MFbGltaXQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5TZWxmIGNhbGwgb25seQQLc2l6ZV9hZG1pbnMDCQECIT0CCQCQAwEFC2FkbWluc19wYmtzAAAGCQACAQInQXQgbGVhc3Qgb25lIGFkbWluIHBiayBzaG91bGQgYmUgcGFzc2VkAwkAAAIFC3NpemVfYWRtaW5zBQtzaXplX2FkbWlucwQMY2hlY2tfYWRtaW5zAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBBQhrX0FETUlOUwYJAAIBAg5BbHJlYWR5IGluaXRlZAMJAAACBQxjaGVja19hZG1pbnMFDGNoZWNrX2FkbWlucwQJemVyb0xpbWl0AwkAZgIFBWxpbWl0AAAGCQACAQITTGltaXQgc2hvdWxkIGJlID4gMAMJAAACBQl6ZXJvTGltaXQFCXplcm9MaW1pdAQIbGltaXRfb2sDCQBnAgUFbGltaXQJAJADAQULYWRtaW5zX3Bia3MGCQACAQkArAICCQCsAgIJAKwCAgI5TGltaXQgcXVvcnVtIHNob3VsZCBiZSA8PSBzaXplIG9mIGxpc3Qgb2YgYWRtaW5zLCBsaW1pdDogCQCkAwEFBWxpbWl0AhAsIGN1cnJlbnQgc2l6ZTogCQCkAwEJAJADAQULYWRtaW5zX3Bia3MDCQAAAgUIbGltaXRfb2sFCGxpbWl0X29rCgEIdmFsaWRhdGUCBWFjY3VtBG5leHQJAQxfdmFsaWRhdGVQYmsBBQRuZXh0BAh2YWxpZFJlcwoAAiRsBQthZG1pbnNfcGJrcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIdmFsaWRhdGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUIdmFsaWRSZXMFCHZhbGlkUmVzBAlhZG1pbnNTdHIJALkJAgULYWRtaW5zX3Bia3MCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19BRE1JTlMFCWFkbWluc1N0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHa19MSU1JVAUFbGltaXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhhZGRBZG1pbgEDcGJrBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAdpc0FkbWluAwkBCF9pc0FkbWluAQUJY2FsbGVyUGJrBgkAAgECGU9ubHkgYWRtaW5zIGNhbiBhZGQgYWRtaW4DCQAAAgUHaXNBZG1pbgUHaXNBZG1pbgQHaXNWYWxpZAMJAQxfdmFsaWRhdGVQYmsBBQNwYmsGCQACAQIRSW52YWxpZCBhZG1pbiBwYmsDCQAAAgUHaXNWYWxpZAUHaXNWYWxpZAQMbmV3QWRtaW5zU3RyCQCsAgIJAKwCAgkBEUBleHRyTmF0aXZlKDEwNTgpAQUIa19BRE1JTlMCASwFA3BiawkAzAgCCQELU3RyaW5nRW50cnkCBQhrX0FETUlOUwUMbmV3QWRtaW5zU3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELcmVtb3ZlQWRtaW4BA3BiawQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQQHaXNBZG1pbgMJAQhfaXNBZG1pbgEFCWNhbGxlclBiawYJAAIBAhlPbmx5IGFkbWlucyBjYW4gYWRkIGFkbWluAwkAAAIFB2lzQWRtaW4FB2lzQWRtaW4EB2lzVmFsaWQDCQEMX3ZhbGlkYXRlUGJrAQUDcGJrBgkAAgECEUludmFsaWQgYWRtaW4gcGJrAwkAAAIFB2lzVmFsaWQFB2lzVmFsaWQEDG9sZEFkbWluc1N0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQUIa19BRE1JTlMECW9sZEFkbWlucwkAtQkCBQxvbGRBZG1pbnNTdHICASwECmNoZWNrQ291bnQDCQBnAgABCQCQAwEFCW9sZEFkbWlucwkAAgECL0Nhbm5vdCByZW1vdmUsIGF0IGxlYXN0IG9uZSBhZG1pbiBzaG91bGQgcmVtYWluBgMJAAACBQpjaGVja0NvdW50BQpjaGVja0NvdW50BAVpbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCW9sZEFkbWlucwUDcGJrAhhUaGlzIHBiayBpcyBub3QgYW4gYWRtaW4ECW5ld0FkbWlucwkA0QgCBQlvbGRBZG1pbnMFBWluZGV4BAxuZXdBZG1pbnNTdHIJALkJAgUJbmV3QWRtaW5zAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfQURNSU5TBQxuZXdBZG1pbnNTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1hZGRTY3JpcHRUeXBlAQpzY3JpcHRUeXBlBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5AwkBASEBCQEIX2lzQWRtaW4BBQljYWxsZXJQYmsJAAIBAgtOb3QgYWxsb3dlZAQKY2hlY2tFbXB0eQMJAAACCQCxAgEFCnNjcmlwdFR5cGUAAAkAAgECHFNjcmlwdCB0eXBlIGNhbiBub3QgYmUgZW1wdHkGAwkAAAIFCmNoZWNrRW1wdHkFCmNoZWNrRW1wdHkEDnNjcmlwdFR5cGVzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFDmtfU0NSSVBUX1RZUEVTAgAEC3NjcmlwdFR5cGVzCQC8CQIFDnNjcmlwdFR5cGVzU3RyAgEsBAtjaGVja0V4aXN0cwMJAQIhPQIJAM8IAgULc2NyaXB0VHlwZXMFCnNjcmlwdFR5cGUFBHVuaXQJAAIBCQCsAgIJAKwCAgINU2NyaXB0IHR5cGUgPAUKc2NyaXB0VHlwZQIPPiBhbHJlYWR5IGFkZGVkBgMJAAACBQtjaGVja0V4aXN0cwULY2hlY2tFeGlzdHMEDm5ld1NjcmlwdFR5cGVzAwkBAiE9AgUOc2NyaXB0VHlwZXNTdHICAAkAzQgCBQtzY3JpcHRUeXBlcwUKc2NyaXB0VHlwZQkAzAgCBQpzY3JpcHRUeXBlBQNuaWwEEW5ld1NjcmlwdFR5cGVzU3RyCQC5CQIFDm5ld1NjcmlwdFR5cGVzAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIFDmtfU0NSSVBUX1RZUEVTBRFuZXdTY3JpcHRUeXBlc1N0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEHJlbW92ZVNjcmlwdFR5cGUBCnNjcmlwdFR5cGUECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECC05vdCBhbGxvd2VkBA5zY3JpcHRUeXBlc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQ5rX1NDUklQVF9UWVBFUwIABAtzY3JpcHRUeXBlcwkAvAkCBQ5zY3JpcHRUeXBlc1N0cgIBLAQFaW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQtzY3JpcHRUeXBlcwUKc2NyaXB0VHlwZQkArAICCQCsAgICDVNjcmlwdCB0eXBlIDwFCnNjcmlwdFR5cGUCED4gaXMgbm90IHByZXNlbnQEDm5ld1NjcmlwdFR5cGVzCQDRCAIFC3NjcmlwdFR5cGVzBQVpbmRleAQRbmV3U2NyaXB0VHlwZXNTdHIJALkJAgUObmV3U2NyaXB0VHlwZXMCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUOa19TQ1JJUFRfVFlQRVMFEW5ld1NjcmlwdFR5cGVzU3RyBQNuaWwBaQEJYWRkU2NyaXB0BQpzY3JpcHRUeXBlDnN0b3JhZ2VBZGRyZXNzCnNjcmlwdEhhc2gEZGVzYwxpbml0aWF0b3JBZHIECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJARBfaXNWYWxpZE9wZXJhdG9yAQUJY2FsbGVyUGJrCQACAQILTm90IGFsbG93ZWQEEXN0b3JhZ2VTY3JpcHRIYXNoCQDYBAEJAQV2YWx1ZQEJAPEHAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUOc3RvcmFnZUFkZHJlc3MECWhhc2hDaGVjawMJAQIhPQIFEXN0b3JhZ2VTY3JpcHRIYXNoBQpzY3JpcHRIYXNoCQACAQI0U3RvcmVkIGFuZCBwYXNzZWQgYXMgYXJndW1lbnQgc2NyaXB0SGFzaGVzIG5vdCBtYXRjaAYDCQAAAgUJaGFzaENoZWNrBQloYXNoQ2hlY2sECHNjcmlwdElkCQCsAgIJAKwCAgkArAICAgdzY3JpcHRfBQpzY3JpcHRUeXBlAgFfBQpzY3JpcHRIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUIc2NyaXB0SWQCDF9fc2NyaXB0VHlwZQUKc2NyaXB0VHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCHNjcmlwdElkAhBfX3N0b3JhZ2VBZGRyZXNzBQ5zdG9yYWdlQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCHNjcmlwdElkAgxfX3NjcmlwdEhhc2gFEXN0b3JhZ2VTY3JpcHRIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUIc2NyaXB0SWQCBl9fZGVzYwUEZGVzYwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCHNjcmlwdElkAgtfX2luaXRpYXRvcgUMaW5pdGlhdG9yQWRyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlU2NyaXB0AQhzY3JpcHRJZAQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQkBEF9pc1ZhbGlkT3BlcmF0b3IBBQljYWxsZXJQYmsJAAIBAgtOb3QgYWxsb3dlZAQMaW5pdGlhdG9yQWRyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIFCHNjcmlwdElkAgtfX2luaXRpYXRvcgMJAQIhPQIFDGluaXRpYXRvckFkcgkApQgBCQCnCAEIBQFpD2NhbGxlclB1YmxpY0tleQkAAgECF09ubHkgY3JlYXRvciBjYW4gcmVtb3ZlCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUIc2NyaXB0SWQCDF9fc2NyaXB0VHlwZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFCHNjcmlwdElkAhBfX3N0b3JhZ2VBZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUIc2NyaXB0SWQCDF9fc2NyaXB0SGFzaAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFCHNjcmlwdElkAgZfX2Rlc2MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQhzY3JpcHRJZAILX19pbml0aWF0b3IJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQhzY3JpcHRJZAIPX19jb25maXJtYXRpb25zCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUIc2NyaXB0SWQCCl9fYXBwcm92ZWQFA25pbAFpARVhZGRDb25maXJtYXRpb25TY3JpcHQBCHNjcmlwdElkBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAVsaW1pdAkBCV9nZXRMaW1pdAADCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECF09ubHkgYWRtaW5zIGNhbiBjb25maXJtBAtfc2NyaXB0SGFzaAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgUIc2NyaXB0SWQCDF9fc2NyaXB0SGFzaAIPSXZhbGlkIHNjcmlwdElkAwkAAAIFC19zY3JpcHRIYXNoBQtfc2NyaXB0SGFzaAQKc2NyaXB0VHlwZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICBQhzY3JpcHRJZAIMX19zY3JpcHRUeXBlBBBjb25maXJtYXRpb25zU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJAKwCAgUIc2NyaXB0SWQCD19fY29uZmlybWF0aW9ucwIABA1jb25maXJtYXRpb25zCQC1CQIFEGNvbmZpcm1hdGlvbnNTdHICASwDCQECIT0CCQDPCAIFDWNvbmZpcm1hdGlvbnMFCWNhbGxlclBiawUEdW5pdAkAAgECIVlvdSBhbHJlYWR5IGNvbmZpcm1lZCB0aGlzIHNjcmlwdAQHbmV3TGlzdAMJAQIhPQIFEGNvbmZpcm1hdGlvbnNTdHICAAkAzQgCBQ1jb25maXJtYXRpb25zBQljYWxsZXJQYmsJAMwIAgUJY2FsbGVyUGJrBQNuaWwECm5ld0xpc3RTdHIJALkJAgUHbmV3TGlzdAIBLAQIYXBwcm92ZWQJAGcCCQCQAwEFB25ld0xpc3QFBWxpbWl0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUIc2NyaXB0SWQCD19fY29uZmlybWF0aW9ucwUKbmV3TGlzdFN0cgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgUKc2NyaXB0VHlwZQIBXwULX3NjcmlwdEhhc2gCCl9fYXBwcm92ZWQFCGFwcHJvdmVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHYWRkVGFzawcEbmFtZQRkYXBwBHR4aWQJZXhlY3V0ZVRzBGRlc2MMaW5pdGlhdG9yQWRyBnR4ZGF0YQQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQkBEF9pc1ZhbGlkT3BlcmF0b3IBBQljYWxsZXJQYmsJAAIBAgtOb3QgYWxsb3dlZAQKX25hbWVDaGVjawMJAAACCQCxAgEFBG5hbWUAAAkAAgECE05hbWUgY2FuJ3QgYmUgZW1wdHkGAwkAAAIFCl9uYW1lQ2hlY2sFCl9uYW1lQ2hlY2sECl9kYXBwQ2hlY2sDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUEZGFwcAkAAgECDkluY29ycmVjdCBkYXBwBgMJAAACBQpfZGFwcENoZWNrBQpfZGFwcENoZWNrBApfdHhpZENoZWNrAwkAAAIJALECAQUEdHhpZAAACQACAQITdHhpZCBjYW4ndCBiZSBlbXB0eQYDCQAAAgUKX3R4aWRDaGVjawUKX3R4aWRDaGVjawQGdGFza0lkCQCsAgIJAKwCAgkArAICAgN0eF8FBGRhcHACAV8FBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fbmFtZQUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIGX19kYXBwBQRkYXBwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgZfX3R4SWQFBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fZGVzYwUEZGVzYwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIIX190eGRhdGEFBnR4ZGF0YQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IFDGluaXRpYXRvckFkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZ0YXNrSWQCBF9fdHMFCWV4ZWN1dGVUcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnJlbW92ZVRhc2sBBnRhc2tJZAQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQkBEF9pc1ZhbGlkT3BlcmF0b3IBBQljYWxsZXJQYmsJAAIBAgtOb3QgYWxsb3dlZAQMaW5pdGlhdG9yQWRyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IDCQECIT0CBQxpbml0aWF0b3JBZHIJAKUIAQkApwgBCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAAIBAhdPbmx5IGNyZWF0b3IgY2FuIHJlbW92ZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19uYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAgZfX2RhcHAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBl9fdHhJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19kZXNjCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAghfX3R4ZGF0YQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBF9fdHMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCD19fY29uZmlybWF0aW9ucwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIKX19hcHByb3ZlZAUDbmlsAWkBD2FkZENvbmZpcm1hdGlvbgEGdGFza0lkBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAVsaW1pdAkBCV9nZXRMaW1pdAADCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECF09ubHkgYWRtaW5zIGNhbiBjb25maXJtBAR0eElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICBQZ0YXNrSWQCBl9fdHhJZAILSXZhbGlkIHRhc2sDCQAAAgUEdHhJZAUEdHhJZAQEZGFwcAkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICBQZ0YXNrSWQCBl9fZGFwcAQQY29uZmlybWF0aW9uc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQCsAgIFBnRhc2tJZAIPX19jb25maXJtYXRpb25zAgAEDWNvbmZpcm1hdGlvbnMJALUJAgUQY29uZmlybWF0aW9uc1N0cgIBLAMJAQIhPQIJAM8IAgUNY29uZmlybWF0aW9ucwUJY2FsbGVyUGJrBQR1bml0CQACAQIfWW91IGFscmVhZHkgY29uZmlybWVkIHRoaXMgdGFzawQHbmV3TGlzdAMJAQIhPQIFEGNvbmZpcm1hdGlvbnNTdHICAAkAzQgCBQ1jb25maXJtYXRpb25zBQljYWxsZXJQYmsJAMwIAgUJY2FsbGVyUGJrBQNuaWwECm5ld0xpc3RTdHIJALkJAgUHbmV3TGlzdAIBLAQIYXBwcm92ZWQJAGcCCQCQAwEFB25ld0xpc3QFBWxpbWl0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAg9fX2NvbmZpcm1hdGlvbnMFCm5ld0xpc3RTdHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgkArAICCQCsAgIFBGRhcHACAV8FBHR4SWQCCl9fYXBwcm92ZWQFCGFwcHJvdmVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIc2V0TGltaXQBBWxpbWl0BAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5AwkBASEBCQEIX2lzQWRtaW4BBQljYWxsZXJQYmsJAAIBAh5Pbmx5IHdoaXRlbGlzdGVkIGNhbiBzZXQgbGltaXQECXplcm9MaW1pdAMJAGYCBQVsaW1pdAAABgkAAgECE0xpbWl0IHNob3VsZCBiZSA+IDADCQAAAgUJemVyb0xpbWl0BQl6ZXJvTGltaXQEBmFkbWlucwkBEUBleHRyTmF0aXZlKDEwNTgpAQUIa19BRE1JTlMDCQBmAgUFbGltaXQJALECAQUGYWRtaW5zCQACAQkArAICCQCsAgIJAKwCAgI5TGltaXQgcXVvcnVtIHNob3VsZCBiZSA8PSBzaXplIG9mIGxpc3Qgb2YgYWRtaW5zLCBsaW1pdDogCQCkAwEFBWxpbWl0AhAsIGN1cnJlbnQgc2l6ZTogCQCkAwEJALECAQUGYWRtaW5zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdrX0xJTUlUBQVsaW1pdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBHRlc3QABAF4BAckbWF0Y2gwCQDtBwEFBmhlaWdodAMJAAECBQckbWF0Y2gwAglCbG9ja0luZm8EBWJsb2NrBQckbWF0Y2gwCQACAQkApAMBCAUFYmxvY2sJdGltZXN0YW1wCQACAQIQQ2FuJ3QgZmluZCBibG9jawUDbmlsAWkBCmNsZWFyX3Rlc3QABAdpbmRpY2VzCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgUDbmlsCgEMcmVtb3ZlQ2h1bmtzAgVhY2N1bQVpbmRleAkAzQgCBQVhY2N1bQkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICCHRlc3R0YXNrAglfX3R4ZGF0YV8JAKQDAQUFaW5kZXgEB2VudHJpZXMKAAIkbAUHaW5kaWNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAgh0ZXN0dGFzawIPX190eGRhdGFfY2h1bmtzBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHJlbW92ZUNodW5rcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgUHZW50cmllcwByDIkC", "height": 471708, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: zuPJu1CRT11ox29JkuHRwQwyy35TyEmvPX1irnqsgqB Next: EeiwDbw1odPborAi1gtmUENo9cFXe6bUPB7koFf7bAdc Diff:
OldNewDifferences
1515
1616 func _validatePbk (pbk) = {
1717 let address = addressFromPublicKey(fromBase58String(pbk))
18- let addressStr = toString(address)
19- true
18+ if ((address == address))
19+ then {
20+ let addressStr = toString(address)
21+ if ((addressStr == addressStr))
22+ then true
23+ else throw("Strict value is not equal to itself.")
24+ }
25+ else throw("Strict value is not equal to itself.")
26+ }
27+
28+
29+func _validateAddress (address) = {
30+ let addr = addressFromStringValue(address)
31+ if ((addr == addr))
32+ then true
33+ else throw("Strict value is not equal to itself.")
2034 }
2135
2236
326340 if (!(_isValidOperator(callerPbk)))
327341 then throw("Not allowed")
328342 else {
329- let taskId = ((("tx_" + dapp) + "_") + txid)
343+ let _nameCheck = if ((size(name) == 0))
344+ then throw("Name can't be empty")
345+ else true
346+ if ((_nameCheck == _nameCheck))
347+ then {
348+ let _dappCheck = if (!(_validateAddress(dapp)))
349+ then throw("Incorrect dapp")
350+ else true
351+ if ((_dappCheck == _dappCheck))
352+ then {
353+ let _txidCheck = if ((size(txid) == 0))
354+ then throw("txid can't be empty")
355+ else true
356+ if ((_txidCheck == _txidCheck))
357+ then {
358+ let taskId = ((("tx_" + dapp) + "_") + txid)
330359 [StringEntry((taskId + "__name"), name), StringEntry((taskId + "__dapp"), dapp), StringEntry((taskId + "__txId"), txid), StringEntry((taskId + "__desc"), desc), StringEntry((taskId + "__txdata"), txdata), StringEntry((taskId + "__initiator"), initiatorAdr), IntegerEntry((taskId + "__ts"), executeTs)]
360+ }
361+ else throw("Strict value is not equal to itself.")
362+ }
363+ else throw("Strict value is not equal to itself.")
364+ }
365+ else throw("Strict value is not equal to itself.")
331366 }
332367 }
333368
401436
402437
403438 @Callable(i)
404-func test (pbk) = {
405- let entries = saveTxData("testtask", pbk)
406- entries
439+func test () = {
440+ let x = match blockInfoByHeight(height) {
441+ case block: BlockInfo =>
442+ throw(toString(block.timestamp))
443+ case _ =>
444+ throw("Can't find block")
445+ }
446+ nil
407447 }
408448
409449
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
66 let LIMIT = 2
77
88 let k_ADMINS = "ADMINS_PBKS"
99
1010 let k_MANAGERS = "MANAGERS_PBKS"
1111
1212 let k_LIMIT = "VOTES_QUORUM"
1313
1414 let k_SCRIPT_TYPES = "SCRIPT_TYPES"
1515
1616 func _validatePbk (pbk) = {
1717 let address = addressFromPublicKey(fromBase58String(pbk))
18- let addressStr = toString(address)
19- true
18+ if ((address == address))
19+ then {
20+ let addressStr = toString(address)
21+ if ((addressStr == addressStr))
22+ then true
23+ else throw("Strict value is not equal to itself.")
24+ }
25+ else throw("Strict value is not equal to itself.")
26+ }
27+
28+
29+func _validateAddress (address) = {
30+ let addr = addressFromStringValue(address)
31+ if ((addr == addr))
32+ then true
33+ else throw("Strict value is not equal to itself.")
2034 }
2135
2236
2337 func _getLimit () = valueOrErrorMessage(getInteger(k_LIMIT), "Quorum limit not defined")
2438
2539
2640 func _isAdmin (pbk) = {
2741 let adminsStr = valueOrElse(getString(k_ADMINS), "")
2842 let admins = split(adminsStr, ",")
2943 (indexOf(admins, pbk) != unit)
3044 }
3145
3246
3347 func _isManager (pbk) = {
3448 let managersStr = valueOrElse(getString(k_MANAGERS), "")
3549 let managers = split(managersStr, ",")
3650 (indexOf(managers, pbk) != unit)
3751 }
3852
3953
4054 func _isValidOperator (pbk) = {
4155 let managersStr = valueOrElse(getString(k_MANAGERS), "")
4256 let managers = split(managersStr, ",")
4357 let isAdmin = _isAdmin(pbk)
4458 let isManager = _isManager(pbk)
4559 if (isAdmin)
4660 then true
4761 else isManager
4862 }
4963
5064
5165 func saveTxData (taskId,data) = {
5266 let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5367 let dataSize = size(data)
5468 let isNotEmpty = if ((dataSize != 0))
5569 then true
5670 else throw("saveTxData: Empty data passed")
5771 if ((isNotEmpty == isNotEmpty))
5872 then {
5973 let chunkSize = 30000
6074 let chunksCount = if (((dataSize % chunkSize) == 0))
6175 then (dataSize / chunkSize)
6276 else ((dataSize / chunkSize) + 1)
6377 func makeChunks (accum,index) = {
6478 let chunk = take(accum._1, chunkSize)
6579 if ((size(chunk) == 0))
6680 then accum
6781 else {
6882 let nextData = drop(accum._1, chunkSize)
6983 $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
7084 }
7185 }
7286
7387 let entries = {
7488 let $l = indices
7589 let $s = size($l)
7690 let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
7791 func $f0_1 ($a,$i) = if (($i >= $s))
7892 then $a
7993 else makeChunks($a, $l[$i])
8094
8195 func $f0_2 ($a,$i) = if (($i >= $s))
8296 then $a
8397 else throw("List size exceeds 10")
8498
8599 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
86100 }
87101 entries._2
88102 }
89103 else throw("Strict value is not equal to itself.")
90104 }
91105
92106
93107 @Callable(i)
94108 func init (admins_pbks,limit) = if ((i.caller != this))
95109 then throw("Self call only")
96110 else {
97111 let size_admins = if ((size(admins_pbks) != 0))
98112 then true
99113 else throw("At least one admin pbk should be passed")
100114 if ((size_admins == size_admins))
101115 then {
102116 let check_admins = if (!(isDefined(getString(k_ADMINS))))
103117 then true
104118 else throw("Already inited")
105119 if ((check_admins == check_admins))
106120 then {
107121 let zeroLimit = if ((limit > 0))
108122 then true
109123 else throw("Limit should be > 0")
110124 if ((zeroLimit == zeroLimit))
111125 then {
112126 let limit_ok = if ((limit >= size(admins_pbks)))
113127 then true
114128 else throw(((("Limit quorum should be <= size of list of admins, limit: " + toString(limit)) + ", current size: ") + toString(size(admins_pbks))))
115129 if ((limit_ok == limit_ok))
116130 then {
117131 func validate (accum,next) = _validatePbk(next)
118132
119133 let validRes = {
120134 let $l = admins_pbks
121135 let $s = size($l)
122136 let $acc0 = ""
123137 func $f0_1 ($a,$i) = if (($i >= $s))
124138 then $a
125139 else validate($a, $l[$i])
126140
127141 func $f0_2 ($a,$i) = if (($i >= $s))
128142 then $a
129143 else throw("List size exceeds 10")
130144
131145 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
132146 }
133147 if ((validRes == validRes))
134148 then {
135149 let adminsStr = makeString(admins_pbks, ",")
136150 [StringEntry(k_ADMINS, adminsStr), IntegerEntry(k_LIMIT, limit)]
137151 }
138152 else throw("Strict value is not equal to itself.")
139153 }
140154 else throw("Strict value is not equal to itself.")
141155 }
142156 else throw("Strict value is not equal to itself.")
143157 }
144158 else throw("Strict value is not equal to itself.")
145159 }
146160 else throw("Strict value is not equal to itself.")
147161 }
148162
149163
150164
151165 @Callable(i)
152166 func addAdmin (pbk) = {
153167 let callerPbk = toBase58String(i.callerPublicKey)
154168 let isAdmin = if (_isAdmin(callerPbk))
155169 then true
156170 else throw("Only admins can add admin")
157171 if ((isAdmin == isAdmin))
158172 then {
159173 let isValid = if (_validatePbk(pbk))
160174 then true
161175 else throw("Invalid admin pbk")
162176 if ((isValid == isValid))
163177 then {
164178 let newAdminsStr = ((getStringValue(k_ADMINS) + ",") + pbk)
165179 [StringEntry(k_ADMINS, newAdminsStr)]
166180 }
167181 else throw("Strict value is not equal to itself.")
168182 }
169183 else throw("Strict value is not equal to itself.")
170184 }
171185
172186
173187
174188 @Callable(i)
175189 func removeAdmin (pbk) = {
176190 let callerPbk = toBase58String(i.callerPublicKey)
177191 let isAdmin = if (_isAdmin(callerPbk))
178192 then true
179193 else throw("Only admins can add admin")
180194 if ((isAdmin == isAdmin))
181195 then {
182196 let isValid = if (_validatePbk(pbk))
183197 then true
184198 else throw("Invalid admin pbk")
185199 if ((isValid == isValid))
186200 then {
187201 let oldAdminsStr = getStringValue(k_ADMINS)
188202 let oldAdmins = split(oldAdminsStr, ",")
189203 let checkCount = if ((1 >= size(oldAdmins)))
190204 then throw("Cannot remove, at least one admin should remain")
191205 else true
192206 if ((checkCount == checkCount))
193207 then {
194208 let index = valueOrErrorMessage(indexOf(oldAdmins, pbk), "This pbk is not an admin")
195209 let newAdmins = removeByIndex(oldAdmins, index)
196210 let newAdminsStr = makeString(newAdmins, ",")
197211 [StringEntry(k_ADMINS, newAdminsStr)]
198212 }
199213 else throw("Strict value is not equal to itself.")
200214 }
201215 else throw("Strict value is not equal to itself.")
202216 }
203217 else throw("Strict value is not equal to itself.")
204218 }
205219
206220
207221
208222 @Callable(i)
209223 func addScriptType (scriptType) = {
210224 let callerPbk = toBase58String(i.callerPublicKey)
211225 if (!(_isAdmin(callerPbk)))
212226 then throw("Not allowed")
213227 else {
214228 let checkEmpty = if ((size(scriptType) == 0))
215229 then throw("Script type can not be empty")
216230 else true
217231 if ((checkEmpty == checkEmpty))
218232 then {
219233 let scriptTypesStr = valueOrElse(getString(k_SCRIPT_TYPES), "")
220234 let scriptTypes = split_4C(scriptTypesStr, ",")
221235 let checkExists = if ((indexOf(scriptTypes, scriptType) != unit))
222236 then throw((("Script type <" + scriptType) + "> already added"))
223237 else true
224238 if ((checkExists == checkExists))
225239 then {
226240 let newScriptTypes = if ((scriptTypesStr != ""))
227241 then (scriptTypes :+ scriptType)
228242 else [scriptType]
229243 let newScriptTypesStr = makeString(newScriptTypes, ",")
230244 [StringEntry(k_SCRIPT_TYPES, newScriptTypesStr)]
231245 }
232246 else throw("Strict value is not equal to itself.")
233247 }
234248 else throw("Strict value is not equal to itself.")
235249 }
236250 }
237251
238252
239253
240254 @Callable(i)
241255 func removeScriptType (scriptType) = {
242256 let callerPbk = toBase58String(i.callerPublicKey)
243257 if (!(_isAdmin(callerPbk)))
244258 then throw("Not allowed")
245259 else {
246260 let scriptTypesStr = valueOrElse(getString(k_SCRIPT_TYPES), "")
247261 let scriptTypes = split_4C(scriptTypesStr, ",")
248262 let index = valueOrErrorMessage(indexOf(scriptTypes, scriptType), (("Script type <" + scriptType) + "> is not present"))
249263 let newScriptTypes = removeByIndex(scriptTypes, index)
250264 let newScriptTypesStr = makeString(newScriptTypes, ",")
251265 [StringEntry(k_SCRIPT_TYPES, newScriptTypesStr)]
252266 }
253267 }
254268
255269
256270
257271 @Callable(i)
258272 func addScript (scriptType,storageAddress,scriptHash,desc,initiatorAdr) = {
259273 let callerPbk = toBase58String(i.callerPublicKey)
260274 if (!(_isValidOperator(callerPbk)))
261275 then throw("Not allowed")
262276 else {
263277 let storageScriptHash = toBase58String(value(scriptHash(addressFromStringValue(storageAddress))))
264278 let hashCheck = if ((storageScriptHash != scriptHash))
265279 then throw("Stored and passed as argument scriptHashes not match")
266280 else true
267281 if ((hashCheck == hashCheck))
268282 then {
269283 let scriptId = ((("script_" + scriptType) + "_") + scriptHash)
270284 [StringEntry((scriptId + "__scriptType"), scriptType), StringEntry((scriptId + "__storageAddress"), storageAddress), StringEntry((scriptId + "__scriptHash"), storageScriptHash), StringEntry((scriptId + "__desc"), desc), StringEntry((scriptId + "__initiator"), initiatorAdr)]
271285 }
272286 else throw("Strict value is not equal to itself.")
273287 }
274288 }
275289
276290
277291
278292 @Callable(i)
279293 func removeScript (scriptId) = {
280294 let callerPbk = toBase58String(i.callerPublicKey)
281295 if (!(_isValidOperator(callerPbk)))
282296 then throw("Not allowed")
283297 else {
284298 let initiatorAdr = getStringValue((scriptId + "__initiator"))
285299 if ((initiatorAdr != toString(addressFromPublicKey(i.callerPublicKey))))
286300 then throw("Only creator can remove")
287301 else [DeleteEntry((scriptId + "__scriptType")), DeleteEntry((scriptId + "__storageAddress")), DeleteEntry((scriptId + "__scriptHash")), DeleteEntry((scriptId + "__desc")), DeleteEntry((scriptId + "__initiator")), DeleteEntry((scriptId + "__confirmations")), DeleteEntry((scriptId + "__approved"))]
288302 }
289303 }
290304
291305
292306
293307 @Callable(i)
294308 func addConfirmationScript (scriptId) = {
295309 let callerPbk = toBase58String(i.callerPublicKey)
296310 let limit = _getLimit()
297311 if (!(_isAdmin(callerPbk)))
298312 then throw("Only admins can confirm")
299313 else {
300314 let _scriptHash = valueOrErrorMessage(getString((scriptId + "__scriptHash")), "Ivalid scriptId")
301315 if ((_scriptHash == _scriptHash))
302316 then {
303317 let scriptType = getStringValue((scriptId + "__scriptType"))
304318 let confirmationsStr = valueOrElse(getString((scriptId + "__confirmations")), "")
305319 let confirmations = split(confirmationsStr, ",")
306320 if ((indexOf(confirmations, callerPbk) != unit))
307321 then throw("You already confirmed this script")
308322 else {
309323 let newList = if ((confirmationsStr != ""))
310324 then (confirmations :+ callerPbk)
311325 else [callerPbk]
312326 let newListStr = makeString(newList, ",")
313327 let approved = (size(newList) >= limit)
314328 [StringEntry((scriptId + "__confirmations"), newListStr), BooleanEntry((((scriptType + "_") + _scriptHash) + "__approved"), approved)]
315329 }
316330 }
317331 else throw("Strict value is not equal to itself.")
318332 }
319333 }
320334
321335
322336
323337 @Callable(i)
324338 func addTask (name,dapp,txid,executeTs,desc,initiatorAdr,txdata) = {
325339 let callerPbk = toBase58String(i.callerPublicKey)
326340 if (!(_isValidOperator(callerPbk)))
327341 then throw("Not allowed")
328342 else {
329- let taskId = ((("tx_" + dapp) + "_") + txid)
343+ let _nameCheck = if ((size(name) == 0))
344+ then throw("Name can't be empty")
345+ else true
346+ if ((_nameCheck == _nameCheck))
347+ then {
348+ let _dappCheck = if (!(_validateAddress(dapp)))
349+ then throw("Incorrect dapp")
350+ else true
351+ if ((_dappCheck == _dappCheck))
352+ then {
353+ let _txidCheck = if ((size(txid) == 0))
354+ then throw("txid can't be empty")
355+ else true
356+ if ((_txidCheck == _txidCheck))
357+ then {
358+ let taskId = ((("tx_" + dapp) + "_") + txid)
330359 [StringEntry((taskId + "__name"), name), StringEntry((taskId + "__dapp"), dapp), StringEntry((taskId + "__txId"), txid), StringEntry((taskId + "__desc"), desc), StringEntry((taskId + "__txdata"), txdata), StringEntry((taskId + "__initiator"), initiatorAdr), IntegerEntry((taskId + "__ts"), executeTs)]
360+ }
361+ else throw("Strict value is not equal to itself.")
362+ }
363+ else throw("Strict value is not equal to itself.")
364+ }
365+ else throw("Strict value is not equal to itself.")
331366 }
332367 }
333368
334369
335370
336371 @Callable(i)
337372 func removeTask (taskId) = {
338373 let callerPbk = toBase58String(i.callerPublicKey)
339374 if (!(_isValidOperator(callerPbk)))
340375 then throw("Not allowed")
341376 else {
342377 let initiatorAdr = getStringValue((taskId + "__initiator"))
343378 if ((initiatorAdr != toString(addressFromPublicKey(i.callerPublicKey))))
344379 then throw("Only creator can remove")
345380 else [DeleteEntry((taskId + "__name")), DeleteEntry((taskId + "__dapp")), DeleteEntry((taskId + "__txId")), DeleteEntry((taskId + "__desc")), DeleteEntry((taskId + "__txdata")), DeleteEntry((taskId + "__initiator")), DeleteEntry((taskId + "__ts")), DeleteEntry((taskId + "__confirmations")), DeleteEntry((taskId + "__approved"))]
346381 }
347382 }
348383
349384
350385
351386 @Callable(i)
352387 func addConfirmation (taskId) = {
353388 let callerPbk = toBase58String(i.callerPublicKey)
354389 let limit = _getLimit()
355390 if (!(_isAdmin(callerPbk)))
356391 then throw("Only admins can confirm")
357392 else {
358393 let txId = valueOrErrorMessage(getString((taskId + "__txId")), "Ivalid task")
359394 if ((txId == txId))
360395 then {
361396 let dapp = getStringValue((taskId + "__dapp"))
362397 let confirmationsStr = valueOrElse(getString((taskId + "__confirmations")), "")
363398 let confirmations = split(confirmationsStr, ",")
364399 if ((indexOf(confirmations, callerPbk) != unit))
365400 then throw("You already confirmed this task")
366401 else {
367402 let newList = if ((confirmationsStr != ""))
368403 then (confirmations :+ callerPbk)
369404 else [callerPbk]
370405 let newListStr = makeString(newList, ",")
371406 let approved = (size(newList) >= limit)
372407 [StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
373408 }
374409 }
375410 else throw("Strict value is not equal to itself.")
376411 }
377412 }
378413
379414
380415
381416 @Callable(i)
382417 func setLimit (limit) = {
383418 let callerPbk = toBase58String(i.callerPublicKey)
384419 if (!(_isAdmin(callerPbk)))
385420 then throw("Only whitelisted can set limit")
386421 else {
387422 let zeroLimit = if ((limit > 0))
388423 then true
389424 else throw("Limit should be > 0")
390425 if ((zeroLimit == zeroLimit))
391426 then {
392427 let admins = getStringValue(k_ADMINS)
393428 if ((limit > size(admins)))
394429 then throw(((("Limit quorum should be <= size of list of admins, limit: " + toString(limit)) + ", current size: ") + toString(size(admins))))
395430 else [IntegerEntry(k_LIMIT, limit)]
396431 }
397432 else throw("Strict value is not equal to itself.")
398433 }
399434 }
400435
401436
402437
403438 @Callable(i)
404-func test (pbk) = {
405- let entries = saveTxData("testtask", pbk)
406- entries
439+func test () = {
440+ let x = match blockInfoByHeight(height) {
441+ case block: BlockInfo =>
442+ throw(toString(block.timestamp))
443+ case _ =>
444+ throw("Can't find block")
445+ }
446+ nil
407447 }
408448
409449
410450
411451 @Callable(i)
412452 func clear_test () = {
413453 let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
414454 func removeChunks (accum,index) = (accum :+ DeleteEntry((("testtask" + "__txdata_") + toString(index))))
415455
416456 let entries = {
417457 let $l = indices
418458 let $s = size($l)
419459 let $acc0 = [DeleteEntry(("testtask" + "__txdata_chunks"))]
420460 func $f0_1 ($a,$i) = if (($i >= $s))
421461 then $a
422462 else removeChunks($a, $l[$i])
423463
424464 func $f0_2 ($a,$i) = if (($i >= $s))
425465 then $a
426466 else throw("List size exceeds 10")
427467
428468 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
429469 }
430470 entries
431471 }
432472
433473

github/deemru/w8io
78.28 ms