tx · Ddeeor5SDGD6B2nPC1pVpLBz5FW7grpWRMMNyXHCbEce 3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz: -0.01000000 Waves 2022.10.11 11:44 [2267459] smart account 3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz > SELF 0.00000000 Waves
{ "type": 13, "id": "Ddeeor5SDGD6B2nPC1pVpLBz5FW7grpWRMMNyXHCbEce", "fee": 1000000, "feeAssetId": null, "timestamp": 1665477875546, "version": 2, "chainId": 84, "sender": "3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz", "senderPublicKey": "C3v9sfZTmGuW7YXwjUKypU41QpFcHCoJxLpvdR4d3iSv", "proofs": [ "f64VcgyGiviD1cjbujJqiMUpXe6zELEh33YHtGVWpb7Y7e2aGFB3H4zBmGEipmTze3PwSDQ6r5KZxSNqXUqR1wm" ], "script": "base64:BgIfCAISABIECgIICBIECgIICBIDCgEEEgMKAQgSAwoBCBEAD2tQcmVmaXhQb29sTmFtZQIFcG9vbF8ABWtQYWlyAgVwYWlyXwAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQAH2tMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMCIWxhdW5jaHBhZF9kYXRhX3RyYW5zYWN0aW9uX3N0YXR1cwANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABRrQWNoaWV2ZW1lbnRzV3JpdGVycwIUYWNoaWV2ZW1lbnRzX3dyaXRlcnMADGFkbWluUHViS2V5MQEg4qeMQDuGzRfmtEuH2+Whg6yuKqHsNy5eZQUT8rXs7wQADGFkbWluUHViS2V5MgEg6jisuQG1iDxyo54oPYHUGiJlERON346DjXz9V/GbEVkADGFkbWluUHViS2V5MwEgpzSWgrCjycddMmIBfztFJ08z6r82xAHPELd0cKonzG4AEWFkbWluUHViS2V5SW52b2tlASAEz3XlZNDBD05nuR8TZMQaDeqEJEIxfTOQXUBYCp2TSgEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAi9Pbmx5IHRoZSBPcmFjbGUgaXRzZWxmIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbgELZ2V0UG9vbFR5cGUBC3Bvb2xBZGRyZXNzBAd2ZXJzaW9uCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgULcG9vbEFkZHJlc3MCB3ZlcnNpb24CF1Bvb2wgaXMgbm90IGluaXRpYWxpemVkAwkAAAIFB3ZlcnNpb24CBTEuMC4wAgRjcG1tAwkAAAIFB3ZlcnNpb24CBTIuMC4wAgRmbGF0AwkAAAIFB3ZlcnNpb24CBTMuMC4wAgptdWx0eWN1cnZlCQACAQIXVW5rbm93biB2ZXJzaW9uIG9mIHBvb2wBEWdldEFkZHJlc3NJZlZhbGlkAQdhZGRyZXNzCQClCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdhZGRyZXNzCQCsAgIJAKwCAgINQ2FuJ3QgcGFyc2UgIgUHYWRkcmVzcwIMIiBhcyBhZGRyZXNzBgFpAQhzZXRBZG1pbgAJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rQWRtaW5QdWJLZXkxCQDYBAEFDGFkbWluUHViS2V5MQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rQWRtaW5QdWJLZXkyCQDYBAEFDGFkbWluUHViS2V5MgkAzAgCCQELU3RyaW5nRW50cnkCBQ1rQWRtaW5QdWJLZXkzCQDYBAEFDGFkbWluUHViS2V5MwkAzAgCCQELU3RyaW5nRW50cnkCBRJrQWRtaW5JbnZva2VQdWJLZXkJANgEAQURYWRtaW5QdWJLZXlJbnZva2UFA25pbAFpAQdhZGRQb29sAgtwb29sQWRkcmVzcwhwb29sTmFtZQkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBBB2YWxpZGF0ZWRBZGRyZXNzCQERZ2V0QWRkcmVzc0lmVmFsaWQBBQtwb29sQWRkcmVzcwQHa2V5TmFtZQkArAICBQ9rUHJlZml4UG9vbE5hbWUFEHZhbGlkYXRlZEFkZHJlc3MEGHBvc3NpYmx5QWxyZWFkeUFkZGVkUG9vbAkAnQgCBQR0aGlzBQdrZXlOYW1lAwkBCWlzRGVmaW5lZAEFGHBvc3NpYmx5QWxyZWFkeUFkZGVkUG9vbAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgITUG9vbCB3aXRoIGFkZHJlc3MgIgUQdmFsaWRhdGVkQWRkcmVzcwIgIiBpcyBhbHJlYWR5IGRlZmluZWQgd2l0aCBuYW1lICIJAQV2YWx1ZQEFGHBvc3NpYmx5QWxyZWFkeUFkZGVkUG9vbAIBIgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tleU5hbWUFCHBvb2xOYW1lBQNuaWwDCQAAAgkBC2dldFBvb2xUeXBlAQkBBXZhbHVlAQkApggBBQtwb29sQWRkcmVzcwIKbXVsdHljdXJ2ZQUDbmlsBAhhc3NldElkQQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQV2YWx1ZQEJAKYIAQULcG9vbEFkZHJlc3MFCWtBc3NldElkQQIXQXNzZXQgaWQgQSBpcyBpbmNvcnJlY3QECGFzc2V0SWRCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBBXZhbHVlAQkApggBBQtwb29sQWRkcmVzcwUJa0Fzc2V0SWRCAhdBc3NldCBpZCBCIGlzIGluY29ycmVjdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQVrUGFpcgUIYXNzZXRJZEECAV8FCGFzc2V0SWRCBQtwb29sQWRkcmVzcwUDbmlsAWkBCnJlbmFtZVBvb2wCC3Bvb2xBZGRyZXNzC25ld1Bvb2xOYW1lCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEEHZhbGlkYXRlZEFkZHJlc3MJARFnZXRBZGRyZXNzSWZWYWxpZAEFC3Bvb2xBZGRyZXNzBAdrZXlOYW1lCQCsAgIFD2tQcmVmaXhQb29sTmFtZQUQdmFsaWRhdGVkQWRkcmVzcwQYcG9zc2libHlBbHJlYWR5QWRkZWRQb29sCQCdCAIFBHRoaXMFB2tleU5hbWUDCQEJaXNEZWZpbmVkAQUYcG9zc2libHlBbHJlYWR5QWRkZWRQb29sCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tleU5hbWUFC25ld1Bvb2xOYW1lBQNuaWwJAAIBCQCsAgIJAKwCAgITUG9vbCB3aXRoIGFkZHJlc3MgIgUQdmFsaWRhdGVkQWRkcmVzcwIYIiBoYXMgbm90IHlldCBiZWVuIGFkZGVkAWkBHmxhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cwEGc3RhdHVzCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkJAMwIAgkBDEJvb2xlYW5FbnRyeQIFH2tMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMFBnN0YXR1cwUDbmlsAWkBFWFkZEFjaGlldmVtZW50c1dyaXRlcgEHYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAd3cml0ZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFFGtBY2hpZXZlbWVudHNXcml0ZXJzAgAEBGRhdGEDCQAAAgUHd3JpdGVycwIABQNuaWwJALUJAgUHd3JpdGVycwIBLAkAzAgCCQELU3RyaW5nRW50cnkCBRRrQWNoaWV2ZW1lbnRzV3JpdGVycwkAuQkCCQDNCAIFBGRhdGEFB2FkZHJlc3MCASwFA25pbAFpARhyZW1vdmVBY2hpZXZlbWVudHNXcml0ZXIBB2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQHd3JpdGVycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFFGtBY2hpZXZlbWVudHNXcml0ZXJzAgACASwEBWluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUHd3JpdGVycwUHYWRkcmVzcwIeQ2FuJ3QgZmluZCBhZGRyZXNzIGluIHRoZSBsaXN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtBY2hpZXZlbWVudHNXcml0ZXJzCQC5CQIJANEIAgUHd3JpdGVycwUFaW5kZXgCASwFA25pbAECdHgBBnZlcmlmeQAEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAEDXNpZ25lZEJ5QWRtaW4JAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQac2lnbmVkQnlBZG1pblRvQ2FsbEFkZFBvb2wJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAQQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQWaXNTZWxmSW52b2tlUmVuYW1lUG9vbAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICCnJlbmFtZVBvb2wFA25pbAgFA2ludghmdW5jdGlvbgcEFGlzU2VsZkludm9rZVNldEFkbWluAwkAAAIIBQNpbnYEZEFwcAUEdGhpcwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIIc2V0QWRtaW4FA25pbAgFA2ludghmdW5jdGlvbgcEE2lzU2VsZkludm9rZUFkZFBvb2wDCQAAAggFA2ludgRkQXBwBQR0aGlzCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAgdhZGRQb29sBQNuaWwIBQNpbnYIZnVuY3Rpb24HBCFpc1NlbGZJbnZva2VMYXVuY2hwYWREYXRhVHhTdGF0dXMDCQAAAggFA2ludgRkQXBwBQR0aGlzCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAh5sYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMFA25pbAgFA2ludghmdW5jdGlvbgcEIWlzU2VsZkludm9rZUFkZEFjaGlldmVtZW50c1dyaXRlcgMJAAACCAUDaW52BGRBcHAFBHRoaXMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICFWFkZEFjaGlldmVtZW50c1dyaXRlcgUDbmlsCAUDaW52CGZ1bmN0aW9uBwQkaXNTZWxmSW52b2tlUmVtb3ZlQWNoaWV2ZW1lbnRzV3JpdGVyAwkAAAIIBQNpbnYEZEFwcAUEdGhpcwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIYcmVtb3ZlQWNoaWV2ZW1lbnRzV3JpdGVyBQNuaWwIBQNpbnYIZnVuY3Rpb24HAwMDAwMDAwUNc2lnbmVkQnlBZG1pbgkAAAIJAJADAQgFA2ludghwYXltZW50cwAABwUWaXNTZWxmSW52b2tlUmVuYW1lUG9vbAcGAwMFGnNpZ25lZEJ5QWRtaW5Ub0NhbGxBZGRQb29sCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAAHBRNpc1NlbGZJbnZva2VBZGRQb29sBwYDAwUNc2lnbmVkQnlBZG1pbgkAAAIJAJADAQgFA2ludghwYXltZW50cwAABwUUaXNTZWxmSW52b2tlU2V0QWRtaW4HBgMDBQ1zaWduZWRCeUFkbWluCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAAHBSFpc1NlbGZJbnZva2VMYXVuY2hwYWREYXRhVHhTdGF0dXMHBgMDBQ1zaWduZWRCeUFkbWluCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAAHBSFpc1NlbGZJbnZva2VBZGRBY2hpZXZlbWVudHNXcml0ZXIHBgMDBQ1zaWduZWRCeUFkbWluCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAAHBSRpc1NlbGZJbnZva2VSZW1vdmVBY2hpZXZlbWVudHNXcml0ZXIHAwMJAAECBQckbWF0Y2gwAgVPcmRlcgYDCQABAgUHJG1hdGNoMAIPRGF0YVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhVTcG9uc29yRmVlVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhZDcmVhdGVBbGlhc1RyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhZMZWFzZUNhbmNlbFRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhBMZWFzZVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhBJc3N1ZVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhtJbnZva2VFeHByZXNzaW9uVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACGlVwZGF0ZUFzc2V0SW5mb1RyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAIZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAITVHJhbnNmZXJUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAITRXhjaGFuZ2VUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAIXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACD0J1cm5UcmFuc2FjdGlvbgYJAAECBQckbWF0Y2gwAhJSZWlzc3VlVHJhbnNhY3Rpb24FDXNpZ25lZEJ5QWRtaW4JAAIBAgtNYXRjaCBlcnJvcnHIYdo=", "height": 2267459, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 2w8uJgwuWtM6udzDVUBe8SvBmL2v8kk99HsfXZWY42jy Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let kPrefixPoolName = "pool_" | |
5 | + | ||
6 | + | let kPair = "pair_" | |
7 | + | ||
8 | + | let kAssetIdA = "A_asset_id" | |
9 | + | ||
10 | + | let kAssetIdB = "B_asset_id" | |
11 | + | ||
12 | + | let kLaunchpadDataTransactionStatus = "launchpad_data_transaction_status" | |
13 | + | ||
14 | + | let kAdminPubKey1 = "admin_pub_1" | |
15 | + | ||
16 | + | let kAdminPubKey2 = "admin_pub_2" | |
17 | + | ||
18 | + | let kAdminPubKey3 = "admin_pub_3" | |
19 | + | ||
20 | + | let kAdminInvokePubKey = "admin_invoke_pub" | |
21 | + | ||
22 | + | let kAchievementsWriters = "achievements_writers" | |
23 | + | ||
24 | + | let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy' | |
25 | + | ||
26 | + | let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk' | |
27 | + | ||
28 | + | let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP' | |
29 | + | ||
30 | + | let adminPubKeyInvoke = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
31 | + | ||
32 | + | func isSelfCall (i) = if ((i.caller == this)) | |
33 | + | then unit | |
34 | + | else throw("Only the Oracle itself can invoke this function") | |
35 | + | ||
36 | + | ||
37 | + | func getPoolType (poolAddress) = { | |
38 | + | let version = valueOrErrorMessage(getString(poolAddress, "version"), "Pool is not initialized") | |
39 | + | if ((version == "1.0.0")) | |
40 | + | then "cpmm" | |
41 | + | else if ((version == "2.0.0")) | |
42 | + | then "flat" | |
43 | + | else if ((version == "3.0.0")) | |
44 | + | then "multycurve" | |
45 | + | else throw("Unknown version of pool") | |
46 | + | } | |
47 | + | ||
48 | + | ||
49 | + | func getAddressIfValid (address) = toString(valueOrErrorMessage(addressFromString(address), (("Can't parse \"" + address) + "\" as address"))) | |
50 | + | ||
51 | + | ||
52 | + | @Callable(i) | |
53 | + | func setAdmin () = valueOrElse(isSelfCall(i), [StringEntry(kAdminPubKey1, toBase58String(adminPubKey1)), StringEntry(kAdminPubKey2, toBase58String(adminPubKey2)), StringEntry(kAdminPubKey3, toBase58String(adminPubKey3)), StringEntry(kAdminInvokePubKey, toBase58String(adminPubKeyInvoke))]) | |
54 | + | ||
55 | + | ||
56 | + | ||
57 | + | @Callable(i) | |
58 | + | func addPool (poolAddress,poolName) = valueOrElse(isSelfCall(i), { | |
59 | + | let validatedAddress = getAddressIfValid(poolAddress) | |
60 | + | let keyName = (kPrefixPoolName + validatedAddress) | |
61 | + | let possiblyAlreadyAddedPool = getString(this, keyName) | |
62 | + | if (isDefined(possiblyAlreadyAddedPool)) | |
63 | + | then throw((((("Pool with address \"" + validatedAddress) + "\" is already defined with name \"") + value(possiblyAlreadyAddedPool)) + "\"")) | |
64 | + | else ([StringEntry(keyName, poolName)] ++ (if ((getPoolType(value(addressFromString(poolAddress))) == "multycurve")) | |
65 | + | then nil | |
66 | + | else { | |
67 | + | let assetIdA = valueOrErrorMessage(getString(value(addressFromString(poolAddress)), kAssetIdA), "Asset id A is incorrect") | |
68 | + | let assetIdB = valueOrErrorMessage(getString(value(addressFromString(poolAddress)), kAssetIdB), "Asset id B is incorrect") | |
69 | + | [StringEntry((((kPair + assetIdA) + "_") + assetIdB), poolAddress)] | |
70 | + | })) | |
71 | + | }) | |
72 | + | ||
73 | + | ||
74 | + | ||
75 | + | @Callable(i) | |
76 | + | func renamePool (poolAddress,newPoolName) = valueOrElse(isSelfCall(i), { | |
77 | + | let validatedAddress = getAddressIfValid(poolAddress) | |
78 | + | let keyName = (kPrefixPoolName + validatedAddress) | |
79 | + | let possiblyAlreadyAddedPool = getString(this, keyName) | |
80 | + | if (isDefined(possiblyAlreadyAddedPool)) | |
81 | + | then [StringEntry(keyName, newPoolName)] | |
82 | + | else throw((("Pool with address \"" + validatedAddress) + "\" has not yet been added")) | |
83 | + | }) | |
84 | + | ||
85 | + | ||
86 | + | ||
87 | + | @Callable(i) | |
88 | + | func launchpadDataTransactionStatus (status) = valueOrElse(isSelfCall(i), [BooleanEntry(kLaunchpadDataTransactionStatus, status)]) | |
89 | + | ||
90 | + | ||
91 | + | ||
92 | + | @Callable(i) | |
93 | + | func addAchievementsWriter (address) = valueOrElse(isSelfCall(i), { | |
94 | + | let writers = valueOrElse(getString(this, kAchievementsWriters), "") | |
95 | + | let data = if ((writers == "")) | |
96 | + | then nil | |
97 | + | else split(writers, ",") | |
98 | + | [StringEntry(kAchievementsWriters, makeString((data :+ address), ","))] | |
99 | + | }) | |
100 | + | ||
101 | + | ||
102 | + | ||
103 | + | @Callable(i) | |
104 | + | func removeAchievementsWriter (address) = valueOrElse(isSelfCall(i), { | |
105 | + | let writers = split(valueOrElse(getString(this, kAchievementsWriters), ""), ",") | |
106 | + | let index = valueOrErrorMessage(indexOf(writers, address), "Can't find address in the list") | |
107 | + | [StringEntry(kAchievementsWriters, makeString(removeByIndex(writers, index), ","))] | |
108 | + | }) | |
109 | + | ||
110 | + | ||
111 | + | @Verifier(tx) | |
112 | + | func verify () = { | |
113 | + | let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1)) | |
114 | + | then 1 | |
115 | + | else 0 | |
116 | + | let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2)) | |
117 | + | then 1 | |
118 | + | else 0 | |
119 | + | let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3)) | |
120 | + | then 1 | |
121 | + | else 0 | |
122 | + | let signedByAdmin = (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2) | |
123 | + | let signedByAdminToCallAddPool = (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 1) | |
124 | + | match tx { | |
125 | + | case inv: InvokeScriptTransaction => | |
126 | + | let isSelfInvokeRenamePool = if ((inv.dApp == this)) | |
127 | + | then containsElement(["renamePool"], inv.function) | |
128 | + | else false | |
129 | + | let isSelfInvokeSetAdmin = if ((inv.dApp == this)) | |
130 | + | then containsElement(["setAdmin"], inv.function) | |
131 | + | else false | |
132 | + | let isSelfInvokeAddPool = if ((inv.dApp == this)) | |
133 | + | then containsElement(["addPool"], inv.function) | |
134 | + | else false | |
135 | + | let isSelfInvokeLaunchpadDataTxStatus = if ((inv.dApp == this)) | |
136 | + | then containsElement(["launchpadDataTransactionStatus"], inv.function) | |
137 | + | else false | |
138 | + | let isSelfInvokeAddAchievementsWriter = if ((inv.dApp == this)) | |
139 | + | then containsElement(["addAchievementsWriter"], inv.function) | |
140 | + | else false | |
141 | + | let isSelfInvokeRemoveAchievementsWriter = if ((inv.dApp == this)) | |
142 | + | then containsElement(["removeAchievementsWriter"], inv.function) | |
143 | + | else false | |
144 | + | if (if (if (if (if (if (if (signedByAdmin) | |
145 | + | then (size(inv.payments) == 0) | |
146 | + | else false) | |
147 | + | then isSelfInvokeRenamePool | |
148 | + | else false) | |
149 | + | then true | |
150 | + | else if (if (signedByAdminToCallAddPool) | |
151 | + | then (size(inv.payments) == 0) | |
152 | + | else false) | |
153 | + | then isSelfInvokeAddPool | |
154 | + | else false) | |
155 | + | then true | |
156 | + | else if (if (signedByAdmin) | |
157 | + | then (size(inv.payments) == 0) | |
158 | + | else false) | |
159 | + | then isSelfInvokeSetAdmin | |
160 | + | else false) | |
161 | + | then true | |
162 | + | else if (if (signedByAdmin) | |
163 | + | then (size(inv.payments) == 0) | |
164 | + | else false) | |
165 | + | then isSelfInvokeLaunchpadDataTxStatus | |
166 | + | else false) | |
167 | + | then true | |
168 | + | else if (if (signedByAdmin) | |
169 | + | then (size(inv.payments) == 0) | |
170 | + | else false) | |
171 | + | then isSelfInvokeAddAchievementsWriter | |
172 | + | else false) | |
173 | + | then true | |
174 | + | else if (if (signedByAdmin) | |
175 | + | then (size(inv.payments) == 0) | |
176 | + | else false) | |
177 | + | then isSelfInvokeRemoveAchievementsWriter | |
178 | + | else false | |
179 | + | case _: Order|DataTransaction|SponsorFeeTransaction|SetScriptTransaction|CreateAliasTransaction|LeaseCancelTransaction|LeaseTransaction|IssueTransaction|InvokeExpressionTransaction|UpdateAssetInfoTransaction|InvokeScriptTransaction|SetAssetScriptTransaction|TransferTransaction|ExchangeTransaction|MassTransferTransaction|BurnTransaction|ReissueTransaction => | |
180 | + | signedByAdmin | |
181 | + | case _ => | |
182 | + | throw("Match error") | |
183 | + | } | |
184 | + | } | |
185 | + |
github/deemru/w8io/026f985 19.58 ms ◑