tx · CCULoPK3Xs1fpTp9cw5aZN7QXJPXse3HxBJxyH2uxBsc

3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz:  -0.05000000 Waves

2022.11.29 18:34 [2338578] smart account 3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz > SELF 0.00000000 Waves

{ "type": 13, "id": "CCULoPK3Xs1fpTp9cw5aZN7QXJPXse3HxBJxyH2uxBsc", "fee": 5000000, "feeAssetId": null, "timestamp": 1669736055220, "version": 2, "chainId": 84, "sender": "3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz", "senderPublicKey": "C3v9sfZTmGuW7YXwjUKypU41QpFcHCoJxLpvdR4d3iSv", "proofs": [ "55im5NapoAuBymrxNppLWQjtquFwFyX1LmQjjbn9n8jHeGkAMAERQHQf6yVg5fnKXAF9pVcGcw9q9uuwRgCAFpaR", "5xRBHhazi6LXDMJVK1SdTvdDTZdJhmMqguXB4DiuGBR3fS5wddFwgquFbsoypJkDcMLub1AVCqYkic28KVWedbAi" ], "script": "base64:BgIhCAISBAoCAQgSBAoCCAgSAwoBBBIDCgEIEgMKAQgSABIAFAAPa1ByZWZpeFBvb2xOYW1lAgVwb29sXwAFa1BhaXICBXBhaXJfAAlrQXNzZXRJZEECCkFfYXNzZXRfaWQACWtBc3NldElkQgIKQl9hc3NldF9pZAAfa0xhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cwIhbGF1bmNocGFkX2RhdGFfdHJhbnNhY3Rpb25fc3RhdHVzABNrQWN0aXZlQWxsQ29udHJhY3RzAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAMa0FkbWluUHViS2V5AgphZG1pbl9wdWJfAA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zABJrQWRtaW5JbnZva2VQdWJLZXkCEGFkbWluX2ludm9rZV9wdWIAFGtBY2hpZXZlbWVudHNXcml0ZXJzAhRhY2hpZXZlbWVudHNfd3JpdGVycwAMYWRtaW5QdWJLZXkxCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa0FkbWluUHViS2V5MwASYWN0aXZlQWxsQ29udHJhY3RzCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBRNrQWN0aXZlQWxsQ29udHJhY3RzAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECL09ubHkgdGhlIE9yYWNsZSBpdHNlbGYgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uAQtnZXRQb29sVHlwZQELcG9vbEFkZHJlc3MEB3ZlcnNpb24JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQtwb29sQWRkcmVzcwIHdmVyc2lvbgIXUG9vbCBpcyBub3QgaW5pdGlhbGl6ZWQDCQAAAgUHdmVyc2lvbgIFMS4wLjACBGNwbW0DCQAAAgUHdmVyc2lvbgIFMi4wLjACBGZsYXQDCQAAAgUHdmVyc2lvbgIFMy4wLjACCm11bHR5Y3VydmUJAAIBAhdVbmtub3duIHZlcnNpb24gb2YgcG9vbAERZ2V0QWRkcmVzc0lmVmFsaWQBB2FkZHJlc3MJAKUIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB2FkZHJlc3MJAKwCAgkArAICAg1DYW4ndCBwYXJzZSAiBQdhZGRyZXNzAgwiIGFzIGFkZHJlc3MBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBwFpAQhzZXRBZG1pbgIHYWRtaW5JZAthZG1pblB1YktleQkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpAwMJAGYCAAAFB2FkbWluSWQJAGYCBQdhZG1pbklkAAMHCQACAQIOV3JvbmcgYWRtaW4gaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQxrQWRtaW5QdWJLZXkJAKQDAQUHYWRtaW5JZAULYWRtaW5QdWJLZXkFA25pbAFpAQdhZGRQb29sAgtwb29sQWRkcmVzcwhwb29sTmFtZQkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQQdmFsaWRhdGVkQWRkcmVzcwkBEWdldEFkZHJlc3NJZlZhbGlkAQULcG9vbEFkZHJlc3MEB2tleU5hbWUJAKwCAgUPa1ByZWZpeFBvb2xOYW1lBRB2YWxpZGF0ZWRBZGRyZXNzBBhwb3NzaWJseUFscmVhZHlBZGRlZFBvb2wJAJ0IAgUEdGhpcwUHa2V5TmFtZQMJAQlpc0RlZmluZWQBBRhwb3NzaWJseUFscmVhZHlBZGRlZFBvb2wJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICE1Bvb2wgd2l0aCBhZGRyZXNzICIFEHZhbGlkYXRlZEFkZHJlc3MCICIgaXMgYWxyZWFkeSBkZWZpbmVkIHdpdGggbmFtZSAiCQEFdmFsdWUBBRhwb3NzaWJseUFscmVhZHlBZGRlZFBvb2wCASIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQdrZXlOYW1lBQhwb29sTmFtZQUDbmlsAwkAAAIJAQtnZXRQb29sVHlwZQEJAQV2YWx1ZQEJAKYIAQULcG9vbEFkZHJlc3MCCm11bHR5Y3VydmUFA25pbAQIYXNzZXRJZEEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQEFdmFsdWUBCQCmCAEFC3Bvb2xBZGRyZXNzBQlrQXNzZXRJZEECF0Fzc2V0IGlkIEEgaXMgaW5jb3JyZWN0BAhhc3NldElkQgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQV2YWx1ZQEJAKYIAQULcG9vbEFkZHJlc3MFCWtBc3NldElkQgIXQXNzZXQgaWQgQiBpcyBpbmNvcnJlY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUFa1BhaXIFCGFzc2V0SWRBAgFfBQhhc3NldElkQgULcG9vbEFkZHJlc3MFA25pbAFpAR5sYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMBBnN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUfa0xhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cwUGc3RhdHVzBQNuaWwBaQEVYWRkQWNoaWV2ZW1lbnRzV3JpdGVyAQdhZGRyZXNzCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBAd3cml0ZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFFGtBY2hpZXZlbWVudHNXcml0ZXJzAgAEBGRhdGEDCQAAAgUHd3JpdGVycwIABQNuaWwJALUJAgUHd3JpdGVycwIBLAkAzAgCCQELU3RyaW5nRW50cnkCBRRrQWNoaWV2ZW1lbnRzV3JpdGVycwkAuQkCCQDNCAIFBGRhdGEFB2FkZHJlc3MCASwFA25pbAFpARhyZW1vdmVBY2hpZXZlbWVudHNXcml0ZXIBB2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEB3dyaXRlcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRRrQWNoaWV2ZW1lbnRzV3JpdGVycwIAAgEsBAVpbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFB3dyaXRlcnMFB2FkZHJlc3MCHkNhbid0IGZpbmQgYWRkcmVzcyBpbiB0aGUgbGlzdAkAzAgCCQELU3RyaW5nRW50cnkCBRRrQWNoaWV2ZW1lbnRzV3JpdGVycwkAuQkCCQDRCAIFB3dyaXRlcnMFBWluZGV4AgEsBQNuaWwBaQEUc2h1dGRvd25BbGxDb250cmFjdHMACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBBRJhY3RpdmVBbGxDb250cmFjdHMJAAIBAh5BbGwgY29udHJhY3RzIGFscmVhZHkgc2h1dGRvd24JAMwIAgkBDEJvb2xlYW5FbnRyeQIFE2tBY3RpdmVBbGxDb250cmFjdHMHBQNuaWwBaQEUYWN0aXZhdGVBbGxDb250cmFjdHMACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwUSYWN0aXZlQWxsQ29udHJhY3RzCQACAQIcQWxsIGNvbnRyYWN0cyBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUTa0FjdGl2ZUFsbENvbnRyYWN0cwYFA25pbAECdHgBBnZlcmlmeQAEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAi91dRA=", "height": 2338578, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7WuhyMQV8CMDevX7Jjz7Ku465fvef12LV2ykRC85YXcf Next: 2KzffYLLdDPu6L12mnejYehEXPNSe4gvi4PFcQUEVP8t Diff:
OldNewDifferences
1313
1414 let kActiveAllContracts = "active_all_contracts"
1515
16-let kAdminPubKey = "admin_pub"
16+let kAdminPubKey = "admin_pub_"
1717
1818 let kAdminPubKey1 = "admin_pub_1"
1919
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
16-let kAdminPubKey = "admin_pub"
16+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
2828 let adminPubKey1 = fromBase58String(getStringValue(this, kAdminPubKey1))
2929
3030 let adminPubKey2 = fromBase58String(getStringValue(this, kAdminPubKey2))
3131
3232 let adminPubKey3 = fromBase58String(getStringValue(this, kAdminPubKey3))
3333
3434 let activeAllContracts = getBooleanValue(this, kActiveAllContracts)
3535
3636 func isSelfCall (i) = if ((i.caller == this))
3737 then unit
3838 else throw("Only the Oracle itself can invoke this function")
3939
4040
4141 func getPoolType (poolAddress) = {
4242 let version = valueOrErrorMessage(getString(poolAddress, "version"), "Pool is not initialized")
4343 if ((version == "1.0.0"))
4444 then "cpmm"
4545 else if ((version == "2.0.0"))
4646 then "flat"
4747 else if ((version == "3.0.0"))
4848 then "multycurve"
4949 else throw("Unknown version of pool")
5050 }
5151
5252
5353 func getAddressIfValid (address) = toString(valueOrErrorMessage(addressFromString(address), (("Can't parse \"" + address) + "\" as address")))
5454
5555
5656 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
5757 then unit
5858 else throw("Only admin can call this function")
5959
6060
6161 @Callable(i)
6262 func setAdmin (adminId,adminPubKey) = valueOrElse(isSelfCall(i), if (if ((0 > adminId))
6363 then (adminId > 3)
6464 else false)
6565 then throw("Wrong admin id")
6666 else [StringEntry((kAdminPubKey + toString(adminId)), adminPubKey)])
6767
6868
6969
7070 @Callable(i)
7171 func addPool (poolAddress,poolName) = valueOrElse(isAdminCall(i), {
7272 let validatedAddress = getAddressIfValid(poolAddress)
7373 let keyName = (kPrefixPoolName + validatedAddress)
7474 let possiblyAlreadyAddedPool = getString(this, keyName)
7575 if (isDefined(possiblyAlreadyAddedPool))
7676 then throw((((("Pool with address \"" + validatedAddress) + "\" is already defined with name \"") + value(possiblyAlreadyAddedPool)) + "\""))
7777 else ([StringEntry(keyName, poolName)] ++ (if ((getPoolType(value(addressFromString(poolAddress))) == "multycurve"))
7878 then nil
7979 else {
8080 let assetIdA = valueOrErrorMessage(getString(value(addressFromString(poolAddress)), kAssetIdA), "Asset id A is incorrect")
8181 let assetIdB = valueOrErrorMessage(getString(value(addressFromString(poolAddress)), kAssetIdB), "Asset id B is incorrect")
8282 [StringEntry((((kPair + assetIdA) + "_") + assetIdB), poolAddress)]
8383 }))
8484 })
8585
8686
8787
8888 @Callable(i)
8989 func launchpadDataTransactionStatus (status) = valueOrElse(isAdminCall(i), [BooleanEntry(kLaunchpadDataTransactionStatus, status)])
9090
9191
9292
9393 @Callable(i)
9494 func addAchievementsWriter (address) = valueOrElse(isAdminCall(i), {
9595 let writers = valueOrElse(getString(this, kAchievementsWriters), "")
9696 let data = if ((writers == ""))
9797 then nil
9898 else split(writers, ",")
9999 [StringEntry(kAchievementsWriters, makeString((data :+ address), ","))]
100100 })
101101
102102
103103
104104 @Callable(i)
105105 func removeAchievementsWriter (address) = valueOrElse(isAdminCall(i), {
106106 let writers = split(valueOrElse(getString(this, kAchievementsWriters), ""), ",")
107107 let index = valueOrErrorMessage(indexOf(writers, address), "Can't find address in the list")
108108 [StringEntry(kAchievementsWriters, makeString(removeByIndex(writers, index), ","))]
109109 })
110110
111111
112112
113113 @Callable(i)
114114 func shutdownAllContracts () = valueOrElse(isAdminCall(i), if (!(activeAllContracts))
115115 then throw("All contracts already shutdown")
116116 else [BooleanEntry(kActiveAllContracts, false)])
117117
118118
119119
120120 @Callable(i)
121121 func activateAllContracts () = valueOrElse(isAdminCall(i), if (activeAllContracts)
122122 then throw("All contracts already active")
123123 else [BooleanEntry(kActiveAllContracts, true)])
124124
125125
126126 @Verifier(tx)
127127 func verify () = {
128128 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
129129 then 1
130130 else 0
131131 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
132132 then 1
133133 else 0
134134 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
135135 then 1
136136 else 0
137137 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
138138 }
139139

github/deemru/w8io/873ac7e 
37.56 ms