tx · 8UWhHvVL5jUHyFSxcJrhhvNQEb6uQjvm6pLQJY2m7T5X

3M7uzD8rT54fKQcP4s417if1VKU8yromEP2:  -0.05500000 Waves

2025.10.10 17:04 [430462] smart account 3M7uzD8rT54fKQcP4s417if1VKU8yromEP2 > SELF 0.00000000 Waves

{ "type": 13, "id": "8UWhHvVL5jUHyFSxcJrhhvNQEb6uQjvm6pLQJY2m7T5X", "fee": 5500000, "feeAssetId": null, "timestamp": 1760105042611, "version": 2, "chainId": 82, "sender": "3M7uzD8rT54fKQcP4s417if1VKU8yromEP2", "senderPublicKey": "2eFPamS5zez1159HEFEJaxs2XPq3AupPbNApNGffRjqf", "proofs": [ "2y6kVcWBDuek9mjws6ghwKc2tH7HrrKHCoxSFoNbUzmtwjzHWMqir7do32wcTmL9wVQij8XJLMqJqBpx4qsxgt1F" ], "script": "base64:BgIxCAISBAoCGAESAwoBCBIDCgEIEgkKBwgICAEICAgSAwoBCBIDCgEIEgMKAQESAwoBCAsAB1ZFUlNJT04CBTEuMC4wAAVMSU1JVAACAAhrX0FETUlOUwILQURNSU5TX1BCS1MACmtfTUFOQUdFUlMCDU1BTkFHRVJTX1BCS1MAB2tfTElNSVQCDFZPVEVTX1FVT1JVTQEMX3ZhbGlkYXRlUGJrAQNwYmsEB2FkZHJlc3MJAKcIAQkA2QQBBQNwYmsECmFkZHJlc3NTdHIJAKUIAQUHYWRkcmVzcwYBCV9nZXRMaW1pdAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQdrX0xJTUlUAhhRdW9ydW0gbGltaXQgbm90IGRlZmluZWQBCF9pc0FkbWluAQNwYmsECWFkbWluc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhrX0FETUlOUwIABAZhZG1pbnMJALUJAgUJYWRtaW5zU3RyAgEsCQECIT0CCQDPCAIFBmFkbWlucwUDcGJrBQR1bml0AQpfaXNNYW5hZ2VyAQNwYmsEC21hbmFnZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFCmtfTUFOQUdFUlMCAAQIbWFuYWdlcnMJALUJAgULbWFuYWdlcnNTdHICASwJAQIhPQIJAM8IAgUIbWFuYWdlcnMFA3BiawUEdW5pdAEQX2lzVmFsaWRPcGVyYXRvcgEDcGJrBAttYW5hZ2Vyc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQprX01BTkFHRVJTAgAECG1hbmFnZXJzCQC1CQIFC21hbmFnZXJzU3RyAgEsBAdpc0FkbWluCQEIX2lzQWRtaW4BBQNwYmsECWlzTWFuYWdlcgkBCl9pc01hbmFnZXIBBQNwYmsDBQdpc0FkbWluBgUJaXNNYW5hZ2VyAQpzYXZlVHhEYXRhAgZ0YXNrSWQEZGF0YQQHaW5kaWNlcwkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoFA25pbAQIZGF0YVNpemUJALECAQUEZGF0YQQJY2h1bmtTaXplAAMEC2NodW5rc0NvdW50AwkAAAIJAGoCBQhkYXRhU2l6ZQUJY2h1bmtTaXplAAAJAGkCBQhkYXRhU2l6ZQUJY2h1bmtTaXplCQBkAgkAaQIFCGRhdGFTaXplBQljaHVua1NpemUAAQoBCm1ha2VDaHVua3MCBWFjY3VtBWluZGV4BAVjaHVuawkArwICCAUFYWNjdW0CXzEFCWNodW5rU2l6ZQQIbmV4dERhdGEJALACAggFBWFjY3VtAl8xBQljaHVua1NpemUJAJQKAgUIbmV4dERhdGEJAM0IAggFBWFjY3VtAl8yCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGdGFza0lkAglfX3R4ZGF0YV8JAKQDAQUFaW5kZXgFBWNodW5rBAdlbnRyaWVzCgACJGwFB2luZGljZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFBGRhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCD19fdHhkYXRhX2NodW5rcwkApAMBBQtjaHVua3NDb3VudAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQptYWtlQ2h1bmtzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCAUHZW50cmllcwJfMggBaQEEaW5pdAILYWRtaW5zX3Bia3MFbGltaXQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5TZWxmIGNhbGwgb25seQQLc2l6ZV9hZG1pbnMDCQECIT0CCQCQAwEFC2FkbWluc19wYmtzAAAGCQACAQInQXQgbGVhc3Qgb25lIGFkbWluIHBiayBzaG91bGQgYmUgcGFzc2VkAwkAAAIFC3NpemVfYWRtaW5zBQtzaXplX2FkbWlucwQMY2hlY2tfYWRtaW5zAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBBQhrX0FETUlOUwYJAAIBAg5BbHJlYWR5IGluaXRlZAMJAAACBQxjaGVja19hZG1pbnMFDGNoZWNrX2FkbWlucwQJemVyb0xpbWl0AwkAZgIFBWxpbWl0AAAGCQACAQITTGltaXQgc2hvdWxkIGJlID4gMAMJAAACBQl6ZXJvTGltaXQFCXplcm9MaW1pdAQIbGltaXRfb2sDCQBnAgUFbGltaXQJAJADAQULYWRtaW5zX3Bia3MGCQACAQkArAICCQCsAgIJAKwCAgI5TGltaXQgcXVvcnVtIHNob3VsZCBiZSA8PSBzaXplIG9mIGxpc3Qgb2YgYWRtaW5zLCBsaW1pdDogCQCkAwEFBWxpbWl0AhAsIGN1cnJlbnQgc2l6ZTogCQCkAwEJAJADAQULYWRtaW5zX3Bia3MDCQAAAgUIbGltaXRfb2sFCGxpbWl0X29rCgEIdmFsaWRhdGUCBWFjY3VtBG5leHQJAQxfdmFsaWRhdGVQYmsBBQRuZXh0BAh2YWxpZFJlcwoAAiRsBQthZG1pbnNfcGJrcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIdmFsaWRhdGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUIdmFsaWRSZXMFCHZhbGlkUmVzBAlhZG1pbnNTdHIJALkJAgULYWRtaW5zX3Bia3MCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19BRE1JTlMFCWFkbWluc1N0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHa19MSU1JVAUFbGltaXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhhZGRBZG1pbgEDcGJrBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAdpc0FkbWluAwkBCF9pc0FkbWluAQUJY2FsbGVyUGJrBgkAAgECGU9ubHkgYWRtaW5zIGNhbiBhZGQgYWRtaW4DCQAAAgUHaXNBZG1pbgUHaXNBZG1pbgQHaXNWYWxpZAMJAQxfdmFsaWRhdGVQYmsBBQNwYmsGCQACAQIRSW52YWxpZCBhZG1pbiBwYmsDCQAAAgUHaXNWYWxpZAUHaXNWYWxpZAQMbmV3QWRtaW5zU3RyCQCsAgIJAKwCAgkBEUBleHRyTmF0aXZlKDEwNTgpAQUIa19BRE1JTlMCASwFA3BiawkAzAgCCQELU3RyaW5nRW50cnkCBQhrX0FETUlOUwUMbmV3QWRtaW5zU3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELcmVtb3ZlQWRtaW4BA3BiawQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQQHaXNBZG1pbgMJAQhfaXNBZG1pbgEFCWNhbGxlclBiawYJAAIBAhlPbmx5IGFkbWlucyBjYW4gYWRkIGFkbWluAwkAAAIFB2lzQWRtaW4FB2lzQWRtaW4EB2lzVmFsaWQDCQEMX3ZhbGlkYXRlUGJrAQUDcGJrBgkAAgECEUludmFsaWQgYWRtaW4gcGJrAwkAAAIFB2lzVmFsaWQFB2lzVmFsaWQEDG9sZEFkbWluc1N0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQUIa19BRE1JTlMECW9sZEFkbWlucwkAtQkCBQxvbGRBZG1pbnNTdHICASwEBWluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUJb2xkQWRtaW5zBQNwYmsCGFRoaXMgcGJrIGlzIG5vdCBhbiBhZG1pbgQJbmV3QWRtaW5zCQDRCAIFCW9sZEFkbWlucwUFaW5kZXgEDG5ld0FkbWluc1N0cgkAuQkCBQluZXdBZG1pbnMCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19BRE1JTlMFDG5ld0FkbWluc1N0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2FkZFRhc2sHBG5hbWUEZGFwcAR0eGlkCWV4ZWN1dGVUcwRkZXNjDGluaXRpYXRvckFkcgZ0eGRhdGEECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJARBfaXNWYWxpZE9wZXJhdG9yAQUJY2FsbGVyUGJrCQACAQILTm90IGFsbG93ZWQEBnRhc2tJZAkArAICCQCsAgIFBGRhcHACAV8FBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fbmFtZQUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIGX19kYXBwBQRkYXBwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgZfX3R4SWQFBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fZGVzYwUEZGVzYwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIIX190eGRhdGEFBnR4ZGF0YQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IFDGluaXRpYXRvckFkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZ0YXNrSWQCBF9fdHMFCWV4ZWN1dGVUcwUDbmlsAWkBCnJlbW92ZVRhc2sBBnRhc2tJZAQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQkBEF9pc1ZhbGlkT3BlcmF0b3IBBQljYWxsZXJQYmsJAAIBAgtOb3QgYWxsb3dlZAQMaW5pdGlhdG9yQWRyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IDCQECIT0CBQxpbml0aWF0b3JBZHIJAKUIAQkApwgBCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAAIBAhdPbmx5IGNyZWF0b3IgY2FuIHJlbW92ZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19uYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAgZfX2RhcHAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBl9fdHhJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19kZXNjCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAghfX3R4ZGF0YQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBF9fdHMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCD19fY29uZmlybWF0aW9ucwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIKX19hcHByb3ZlZAUDbmlsAWkBD2FkZENvbmZpcm1hdGlvbgEGdGFza0lkBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAVsaW1pdAkBCV9nZXRMaW1pdAADCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECF09ubHkgYWRtaW5zIGNhbiBjb25maXJtBAR0eElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICBQZ0YXNrSWQCBl9fdHhJZAILSXZhbGlkIHRhc2sDCQAAAgUEdHhJZAUEdHhJZAQEZGFwcAkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICBQZ0YXNrSWQCBl9fZGFwcAQQY29uZmlybWF0aW9uc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQCsAgIFBnRhc2tJZAIPX19jb25maXJtYXRpb25zAgAEDWNvbmZpcm1hdGlvbnMJALUJAgUQY29uZmlybWF0aW9uc1N0cgIBLAMJAQIhPQIJAM8IAgUNY29uZmlybWF0aW9ucwUJY2FsbGVyUGJrBQR1bml0CQACAQIRQWxyZWFkeSBjb25maXJtZWQEB25ld0xpc3QDCQECIT0CBRBjb25maXJtYXRpb25zU3RyAgAJAM0IAgUNY29uZmlybWF0aW9ucwUJY2FsbGVyUGJrCQDMCAIFCWNhbGxlclBiawUDbmlsBApuZXdMaXN0U3RyCQC5CQIFB25ld0xpc3QCASwECGFwcHJvdmVkCQBnAgkAkAMBBQduZXdMaXN0BQVsaW1pdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIPX19jb25maXJtYXRpb25zBQpuZXdMaXN0U3RyCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIJAKwCAgkArAICBQRkYXBwAgFfBQR0eElkAgpfX2FwcHJvdmVkBQhhcHByb3ZlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHNldExpbWl0AQVsaW1pdAQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQkBCF9pc0FkbWluAQUJY2FsbGVyUGJrCQACAQIeT25seSB3aGl0ZWxpc3RlZCBjYW4gc2V0IGxpbWl0BAl6ZXJvTGltaXQDCQBmAgUFbGltaXQAAAYJAAIBAhNMaW1pdCBzaG91bGQgYmUgPiAwAwkAAAIFCXplcm9MaW1pdAUJemVyb0xpbWl0BAZhZG1pbnMJARFAZXh0ck5hdGl2ZSgxMDU4KQEFCGtfQURNSU5TAwkAZgIFBWxpbWl0CQCxAgEFBmFkbWlucwkAAgEJAKwCAgkArAICCQCsAgICOUxpbWl0IHF1b3J1bSBzaG91bGQgYmUgPD0gc2l6ZSBvZiBsaXN0IG9mIGFkbWlucywgbGltaXQ6IAkApAMBBQVsaW1pdAIQLCBjdXJyZW50IHNpemU6IAkApAMBCQCxAgEFBmFkbWlucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUHa19MSU1JVAUFbGltaXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQR0ZXN0AQNwYmsEB2VudHJpZXMJAQpzYXZlVHhEYXRhAgIIdGVzdHRhc2sFA3BiawUHZW50cmllcwA4HiGh", "height": 430462, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J1athssNhLdJkLhijyT9iiLVYUxLE2dRrtnf5Kn6ykiU Next: E5o6QQainrtK1rybrhHhrLnuGTxHiATLa8L1kLVuPgGW Diff:
OldNewDifferences
4747
4848
4949 func saveTxData (taskId,data) = {
50+ let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5051 let dataSize = size(data)
5152 let chunkSize = 3
5253 let chunksCount = if (((dataSize % chunkSize) == 0))
5354 then (dataSize / chunkSize)
5455 else ((dataSize / chunkSize) + 1)
55- func makeIndices (accum,next) = if ((next >= (chunksCount - 1)))
56- then accum
57- else (accum :+ (next + 1))
58-
5956 func makeChunks (accum,index) = {
60- let start = (index * chunkSize)
61- let end = min([(start + chunkSize), dataSize])
62- let chunk = ""
63- (accum :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk))
57+ let chunk = take(accum._1, chunkSize)
58+ let nextData = drop(accum._1, chunkSize)
59+ $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
6460 }
6561
66- let indices = {
67- let $l = [0]
62+ let entries = {
63+ let $l = indices
6864 let $s = size($l)
69- let $acc0 = nil
65+ let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
7066 func $f0_1 ($a,$i) = if (($i >= $s))
7167 then $a
72- else makeIndices($a, $l[$i])
68+ else makeChunks($a, $l[$i])
7369
7470 func $f0_2 ($a,$i) = if (($i >= $s))
7571 then $a
76- else throw("List size exceeds 100")
72+ else throw("List size exceeds 10")
7773
78- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
74+ $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)
7975 }
80- let entries = {
81- let $l = indices
82- let $s = size($l)
83- let $acc0 = [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))]
84- func $f1_1 ($a,$i) = if (($i >= $s))
85- then $a
86- else makeChunks($a, $l[$i])
87-
88- func $f1_2 ($a,$i) = if (($i >= $s))
89- then $a
90- else throw("List size exceeds 100")
91-
92- $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
93- }
94- entries
76+ entries._2
9577 }
9678
9779
284266
285267
286268 @Callable(i)
287-func test (pbk) = throw(take(pbk, 5))
269+func test (pbk) = {
270+ let entries = saveTxData("testtask", pbk)
271+ entries
272+ }
288273
289274
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) = {
50+ let indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5051 let dataSize = size(data)
5152 let chunkSize = 3
5253 let chunksCount = if (((dataSize % chunkSize) == 0))
5354 then (dataSize / chunkSize)
5455 else ((dataSize / chunkSize) + 1)
55- func makeIndices (accum,next) = if ((next >= (chunksCount - 1)))
56- then accum
57- else (accum :+ (next + 1))
58-
5956 func makeChunks (accum,index) = {
60- let start = (index * chunkSize)
61- let end = min([(start + chunkSize), dataSize])
62- let chunk = ""
63- (accum :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk))
57+ let chunk = take(accum._1, chunkSize)
58+ let nextData = drop(accum._1, chunkSize)
59+ $Tuple2(nextData, (accum._2 :+ StringEntry(((taskId + "__txdata_") + toString(index)), chunk)))
6460 }
6561
66- let indices = {
67- let $l = [0]
62+ let entries = {
63+ let $l = indices
6864 let $s = size($l)
69- let $acc0 = nil
65+ let $acc0 = $Tuple2(data, [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))])
7066 func $f0_1 ($a,$i) = if (($i >= $s))
7167 then $a
72- else makeIndices($a, $l[$i])
68+ else makeChunks($a, $l[$i])
7369
7470 func $f0_2 ($a,$i) = if (($i >= $s))
7571 then $a
76- else throw("List size exceeds 100")
72+ else throw("List size exceeds 10")
7773
78- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
74+ $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)
7975 }
80- let entries = {
81- let $l = indices
82- let $s = size($l)
83- let $acc0 = [StringEntry((taskId + "__txdata_chunks"), toString(chunksCount))]
84- func $f1_1 ($a,$i) = if (($i >= $s))
85- then $a
86- else makeChunks($a, $l[$i])
87-
88- func $f1_2 ($a,$i) = if (($i >= $s))
89- then $a
90- else throw("List size exceeds 100")
91-
92- $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
93- }
94- entries
76+ entries._2
9577 }
9678
9779
9880 @Callable(i)
9981 func init (admins_pbks,limit) = if ((i.caller != this))
10082 then throw("Self call only")
10183 else {
10284 let size_admins = if ((size(admins_pbks) != 0))
10385 then true
10486 else throw("At least one admin pbk should be passed")
10587 if ((size_admins == size_admins))
10688 then {
10789 let check_admins = if (!(isDefined(getString(k_ADMINS))))
10890 then true
10991 else throw("Already inited")
11092 if ((check_admins == check_admins))
11193 then {
11294 let zeroLimit = if ((limit > 0))
11395 then true
11496 else throw("Limit should be > 0")
11597 if ((zeroLimit == zeroLimit))
11698 then {
11799 let limit_ok = if ((limit >= size(admins_pbks)))
118100 then true
119101 else throw(((("Limit quorum should be <= size of list of admins, limit: " + toString(limit)) + ", current size: ") + toString(size(admins_pbks))))
120102 if ((limit_ok == limit_ok))
121103 then {
122104 func validate (accum,next) = _validatePbk(next)
123105
124106 let validRes = {
125107 let $l = admins_pbks
126108 let $s = size($l)
127109 let $acc0 = ""
128110 func $f0_1 ($a,$i) = if (($i >= $s))
129111 then $a
130112 else validate($a, $l[$i])
131113
132114 func $f0_2 ($a,$i) = if (($i >= $s))
133115 then $a
134116 else throw("List size exceeds 10")
135117
136118 $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)
137119 }
138120 if ((validRes == validRes))
139121 then {
140122 let adminsStr = makeString(admins_pbks, ",")
141123 [StringEntry(k_ADMINS, adminsStr), IntegerEntry(k_LIMIT, limit)]
142124 }
143125 else throw("Strict value is not equal to itself.")
144126 }
145127 else throw("Strict value is not equal to itself.")
146128 }
147129 else throw("Strict value is not equal to itself.")
148130 }
149131 else throw("Strict value is not equal to itself.")
150132 }
151133 else throw("Strict value is not equal to itself.")
152134 }
153135
154136
155137
156138 @Callable(i)
157139 func addAdmin (pbk) = {
158140 let callerPbk = toBase58String(i.callerPublicKey)
159141 let isAdmin = if (_isAdmin(callerPbk))
160142 then true
161143 else throw("Only admins can add admin")
162144 if ((isAdmin == isAdmin))
163145 then {
164146 let isValid = if (_validatePbk(pbk))
165147 then true
166148 else throw("Invalid admin pbk")
167149 if ((isValid == isValid))
168150 then {
169151 let newAdminsStr = ((getStringValue(k_ADMINS) + ",") + pbk)
170152 [StringEntry(k_ADMINS, newAdminsStr)]
171153 }
172154 else throw("Strict value is not equal to itself.")
173155 }
174156 else throw("Strict value is not equal to itself.")
175157 }
176158
177159
178160
179161 @Callable(i)
180162 func removeAdmin (pbk) = {
181163 let callerPbk = toBase58String(i.callerPublicKey)
182164 let isAdmin = if (_isAdmin(callerPbk))
183165 then true
184166 else throw("Only admins can add admin")
185167 if ((isAdmin == isAdmin))
186168 then {
187169 let isValid = if (_validatePbk(pbk))
188170 then true
189171 else throw("Invalid admin pbk")
190172 if ((isValid == isValid))
191173 then {
192174 let oldAdminsStr = getStringValue(k_ADMINS)
193175 let oldAdmins = split(oldAdminsStr, ",")
194176 let index = valueOrErrorMessage(indexOf(oldAdmins, pbk), "This pbk is not an admin")
195177 let newAdmins = removeByIndex(oldAdmins, index)
196178 let newAdminsStr = makeString(newAdmins, ",")
197179 [StringEntry(k_ADMINS, newAdminsStr)]
198180 }
199181 else throw("Strict value is not equal to itself.")
200182 }
201183 else throw("Strict value is not equal to itself.")
202184 }
203185
204186
205187
206188 @Callable(i)
207189 func addTask (name,dapp,txid,executeTs,desc,initiatorAdr,txdata) = {
208190 let callerPbk = toBase58String(i.callerPublicKey)
209191 if (!(_isValidOperator(callerPbk)))
210192 then throw("Not allowed")
211193 else {
212194 let taskId = ((dapp + "_") + txid)
213195 [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)]
214196 }
215197 }
216198
217199
218200
219201 @Callable(i)
220202 func removeTask (taskId) = {
221203 let callerPbk = toBase58String(i.callerPublicKey)
222204 if (!(_isValidOperator(callerPbk)))
223205 then throw("Not allowed")
224206 else {
225207 let initiatorAdr = getStringValue((taskId + "__initiator"))
226208 if ((initiatorAdr != toString(addressFromPublicKey(i.callerPublicKey))))
227209 then throw("Only creator can remove")
228210 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"))]
229211 }
230212 }
231213
232214
233215
234216 @Callable(i)
235217 func addConfirmation (taskId) = {
236218 let callerPbk = toBase58String(i.callerPublicKey)
237219 let limit = _getLimit()
238220 if (!(_isAdmin(callerPbk)))
239221 then throw("Only admins can confirm")
240222 else {
241223 let txId = valueOrErrorMessage(getString((taskId + "__txId")), "Ivalid task")
242224 if ((txId == txId))
243225 then {
244226 let dapp = getStringValue((taskId + "__dapp"))
245227 let confirmationsStr = valueOrElse(getString((taskId + "__confirmations")), "")
246228 let confirmations = split(confirmationsStr, ",")
247229 if ((indexOf(confirmations, callerPbk) != unit))
248230 then throw("Already confirmed")
249231 else {
250232 let newList = if ((confirmationsStr != ""))
251233 then (confirmations :+ callerPbk)
252234 else [callerPbk]
253235 let newListStr = makeString(newList, ",")
254236 let approved = (size(newList) >= limit)
255237 [StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
256238 }
257239 }
258240 else throw("Strict value is not equal to itself.")
259241 }
260242 }
261243
262244
263245
264246 @Callable(i)
265247 func setLimit (limit) = {
266248 let callerPbk = toBase58String(i.callerPublicKey)
267249 if (!(_isAdmin(callerPbk)))
268250 then throw("Only whitelisted can set limit")
269251 else {
270252 let zeroLimit = if ((limit > 0))
271253 then true
272254 else throw("Limit should be > 0")
273255 if ((zeroLimit == zeroLimit))
274256 then {
275257 let admins = getStringValue(k_ADMINS)
276258 if ((limit > size(admins)))
277259 then throw(((("Limit quorum should be <= size of list of admins, limit: " + toString(limit)) + ", current size: ") + toString(size(admins))))
278260 else [IntegerEntry(k_LIMIT, limit)]
279261 }
280262 else throw("Strict value is not equal to itself.")
281263 }
282264 }
283265
284266
285267
286268 @Callable(i)
287-func test (pbk) = throw(take(pbk, 5))
269+func test (pbk) = {
270+ let entries = saveTxData("testtask", pbk)
271+ entries
272+ }
288273
289274

github/deemru/w8io
37.84 ms