tx · EPMyhANBDH9PQEFXZNP4Q1tKQpXfU2TTE8vUZJACkMLF
3N3wBswhGGLLvVmd6KAA7hH8tZsu2iSY5Yx: -0.00200000 Waves
2024.11.11 01:24 [3365948] smart account 3N3wBswhGGLLvVmd6KAA7hH8tZsu2iSY5Yx > SELF 0.00000000 Waves
{
"type": 13,
"id": "EPMyhANBDH9PQEFXZNP4Q1tKQpXfU2TTE8vUZJACkMLF",
"fee": 200000,
"feeAssetId": null,
"timestamp": 1731277512571,
"version": 1,
"sender": "3N3wBswhGGLLvVmd6KAA7hH8tZsu2iSY5Yx",
"senderPublicKey": "HpeKQu8xawfaxbbTSPNMNqVvWM9xhebUcemDK5REzG2j",
"proofs": [
"4qJ2RQPK6J2ACmvaQ5jCPUeaifS3kpdaRx6unboUe8QBHkbR18cPhkJeqoudDXpXRxHjMEqicGtVjB9WvvSmTmxp",
"5w8Egxe2QdQjzx48VysNWCCKT8EWqZqDkNYjiQ3Zeo1eBm49qfy4ycCcJ5mFJnUx1a66GFR8a5J1ALT4hA6kMHCZ"
],
"script": "base64:CAEECnN1YndhckwyXzEBIFXLF+Zti9uTBsn3e5jGAZGN+PIylNb+BdUYqB6N/eU5BApzdWJ3YXJMMl8yASC/Vct7h76s8qjoOGDw3FEbR+Bj5YR+AdqPOuAXIXHybAQLdGFyZ2V0RGFwcDEJAQV2YWx1ZQEJAKYIAQIjM1BLZ044cmZtdkY3aEs3UldKYnB2a2g1OWUxcFFrVXplcm8EC3RhcmdldERhcHAyCQEFdmFsdWUBCQCmCAECIzNQSlZtN3hMUGFibVlvaGJudmRnR0RZSE13blp4RjJ4MThtBAxzZWN1cml0eURhcHAJAQV2YWx1ZQEJAKYIAQIjM016Z0xic2tOODJzdVpna21xVHZ6UXhEdFpmalFmWDFETHAEEnVubGltaXRlZEZ1bmN0aW9ucwI4ZXh0ZW5kTWFpbkNoYWluLGFwcGVuZEJsb2NrLHN0YXJ0QWx0Q2hhaW4sZXh0ZW5kQWx0Q2hhaW4EEGxpbWl0ZWRGdW5jdGlvbnMCG2pvaW4sbGVhdmUsd2l0aGRyYXcsY2xhaW1MUAQLbWF4RmVlUGVyVHgAoMIeBAdzaWduZWQxAwkAxRMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUKc3Vid2FyTDJfMQABAAAEB3NpZ25lZDIDCQDFEwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQpzdWJ3YXJMMl8yAAEAAAQQaXNNdWx0aVNpZ25WYWxpZAkAAAIJAGQCBQdzaWduZWQxBQdzaWduZWQyAAIKARNpc1VubGltaXRlZEZ1bmN0aW9uAQhmdW5jTmFtZQkBAiE9AgkAswkCBRJ1bmxpbWl0ZWRGdW5jdGlvbnMFCGZ1bmNOYW1lBQR1bml0CgERaXNMaW1pdGVkRnVuY3Rpb24BCGZ1bmNOYW1lCQECIT0CCQCzCQIFEGxpbWl0ZWRGdW5jdGlvbnMFCGZ1bmNOYW1lBQR1bml0BAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQBdAUHJG1hdGNoMAQOdGFyZ2V0RnVuY05hbWUIBQF0CGZ1bmN0aW9uAwUQaXNNdWx0aVNpZ25WYWxpZAYDAwkAAAIIBQF0BGRBcHAFC3RhcmdldERhcHAxBgkAAAIIBQF0BGRBcHAFC3RhcmdldERhcHAyAwkBE2lzVW5saW1pdGVkRnVuY3Rpb24BBQ50YXJnZXRGdW5jTmFtZQYDCQERaXNMaW1pdGVkRnVuY3Rpb24BBQ50YXJnZXRGdW5jTmFtZQMJAGYCCAUBdANmZWUFC21heEZlZVBlclR4CQACAQIuVHJhbnNhY3Rpb24gZmVlIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGFtb3VudAQQY2hlY2tMaW1pdFJlc3VsdAkBDlNjcmlwdFRyYW5zZmVyAwUMc2VjdXJpdHlEYXBwAAAFBHVuaXQEByRtYXRjaDEFEGNoZWNrTGltaXRSZXN1bHQDCQABAgUHJG1hdGNoMQIOU2NyaXB0VHJhbnNmZXIEEGNoZWNrTGltaXRSZXN1bHQFByRtYXRjaDEGCQACAQIjSW52YWxpZCByZXNwb25zZSBmcm9tIHNlY3VyaXR5IGRBcHAHBwUQaXNNdWx0aVNpZ25WYWxpZHfB3Bo=",
"chainId": 84,
"height": 3365948,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: 2mfpoxa7qfiFvXgkQRubH2DG3bbSMjvisgVtCqAiE2ms
Next: Ek9H3jgrWL4aT2DoYuQmdjgcprBBzgDNefUW8jLh345u
Diff:
Old | New | | Differences |
---|
1 | | - | {-# STDLIB_VERSION 6 #-} |
---|
| 1 | + | {-# STDLIB_VERSION 8 #-} |
---|
2 | 2 | | {-# CONTENT_TYPE EXPRESSION #-} |
---|
3 | | - | let subwarL2_1 = base58'HpeKQu8xawfaxbbTSPNMNqVvWM9xhebUcemDK5REzG2j' |
---|
4 | | - | let subwarL2_2 = base58'BEVjN4AXKQ2Yw7KS1wiL5DMGg5V9cDniNH7dK2v5d7Ek' |
---|
5 | | - | let targetDapp1 = value(addressFromString("3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf")) |
---|
| 3 | + | let subwarL2_1 = base58'6muGj1AZfEJ2jxi2UKUDR8qsEchQtouSycDRaTHXk7Wx' |
---|
| 4 | + | let subwarL2_2 = base58'DstkNBYUaD6nmPrRxSPM3bbv9hsAogWghMzRbPbYTJUj' |
---|
| 5 | + | let targetDapp1 = value(addressFromString("3PKgN8rfmvF7hK7RWJbpvkh59e1pQkUzero")) |
---|
6 | 6 | | let targetDapp2 = value(addressFromString("3PJVm7xLPabmYohbnvdgGDYHMwnZxF2x18m")) |
---|
7 | | - | let functions1 = "extendMainChain,appendBlock,startAltChain,extendAltChain,join,leave,withdraw" |
---|
8 | | - | let functions2 = "claimLP" |
---|
| 7 | + | let securityDapp = value(addressFromString("3MzgLbskN82suZgkmqTvzQxDtZfjQfX1DLp")) |
---|
| 8 | + | let unlimitedFunctions = "extendMainChain,appendBlock,startAltChain,extendAltChain" |
---|
| 9 | + | let limitedFunctions = "join,leave,withdraw,claimLP" |
---|
| 10 | + | let maxFeePerTx = 500000 |
---|
9 | 11 | | let signed1 = if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], subwarL2_1)) |
---|
10 | 12 | | then 1 |
---|
11 | 13 | | else 0 |
---|
|
13 | 15 | | then 1 |
---|
14 | 16 | | else 0 |
---|
15 | 17 | | let isMultiSignValid = ((signed1 + signed2) == 2) |
---|
| 18 | + | func isUnlimitedFunction (funcName) = (indexOf(unlimitedFunctions, funcName) != unit) |
---|
| 19 | + | |
---|
| 20 | + | func isLimitedFunction (funcName) = (indexOf(limitedFunctions, funcName) != unit) |
---|
| 21 | + | |
---|
16 | 22 | | match tx { |
---|
17 | 23 | | case t: InvokeScriptTransaction => |
---|
18 | | - | let bypassCondition = if ((t.dApp == targetDapp1)) |
---|
19 | | - | then (indexOf(functions1, t.function) != unit) |
---|
20 | | - | else if ((t.dApp == targetDapp2)) |
---|
21 | | - | then (indexOf(functions2, t.function) != unit) |
---|
22 | | - | else false |
---|
| 24 | + | let targetFuncName = t.function |
---|
23 | 25 | | if (isMultiSignValid) |
---|
24 | 26 | | then true |
---|
25 | | - | else bypassCondition |
---|
| 27 | + | else if (if ((t.dApp == targetDapp1)) |
---|
| 28 | + | then true |
---|
| 29 | + | else (t.dApp == targetDapp2)) |
---|
| 30 | + | then if (isUnlimitedFunction(targetFuncName)) |
---|
| 31 | + | then true |
---|
| 32 | + | else if (isLimitedFunction(targetFuncName)) |
---|
| 33 | + | then if ((t.fee > maxFeePerTx)) |
---|
| 34 | + | then throw("Transaction fee exceeds maximum allowed amount") |
---|
| 35 | + | else { |
---|
| 36 | + | let checkLimitResult = ScriptTransfer(securityDapp, 0, unit) |
---|
| 37 | + | match checkLimitResult { |
---|
| 38 | + | case checkLimitResult: ScriptTransfer => |
---|
| 39 | + | true |
---|
| 40 | + | case _ => |
---|
| 41 | + | throw("Invalid response from security dApp") |
---|
| 42 | + | } |
---|
| 43 | + | } |
---|
| 44 | + | else false |
---|
| 45 | + | else false |
---|
26 | 46 | | case _ => |
---|
27 | 47 | | isMultiSignValid |
---|
28 | 48 | | } |
---|
Full:
Old | New | | Differences |
---|
1 | | - | {-# STDLIB_VERSION 6 #-} |
---|
| 1 | + | {-# STDLIB_VERSION 8 #-} |
---|
2 | 2 | | {-# CONTENT_TYPE EXPRESSION #-} |
---|
3 | | - | let subwarL2_1 = base58'HpeKQu8xawfaxbbTSPNMNqVvWM9xhebUcemDK5REzG2j' |
---|
4 | | - | let subwarL2_2 = base58'BEVjN4AXKQ2Yw7KS1wiL5DMGg5V9cDniNH7dK2v5d7Ek' |
---|
5 | | - | let targetDapp1 = value(addressFromString("3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf")) |
---|
| 3 | + | let subwarL2_1 = base58'6muGj1AZfEJ2jxi2UKUDR8qsEchQtouSycDRaTHXk7Wx' |
---|
| 4 | + | let subwarL2_2 = base58'DstkNBYUaD6nmPrRxSPM3bbv9hsAogWghMzRbPbYTJUj' |
---|
| 5 | + | let targetDapp1 = value(addressFromString("3PKgN8rfmvF7hK7RWJbpvkh59e1pQkUzero")) |
---|
6 | 6 | | let targetDapp2 = value(addressFromString("3PJVm7xLPabmYohbnvdgGDYHMwnZxF2x18m")) |
---|
7 | | - | let functions1 = "extendMainChain,appendBlock,startAltChain,extendAltChain,join,leave,withdraw" |
---|
8 | | - | let functions2 = "claimLP" |
---|
| 7 | + | let securityDapp = value(addressFromString("3MzgLbskN82suZgkmqTvzQxDtZfjQfX1DLp")) |
---|
| 8 | + | let unlimitedFunctions = "extendMainChain,appendBlock,startAltChain,extendAltChain" |
---|
| 9 | + | let limitedFunctions = "join,leave,withdraw,claimLP" |
---|
| 10 | + | let maxFeePerTx = 500000 |
---|
9 | 11 | | let signed1 = if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], subwarL2_1)) |
---|
10 | 12 | | then 1 |
---|
11 | 13 | | else 0 |
---|
12 | 14 | | let signed2 = if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[1], subwarL2_2)) |
---|
13 | 15 | | then 1 |
---|
14 | 16 | | else 0 |
---|
15 | 17 | | let isMultiSignValid = ((signed1 + signed2) == 2) |
---|
| 18 | + | func isUnlimitedFunction (funcName) = (indexOf(unlimitedFunctions, funcName) != unit) |
---|
| 19 | + | |
---|
| 20 | + | func isLimitedFunction (funcName) = (indexOf(limitedFunctions, funcName) != unit) |
---|
| 21 | + | |
---|
16 | 22 | | match tx { |
---|
17 | 23 | | case t: InvokeScriptTransaction => |
---|
18 | | - | let bypassCondition = if ((t.dApp == targetDapp1)) |
---|
19 | | - | then (indexOf(functions1, t.function) != unit) |
---|
20 | | - | else if ((t.dApp == targetDapp2)) |
---|
21 | | - | then (indexOf(functions2, t.function) != unit) |
---|
22 | | - | else false |
---|
| 24 | + | let targetFuncName = t.function |
---|
23 | 25 | | if (isMultiSignValid) |
---|
24 | 26 | | then true |
---|
25 | | - | else bypassCondition |
---|
| 27 | + | else if (if ((t.dApp == targetDapp1)) |
---|
| 28 | + | then true |
---|
| 29 | + | else (t.dApp == targetDapp2)) |
---|
| 30 | + | then if (isUnlimitedFunction(targetFuncName)) |
---|
| 31 | + | then true |
---|
| 32 | + | else if (isLimitedFunction(targetFuncName)) |
---|
| 33 | + | then if ((t.fee > maxFeePerTx)) |
---|
| 34 | + | then throw("Transaction fee exceeds maximum allowed amount") |
---|
| 35 | + | else { |
---|
| 36 | + | let checkLimitResult = ScriptTransfer(securityDapp, 0, unit) |
---|
| 37 | + | match checkLimitResult { |
---|
| 38 | + | case checkLimitResult: ScriptTransfer => |
---|
| 39 | + | true |
---|
| 40 | + | case _ => |
---|
| 41 | + | throw("Invalid response from security dApp") |
---|
| 42 | + | } |
---|
| 43 | + | } |
---|
| 44 | + | else false |
---|
| 45 | + | else false |
---|
26 | 46 | | case _ => |
---|
27 | 47 | | isMultiSignValid |
---|
28 | 48 | | } |
---|