tx · 7WuhyMQV8CMDevX7Jjz7Ku465fvef12LV2ykRC85YXcf

3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz:  -0.01000000 Waves

2022.11.29 17:21 [2338500] smart account 3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz > SELF 0.00000000 Waves

{ "type": 13, "id": "7WuhyMQV8CMDevX7Jjz7Ku465fvef12LV2ykRC85YXcf", "fee": 1000000, "feeAssetId": null, "timestamp": 1669731646494, "version": 2, "chainId": 84, "sender": "3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz", "senderPublicKey": "C3v9sfZTmGuW7YXwjUKypU41QpFcHCoJxLpvdR4d3iSv", "proofs": [ "5jano3rwgjQpmSVZczymaC96QQ2pWmFDTFiyWMHhJ9hLwxH6XvjgwXjyyhVE9xdBzUgfVkUDoukxm5QDqx8agRkd", "4XX5ZmL4bSs8HnQW5KMtZipkKVLMbBbfzdqNQSsRsTDbweeDm5ZBCvhUXCu49yqaJkUFdrStTdB46HiQveSiUF9Y" ], "script": "base64:BgIhCAISBAoCAQgSBAoCCAgSAwoBBBIDCgEIEgMKAQgSABIAFAAPa1ByZWZpeFBvb2xOYW1lAgVwb29sXwAFa1BhaXICBXBhaXJfAAlrQXNzZXRJZEECCkFfYXNzZXRfaWQACWtBc3NldElkQgIKQl9hc3NldF9pZAAfa0xhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cwIhbGF1bmNocGFkX2RhdGFfdHJhbnNhY3Rpb25fc3RhdHVzABNrQWN0aXZlQWxsQ29udHJhY3RzAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAMa0FkbWluUHViS2V5AglhZG1pbl9wdWIADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAUa0FjaGlldmVtZW50c1dyaXRlcnMCFGFjaGlldmVtZW50c193cml0ZXJzAAxhZG1pblB1YktleTEJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa0FkbWluUHViS2V5MQAMYWRtaW5QdWJLZXkyCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDWtBZG1pblB1YktleTIADGFkbWluUHViS2V5MwkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rQWRtaW5QdWJLZXkzABJhY3RpdmVBbGxDb250cmFjdHMJARFAZXh0ck5hdGl2ZSgxMDUxKQIFBHRoaXMFE2tBY3RpdmVBbGxDb250cmFjdHMBCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIvT25seSB0aGUgT3JhY2xlIGl0c2VsZiBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24BC2dldFBvb2xUeXBlAQtwb29sQWRkcmVzcwQHdmVyc2lvbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFC3Bvb2xBZGRyZXNzAgd2ZXJzaW9uAhdQb29sIGlzIG5vdCBpbml0aWFsaXplZAMJAAACBQd2ZXJzaW9uAgUxLjAuMAIEY3BtbQMJAAACBQd2ZXJzaW9uAgUyLjAuMAIEZmxhdAMJAAACBQd2ZXJzaW9uAgUzLjAuMAIKbXVsdHljdXJ2ZQkAAgECF1Vua25vd24gdmVyc2lvbiBvZiBwb29sARFnZXRBZGRyZXNzSWZWYWxpZAEHYWRkcmVzcwkApQgBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUHYWRkcmVzcwkArAICCQCsAgICDUNhbid0IHBhcnNlICIFB2FkZHJlc3MCDCIgYXMgYWRkcmVzcwELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24HAWkBCHNldEFkbWluAgdhZG1pbklkC2FkbWluUHViS2V5CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkDAwkAZgIAAAUHYWRtaW5JZAkAZgIFB2FkbWluSWQAAwcJAAIBAg5Xcm9uZyBhZG1pbiBpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFDGtBZG1pblB1YktleQkApAMBBQdhZG1pbklkBQthZG1pblB1YktleQUDbmlsAWkBB2FkZFBvb2wCC3Bvb2xBZGRyZXNzCHBvb2xOYW1lCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBBB2YWxpZGF0ZWRBZGRyZXNzCQERZ2V0QWRkcmVzc0lmVmFsaWQBBQtwb29sQWRkcmVzcwQHa2V5TmFtZQkArAICBQ9rUHJlZml4UG9vbE5hbWUFEHZhbGlkYXRlZEFkZHJlc3MEGHBvc3NpYmx5QWxyZWFkeUFkZGVkUG9vbAkAnQgCBQR0aGlzBQdrZXlOYW1lAwkBCWlzRGVmaW5lZAEFGHBvc3NpYmx5QWxyZWFkeUFkZGVkUG9vbAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgITUG9vbCB3aXRoIGFkZHJlc3MgIgUQdmFsaWRhdGVkQWRkcmVzcwIgIiBpcyBhbHJlYWR5IGRlZmluZWQgd2l0aCBuYW1lICIJAQV2YWx1ZQEFGHBvc3NpYmx5QWxyZWFkeUFkZGVkUG9vbAIBIgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tleU5hbWUFCHBvb2xOYW1lBQNuaWwDCQAAAgkBC2dldFBvb2xUeXBlAQkBBXZhbHVlAQkApggBBQtwb29sQWRkcmVzcwIKbXVsdHljdXJ2ZQUDbmlsBAhhc3NldElkQQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQV2YWx1ZQEJAKYIAQULcG9vbEFkZHJlc3MFCWtBc3NldElkQQIXQXNzZXQgaWQgQSBpcyBpbmNvcnJlY3QECGFzc2V0SWRCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBBXZhbHVlAQkApggBBQtwb29sQWRkcmVzcwUJa0Fzc2V0SWRCAhdBc3NldCBpZCBCIGlzIGluY29ycmVjdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQVrUGFpcgUIYXNzZXRJZEECAV8FCGFzc2V0SWRCBQtwb29sQWRkcmVzcwUDbmlsAWkBHmxhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cwEGc3RhdHVzCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQxCb29sZWFuRW50cnkCBR9rTGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzBQZzdGF0dXMFA25pbAFpARVhZGRBY2hpZXZlbWVudHNXcml0ZXIBB2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEB3dyaXRlcnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUUa0FjaGlldmVtZW50c1dyaXRlcnMCAAQEZGF0YQMJAAACBQd3cml0ZXJzAgAFA25pbAkAtQkCBQd3cml0ZXJzAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtBY2hpZXZlbWVudHNXcml0ZXJzCQC5CQIJAM0IAgUEZGF0YQUHYWRkcmVzcwIBLAUDbmlsAWkBGHJlbW92ZUFjaGlldmVtZW50c1dyaXRlcgEHYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQHd3JpdGVycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFFGtBY2hpZXZlbWVudHNXcml0ZXJzAgACASwEBWluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUHd3JpdGVycwUHYWRkcmVzcwIeQ2FuJ3QgZmluZCBhZGRyZXNzIGluIHRoZSBsaXN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtBY2hpZXZlbWVudHNXcml0ZXJzCQC5CQIJANEIAgUHd3JpdGVycwUFaW5kZXgCASwFA25pbAFpARRzaHV0ZG93bkFsbENvbnRyYWN0cwAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFEmFjdGl2ZUFsbENvbnRyYWN0cwkAAgECHkFsbCBjb250cmFjdHMgYWxyZWFkeSBzaHV0ZG93bgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUTa0FjdGl2ZUFsbENvbnRyYWN0cwcFA25pbAFpARRhY3RpdmF0ZUFsbENvbnRyYWN0cwAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDBRJhY3RpdmVBbGxDb250cmFjdHMJAAIBAhxBbGwgY29udHJhY3RzIGFscmVhZHkgYWN0aXZlCQDMCAIJAQxCb29sZWFuRW50cnkCBRNrQWN0aXZlQWxsQ29udHJhY3RzBgUDbmlsAQJ0eAEGdmVyaWZ5AAQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACVduwGA==", "height": 2338500, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2w8uJgwuWtM6udzDVUBe8SvBmL2v8kk99HsfXZWY42jy Next: CCULoPK3Xs1fpTp9cw5aZN7QXJPXse3HxBJxyH2uxBsc Diff:
OldNewDifferences
2525
2626 let kAchievementsWriters = "achievements_writers"
2727
28-let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy'
28+let adminPubKey1 = fromBase58String(getStringValue(this, kAdminPubKey1))
2929
30-let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk'
30+let adminPubKey2 = fromBase58String(getStringValue(this, kAdminPubKey2))
3131
32-let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP'
33-
34-let adminPubKeyInvoke = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
32+let adminPubKey3 = fromBase58String(getStringValue(this, kAdminPubKey3))
3533
3634 let activeAllContracts = getBooleanValue(this, kActiveAllContracts)
3735
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let kPrefixPoolName = "pool_"
55
66 let kPair = "pair_"
77
88 let kAssetIdA = "A_asset_id"
99
1010 let kAssetIdB = "B_asset_id"
1111
1212 let kLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1313
1414 let kActiveAllContracts = "active_all_contracts"
1515
1616 let kAdminPubKey = "admin_pub"
1717
1818 let kAdminPubKey1 = "admin_pub_1"
1919
2020 let kAdminPubKey2 = "admin_pub_2"
2121
2222 let kAdminPubKey3 = "admin_pub_3"
2323
2424 let kAdminInvokePubKey = "admin_invoke_pub"
2525
2626 let kAchievementsWriters = "achievements_writers"
2727
28-let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy'
28+let adminPubKey1 = fromBase58String(getStringValue(this, kAdminPubKey1))
2929
30-let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk'
30+let adminPubKey2 = fromBase58String(getStringValue(this, kAdminPubKey2))
3131
32-let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP'
33-
34-let adminPubKeyInvoke = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
32+let adminPubKey3 = fromBase58String(getStringValue(this, kAdminPubKey3))
3533
3634 let activeAllContracts = getBooleanValue(this, kActiveAllContracts)
3735
3836 func isSelfCall (i) = if ((i.caller == this))
3937 then unit
4038 else throw("Only the Oracle itself can invoke this function")
4139
4240
4341 func getPoolType (poolAddress) = {
4442 let version = valueOrErrorMessage(getString(poolAddress, "version"), "Pool is not initialized")
4543 if ((version == "1.0.0"))
4644 then "cpmm"
4745 else if ((version == "2.0.0"))
4846 then "flat"
4947 else if ((version == "3.0.0"))
5048 then "multycurve"
5149 else throw("Unknown version of pool")
5250 }
5351
5452
5553 func getAddressIfValid (address) = toString(valueOrErrorMessage(addressFromString(address), (("Can't parse \"" + address) + "\" as address")))
5654
5755
5856 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
5957 then unit
6058 else throw("Only admin can call this function")
6159
6260
6361 @Callable(i)
6462 func setAdmin (adminId,adminPubKey) = valueOrElse(isSelfCall(i), if (if ((0 > adminId))
6563 then (adminId > 3)
6664 else false)
6765 then throw("Wrong admin id")
6866 else [StringEntry((kAdminPubKey + toString(adminId)), adminPubKey)])
6967
7068
7169
7270 @Callable(i)
7371 func addPool (poolAddress,poolName) = valueOrElse(isAdminCall(i), {
7472 let validatedAddress = getAddressIfValid(poolAddress)
7573 let keyName = (kPrefixPoolName + validatedAddress)
7674 let possiblyAlreadyAddedPool = getString(this, keyName)
7775 if (isDefined(possiblyAlreadyAddedPool))
7876 then throw((((("Pool with address \"" + validatedAddress) + "\" is already defined with name \"") + value(possiblyAlreadyAddedPool)) + "\""))
7977 else ([StringEntry(keyName, poolName)] ++ (if ((getPoolType(value(addressFromString(poolAddress))) == "multycurve"))
8078 then nil
8179 else {
8280 let assetIdA = valueOrErrorMessage(getString(value(addressFromString(poolAddress)), kAssetIdA), "Asset id A is incorrect")
8381 let assetIdB = valueOrErrorMessage(getString(value(addressFromString(poolAddress)), kAssetIdB), "Asset id B is incorrect")
8482 [StringEntry((((kPair + assetIdA) + "_") + assetIdB), poolAddress)]
8583 }))
8684 })
8785
8886
8987
9088 @Callable(i)
9189 func launchpadDataTransactionStatus (status) = valueOrElse(isAdminCall(i), [BooleanEntry(kLaunchpadDataTransactionStatus, status)])
9290
9391
9492
9593 @Callable(i)
9694 func addAchievementsWriter (address) = valueOrElse(isAdminCall(i), {
9795 let writers = valueOrElse(getString(this, kAchievementsWriters), "")
9896 let data = if ((writers == ""))
9997 then nil
10098 else split(writers, ",")
10199 [StringEntry(kAchievementsWriters, makeString((data :+ address), ","))]
102100 })
103101
104102
105103
106104 @Callable(i)
107105 func removeAchievementsWriter (address) = valueOrElse(isAdminCall(i), {
108106 let writers = split(valueOrElse(getString(this, kAchievementsWriters), ""), ",")
109107 let index = valueOrErrorMessage(indexOf(writers, address), "Can't find address in the list")
110108 [StringEntry(kAchievementsWriters, makeString(removeByIndex(writers, index), ","))]
111109 })
112110
113111
114112
115113 @Callable(i)
116114 func shutdownAllContracts () = valueOrElse(isAdminCall(i), if (!(activeAllContracts))
117115 then throw("All contracts already shutdown")
118116 else [BooleanEntry(kActiveAllContracts, false)])
119117
120118
121119
122120 @Callable(i)
123121 func activateAllContracts () = valueOrElse(isAdminCall(i), if (activeAllContracts)
124122 then throw("All contracts already active")
125123 else [BooleanEntry(kActiveAllContracts, true)])
126124
127125
128126 @Verifier(tx)
129127 func verify () = {
130128 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
131129 then 1
132130 else 0
133131 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
134132 then 1
135133 else 0
136134 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
137135 then 1
138136 else 0
139137 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
140138 }
141139

github/deemru/w8io/873ac7e 
26.52 ms