tx · FCuGv5bznActBt6T7tB2CpXTwC8hoN1iPoScHfesCiwt

3MzSe2fWyParzDgzdQMqHg1EjSbR4A3uRUw:  -0.03400000 Waves

2022.10.25 14:26 [2287849] smart account 3MzSe2fWyParzDgzdQMqHg1EjSbR4A3uRUw > SELF 0.00000000 Waves

{ "type": 13, "id": "FCuGv5bznActBt6T7tB2CpXTwC8hoN1iPoScHfesCiwt", "fee": 3400000, "feeAssetId": null, "timestamp": 1666697231767, "version": 2, "chainId": 84, "sender": "3MzSe2fWyParzDgzdQMqHg1EjSbR4A3uRUw", "senderPublicKey": "AUuTTtSBkXPfpsFTEepWFGbzXpW7z8eVnBhUnRt9HJ7F", "proofs": [ "2g7uPjuqxhYutg6HJFUJMkPRPPp4ScScpV8Joqdp46s97vNbYwqx2EkQcTd4UT26cHFLYoKtxjX7Ab9n2FtZ8T2m" ], "script": "base64:BgIRCAISBAoCCAgSBwoFCAgICAgRAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAEmtfYWRtaW5fcHVibGljX2tleQISa19hZG1pbl9wdWJsaWNfa2V5AA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MAFWtfcmV3YXJkZXJfcHVibGljX2tleQIVa19yZXdhcmRlcl9wdWJsaWNfa2V5AAdrX3NwZW50AgdrX3NwZW50AQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEMYWRtaW5BZGRyZXNzAAkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBEXJld2FyZGVyUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRVrX3Jld2FyZGVyX3B1YmxpY19rZXkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwITTkZUIE1hbmFnZXIgbm90IHNldAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAApUWVBFX0FTU0VUAgVhc3NldAAJVFlQRV9NSU5UAgRtaW50AQtnZXRTcGVudEtleQEKX3NpZ25hdHVyZQkArAICCQCsAgIFB2tfc3BlbnQCASwFCl9zaWduYXR1cmUBB2lzU3BlbnQBCl9zaWduYXR1cmUEA2tleQkBC2dldFNwZW50S2V5AQUKX3NpZ25hdHVyZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHAgFpAQppbml0aWFsaXplAgxfY29vcmRpbmF0b3ISX3Jld2FyZGVyUHVibGljS2V5AwkBC2luaXRpYWxpemVkAAkAAgECE0FscmVhZHkgaW5pdGlhbGl6ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MFDF9jb29yZGluYXRvcgkAzAgCCQELU3RyaW5nRW50cnkCBRVrX3Jld2FyZGVyX3B1YmxpY19rZXkFEl9yZXdhcmRlclB1YmxpY0tleQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQpjbGFpbVByaXplBQZfbm9uY2UKX3JlY2lwaWVudAhfYXNzZXRJZAdfYW1vdW50Cl9zaWduYXR1cmUEB21lc3NhZ2UJAJsDAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGX25vbmNlAgEsBQpfcmVjaXBpZW50AgEsBQhfYXNzZXRJZAIBLAUHX2Ftb3VudAMDAwkBASEBCQD0AwMFB21lc3NhZ2UJANkEAQUKX3NpZ25hdHVyZQkBEXJld2FyZGVyUHVibGljS2V5AAYJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBQpfcmVjaXBpZW50BgkBB2lzU3BlbnQBBQpfc2lnbmF0dXJlCQACAQIdSW52YWxpZCBjbGFpbVByaXplIHBhcmFtZXRlcnMECGFzc2V0SWRzCQC1CQIFCF9hc3NldElkAgEsBAdhbW91bnRzCQC1CQIFB19hbW91bnQCASwEEHJlY2lwaWVudEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCl9yZWNpcGllbnQKAQ56aXBBbmRUcmFuc2ZlcgIDYWNjCW5leHRWYWx1ZQQLJHQwMjUxODI1NDMFA2FjYwQGcmVzdWx0CAULJHQwMjUxODI1NDMCXzEEBWluZGV4CAULJHQwMjUxODI1NDMCXzIECnZhbHVlUGFydHMJALUJAgUJbmV4dFZhbHVlAgE6BAR0eXBlCQCRAwIFCnZhbHVlUGFydHMAAAQHYXNzZXRJZAkAkQMCBQp2YWx1ZVBhcnRzAAEEBmFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2Ftb3VudHMFBWluZGV4AwkAAAIFBHR5cGUFClRZUEVfQVNTRVQJAJQKAgkAzQgCBQZyZXN1bHQJAQ5TY3JpcHRUcmFuc2ZlcgMFEHJlY2lwaWVudEFkZHJlc3MFBmFtb3VudAkA2QQBBQdhc3NldElkCQBkAgUFaW5kZXgAAQMJAAACBQR0eXBlBQlUWVBFX01JTlQEDGludm9rZVJlc3VsdAkA/AcECQERbmZ0TWFuYWdlckFkZHJlc3MAAgRtaW50CQDMCAIFCl9yZWNpcGllbnQJAMwIAgUHYXNzZXRJZAkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFDGludm9rZVJlc3VsdAUMaW52b2tlUmVzdWx0CQCUCgIFBnJlc3VsdAkAZAIFBWluZGV4AAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBCQCsAgICDkludmFsaWQgdHlwZTogBQR0eXBlBAZyZXN1bHQKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ56aXBBbmRUcmFuc2ZlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzggCCAUGcmVzdWx0Al8xCQDMCAIJAQxCb29sZWFuRW50cnkCCQELZ2V0U3BlbnRLZXkBBQpfc2lnbmF0dXJlBgUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5AJPQhNY=", "height": 2287849, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let k_initialized = "k_initialized"
5+
6+let k_coordinatorAddress = "k_coordinatorAddress"
7+
8+let k_admin_public_key = "k_admin_public_key"
9+
10+let k_admin_address = "k_admin_address"
11+
12+let k_nft_manager_address = "k_nft_manager_address"
13+
14+let k_rewarder_public_key = "k_rewarder_public_key"
15+
16+let k_spent = "k_spent"
17+
18+func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
19+
20+
21+func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
22+
23+
24+func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
25+
26+
27+func rewarderPublicKey () = fromBase58String(getStringValue(this, k_rewarder_public_key))
28+
29+
30+func nftManagerAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_nft_manager_address)), "NFT Manager not set")
31+
32+
33+func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
34+
35+
36+let TYPE_ASSET = "asset"
37+
38+let TYPE_MINT = "mint"
39+
40+func getSpentKey (_signature) = ((k_spent + ",") + _signature)
41+
42+
43+func isSpent (_signature) = {
44+ let key = getSpentKey(_signature)
45+ valueOrElse(getBoolean(this, key), false)
46+ }
47+
48+
49+@Callable(i)
50+func initialize (_coordinator,_rewarderPublicKey) = if (initialized())
51+ then throw("Already initialized")
52+ else [StringEntry(k_coordinatorAddress, _coordinator), StringEntry(k_rewarder_public_key, _rewarderPublicKey), BooleanEntry(k_initialized, true)]
53+
54+
55+
56+@Callable(i)
57+func claimPrize (_nonce,_recipient,_assetId,_amount,_signature) = {
58+ let message = toBytes(((((((_nonce + ",") + _recipient) + ",") + _assetId) + ",") + _amount))
59+ if (if (if (!(sigVerify(message, fromBase58String(_signature), rewarderPublicKey())))
60+ then true
61+ else (toString(i.caller) != _recipient))
62+ then true
63+ else isSpent(_signature))
64+ then throw("Invalid claimPrize parameters")
65+ else {
66+ let assetIds = split(_assetId, ",")
67+ let amounts = split(_amount, ",")
68+ let recipientAddress = addressFromStringValue(_recipient)
69+ func zipAndTransfer (acc,nextValue) = {
70+ let $t025182543 = acc
71+ let result = $t025182543._1
72+ let index = $t025182543._2
73+ let valueParts = split(nextValue, ":")
74+ let type = valueParts[0]
75+ let assetId = valueParts[1]
76+ let amount = parseIntValue(amounts[index])
77+ if ((type == TYPE_ASSET))
78+ then $Tuple2((result :+ ScriptTransfer(recipientAddress, amount, fromBase58String(assetId))), (index + 1))
79+ else if ((type == TYPE_MINT))
80+ then {
81+ let invokeResult = invoke(nftManagerAddress(), "mint", [_recipient, assetId, amount], nil)
82+ if ((invokeResult == invokeResult))
83+ then $Tuple2(result, (index + 1))
84+ else throw("Strict value is not equal to itself.")
85+ }
86+ else throw(("Invalid type: " + type))
87+ }
88+
89+ let result = {
90+ let $l = assetIds
91+ let $s = size($l)
92+ let $acc0 = $Tuple2(nil, 0)
93+ func $f0_1 ($a,$i) = if (($i >= $s))
94+ then $a
95+ else zipAndTransfer($a, $l[$i])
96+
97+ func $f0_2 ($a,$i) = if (($i >= $s))
98+ then $a
99+ else throw("List size exceeds 10")
100+
101+ $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)
102+ }
103+ (result._1 ++ [BooleanEntry(getSpentKey(_signature), true)])
104+ }
105+ }
106+
107+
108+@Verifier(tx)
109+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
110+

github/deemru/w8io/169f3d6 
23.15 ms