tx · 72h7y2GikzL8qQFgW2wRRvQ87x1Nh4HakgaAEtanhyM

3PRFZLuC9GMcMQZ2rRm653NtQ3kUK3Fj8Jv:  -0.01400000 Waves

2021.02.01 16:44 [2442929] smart account 3PRFZLuC9GMcMQZ2rRm653NtQ3kUK3Fj8Jv > SELF 0.00000000 Waves

{ "type": 13, "id": "72h7y2GikzL8qQFgW2wRRvQ87x1Nh4HakgaAEtanhyM", "fee": 1400000, "feeAssetId": null, "timestamp": 1612187047000, "version": 1, "sender": "3PRFZLuC9GMcMQZ2rRm653NtQ3kUK3Fj8Jv", "senderPublicKey": "BvF3qUTSesxuBUndaDD1hknPpw8JFR4MtRM5QYJfJz2z", "proofs": [ "5J6kP6Wnrofm2cP6RPgNScmdgFCdDpx7NKGCzHEQv9SbBpMQUmgGVosZJ1GGoHQNgBxxecPNfYKxW8dwp2dYXfQT", "5V7kM5zAPLCZsWN5bMYTgkcy5zDvQLahk4PyTKQDM1Pot59vHWA7z7Vj42jKffWVvu9TVweDYXgTDMJSE4DJU9Fr" ], "script": "base64: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BQAAAANmZWUCAAAAEyBmZWVBbW91bnQgaXMgd3JvbmcKAQAAAAlnZXRTdGF0dXMAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAtkaWdpbGlyYVBheQkAAlgAAAABBQAAAANrZXkAAAAAAAAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF3BQAAAAckbWF0Y2gwBAAAAAhteVN0YXR1cwkBAAAACWdldFN0YXR1cwAAAAEICAUAAAABdwAAAAZzZW5kZXIAAAAFYnl0ZXMEAAAAD3JlY2lwaWVudFN0YXR1cwkBAAAACWdldFN0YXR1cwAAAAEICQAEJAAAAAEIBQAAAAF3AAAACXJlY2lwaWVudAAAAAVieXRlcwQAAAALYXNzZXRTdGF0dXMJAQAAAAlnZXRTdGF0dXMAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCAUAAAABdwAAAAdhc3NldElkBQAAAApwcm94eVdhdmVzBAAAABFkaWdpbGlyYVJlY2lwaWVudAkAAGYAAAACBQAAAA9yZWNpcGllbnRTdGF0dXMAAAAAAAAAAAAEAAAADm15U3RhdHVzQmFubmVkCQAAAAAAAAIFAAAACG15U3RhdHVzBQAAAAZiYW5uZWQEAAAAFXJlY2lwaWVudFN0YXR1c0Jhbm5lZAkAAAAAAAACBQAAAA9yZWNpcGllbnRTdGF0dXMFAAAABmJhbm5lZAQAAAARYXNzZXRTdGF0dXNCYW5uZWQJAAAAAAAAAgUAAAALYXNzZXRTdGF0dXMFAAAABmJhbm5lZAQAAAASaXNGZWVSZWNvdmVyeVRva2VuCQAAAAAAAAIIBQAAAAF3AAAACmZlZUFzc2V0SWQFAAAADXJlY292ZXJ5VG9rZW4EAAAAEmlzUmVjaXBpZW50R2F0ZXdheQkAAAAAAAACCAUAAAABdwAAAAlyZWNpcGllbnQJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAB2dhdGV3YXkEAAAAEWlzRmVlUGF5bWVudFRva2VuCQAAAAAAAAIIBQAAAAF3AAAACmZlZUFzc2V0SWQFAAAADHBheW1lbnRUb2tlbgQAAAARaXNGZWVTcG9uc29yVG9rZW4JAAAAAAAAAggFAAAAAXcAAAAKZmVlQXNzZXRJZAUAAAAMc3BvbnNvclRva2VuBAAAABBpc0V4Y2x1c2l2ZVRva2VuCQAAAAAAAAIFAAAAD2RpZ2lsaXJhUGF5T25seQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAALYXNzZXRTdGF0dXMAAAAAAAAAAAAEAAAAFmlzRGlnaWxpcmFQYXlFeGNsdXNpdmUJAABmAAAAAgUAAAAPZGlnaWxpcmFQYXlPbmx5CQEAAAALdmFsdWVPckVsc2UAAAACBQAAAAthc3NldFN0YXR1cwAAAAAAAAAAAAQAAAAWcGVybWlzc2lvblRyYW5zZmVyVG9EUAMJAABmAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAALYXNzZXRTdGF0dXMFAAAABmJhbm5lZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAAPcmVjaXBpZW50U3RhdHVzAAAAAAAAAAAABgkAAGYAAAACCQEAAAALdmFsdWVPckVsc2UAAAACBQAAAAthc3NldFN0YXR1cwUAAAAGYmFubmVkCQEAAAALdmFsdWVPckVsc2UAAAACBQAAAAhteVN0YXR1cwAAAAAAAAAAAAQAAAARcGVybWlzc2lvblBheW1lbnQDCQAAZgAAAAIFAAAACWZ1bmRCbG9jawkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAALYXNzZXRTdGF0dXMAAAAAAAAAAAAJAABnAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAALYXNzZXRTdGF0dXMAAAAAAAAAAAAFAAAADHBheW1lbnRCbG9jawcEAAAAF3Blcm1pc3Npb25UcmFuc2Zlck5vdERQAwkAAGYAAAACBQAAAA10cmFuc2ZlckJsb2NrCQEAAAALdmFsdWVPckVsc2UAAAACBQAAAAthc3NldFN0YXR1cwAAAAAAAAAAAAYJAABnAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgUAAAALYXNzZXRTdGF0dXMAAAAAAAAAAAAFAAAAEHBheW1lbnRGdW5kQmxvY2sEAAAACmlzUmVjb3ZlcnkDAwMFAAAAEWRpZ2lsaXJhUmVjaXBpZW50BQAAABJpc0ZlZVJlY292ZXJ5VG9rZW4HBQAAABJpc1JlY2lwaWVudEdhdGV3YXkHBQAAAA5teVN0YXR1c0Jhbm5lZAcDAwUAAAAKaXNSZWNvdmVyeQkBAAAACHJlY292ZXJ5AAAAAAcGAwUAAAARZGlnaWxpcmFSZWNpcGllbnQEAAAABnByb2xvZwIAAAAjVHJhbnNmZXIgdG8gRGlnaWxpcmFQYXkgcmVjaXBpZW50OiADBQAAAA5teVN0YXR1c0Jhbm5lZAkAAAIAAAABCQABLAAAAAIFAAAABnByb2xvZwIAAAAgVGhpcyBhY2NvdW50IGhhcyBiZWVuIHN1c3BlbmRlZC4DBQAAABVyZWNpcGllbnRTdGF0dXNCYW5uZWQJAAACAAAAAQkAASwAAAACBQAAAAZwcm9sb2cCAAAAJ1JlY2lwaWVudCdzIGFjY291bnQgaGFzIGJlZW4gc3VzcGVuZGVkLgMFAAAAEWFzc2V0U3RhdHVzQmFubmVkCQAAAgAAAAEJAAEsAAAAAgUAAAAGcHJvbG9nAgAAABtBc3NldCBjYW5ub3QgYmUgdHJhbnNmZXJlZC4DBQAAABZwZXJtaXNzaW9uVHJhbnNmZXJUb0RQCQAAAgAAAAEJAAEsAAAAAgUAAAAGcHJvbG9nAgAAAD1Bc3NldCBjYW5ub3QgYmUgdHJhbnNmZXJlZC4gUmVjaXBpZW50L1NlbmRlciBpcyBub3QgZWxpZ2libGUuAwUAAAAWaXNEaWdpbGlyYVBheUV4Y2x1c2l2ZQkAAAIAAAABCQABLAAAAAIFAAAABnByb2xvZwIAAAAXTm9uLVRyYW5zZmVyYWJsZSBUb2tlbi4DBQAAABJpc1JlY2lwaWVudEdhdGV3YXkDAwUAAAARcGVybWlzc2lvblBheW1lbnQGBQAAABBpc0V4Y2x1c2l2ZVRva2VuCQEAAAAIY2hlY2tGZWUAAAABBQAAAAF3CQAAAgAAAAEJAAEsAAAAAgUAAAAGcHJvbG9nAgAAACFBc3NldCBjYW5ub3QgYmUgdXNlZCBvbiBwYXltZW50cy4DBQAAABFpc0ZlZVBheW1lbnRUb2tlbgkAAAIAAAABCQABLAAAAAIFAAAABnByb2xvZwIAAAAdUGF5bWVudCBUb2tlbiBjYW5ub3QgYmUgdXNlZC4JAQAAAAhjaGVja0ZlZQAAAAEFAAAAAXcEAAAABnByb2xvZwIAAAAnVHJhbnNmZXIgdG8gbm90IERpZ2lsaXJhUGF5IHJlY2lwaWVudDogAwUAAAARaXNGZWVTcG9uc29yVG9rZW4JAAACAAAAAQkAASwAAAACBQAAAAZwcm9sb2cCAAAAHVNwb25zb3IgVG9rZW4gY2Fubm90IGJlIHVzZWQuAwUAAAARaXNGZWVQYXltZW50VG9rZW4JAAACAAAAAQkAASwAAAACBQAAAAZwcm9sb2cCAAAAHVBheW1lbnQgVG9rZW4gY2Fubm90IGJlIHVzZWQuAwUAAAAObXlTdGF0dXNCYW5uZWQJAAACAAAAAQkAASwAAAACBQAAAAZwcm9sb2cCAAAAIFRoaXMgYWNjb3VudCBoYXMgYmVlbiBzdXNwZW5kZWQuAwUAAAAXcGVybWlzc2lvblRyYW5zZmVyTm90RFAJAAACAAAAAQkAASwAAAACBQAAAAZwcm9sb2cCAAAAIFRoaXMgYXNzZXQgY2Fubm90IGJlIHRyYW5zZmVyZWQuCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAD0RhdGFUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAXQFAAAAByRtYXRjaDAEAAAAAnMxAwkAAfQAAAADCAUAAAABdAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAXQAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAABdAAAAA9zZW5kZXJQdWJsaWNLZXkAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAnMyAwkAAfQAAAADCAUAAAABdAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAXQAAAAGcHJvb2ZzAAAAAAAAAAABBQAAAAtkaWdpbGlyYVBheQAAAAAAAAAAAQAAAAAAAAAAAAMJAAAAAAAAAgkAAGQAAAACBQAAAAJzMQUAAAACczIAAAAAAAAAAAIGCQAAAgAAAAECAAAAF0ludGVncml0eSBDaGVjayBGYWlsZWQhCQEAAAAIcmVjb3ZlcnkAAAAAw+X2+Q==", "chainId": 87, "height": 2442929, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6ndBumjoze8wV7AwruvepJ4LDuptXhpMNXec2pAAsVVt Next: 9EnZdny4gn7XDN6PuxV8RauKRstpivrSwJBuhxfGXoKt Diff:
OldNewDifferences
1515 let paymentBlock = 200
1616 let paymentFundBlock = 300
1717 let fundBlock = 400
18-func recovery (w) = {
18+func recovery () = {
1919 let s1 = if (sigVerify(tx.bodyBytes, tx.proofs[0], recovery1))
2020 then 1
2121 else 0
3030 else throw("Unauthorized")
3131 }
3232
33+func checkFee (w) = {
34+ let fee = w.fee
35+ let isFeePaymentToken = (w.feeAssetId == paymentToken)
36+ let isFeeSponsorToken = (w.feeAssetId == sponsorToken)
37+ let unScriptedFee = 5
38+ let scriptedFee = 9
39+ let isScripted = match assetInfo(valueOrElse(w.assetId, proxyWaves)) {
40+ case asset: Asset =>
41+ if (asset.scripted)
42+ then true
43+ else false
44+ case _ =>
45+ false
46+ }
47+ if (if (!(isFeePaymentToken))
48+ then !(isFeeSponsorToken)
49+ else false)
50+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
51+ else if (if (if (isScripted)
52+ then (fee == scriptedFee)
53+ else false)
54+ then true
55+ else if (!(isScripted))
56+ then (fee == unScriptedFee)
57+ else false)
58+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
59+ else throw((toString(fee) + " feeAmount is wrong"))
60+ }
61+
62+func getStatus (key) = valueOrElse(getInteger(addressFromPublicKey(digiliraPay), toBase58String(key)), 0)
63+
3364 match tx {
3465 case w: TransferTransaction =>
35- let myStatus = getInteger(addressFromPublicKey(digiliraPay), toBase58String(w.sender.bytes))
36- let isUser = getInteger(addressFromPublicKey(digiliraPay), toBase58String(addressFromRecipient(w.recipient).bytes))
37- let isAsset = getInteger(addressFromPublicKey(digiliraPay), toBase58String(valueOrElse(w.assetId, proxyWaves)))
38- if (isDefined(isUser))
39- then if (if (if (if (if (if ((isUser == banned))
40- then true
41- else (isAsset == banned))
42- then true
43- else (myStatus == banned))
44- then true
45- else (valueOrElse(isAsset, banned) > valueOrElse(isUser, 0)))
46- then true
47- else (valueOrElse(isAsset, banned) > valueOrElse(myStatus, 0)))
48- then true
49- else (digiliraPayOnly > valueOrElse(isAsset, 0)))
50- then if (if (if ((w.feeAssetId == recoveryToken))
51- then (w.recipient == addressFromPublicKey(gateway))
52- else false)
53- then (myStatus == banned)
54- else false)
55- then recovery(w)
56- else throw("Transfer is not available right now. User banned or permission denied")
57- else if ((w.recipient == addressFromPublicKey(gateway)))
58- then if (if ((fundBlock > valueOrElse(isAsset, 0)))
59- then (valueOrElse(isAsset, 0) >= paymentBlock)
60- else false)
61- then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
62- else throw("Transfer is not available right now. Asset cannot be used on payment transactions.")
63- else if ((w.feeAssetId != paymentToken))
64- then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
65- else throw("Transfer is not available right now. Payment Fee Token")
66- else if (if (if (if (if ((w.feeAssetId == sponsorToken))
67- then true
68- else (w.feeAssetId == paymentToken))
69- then true
70- else (myStatus == banned))
71- then true
72- else (transferBlock > valueOrElse(isAsset, 0)))
73- then true
74- else (valueOrElse(isAsset, 0) >= paymentFundBlock))
75- then throw("Transfer is not available right now.")
76- else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
66+ let myStatus = getStatus(w.sender.bytes)
67+ let recipientStatus = getStatus(addressFromRecipient(w.recipient).bytes)
68+ let assetStatus = getStatus(valueOrElse(w.assetId, proxyWaves))
69+ let digiliraRecipient = (recipientStatus > 0)
70+ let myStatusBanned = (myStatus == banned)
71+ let recipientStatusBanned = (recipientStatus == banned)
72+ let assetStatusBanned = (assetStatus == banned)
73+ let isFeeRecoveryToken = (w.feeAssetId == recoveryToken)
74+ let isRecipientGateway = (w.recipient == addressFromPublicKey(gateway))
75+ let isFeePaymentToken = (w.feeAssetId == paymentToken)
76+ let isFeeSponsorToken = (w.feeAssetId == sponsorToken)
77+ let isExclusiveToken = (digiliraPayOnly == valueOrElse(assetStatus, 0))
78+ let isDigiliraPayExclusive = (digiliraPayOnly > valueOrElse(assetStatus, 0))
79+ let permissionTransferToDP = if ((valueOrElse(assetStatus, banned) > valueOrElse(recipientStatus, 0)))
80+ then true
81+ else (valueOrElse(assetStatus, banned) > valueOrElse(myStatus, 0))
82+ let permissionPayment = if ((fundBlock > valueOrElse(assetStatus, 0)))
83+ then (valueOrElse(assetStatus, 0) >= paymentBlock)
84+ else false
85+ let permissionTransferNotDP = if ((transferBlock > valueOrElse(assetStatus, 0)))
86+ then true
87+ else (valueOrElse(assetStatus, 0) >= paymentFundBlock)
88+ let isRecovery = if (if (if (digiliraRecipient)
89+ then isFeeRecoveryToken
90+ else false)
91+ then isRecipientGateway
92+ else false)
93+ then myStatusBanned
94+ else false
95+ if (if (isRecovery)
96+ then recovery()
97+ else false)
98+ then true
99+ else if (digiliraRecipient)
100+ then {
101+ let prolog = "Transfer to DigiliraPay recipient: "
102+ if (myStatusBanned)
103+ then throw((prolog + "This account has been suspended."))
104+ else if (recipientStatusBanned)
105+ then throw((prolog + "Recipient's account has been suspended."))
106+ else if (assetStatusBanned)
107+ then throw((prolog + "Asset cannot be transfered."))
108+ else if (permissionTransferToDP)
109+ then throw((prolog + "Asset cannot be transfered. Recipient/Sender is not eligible."))
110+ else if (isDigiliraPayExclusive)
111+ then throw((prolog + "Non-Transferable Token."))
112+ else if (isRecipientGateway)
113+ then if (if (permissionPayment)
114+ then true
115+ else isExclusiveToken)
116+ then checkFee(w)
117+ else throw((prolog + "Asset cannot be used on payments."))
118+ else if (isFeePaymentToken)
119+ then throw((prolog + "Payment Token cannot be used."))
120+ else checkFee(w)
121+ }
122+ else {
123+ let prolog = "Transfer to not DigiliraPay recipient: "
124+ if (isFeeSponsorToken)
125+ then throw((prolog + "Sponsor Token cannot be used."))
126+ else if (isFeePaymentToken)
127+ then throw((prolog + "Payment Token cannot be used."))
128+ else if (myStatusBanned)
129+ then throw((prolog + "This account has been suspended."))
130+ else if (permissionTransferNotDP)
131+ then throw((prolog + "This asset cannot be transfered."))
132+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
133+ }
77134 case t: DataTransaction|SetScriptTransaction =>
78- sigVerify(t.bodyBytes, t.proofs[1], digiliraPay)
135+ let s1 = if (sigVerify(t.bodyBytes, t.proofs[0], t.senderPublicKey))
136+ then 1
137+ else 0
138+ let s2 = if (sigVerify(t.bodyBytes, t.proofs[1], digiliraPay))
139+ then 1
140+ else 0
141+ if (((s1 + s2) == 2))
142+ then true
143+ else throw("Integrity Check Failed!")
79144 case _ =>
80- false
145+ recovery()
81146 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
33 let digiliraPay = base58'4snGCeL4Wjopx9awWd7pfdqUYyN1CLqbPz66bn7VY8oe'
44 let gateway = base58'ActWMpdeyp8YHRhLxXmwdJmr37VXGgb44m8DuSVJW3k1'
55 let sponsorToken = base58'HLfv6YiY1ZpDktcKL9R79FTcez9WdMjaeMWxhREGcAqr'
66 let paymentToken = base58'HDBmVe4MFyVdh1Jy48m9XqXiHAVuNbwFB8dPskVMHS6B'
77 let recoveryToken = base58'HL1XtTLSdKMxB8LrkRYszqwtiSRepGTBBdnyrCqgaEVX'
88 let proxyWaves = base58'WAVES'
99 let recovery1 = base58'2tKRd22A8nkVNjtgT7JJxqSR8D9EA2RfsprJt35jw8Hr'
1010 let recovery2 = base58'9cxzRSwiomyztUboaxherWQUUMGqZ3yX2nYrUa6XR9bT'
1111 let recovery3 = base58'BCAaT65dW2nviLrwdqtoWFJP9D8z3576qFYKkHQ4wxPt'
1212 let banned = 403000
1313 let digiliraPayOnly = 99
1414 let transferBlock = 100
1515 let paymentBlock = 200
1616 let paymentFundBlock = 300
1717 let fundBlock = 400
18-func recovery (w) = {
18+func recovery () = {
1919 let s1 = if (sigVerify(tx.bodyBytes, tx.proofs[0], recovery1))
2020 then 1
2121 else 0
2222 let s2 = if (sigVerify(tx.bodyBytes, tx.proofs[1], recovery2))
2323 then 1
2424 else 0
2525 let s3 = if (sigVerify(tx.bodyBytes, tx.proofs[2], recovery3))
2626 then 1
2727 else 0
2828 if ((((s1 + s2) + s3) >= 2))
2929 then true
3030 else throw("Unauthorized")
3131 }
3232
33+func checkFee (w) = {
34+ let fee = w.fee
35+ let isFeePaymentToken = (w.feeAssetId == paymentToken)
36+ let isFeeSponsorToken = (w.feeAssetId == sponsorToken)
37+ let unScriptedFee = 5
38+ let scriptedFee = 9
39+ let isScripted = match assetInfo(valueOrElse(w.assetId, proxyWaves)) {
40+ case asset: Asset =>
41+ if (asset.scripted)
42+ then true
43+ else false
44+ case _ =>
45+ false
46+ }
47+ if (if (!(isFeePaymentToken))
48+ then !(isFeeSponsorToken)
49+ else false)
50+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
51+ else if (if (if (isScripted)
52+ then (fee == scriptedFee)
53+ else false)
54+ then true
55+ else if (!(isScripted))
56+ then (fee == unScriptedFee)
57+ else false)
58+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
59+ else throw((toString(fee) + " feeAmount is wrong"))
60+ }
61+
62+func getStatus (key) = valueOrElse(getInteger(addressFromPublicKey(digiliraPay), toBase58String(key)), 0)
63+
3364 match tx {
3465 case w: TransferTransaction =>
35- let myStatus = getInteger(addressFromPublicKey(digiliraPay), toBase58String(w.sender.bytes))
36- let isUser = getInteger(addressFromPublicKey(digiliraPay), toBase58String(addressFromRecipient(w.recipient).bytes))
37- let isAsset = getInteger(addressFromPublicKey(digiliraPay), toBase58String(valueOrElse(w.assetId, proxyWaves)))
38- if (isDefined(isUser))
39- then if (if (if (if (if (if ((isUser == banned))
40- then true
41- else (isAsset == banned))
42- then true
43- else (myStatus == banned))
44- then true
45- else (valueOrElse(isAsset, banned) > valueOrElse(isUser, 0)))
46- then true
47- else (valueOrElse(isAsset, banned) > valueOrElse(myStatus, 0)))
48- then true
49- else (digiliraPayOnly > valueOrElse(isAsset, 0)))
50- then if (if (if ((w.feeAssetId == recoveryToken))
51- then (w.recipient == addressFromPublicKey(gateway))
52- else false)
53- then (myStatus == banned)
54- else false)
55- then recovery(w)
56- else throw("Transfer is not available right now. User banned or permission denied")
57- else if ((w.recipient == addressFromPublicKey(gateway)))
58- then if (if ((fundBlock > valueOrElse(isAsset, 0)))
59- then (valueOrElse(isAsset, 0) >= paymentBlock)
60- else false)
61- then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
62- else throw("Transfer is not available right now. Asset cannot be used on payment transactions.")
63- else if ((w.feeAssetId != paymentToken))
64- then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
65- else throw("Transfer is not available right now. Payment Fee Token")
66- else if (if (if (if (if ((w.feeAssetId == sponsorToken))
67- then true
68- else (w.feeAssetId == paymentToken))
69- then true
70- else (myStatus == banned))
71- then true
72- else (transferBlock > valueOrElse(isAsset, 0)))
73- then true
74- else (valueOrElse(isAsset, 0) >= paymentFundBlock))
75- then throw("Transfer is not available right now.")
76- else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
66+ let myStatus = getStatus(w.sender.bytes)
67+ let recipientStatus = getStatus(addressFromRecipient(w.recipient).bytes)
68+ let assetStatus = getStatus(valueOrElse(w.assetId, proxyWaves))
69+ let digiliraRecipient = (recipientStatus > 0)
70+ let myStatusBanned = (myStatus == banned)
71+ let recipientStatusBanned = (recipientStatus == banned)
72+ let assetStatusBanned = (assetStatus == banned)
73+ let isFeeRecoveryToken = (w.feeAssetId == recoveryToken)
74+ let isRecipientGateway = (w.recipient == addressFromPublicKey(gateway))
75+ let isFeePaymentToken = (w.feeAssetId == paymentToken)
76+ let isFeeSponsorToken = (w.feeAssetId == sponsorToken)
77+ let isExclusiveToken = (digiliraPayOnly == valueOrElse(assetStatus, 0))
78+ let isDigiliraPayExclusive = (digiliraPayOnly > valueOrElse(assetStatus, 0))
79+ let permissionTransferToDP = if ((valueOrElse(assetStatus, banned) > valueOrElse(recipientStatus, 0)))
80+ then true
81+ else (valueOrElse(assetStatus, banned) > valueOrElse(myStatus, 0))
82+ let permissionPayment = if ((fundBlock > valueOrElse(assetStatus, 0)))
83+ then (valueOrElse(assetStatus, 0) >= paymentBlock)
84+ else false
85+ let permissionTransferNotDP = if ((transferBlock > valueOrElse(assetStatus, 0)))
86+ then true
87+ else (valueOrElse(assetStatus, 0) >= paymentFundBlock)
88+ let isRecovery = if (if (if (digiliraRecipient)
89+ then isFeeRecoveryToken
90+ else false)
91+ then isRecipientGateway
92+ else false)
93+ then myStatusBanned
94+ else false
95+ if (if (isRecovery)
96+ then recovery()
97+ else false)
98+ then true
99+ else if (digiliraRecipient)
100+ then {
101+ let prolog = "Transfer to DigiliraPay recipient: "
102+ if (myStatusBanned)
103+ then throw((prolog + "This account has been suspended."))
104+ else if (recipientStatusBanned)
105+ then throw((prolog + "Recipient's account has been suspended."))
106+ else if (assetStatusBanned)
107+ then throw((prolog + "Asset cannot be transfered."))
108+ else if (permissionTransferToDP)
109+ then throw((prolog + "Asset cannot be transfered. Recipient/Sender is not eligible."))
110+ else if (isDigiliraPayExclusive)
111+ then throw((prolog + "Non-Transferable Token."))
112+ else if (isRecipientGateway)
113+ then if (if (permissionPayment)
114+ then true
115+ else isExclusiveToken)
116+ then checkFee(w)
117+ else throw((prolog + "Asset cannot be used on payments."))
118+ else if (isFeePaymentToken)
119+ then throw((prolog + "Payment Token cannot be used."))
120+ else checkFee(w)
121+ }
122+ else {
123+ let prolog = "Transfer to not DigiliraPay recipient: "
124+ if (isFeeSponsorToken)
125+ then throw((prolog + "Sponsor Token cannot be used."))
126+ else if (isFeePaymentToken)
127+ then throw((prolog + "Payment Token cannot be used."))
128+ else if (myStatusBanned)
129+ then throw((prolog + "This account has been suspended."))
130+ else if (permissionTransferNotDP)
131+ then throw((prolog + "This asset cannot be transfered."))
132+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
133+ }
77134 case t: DataTransaction|SetScriptTransaction =>
78- sigVerify(t.bodyBytes, t.proofs[1], digiliraPay)
135+ let s1 = if (sigVerify(t.bodyBytes, t.proofs[0], t.senderPublicKey))
136+ then 1
137+ else 0
138+ let s2 = if (sigVerify(t.bodyBytes, t.proofs[1], digiliraPay))
139+ then 1
140+ else 0
141+ if (((s1 + s2) == 2))
142+ then true
143+ else throw("Integrity Check Failed!")
79144 case _ =>
80- false
145+ recovery()
81146 }

github/deemru/w8io/3ef1775 
39.07 ms