tx · FQC55gLNXqKkYy8dRNqmAfAQnu8GAD1zqPe5M4PyYE3F

3M7uzD8rT54fKQcP4s417if1VKU8yromEP2:  -0.05500000 Waves

2025.10.10 17:19 [430558] smart account 3M7uzD8rT54fKQcP4s417if1VKU8yromEP2 > SELF 0.00000000 Waves

{ "type": 13, "id": "FQC55gLNXqKkYy8dRNqmAfAQnu8GAD1zqPe5M4PyYE3F", "fee": 5500000, "feeAssetId": null, "timestamp": 1760106008376, "version": 2, "chainId": 82, "sender": "3M7uzD8rT54fKQcP4s417if1VKU8yromEP2", "senderPublicKey": "2eFPamS5zez1159HEFEJaxs2XPq3AupPbNApNGffRjqf", "proofs": [ "4SGGRg7fG6LXPYHxGdeRK3kZEW7dNXMd5mYgopnPBfJqFQqXwH7audKqk53E5d8x6edfSfkVkUeswaXZHmoYFH2o" ], "script": "base64:BgIzCAISBAoCGAESAwoBCBIDCgEIEgkKBwgICAEICAgSAwoBCBIDCgEIEgMKAQESAwoBCBIACwAHVkVSU0lPTgIFMS4wLjAABUxJTUlUAAIACGtfQURNSU5TAgtBRE1JTlNfUEJLUwAKa19NQU5BR0VSUwINTUFOQUdFUlNfUEJLUwAHa19MSU1JVAIMVk9URVNfUVVPUlVNAQxfdmFsaWRhdGVQYmsBA3BiawQHYWRkcmVzcwkApwgBCQDZBAEFA3BiawQKYWRkcmVzc1N0cgkApQgBBQdhZGRyZXNzBgEJX2dldExpbWl0AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB2tfTElNSVQCGFF1b3J1bSBsaW1pdCBub3QgZGVmaW5lZAEIX2lzQWRtaW4BA3BiawQJYWRtaW5zU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFCGtfQURNSU5TAgAEBmFkbWlucwkAtQkCBQlhZG1pbnNTdHICASwJAQIhPQIJAM8IAgUGYWRtaW5zBQNwYmsFBHVuaXQBCl9pc01hbmFnZXIBA3BiawQLbWFuYWdlcnNTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUKa19NQU5BR0VSUwIABAhtYW5hZ2VycwkAtQkCBQttYW5hZ2Vyc1N0cgIBLAkBAiE9AgkAzwgCBQhtYW5hZ2VycwUDcGJrBQR1bml0ARBfaXNWYWxpZE9wZXJhdG9yAQNwYmsEC21hbmFnZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFCmtfTUFOQUdFUlMCAAQIbWFuYWdlcnMJALUJAgULbWFuYWdlcnNTdHICASwEB2lzQWRtaW4JAQhfaXNBZG1pbgEFA3BiawQJaXNNYW5hZ2VyCQEKX2lzTWFuYWdlcgEFA3BiawMFB2lzQWRtaW4GBQlpc01hbmFnZXIBCnNhdmVUeERhdGECBnRhc2tJZARkYXRhBAdpbmRpY2VzCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgUDbmlsBAhkYXRhU2l6ZQkAsQIBBQRkYXRhBAppc05vdEVtcHR5AwkBAiE9AgUIZGF0YVNpemUAAAYJAAIBAh1zYXZlVHhEYXRhOiBFbXB0eSBkYXRhIHBhc3NlZAMJAAACBQppc05vdEVtcHR5BQppc05vdEVtcHR5BAljaHVua1NpemUAAwQLY2h1bmtzQ291bnQDCQAAAgkAagIFCGRhdGFTaXplBQljaHVua1NpemUAAAkAaQIFCGRhdGFTaXplBQljaHVua1NpemUJAGQCCQBpAgUIZGF0YVNpemUFCWNodW5rU2l6ZQABCgEKbWFrZUNodW5rcwIFYWNjdW0FaW5kZXgEBWNodW5rCQCvAgIIBQVhY2N1bQJfMQUJY2h1bmtTaXplAwkAAAIJALECAQUFY2h1bmsAAAUFYWNjdW0ECG5leHREYXRhCQCwAgIIBQVhY2N1bQJfMQUJY2h1bmtTaXplCQCUCgIFCG5leHREYXRhCQDNCAIIBQVhY2N1bQJfMgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBnRhc2tJZAIJX190eGRhdGFfCQCkAwEFBWluZGV4BQVjaHVuawQHZW50cmllcwoAAiRsBQdpbmRpY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQRkYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAg9fX3R4ZGF0YV9jaHVua3MJAKQDAQULY2h1bmtzQ291bnQFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbWFrZUNodW5rcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACggFB2VudHJpZXMCXzIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAWkBBGluaXQCC2FkbWluc19wYmtzBWxpbWl0AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIOU2VsZiBjYWxsIG9ubHkEC3NpemVfYWRtaW5zAwkBAiE9AgkAkAMBBQthZG1pbnNfcGJrcwAABgkAAgECJ0F0IGxlYXN0IG9uZSBhZG1pbiBwYmsgc2hvdWxkIGJlIHBhc3NlZAMJAAACBQtzaXplX2FkbWlucwULc2l6ZV9hZG1pbnMEDGNoZWNrX2FkbWlucwMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQUIa19BRE1JTlMGCQACAQIOQWxyZWFkeSBpbml0ZWQDCQAAAgUMY2hlY2tfYWRtaW5zBQxjaGVja19hZG1pbnMECXplcm9MaW1pdAMJAGYCBQVsaW1pdAAABgkAAgECE0xpbWl0IHNob3VsZCBiZSA+IDADCQAAAgUJemVyb0xpbWl0BQl6ZXJvTGltaXQECGxpbWl0X29rAwkAZwIFBWxpbWl0CQCQAwEFC2FkbWluc19wYmtzBgkAAgEJAKwCAgkArAICCQCsAgICOUxpbWl0IHF1b3J1bSBzaG91bGQgYmUgPD0gc2l6ZSBvZiBsaXN0IG9mIGFkbWlucywgbGltaXQ6IAkApAMBBQVsaW1pdAIQLCBjdXJyZW50IHNpemU6IAkApAMBCQCQAwEFC2FkbWluc19wYmtzAwkAAAIFCGxpbWl0X29rBQhsaW1pdF9vawoBCHZhbGlkYXRlAgVhY2N1bQRuZXh0CQEMX3ZhbGlkYXRlUGJrAQUEbmV4dAQIdmFsaWRSZXMKAAIkbAULYWRtaW5zX3Bia3MKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCHZhbGlkYXRlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIFCHZhbGlkUmVzBQh2YWxpZFJlcwQJYWRtaW5zU3RyCQC5CQIFC2FkbWluc19wYmtzAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfQURNSU5TBQlhZG1pbnNTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIFB2tfTElNSVQFBWxpbWl0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIYWRkQWRtaW4BA3BiawQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQQHaXNBZG1pbgMJAQhfaXNBZG1pbgEFCWNhbGxlclBiawYJAAIBAhlPbmx5IGFkbWlucyBjYW4gYWRkIGFkbWluAwkAAAIFB2lzQWRtaW4FB2lzQWRtaW4EB2lzVmFsaWQDCQEMX3ZhbGlkYXRlUGJrAQUDcGJrBgkAAgECEUludmFsaWQgYWRtaW4gcGJrAwkAAAIFB2lzVmFsaWQFB2lzVmFsaWQEDG5ld0FkbWluc1N0cgkArAICCQCsAgIJARFAZXh0ck5hdGl2ZSgxMDU4KQEFCGtfQURNSU5TAgEsBQNwYmsJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19BRE1JTlMFDG5ld0FkbWluc1N0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3JlbW92ZUFkbWluAQNwYmsECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEB2lzQWRtaW4DCQEIX2lzQWRtaW4BBQljYWxsZXJQYmsGCQACAQIZT25seSBhZG1pbnMgY2FuIGFkZCBhZG1pbgMJAAACBQdpc0FkbWluBQdpc0FkbWluBAdpc1ZhbGlkAwkBDF92YWxpZGF0ZVBiawEFA3BiawYJAAIBAhFJbnZhbGlkIGFkbWluIHBiawMJAAACBQdpc1ZhbGlkBQdpc1ZhbGlkBAxvbGRBZG1pbnNTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEFCGtfQURNSU5TBAlvbGRBZG1pbnMJALUJAgUMb2xkQWRtaW5zU3RyAgEsBAVpbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCW9sZEFkbWlucwUDcGJrAhhUaGlzIHBiayBpcyBub3QgYW4gYWRtaW4ECW5ld0FkbWlucwkA0QgCBQlvbGRBZG1pbnMFBWluZGV4BAxuZXdBZG1pbnNTdHIJALkJAgUJbmV3QWRtaW5zAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfQURNSU5TBQxuZXdBZG1pbnNTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdhZGRUYXNrBwRuYW1lBGRhcHAEdHhpZAlleGVjdXRlVHMEZGVzYwxpbml0aWF0b3JBZHIGdHhkYXRhBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5AwkBASEBCQEQX2lzVmFsaWRPcGVyYXRvcgEFCWNhbGxlclBiawkAAgECC05vdCBhbGxvd2VkBAZ0YXNrSWQJAKwCAgkArAICBQRkYXBwAgFfBQR0eGlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgZfX25hbWUFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fZGFwcAUEZGFwcAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIGX190eElkBQR0eGlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgZfX2Rlc2MFBGRlc2MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCCF9fdHhkYXRhBQZ0eGRhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCC19faW5pdGlhdG9yBQxpbml0aWF0b3JBZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUGdGFza0lkAgRfX3RzBQlleGVjdXRlVHMFA25pbAFpAQpyZW1vdmVUYXNrAQZ0YXNrSWQECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJARBfaXNWYWxpZE9wZXJhdG9yAQUJY2FsbGVyUGJrCQACAQILTm90IGFsbG93ZWQEDGluaXRpYXRvckFkcgkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICBQZ0YXNrSWQCC19faW5pdGlhdG9yAwkBAiE9AgUMaW5pdGlhdG9yQWRyCQClCAEJAKcIAQgFAWkPY2FsbGVyUHVibGljS2V5CQACAQIXT25seSBjcmVhdG9yIGNhbiByZW1vdmUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBl9fbmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19kYXBwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAgZfX3R4SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBl9fZGVzYwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIIX190eGRhdGEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCC19faW5pdGlhdG9yCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAgRfX3RzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAg9fX2NvbmZpcm1hdGlvbnMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCCl9fYXBwcm92ZWQFA25pbAFpAQ9hZGRDb25maXJtYXRpb24BBnRhc2tJZAQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQQFbGltaXQJAQlfZ2V0TGltaXQAAwkBASEBCQEIX2lzQWRtaW4BBQljYWxsZXJQYmsJAAIBAhdPbmx5IGFkbWlucyBjYW4gY29uZmlybQQEdHhJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgUGdGFza0lkAgZfX3R4SWQCC0l2YWxpZCB0YXNrAwkAAAIFBHR4SWQFBHR4SWQEBGRhcHAJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgUGdGFza0lkAgZfX2RhcHAEEGNvbmZpcm1hdGlvbnNTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkArAICBQZ0YXNrSWQCD19fY29uZmlybWF0aW9ucwIABA1jb25maXJtYXRpb25zCQC1CQIFEGNvbmZpcm1hdGlvbnNTdHICASwDCQECIT0CCQDPCAIFDWNvbmZpcm1hdGlvbnMFCWNhbGxlclBiawUEdW5pdAkAAgECEUFscmVhZHkgY29uZmlybWVkBAduZXdMaXN0AwkBAiE9AgUQY29uZmlybWF0aW9uc1N0cgIACQDNCAIFDWNvbmZpcm1hdGlvbnMFCWNhbGxlclBiawkAzAgCBQljYWxsZXJQYmsFA25pbAQKbmV3TGlzdFN0cgkAuQkCBQduZXdMaXN0AgEsBAhhcHByb3ZlZAkAZwIJAJADAQUHbmV3TGlzdAUFbGltaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCD19fY29uZmlybWF0aW9ucwUKbmV3TGlzdFN0cgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgUEZGFwcAIBXwUEdHhJZAIKX19hcHByb3ZlZAUIYXBwcm92ZWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhzZXRMaW1pdAEFbGltaXQECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECHk9ubHkgd2hpdGVsaXN0ZWQgY2FuIHNldCBsaW1pdAQJemVyb0xpbWl0AwkAZgIFBWxpbWl0AAAGCQACAQITTGltaXQgc2hvdWxkIGJlID4gMAMJAAACBQl6ZXJvTGltaXQFCXplcm9MaW1pdAQGYWRtaW5zCQERQGV4dHJOYXRpdmUoMTA1OCkBBQhrX0FETUlOUwMJAGYCBQVsaW1pdAkAsQIBBQZhZG1pbnMJAAIBCQCsAgIJAKwCAgkArAICAjlMaW1pdCBxdW9ydW0gc2hvdWxkIGJlIDw9IHNpemUgb2YgbGlzdCBvZiBhZG1pbnMsIGxpbWl0OiAJAKQDAQUFbGltaXQCECwgY3VycmVudCBzaXplOiAJAKQDAQkAsQIBBQZhZG1pbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFB2tfTElNSVQFBWxpbWl0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEdGVzdAEDcGJrBAdlbnRyaWVzCQEKc2F2ZVR4RGF0YQICCHRlc3R0YXNrBQNwYmsFB2VudHJpZXMBaQEKY2xlYXJfdGVzdAAEB2luZGljZXMJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKBQNuaWwKAQxyZW1vdmVDaHVua3MCBWFjY3VtBWluZGV4CQDNCAIFBWFjY3VtCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIIdGVzdHRhc2sCCV9fdHhkYXRhXwkApAMBBQVpbmRleAQHZW50cmllcwoAAiRsBQdpbmRpY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICCHRlc3R0YXNrAg9fX3R4ZGF0YV9jaHVua3MFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMcmVtb3ZlQ2h1bmtzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBQdlbnRyaWVzAKH32Dw=", "height": 430558, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CSyDdJkrgsf5iDzrzCTKaDDsMyiEMe2AzZXWo7JgxfJw Next: EkecdvUDH7fh4Ch433jQT1NyYdfyTVhNcTSXTSuzLSGp Diff:
OldNewDifferences
4949 func saveTxData (taskId,data) = {
5050 let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5151 let dataSize = size(data)
52- let chunkSize = 3
53- let chunksCount = if (((dataSize % chunkSize) == 0))
54- then (dataSize / chunkSize)
55- else ((dataSize / chunkSize) + 1)
56- func makeChunks (accum,index) = {
57- let chunk = take(accum._1, chunkSize)
58- if ((size(chunk) == 0))
59- then accum
60- else {
61- let nextData = drop(accum._1, chunkSize)
62- $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
52+ let isNotEmpty = if ((dataSize != 0))
53+ then true
54+ else throw("saveTxData: Empty data passed")
55+ if ((isNotEmpty == isNotEmpty))
56+ then {
57+ let chunkSize = 3
58+ let chunksCount = if (((dataSize % chunkSize) == 0))
59+ then (dataSize / chunkSize)
60+ else ((dataSize / chunkSize) + 1)
61+ func makeChunks (accum,index) = {
62+ let chunk = take(accum._1, chunkSize)
63+ if ((size(chunk) == 0))
64+ then accum
65+ else {
66+ let nextData = drop(accum._1, chunkSize)
67+ $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
68+ }
6369 }
64- }
6570
66- let entries = {
67- let $l = indices
68- let $s = size($l)
69- let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
70- func $f0_1 ($a,$i) = if (($i >= $s))
71- then $a
72- else makeChunks($a, $l[$i])
71+ let entries = {
72+ let $l = indices
73+ let $s = size($l)
74+ let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
75+ func $f0_1 ($a,$i) = if (($i >= $s))
76+ then $a
77+ else makeChunks($a, $l[$i])
7378
74- func $f0_2 ($a,$i) = if (($i >= $s))
75- then $a
76- else throw("List size exceeds 10")
79+ func $f0_2 ($a,$i) = if (($i >= $s))
80+ then $a
81+ else throw("List size exceeds 10")
7782
78- $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)
79- }
80- entries._2
83+ $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)
84+ }
85+ entries._2
86+ }
87+ else throw("Strict value is not equal to itself.")
8188 }
8289
8390
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 func _validatePbk (pbk) = {
1515 let address = addressFromPublicKey(fromBase58String(pbk))
1616 let addressStr = toString(address)
1717 true
1818 }
1919
2020
2121 func _getLimit () = valueOrErrorMessage(getInteger(k_LIMIT), "Quorum limit not defined")
2222
2323
2424 func _isAdmin (pbk) = {
2525 let adminsStr = valueOrElse(getString(k_ADMINS), "")
2626 let admins = split(adminsStr, ",")
2727 (indexOf(admins, pbk) != unit)
2828 }
2929
3030
3131 func _isManager (pbk) = {
3232 let managersStr = valueOrElse(getString(k_MANAGERS), "")
3333 let managers = split(managersStr, ",")
3434 (indexOf(managers, pbk) != unit)
3535 }
3636
3737
3838 func _isValidOperator (pbk) = {
3939 let managersStr = valueOrElse(getString(k_MANAGERS), "")
4040 let managers = split(managersStr, ",")
4141 let isAdmin = _isAdmin(pbk)
4242 let isManager = _isManager(pbk)
4343 if (isAdmin)
4444 then true
4545 else isManager
4646 }
4747
4848
4949 func saveTxData (taskId,data) = {
5050 let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5151 let dataSize = size(data)
52- let chunkSize = 3
53- let chunksCount = if (((dataSize % chunkSize) == 0))
54- then (dataSize / chunkSize)
55- else ((dataSize / chunkSize) + 1)
56- func makeChunks (accum,index) = {
57- let chunk = take(accum._1, chunkSize)
58- if ((size(chunk) == 0))
59- then accum
60- else {
61- let nextData = drop(accum._1, chunkSize)
62- $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
52+ let isNotEmpty = if ((dataSize != 0))
53+ then true
54+ else throw("saveTxData: Empty data passed")
55+ if ((isNotEmpty == isNotEmpty))
56+ then {
57+ let chunkSize = 3
58+ let chunksCount = if (((dataSize % chunkSize) == 0))
59+ then (dataSize / chunkSize)
60+ else ((dataSize / chunkSize) + 1)
61+ func makeChunks (accum,index) = {
62+ let chunk = take(accum._1, chunkSize)
63+ if ((size(chunk) == 0))
64+ then accum
65+ else {
66+ let nextData = drop(accum._1, chunkSize)
67+ $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
68+ }
6369 }
64- }
6570
66- let entries = {
67- let $l = indices
68- let $s = size($l)
69- let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
70- func $f0_1 ($a,$i) = if (($i >= $s))
71- then $a
72- else makeChunks($a, $l[$i])
71+ let entries = {
72+ let $l = indices
73+ let $s = size($l)
74+ let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
75+ func $f0_1 ($a,$i) = if (($i >= $s))
76+ then $a
77+ else makeChunks($a, $l[$i])
7378
74- func $f0_2 ($a,$i) = if (($i >= $s))
75- then $a
76- else throw("List size exceeds 10")
79+ func $f0_2 ($a,$i) = if (($i >= $s))
80+ then $a
81+ else throw("List size exceeds 10")
7782
78- $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)
79- }
80- entries._2
83+ $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)
84+ }
85+ entries._2
86+ }
87+ else throw("Strict value is not equal to itself.")
8188 }
8289
8390
8491 @Callable(i)
8592 func init (admins_pbks,limit) = if ((i.caller != this))
8693 then throw("Self call only")
8794 else {
8895 let size_admins = if ((size(admins_pbks) != 0))
8996 then true
9097 else throw("At least one admin pbk should be passed")
9198 if ((size_admins == size_admins))
9299 then {
93100 let check_admins = if (!(isDefined(getString(k_ADMINS))))
94101 then true
95102 else throw("Already inited")
96103 if ((check_admins == check_admins))
97104 then {
98105 let zeroLimit = if ((limit > 0))
99106 then true
100107 else throw("Limit should be > 0")
101108 if ((zeroLimit == zeroLimit))
102109 then {
103110 let limit_ok = if ((limit >= size(admins_pbks)))
104111 then true
105112 else throw(((("Limit quorum should be <= size of list of admins, limit: " + toString(limit)) + ", current size: ") + toString(size(admins_pbks))))
106113 if ((limit_ok == limit_ok))
107114 then {
108115 func validate (accum,next) = _validatePbk(next)
109116
110117 let validRes = {
111118 let $l = admins_pbks
112119 let $s = size($l)
113120 let $acc0 = ""
114121 func $f0_1 ($a,$i) = if (($i >= $s))
115122 then $a
116123 else validate($a, $l[$i])
117124
118125 func $f0_2 ($a,$i) = if (($i >= $s))
119126 then $a
120127 else throw("List size exceeds 10")
121128
122129 $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)
123130 }
124131 if ((validRes == validRes))
125132 then {
126133 let adminsStr = makeString(admins_pbks, ",")
127134 [StringEntry(k_ADMINS, adminsStr), IntegerEntry(k_LIMIT, limit)]
128135 }
129136 else throw("Strict value is not equal to itself.")
130137 }
131138 else throw("Strict value is not equal to itself.")
132139 }
133140 else throw("Strict value is not equal to itself.")
134141 }
135142 else throw("Strict value is not equal to itself.")
136143 }
137144 else throw("Strict value is not equal to itself.")
138145 }
139146
140147
141148
142149 @Callable(i)
143150 func addAdmin (pbk) = {
144151 let callerPbk = toBase58String(i.callerPublicKey)
145152 let isAdmin = if (_isAdmin(callerPbk))
146153 then true
147154 else throw("Only admins can add admin")
148155 if ((isAdmin == isAdmin))
149156 then {
150157 let isValid = if (_validatePbk(pbk))
151158 then true
152159 else throw("Invalid admin pbk")
153160 if ((isValid == isValid))
154161 then {
155162 let newAdminsStr = ((getStringValue(k_ADMINS) + ",") + pbk)
156163 [StringEntry(k_ADMINS, newAdminsStr)]
157164 }
158165 else throw("Strict value is not equal to itself.")
159166 }
160167 else throw("Strict value is not equal to itself.")
161168 }
162169
163170
164171
165172 @Callable(i)
166173 func removeAdmin (pbk) = {
167174 let callerPbk = toBase58String(i.callerPublicKey)
168175 let isAdmin = if (_isAdmin(callerPbk))
169176 then true
170177 else throw("Only admins can add admin")
171178 if ((isAdmin == isAdmin))
172179 then {
173180 let isValid = if (_validatePbk(pbk))
174181 then true
175182 else throw("Invalid admin pbk")
176183 if ((isValid == isValid))
177184 then {
178185 let oldAdminsStr = getStringValue(k_ADMINS)
179186 let oldAdmins = split(oldAdminsStr, ",")
180187 let index = valueOrErrorMessage(indexOf(oldAdmins, pbk), "This pbk is not an admin")
181188 let newAdmins = removeByIndex(oldAdmins, index)
182189 let newAdminsStr = makeString(newAdmins, ",")
183190 [StringEntry(k_ADMINS, newAdminsStr)]
184191 }
185192 else throw("Strict value is not equal to itself.")
186193 }
187194 else throw("Strict value is not equal to itself.")
188195 }
189196
190197
191198
192199 @Callable(i)
193200 func addTask (name,dapp,txid,executeTs,desc,initiatorAdr,txdata) = {
194201 let callerPbk = toBase58String(i.callerPublicKey)
195202 if (!(_isValidOperator(callerPbk)))
196203 then throw("Not allowed")
197204 else {
198205 let taskId = ((dapp + "_") + txid)
199206 [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)]
200207 }
201208 }
202209
203210
204211
205212 @Callable(i)
206213 func removeTask (taskId) = {
207214 let callerPbk = toBase58String(i.callerPublicKey)
208215 if (!(_isValidOperator(callerPbk)))
209216 then throw("Not allowed")
210217 else {
211218 let initiatorAdr = getStringValue((taskId + "__initiator"))
212219 if ((initiatorAdr != toString(addressFromPublicKey(i.callerPublicKey))))
213220 then throw("Only creator can remove")
214221 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"))]
215222 }
216223 }
217224
218225
219226
220227 @Callable(i)
221228 func addConfirmation (taskId) = {
222229 let callerPbk = toBase58String(i.callerPublicKey)
223230 let limit = _getLimit()
224231 if (!(_isAdmin(callerPbk)))
225232 then throw("Only admins can confirm")
226233 else {
227234 let txId = valueOrErrorMessage(getString((taskId + "__txId")), "Ivalid task")
228235 if ((txId == txId))
229236 then {
230237 let dapp = getStringValue((taskId + "__dapp"))
231238 let confirmationsStr = valueOrElse(getString((taskId + "__confirmations")), "")
232239 let confirmations = split(confirmationsStr, ",")
233240 if ((indexOf(confirmations, callerPbk) != unit))
234241 then throw("Already confirmed")
235242 else {
236243 let newList = if ((confirmationsStr != ""))
237244 then (confirmations :+ callerPbk)
238245 else [callerPbk]
239246 let newListStr = makeString(newList, ",")
240247 let approved = (size(newList) >= limit)
241248 [StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
242249 }
243250 }
244251 else throw("Strict value is not equal to itself.")
245252 }
246253 }
247254
248255
249256
250257 @Callable(i)
251258 func setLimit (limit) = {
252259 let callerPbk = toBase58String(i.callerPublicKey)
253260 if (!(_isAdmin(callerPbk)))
254261 then throw("Only whitelisted can set limit")
255262 else {
256263 let zeroLimit = if ((limit > 0))
257264 then true
258265 else throw("Limit should be > 0")
259266 if ((zeroLimit == zeroLimit))
260267 then {
261268 let admins = getStringValue(k_ADMINS)
262269 if ((limit > size(admins)))
263270 then throw(((("Limit quorum should be <= size of list of admins, limit: " + toString(limit)) + ", current size: ") + toString(size(admins))))
264271 else [IntegerEntry(k_LIMIT, limit)]
265272 }
266273 else throw("Strict value is not equal to itself.")
267274 }
268275 }
269276
270277
271278
272279 @Callable(i)
273280 func test (pbk) = {
274281 let entries = saveTxData("testtask", pbk)
275282 entries
276283 }
277284
278285
279286
280287 @Callable(i)
281288 func clear_test () = {
282289 let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
283290 func removeChunks (accum,index) = (accum :+ DeleteEntry((("testtask" + "__txdata_") + toString(index))))
284291
285292 let entries = {
286293 let $l = indices
287294 let $s = size($l)
288295 let $acc0 = [DeleteEntry(("testtask" + "__txdata_chunks"))]
289296 func $f0_1 ($a,$i) = if (($i >= $s))
290297 then $a
291298 else removeChunks($a, $l[$i])
292299
293300 func $f0_2 ($a,$i) = if (($i >= $s))
294301 then $a
295302 else throw("List size exceeds 10")
296303
297304 $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)
298305 }
299306 entries
300307 }
301308
302309

github/deemru/w8io
43.06 ms