tx · 3Np9XXsZAAF6myzAQ6XNZwDBDyzkgeJkFxcQXxu5GNrr

3NAnrRUttuM8z2xyQdcZDZ9siKDcExnMD7h:  -0.01400000 Waves

2022.12.06 12:44 [2348319] smart account 3NAnrRUttuM8z2xyQdcZDZ9siKDcExnMD7h > SELF 0.00000000 Waves

{ "type": 13, "id": "3Np9XXsZAAF6myzAQ6XNZwDBDyzkgeJkFxcQXxu5GNrr", "fee": 1400000, "feeAssetId": null, "timestamp": 1670319607205, "version": 2, "chainId": 84, "sender": "3NAnrRUttuM8z2xyQdcZDZ9siKDcExnMD7h", "senderPublicKey": "9N3y4L5Mhfn5nsh2J2sfe2wNG7t8TFXQVHJb1mXXSahb", "proofs": [ "4Mcdk2muKo9JX3PXkuSrHn8CpGnpRmWgHheqeUqXWFm8uQMTbcdCuPC5MbH62ubM979XrSdna7twCHuFrbmJzeV7" ], "script": "base64:BgIjCAISBAoCGAESAwoBCBIDCgEIEgMKAQESBAoCCAgSBAoCCAgIAAlTRVBBUkFUT1ICAl9fAAxLRVlfTVVMVElTSUcCCE1VTFRJU0lHAA9LRVlfUFVCTElDX0tFWVMCC1BVQkxJQ19LRVlTAApLRVlfUVVPUlVNAgZRVU9SVU0AC0tFWV9DT05GSVJNAgdDT05GSVJNAApLRVlfU1RBVFVTAgZTVEFUVVMBEF92YWxpZGF0ZUFkZHJlc3MBCGFkZHJlc3NfBAckbWF0Y2gwCQCmCAEFCGFkZHJlc3NfAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGBwEOX3ZhbGlkYXRlT3duZXICBGFjY18FZWxlbV8DCQAAAgUFZWxlbV8CAAkAAgECDWludmFsaWQgb3duZXIDCQECIT0CCQDIAQEJANkEAQUFZWxlbV8AIAkAAgECGGludmFsaWQgb3duZXIgcHVibGljIGtleQUEYWNjXwYBaQEEaW5pdAIHb3duZXJzXwdxdW9ydW1fBANlcnIDCQEJaXNEZWZpbmVkAQkAoggBBQxLRVlfTVVMVElTSUcJAAIBAhlpbml0OiBhbHJlYWR5IGluaXRpYWxpemVkBQR1bml0AwkAAAIFA2VycgUDZXJyBARlcnIxAwMJAGcCAAAJAJADAQUHb3duZXJzXwYJAGYCCQCQAwEFB293bmVyc18ACgkAAgECFGluaXQ6IGludmFsaWQgb3duZXJzAwMJAGcCAAAFB3F1b3J1bV8GCQBmAgUHcXVvcnVtXwkAkAMBBQdvd25lcnNfCQACAQIUaW5pdDogaW52YWxpZCBxdW9ydW0FBHVuaXQDCQAAAgUEZXJyMQUEZXJyMQQEZXJyMgoAAiRsBQdvd25lcnNfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5fdmFsaWRhdGVPd25lcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACBQRlcnIyBQRlcnIyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHCQClCAEFBHRoaXMJAMwIAgkBC1N0cmluZ0VudHJ5AgUPS0VZX1BVQkxJQ19LRVlTCQC5CQIFB293bmVyc18FCVNFUEFSQVRPUgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKS0VZX1FVT1JVTQUHcXVvcnVtXwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGFkZE93bmVyAQpwdWJsaWNLZXlfBApwdWJsaWNLZXlzCQERQGV4dHJOYXRpdmUoMTA1OCkBBQ9LRVlfUFVCTElDX0tFWVMEDnB1YmxpY0tleXNMaXN0CQC1CQIFCnB1YmxpY0tleXMFCVNFUEFSQVRPUgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECFWFkZE93bmVyOiBub3QgYWxsb3dlZAMJAQIhPQIJAQ5fdmFsaWRhdGVPd25lcgIAAAUKcHVibGljS2V5XwAACQACAQIcYWRkT3duZXI6IGludmFsaWQgcHVibGljIGtleQMJAQ9jb250YWluc0VsZW1lbnQCBQ5wdWJsaWNLZXlzTGlzdAUKcHVibGljS2V5XwkAAgECImFkZE93bmVyOiBwdWJsaWMga2V5IGFscmVhZHkgYWRkZWQDCQAAAgkAkAMBBQ5wdWJsaWNLZXlzTGlzdAAKCQACAQIZYWRkT3duZXI6IHRvbyBtYW55IG93bmVycwQVcHVibGljS2V5c0xpc3RVcGRhdGVkCQDNCAIFDnB1YmxpY0tleXNMaXN0BQpwdWJsaWNLZXlfBBFwdWJsaWNLZXlzVXBkYXRlZAkAzAgCCQELU3RyaW5nRW50cnkCBQ9LRVlfUFVCTElDX0tFWVMJALkJAgUVcHVibGljS2V5c0xpc3RVcGRhdGVkBQlTRVBBUkFUT1IFA25pbAkAlAoCBRFwdWJsaWNLZXlzVXBkYXRlZAUEdW5pdAFpAQtyZW1vdmVPd25lcgEKcHVibGljS2V5XwQGcXVvcnVtCQERQGV4dHJOYXRpdmUoMTA1NSkBBQpLRVlfUVVPUlVNBApwdWJsaWNLZXlzCQERQGV4dHJOYXRpdmUoMTA1OCkBBQ9LRVlfUFVCTElDX0tFWVMEDnB1YmxpY0tleXNMaXN0CQC1CQIFCnB1YmxpY0tleXMFCVNFUEFSQVRPUgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGHJlbW92ZU93bmVyOiBub3QgYWxsb3dlZAMJAAACBQpwdWJsaWNLZXlfAgAJAAIBAh9yZW1vdmVPd25lcjogaW52YWxpZCBwdWJsaWMga2V5AwkAAAIJAJADAQUOcHVibGljS2V5c0xpc3QAAQkAAgECG3JlbW92ZU93bmVyOiB0b28gZmV3IG93bmVycwQFaW5kZXgEByRtYXRjaDAJAM8IAgUOcHVibGljS2V5c0xpc3QFCnB1YmxpY0tleV8DCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhCQACAQIacmVtb3ZlT3duZXI6IG5vIHN1Y2ggb3duZXIEFXB1YmxpY0tleXNMaXN0VXBkYXRlZAkA0QgCBQ5wdWJsaWNLZXlzTGlzdAUFaW5kZXgEEXB1YmxpY0tleXNVcGRhdGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFD0tFWV9QVUJMSUNfS0VZUwkAuQkCBRVwdWJsaWNLZXlzTGlzdFVwZGF0ZWQFCVNFUEFSQVRPUgUDbmlsBA1xdW9ydW1VcGRhdGVkAwkAZgIFBnF1b3J1bQkAkAMBBRVwdWJsaWNLZXlzTGlzdFVwZGF0ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFCktFWV9RVU9SVU0JAJADAQUVcHVibGljS2V5c0xpc3RVcGRhdGVkBQNuaWwFA25pbAkAlAoCCQDOCAIFEXB1YmxpY0tleXNVcGRhdGVkBQ1xdW9ydW1VcGRhdGVkBQR1bml0AWkBCXNldFF1b3J1bQEHcXVvcnVtXwQKcHVibGljS2V5cwkBEUBleHRyTmF0aXZlKDEwNTgpAQUPS0VZX1BVQkxJQ19LRVlTBA5wdWJsaWNLZXlzTGlzdAkAtQkCBQpwdWJsaWNLZXlzBQlTRVBBUkFUT1IDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhZzZXRRdW9ydW06IG5vdCBhbGxvd2VkAwMJAGcCAAAFB3F1b3J1bV8GCQBmAgUHcXVvcnVtXwkAkAMBBQ5wdWJsaWNLZXlzTGlzdAkAAgECGXNldFF1b3J1bTogaW52YWxpZCBxdW9ydW0JAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKS0VZX1FVT1JVTQUHcXVvcnVtXwUDbmlsBQR1bml0AWkBEmNvbmZpcm1UcmFuc2FjdGlvbgIFZGFwcF8FdHhJZF8ED2NhbGxlclB1YmxpY0tleQkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEBnF1b3J1bQkBEUBleHRyTmF0aXZlKDEwNTUpAQUKS0VZX1FVT1JVTQQKcHVibGljS2V5cwkBEUBleHRyTmF0aXZlKDEwNTgpAQUPS0VZX1BVQkxJQ19LRVlTBA5wdWJsaWNLZXlzTGlzdAkAtQkCBQpwdWJsaWNLZXlzBQlTRVBBUkFUT1IEEGNvbmZpcm1hdGlvbnNLZXkJALkJAgkAzAgCBQtLRVlfQ09ORklSTQkAzAgCBQVkYXBwXwkAzAgCBQV0eElkXwUDbmlsBQlTRVBBUkFUT1IEDWNvbmZpcm1hdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAKIIAQUQY29uZmlybWF0aW9uc0tleQIABAlzdGF0dXNLZXkJALkJAgkAzAgCBQpLRVlfU1RBVFVTCQDMCAIFBWRhcHBfCQDMCAIFBXR4SWRfBQNuaWwFCVNFUEFSQVRPUgQDZXJyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUOcHVibGljS2V5c0xpc3QFD2NhbGxlclB1YmxpY0tleQkAAgECHmNvbmZpcm1UcmFuc2FjdGlvbjogb25seSBhZG1pbgMJAQIhPQIJAMgBAQkA2QQBBQV0eElkXwAgCQACAQIgY29uZmlybVRyYW5zYWN0aW9uOiBpbnZhbGlkIHR4SWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUFZGFwcF8JAAIBAihjb25maXJtVHJhbnNhY3Rpb246IGludmFsaWQgZGFwcCBhZGRyZXNzAwkBCGNvbnRhaW5zAgUNY29uZmlybWF0aW9ucwUPY2FsbGVyUHVibGljS2V5CQACAQIlY29uZmlybVRyYW5zYWN0aW9uOiBhbHJlYWR5IGNvbmZpcm1lZAUEdW5pdAMJAAACBQNlcnIFA2VycgQSY29uZmlybWF0aW9uc0NvdW50CQBkAgABAwkAAAIFDWNvbmZpcm1hdGlvbnMCAAAACQCQAwEJALUJAgUNY29uZmlybWF0aW9ucwUJU0VQQVJBVE9SBBRjb25maXJtYXRpb25zVXBkYXRlZAMJAAACBQ1jb25maXJtYXRpb25zAgAFD2NhbGxlclB1YmxpY0tleQkArAICCQCsAgIFDWNvbmZpcm1hdGlvbnMFCVNFUEFSQVRPUgUPY2FsbGVyUHVibGljS2V5CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUQY29uZmlybWF0aW9uc0tleQUUY29uZmlybWF0aW9uc1VwZGF0ZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCXN0YXR1c0tleQkAZwIFEmNvbmZpcm1hdGlvbnNDb3VudAUGcXVvcnVtBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEScmV2b2tlQ29uZmlybWF0aW9uAgVkYXBwXwV0eElkXwQPY2FsbGVyUHVibGljS2V5CQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQQGcXVvcnVtCQERQGV4dHJOYXRpdmUoMTA1NSkBBQpLRVlfUVVPUlVNBApwdWJsaWNLZXlzCQERQGV4dHJOYXRpdmUoMTA1OCkBBQ9LRVlfUFVCTElDX0tFWVMEDnB1YmxpY0tleXNMaXN0CQC1CQIFCnB1YmxpY0tleXMFCVNFUEFSQVRPUgQQY29uZmlybWF0aW9uc0tleQkAuQkCCQDMCAIFC0tFWV9DT05GSVJNCQDMCAIFBWRhcHBfCQDMCAIFBXR4SWRfBQNuaWwFCVNFUEFSQVRPUgQNY29uZmlybWF0aW9ucwkBC3ZhbHVlT3JFbHNlAgkAoggBBRBjb25maXJtYXRpb25zS2V5AgAEEWNvbmZpcm1hdGlvbnNMaXN0CQC1CQIFDWNvbmZpcm1hdGlvbnMFCVNFUEFSQVRPUgQJc3RhdHVzS2V5CQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCBQVkYXBwXwkAzAgCBQV0eElkXwUDbmlsBQlTRVBBUkFUT1IEBnN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAoAgBBQlzdGF0dXNLZXkHBANlcnIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ5wdWJsaWNLZXlzTGlzdAUPY2FsbGVyUHVibGljS2V5CQACAQIecmV2b2tlQ29uZmlybWF0aW9uOiBvbmx5IGFkbWluAwkBAiE9AgkAyAEBCQDZBAEFBXR4SWRfACAJAAIBAiByZXZva2VDb25maXJtYXRpb246IGludmFsaWQgdHhJZAMJAQEhAQkBEF92YWxpZGF0ZUFkZHJlc3MBBQVkYXBwXwkAAgECKHJldm9rZUNvbmZpcm1hdGlvbjogaW52YWxpZCBkYXBwIGFkZHJlc3MDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBRFjb25maXJtYXRpb25zTGlzdAUPY2FsbGVyUHVibGljS2V5CQACAQIhcmV2b2tlQ29uZmlybWF0aW9uOiBub3QgY29uZmlybWVkAwUGc3RhdHVzCQACAQIqcmV2b2tlQ29uZmlybWF0aW9uOiBxdW9ydW0gYWxyZWFkeSByZWFjaGVkBQR1bml0AwkAAAIFA2VycgUDZXJyBBhjb25maXJtYXRpb25zTGlzdFVwZGF0ZWQJANEIAgURY29uZmlybWF0aW9uc0xpc3QJAQV2YWx1ZQEJAM8IAgURY29uZmlybWF0aW9uc0xpc3QFD2NhbGxlclB1YmxpY0tleQQSY29uZmlybWF0aW9uc0NvdW50CQCQAwEFGGNvbmZpcm1hdGlvbnNMaXN0VXBkYXRlZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGNvbmZpcm1hdGlvbnNLZXkJALkJAgUYY29uZmlybWF0aW9uc0xpc3RVcGRhdGVkBQlTRVBBUkFUT1IJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCXN0YXR1c0tleQkAZwIFEmNvbmZpcm1hdGlvbnNDb3VudAUGcXVvcnVtBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tledsxC/w=", "height": 2348319, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BufGtpBmQXbwF79168vLrt8gUWLdKH8HH6NdQkT3Vtah Next: none Diff:
OldNewDifferences
8080 let C = split(B, a)
8181 if ((n.caller != this))
8282 then throw("addOwner: not allowed")
83- else if ((k(0, A) == 0))
83+ else if ((k(0, A) != 0))
8484 then throw("addOwner: invalid public key")
85- else if ((size(C) == 10))
86- then throw("addOwner: too many owners")
87- else {
88- let D = (C :+ A)
89- let E = [StringEntry(c, makeString(D, a))]
90- $Tuple2(E, unit)
91- }
85+ else if (containsElement(C, A))
86+ then throw("addOwner: public key already added")
87+ else if ((size(C) == 10))
88+ then throw("addOwner: too many owners")
89+ else {
90+ let D = (C :+ A)
91+ let E = [StringEntry(c, makeString(D, a))]
92+ $Tuple2(E, unit)
93+ }
9294 }
9395
9496
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = "MULTISIG"
77
88 let c = "PUBLIC_KEYS"
99
1010 let d = "QUORUM"
1111
1212 let e = "CONFIRM"
1313
1414 let f = "STATUS"
1515
1616 func g (h) = {
1717 let i = addressFromString(h)
1818 if ($isInstanceOf(i, "Address"))
1919 then {
2020 let j = i
2121 true
2222 }
2323 else false
2424 }
2525
2626
2727 func k (l,m) = if ((m == ""))
2828 then throw("invalid owner")
2929 else if ((size(fromBase58String(m)) != 32))
3030 then throw("invalid owner public key")
3131 else l
3232
3333
3434 @Callable(n)
3535 func init (o,p) = {
3636 let q = if (isDefined(getString(b)))
3737 then throw("init: already initialized")
3838 else unit
3939 if ((q == q))
4040 then {
4141 let r = if (if ((0 >= size(o)))
4242 then true
4343 else (size(o) > 10))
4444 then throw("init: invalid owners")
4545 else if (if ((0 >= p))
4646 then true
4747 else (p > size(o)))
4848 then throw("init: invalid quorum")
4949 else unit
5050 if ((r == r))
5151 then {
5252 let s = {
5353 let t = o
5454 let u = size(t)
5555 let v = 0
5656 func w (x,y) = if ((y >= u))
5757 then x
5858 else k(x, t[y])
5959
6060 func z (x,y) = if ((y >= u))
6161 then x
6262 else throw("List size exceeds 10")
6363
6464 z(w(w(w(w(w(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
6565 }
6666 if ((s == s))
6767 then $Tuple2([StringEntry(b, toString(this)), StringEntry(c, makeString(o, a)), IntegerEntry(d, p)], unit)
6868 else throw("Strict value is not equal to itself.")
6969 }
7070 else throw("Strict value is not equal to itself.")
7171 }
7272 else throw("Strict value is not equal to itself.")
7373 }
7474
7575
7676
7777 @Callable(n)
7878 func addOwner (A) = {
7979 let B = getStringValue(c)
8080 let C = split(B, a)
8181 if ((n.caller != this))
8282 then throw("addOwner: not allowed")
83- else if ((k(0, A) == 0))
83+ else if ((k(0, A) != 0))
8484 then throw("addOwner: invalid public key")
85- else if ((size(C) == 10))
86- then throw("addOwner: too many owners")
87- else {
88- let D = (C :+ A)
89- let E = [StringEntry(c, makeString(D, a))]
90- $Tuple2(E, unit)
91- }
85+ else if (containsElement(C, A))
86+ then throw("addOwner: public key already added")
87+ else if ((size(C) == 10))
88+ then throw("addOwner: too many owners")
89+ else {
90+ let D = (C :+ A)
91+ let E = [StringEntry(c, makeString(D, a))]
92+ $Tuple2(E, unit)
93+ }
9294 }
9395
9496
9597
9698 @Callable(n)
9799 func removeOwner (A) = {
98100 let F = getIntegerValue(d)
99101 let B = getStringValue(c)
100102 let C = split(B, a)
101103 if ((n.caller != this))
102104 then throw("removeOwner: not allowed")
103105 else if ((A == ""))
104106 then throw("removeOwner: invalid public key")
105107 else if ((size(C) == 1))
106108 then throw("removeOwner: too few owners")
107109 else {
108110 let G = {
109111 let i = indexOf(C, A)
110112 if ($isInstanceOf(i, "Int"))
111113 then {
112114 let j = i
113115 j
114116 }
115117 else throw("removeOwner: no such owner")
116118 }
117119 let D = removeByIndex(C, G)
118120 let E = [StringEntry(c, makeString(D, a))]
119121 let H = if ((F > size(D)))
120122 then [IntegerEntry(d, size(D))]
121123 else nil
122124 $Tuple2((E ++ H), unit)
123125 }
124126 }
125127
126128
127129
128130 @Callable(n)
129131 func setQuorum (p) = {
130132 let B = getStringValue(c)
131133 let C = split(B, a)
132134 if ((n.caller != this))
133135 then throw("setQuorum: not allowed")
134136 else if (if ((0 >= p))
135137 then true
136138 else (p > size(C)))
137139 then throw("setQuorum: invalid quorum")
138140 else $Tuple2([IntegerEntry(d, p)], unit)
139141 }
140142
141143
142144
143145 @Callable(n)
144146 func confirmTransaction (I,J) = {
145147 let K = toBase58String(n.callerPublicKey)
146148 let F = getIntegerValue(d)
147149 let B = getStringValue(c)
148150 let C = split(B, a)
149151 let L = makeString([e, I, J], a)
150152 let M = valueOrElse(getString(L), "")
151153 let N = makeString([f, I, J], a)
152154 let q = if (!(containsElement(C, K)))
153155 then throw("confirmTransaction: only admin")
154156 else if ((size(fromBase58String(J)) != 32))
155157 then throw("confirmTransaction: invalid txId")
156158 else if (!(g(I)))
157159 then throw("confirmTransaction: invalid dapp address")
158160 else if (contains(M, K))
159161 then throw("confirmTransaction: already confirmed")
160162 else unit
161163 if ((q == q))
162164 then {
163165 let O = (1 + (if ((M == ""))
164166 then 0
165167 else size(split(M, a))))
166168 let P = if ((M == ""))
167169 then K
168170 else ((M + a) + K)
169171 $Tuple2([StringEntry(L, P), BooleanEntry(N, (O >= F))], unit)
170172 }
171173 else throw("Strict value is not equal to itself.")
172174 }
173175
174176
175177
176178 @Callable(n)
177179 func revokeConfirmation (I,J) = {
178180 let K = toBase58String(n.callerPublicKey)
179181 let F = getIntegerValue(d)
180182 let B = getStringValue(c)
181183 let C = split(B, a)
182184 let L = makeString([e, I, J], a)
183185 let M = valueOrElse(getString(L), "")
184186 let Q = split(M, a)
185187 let N = makeString([f, I, J], a)
186188 let R = valueOrElse(getBoolean(N), false)
187189 let q = if (!(containsElement(C, K)))
188190 then throw("revokeConfirmation: only admin")
189191 else if ((size(fromBase58String(J)) != 32))
190192 then throw("revokeConfirmation: invalid txId")
191193 else if (!(g(I)))
192194 then throw("revokeConfirmation: invalid dapp address")
193195 else if (!(containsElement(Q, K)))
194196 then throw("revokeConfirmation: not confirmed")
195197 else if (R)
196198 then throw("revokeConfirmation: quorum already reached")
197199 else unit
198200 if ((q == q))
199201 then {
200202 let S = removeByIndex(Q, value(indexOf(Q, K)))
201203 let O = size(S)
202204 $Tuple2([StringEntry(L, makeString(S, a)), BooleanEntry(N, (O >= F))], unit)
203205 }
204206 else throw("Strict value is not equal to itself.")
205207 }
206208
207209
208210 @Verifier(T)
209211 func U () = {
210212 let i = getString(b)
211213 if ($isInstanceOf(i, "String"))
212214 then {
213215 let V = i
214216 valueOrElse(getBoolean(addressFromStringValue(V), makeString([f, toString(this), toBase58String(T.id)], a)), false)
215217 }
216218 else sigVerify(T.bodyBytes, T.proofs[0], T.senderPublicKey)
217219 }
218220

github/deemru/w8io/026f985 
29.50 ms