2021.02.09 16:12 [2454447] smart account 3PJUnx4JppA4YHrGgXy3Y7Q59wSgfcJUUfF > SELF 0.00000000 Waves

{ "type": 13, "id": "CMutZWd15jCoKu9ppEQbMJnyjkBTtJYm1AsaST6ZVxP3", "fee": 1400000, "feeAssetId": null, "timestamp": 1612876325695, "version": 1, "sender": "3PJUnx4JppA4YHrGgXy3Y7Q59wSgfcJUUfF", "senderPublicKey": "2troYxBhh7JysitAfC9J4SPb9u1efwMrxBGF4rmg3YhB", "proofs": [ "upkFX4GTxPxTnaHdqxhMDAAqam3vqQPbzrDLX6Wj175b48UhqWKfF5QwnkvfpUHqLjqYCvmPN1kATgcmBR4RAuK", "34eEzzFDBGe3SuhrJr2Dc2JkTp5uuth38ikAxzVqkqnp8dDNMNKLeDvXu8xLdjqvdMBoosatfL5QBp5nHNiMNfKp", "R64Kr7fVSs1YEs7YyABmXrMFUf1Lp4VsjUqgyKnbGstCoeJweGdzdZrq6iDqJkUxDpmUQixbSPnyf39vkQNPs1Z" ], "script": "base64:AwQAAAALYWRkcmVzc0Jvb2sJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVfr+cRRl1yvsX+198945BCBiWLxG77/AlQEAAAAA3ZlcgIAAAAFNy4wLjAKAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAthZGRyZXNzQm9vawUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAFhCQAAAgAAAAECAAAACyMwMDggbm8ga2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwBAAAAAR0eElkCQACWAAAAAEIBQAAAAJ0eAAAAAJpZAQAAAAJcEFkZHJlc3MxCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MxBAAAAAlwQWRkcmVzczIJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczIEAAAACXBBZGRyZXNzMwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzMwQAAAALcEtleTFTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczEFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXkyU2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3MyBQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5M1NpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzMwUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAkAAGcAAAACCQAAZAAAAAIJAABkAAAAAgUAAAALcEtleTFTaWduZWQFAAAAC3BLZXkyU2lnbmVkBQAAAAtwS2V5M1NpZ25lZAAAAAAAAAAAAgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXlmmTnY", "chainId": 87, "height": 2454447, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AWGirCaEzBAUzP77ojLHTmuLfenxVF6uSt2R9qBuXii4 Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let matcherAddress = addressFromString("3PJjwFREg8F9V6Cp9fnUuEwRts6HQQa5nfP")
4-let matcherPublicKey = base58'E3UwaHCQCySghK3zwNB8EDHoc3b8uhzGPFz3gHmWon4W'
5-let gatewayAddress = addressFromString("3P9Typ8Wnoxt719juABnCeErU5wAvfcXAU9")
6-let whitelistAddress = addressFromString("3P87HeVEvJ8xWiQW6N3fpCBHMxwczeGqyqD")
7-let dAppWhitelistAddress = Address(base58'3PLnxdrGeK8e3uw5GigpZhRvkjSnwnt7Sgz')
8-let gatewayControlAssetAddress = base58'J6spRevsYuwKEHgzyPfojvdBPq67C8yvErr6e9ny8Jom'
9-let pAddress1 = addressFromString("3PAxCJyfkGf2ZHiDKXwtGuJdcsF63577Eij")
10-let pAddress2 = addressFromString("3PEhJsyTQBumkG4BHHZihss4NT1bQ4iYwxB")
11-let pAddress3 = addressFromString("3PQnpFrCL3LSdRL7AYk5tZa5uYXYgVfw7Ao")
12-let pAddress4 = addressFromString("3PJq18MXiNuWXHUBeRoaip2sRZSV8yjKiU8")
13-let pAddress5 = addressFromString("3PCQhaLop9UeTMD94KLZJd947NBLKn3nGVK")
14-let validState = 1000
15-let ver = "2.0.0-account"
3+let addressBook = Address(base58'3PPScjS4FTcKQ5PWhXQtDvM8wwtmxQhomwR')
4+let ver = "7.0.0"
5+func getAddressFromBook (key) = match getString(addressBook, key) {
6+ case a: String =>
7+ Address(fromBase58String(a))
8+ case _ =>
9+ throw("#008 no key")
10+}
11+
1612 match tx {
17- case o: Order =>
18- if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
19- then (o.matcherPublicKey == matcherPublicKey)
20- else false
21- case tx: TransferTransaction =>
22- if (!(sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)))
23- then throw("Transaction must be signed by owner")
24- else {
25- let userState = getInteger(extract(whitelistAddress), toBase58String(tx.sender.bytes))
26- if (!(isDefined(userState)))
27- then throw("Address not in whitelist")
28- else if ((userState != validState))
29- then throw("User not in valid state")
30- else if (!(isDefined(tx.assetId)))
31- then {
32- let key = (toBase58String(tx.sender.bytes) + "_WAVES")
33- let minAmount = getInteger(extract(whitelistAddress), key)
34- if (isDefined(minAmount))
35- then {
36- let curBalance = wavesBalance(extract(tx.sender))
37- if ((extract(minAmount) > (curBalance - tx.amount)))
38- then throw("Unable to send such amount (type=2)")
39- else true
40- }
41- else {
42- let keyOverall = "res_WAVES"
43- let minAmountOverall = getInteger(extract(whitelistAddress), keyOverall)
44- if (isDefined(minAmountOverall))
45- then {
46- let curBalance = wavesBalance(extract(tx.sender))
47- if ((extract(minAmountOverall) > (curBalance - tx.amount)))
48- then throw("Unable to send such amount (type=1)")
49- else true
50- }
51- else true
52- }
53- }
54- else if ((tx.assetId == gatewayControlAssetAddress))
55- then (tx.recipient == gatewayAddress)
56- else {
57- let white1List = toBase58String(tx.sender.bytes)
58- let assetTxt = toBase58String(extract(tx.assetId))
59- let white1ListAsset = ((white1List + "_") + assetTxt)
60- let white1ListOverall = ("res_" + assetTxt)
61- let white1ListAssetEntry = getInteger(extract(whitelistAddress), white1ListAsset)
62- if (!(isDefined(white1ListAssetEntry)))
63- then {
64- let white1ListOverallEntry = getInteger(extract(whitelistAddress), white1ListOverall)
65- if (!(isDefined(white1ListOverallEntry)))
66- then true
67- else {
68- let cur1Balance = assetBalance(tx.sender, tx.assetId)
69- if ((extract(white1ListOverallEntry) > (cur1Balance - tx.amount)))
70- then throw("Unable to send such amount (type=1)")
71- else true
72- }
73- }
74- else {
75- let cur1Balance = assetBalance(tx.sender, tx.assetId)
76- if ((extract(white1ListAssetEntry) > (cur1Balance - tx.amount)))
77- then throw("Unable to send such amount (type=2)")
78- else true
79- }
80- }
81- }
8213 case tx: SetScriptTransaction =>
83- let pKey1Signed = if (isDefined(getInteger(extract(pAddress1), toBase58String(tx.id))))
14+ let txId = toBase58String(tx.id)
15+ let pAddress1 = getAddressFromBook("pAddress1")
16+ let pAddress2 = getAddressFromBook("pAddress2")
17+ let pAddress3 = getAddressFromBook("pAddress3")
18+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
8419 then 1
8520 else 0
86- let pKey2Signed = if (isDefined(getInteger(extract(pAddress2), toBase58String(tx.id))))
21+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
8722 then 1
8823 else 0
89- let pKey3Signed = if (isDefined(getInteger(extract(pAddress3), toBase58String(tx.id))))
24+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
9025 then 1
9126 else 0
92- let pKey4Signed = if (isDefined(getInteger(extract(pAddress4), toBase58String(tx.id))))
93- then 1
94- else 0
95- let pKey5Signed = if (isDefined(getInteger(extract(pAddress5), toBase58String(tx.id))))
96- then 1
97- else 0
98- (((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) >= 3)
99- case tx: LeaseTransaction =>
100- false
101- case tx: SponsorFeeTransaction =>
102- false
103- case tx: MassTransferTransaction =>
104- false
105- case tx: IssueTransaction =>
106- false
107- case tx: ReissueTransaction =>
108- false
109- case tx: BurnTransaction =>
110- false
111- case tx: ExchangeTransaction =>
112- false
113- case tx: InvokeScriptTransaction =>
114- match tx.payment {
115- case a: AttachedPayment =>
116- match getInteger(dAppWhitelistAddress, toBase58String(addressFromRecipient(tx.dApp).bytes)) {
117- case unused: Int =>
118- true
119- case _ =>
120- false
121- }
122- case _ =>
123- true
124- }
27+ (((pKey1Signed + pKey2Signed) + pKey3Signed) >= 2)
12528 case _ =>
12629 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
12730 }

github/deemru/w8io/786bc32 
48.70 ms