tx · CQ624XhFv88hV4RQHSUWcoFa3Np6mbgkZNVwn7txiLRS

3NADYuG3G91PrmsrRqQfyeDCf2Pi53UV5id:  -0.01000000 Waves

2022.01.06 15:24 [1867036] smart account 3NADYuG3G91PrmsrRqQfyeDCf2Pi53UV5id > SELF 0.00000000 Waves

{ "type": 13, "id": "CQ624XhFv88hV4RQHSUWcoFa3Np6mbgkZNVwn7txiLRS", "fee": 1000000, "feeAssetId": null, "timestamp": 1641471868058, "version": 2, "chainId": 84, "sender": "3NADYuG3G91PrmsrRqQfyeDCf2Pi53UV5id", "senderPublicKey": "8agr5kfwDL7NLuMetvciXCcd9TcDKZhRwYZPPTAShaCC", "proofs": [ "2btAjLx62ippKS7JqLgAfKqXUGt2arm1MDqD2viHeVEF1faEXTwkR6oMTuAEJFcxofoxgx7SbpNEkFqVSdgRy8JN" ], "script": "base64:AAIFAAAAAAAAABgIAhIFCgMICAgSABIAEgASABIFCgMICAgAAAAMAAAAAA5rZXlCdXlVTFVTUmF0ZQIAAAANYnV5X1VMVVNfcmF0ZQAAAAAca2V5QnV5VUxVU1JhdGVTY2FsZURlbGltaXRlcgIAAAAdYnV5X1VMVVNfcmF0ZV9zY2FsZV9kZWxpbWl0ZXIAAAAAD2tleVNlbGxVTFVTUmF0ZQIAAAAOc2VsbF9VTFVTX3JhdGUAAAAAHWtleVNlbGxVTFVTUmF0ZVNjYWxlRGVsaW1pdGVyAgAAAB5zZWxsX1VMVVNfcmF0ZV9zY2FsZV9kZWxpbWl0ZXIAAAAADWtleU1ha2VORlRGZWUCAAAAEGtleV9tYWtlX05GVF9mZWUAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAABFVTRE4BAAAAIOSwcsQaO/7w9gk22WMNYWxRgCp4LSxG18pSVz66uVShAAAAAARVTFVTAQAAACBcOT9fCNS+BgDGXve/DAHyIfgTONksYUCiHdU9D7LcXQAAAAAHYXNzZXRJZAUAAAAEVVNETgAAAAARY29tbWlzc2lvbkFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVdWfLrG/nFshKp/IvKAqBI71yil2yvGbaUAAAAADWJhY2tlbmRQdWJLZXkBAAAAIEU+KIojenKPtvJwoE3bNs1j1h0IxSf3lVllkJaNLm5PAAAABgAAAAFpAQAAAAdtYWtlTkZUAAAAAwAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAACXByb2R1Y3RJZAQAAAALJHQwMTA4NjExNjEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDAxMDg2MTE2MQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDEwODYxMTYxAAAAAl8yBAAAAAptYWtlTkZUZmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA1rZXlNYWtlTkZURmVlAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABAgAAABdBc3NldCBtdXN0IGJlIFVTRE4gb25seQMJAABmAAAAAgUAAAAKbWFrZU5GVGZlZQUAAAAJcG10QW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAAAaRmVlIGZvciBtYWtlIE5GVCB0b2tlbiBpcyAJAAGkAAAAAQUAAAAKbWFrZU5GVGZlZQMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAACXByb2R1Y3RJZAkAAAIAAAABAgAAAClORlQgZm9yIHRoaXMgcHJvZHVjdElkIGlzIGFscmVhZHkgaXNzdWVkLgQAAAAIbmV3QXNzZXQJAARDAAAABwUAAAAEbmFtZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALZGVzY3JpcHRpb24CAAAAAVsFAAAACXByb2R1Y3RJZAIAAAABXQAAAAAAAAAAAQAAAAAAAAAAAAcFAAAABHVuaXQAAAAAAAAAAAAEAAAACm5ld0Fzc2V0SWQJAAQ4AAAAAQUAAAAIbmV3QXNzZXQJAARMAAAAAgUAAAAIbmV3QXNzZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJcHJvZHVjdElkCQACWAAAAAEFAAAACm5ld0Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY29tbWlzc2lvbkFkZHJlc3MFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACXNldFBhcmFtcwAAAAADCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAArT25seSB0aGUgREFwcCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOa2V5QnV5VUxVU1JhdGUAAAAAAAACSfAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAHGtleUJ1eVVMVVNSYXRlU2NhbGVEZWxpbWl0ZXIAAAAAAAAAA+gJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tleVNlbGxVTFVTUmF0ZQAAAAAAAAGGoAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAda2V5U2VsbFVMVVNSYXRlU2NhbGVEZWxpbWl0ZXIAAAAAAAAAA+gJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtleUNvbW1pc3Npb24AAAAAAAAAdTAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgAAAAAAAA9CQAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5TWFrZU5GVEZlZQAAAAAAAA9CQAUAAAADbmlsAAAAAWkBAAAADmNsZWFyT2xkUGFyYW1zAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAACtPbmx5IHRoZSBEQXBwIGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAAAABBrZXlCdXlVV09STERSYXRlAgAAAA9idXlfVVdPUkxEX3JhdGUEAAAAHmtleUJ1eVVXT1JMRFJhdGVTY2FsZURlbGltaXRlcgIAAAAfYnV5X1VXT1JMRF9yYXRlX3NjYWxlX2RlbGltaXRlcgQAAAARa2V5U2VsbFVXT1JMRFJhdGUCAAAAEHNlbGxfVVdPUkxEX3JhdGUEAAAAH2tleVNlbGxVV09STERSYXRlU2NhbGVEZWxpbWl0ZXICAAAAIHNlbGxfVVdPUkxEX3JhdGVfc2NhbGVfZGVsaW1pdGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEGtleUJ1eVVXT1JMRFJhdGUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAea2V5QnV5VVdPUkxEUmF0ZVNjYWxlRGVsaW1pdGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAEWtleVNlbGxVV09STERSYXRlCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAH2tleVNlbGxVV09STERSYXRlU2NhbGVEZWxpbWl0ZXIFAAAAA25pbAAAAAFpAQAAAAdidXlVTFVTAAAAAAQAAAALJHQwMzE3NjMyNTEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDAzMTc2MzI1MQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDMxNzYzMjUxAAAAAl8yAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABAgAAABdBc3NldCBtdXN0IGJlIFVTRE4gb25seQQAAAAMZXhjaGFuZ2VSYXRlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA5rZXlCdXlVTFVTUmF0ZQQAAAAaZXhjaGFuZ2VSYXRlU2NhbGVEZWxpbWl0ZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAHGtleUJ1eVVMVVNSYXRlU2NhbGVEZWxpbWl0ZXIEAAAAC2Ftb3VudFRvUGF5CQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAaZXhjaGFuZ2VSYXRlU2NhbGVEZWxpbWl0ZXIFAAAADGV4Y2hhbmdlUmF0ZQQAAAAXYW1vdW50V2l0aG91dENvbW1pc3Npb24FAAAAC2Ftb3VudFRvUGF5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAXYW1vdW50V2l0aG91dENvbW1pc3Npb24FAAAABFVMVVMFAAAAA25pbAAAAAFpAQAAAAhzZWxsVUxVUwAAAAAEAAAACyR0MDM5MDUzOTgwCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAALJHQwMzkwNTM5ODAAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAAskdDAzOTA1Mzk4MAAAAAJfMgMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAABFVMVVMJAAACAAAAAQIAAAAXQXNzZXQgbXVzdCBiZSBVTFVTIG9ubHkEAAAADGV4Y2hhbmdlUmF0ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPa2V5U2VsbFVMVVNSYXRlBAAAABpleGNoYW5nZVJhdGVTY2FsZURlbGltaXRlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAda2V5U2VsbFVMVVNSYXRlU2NhbGVEZWxpbWl0ZXIEAAAAC2Ftb3VudFRvUGF5CQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAMZXhjaGFuZ2VSYXRlBQAAABpleGNoYW5nZVJhdGVTY2FsZURlbGltaXRlcgQAAAAXYW1vdW50V2l0aG91dENvbW1pc3Npb24FAAAAC2Ftb3VudFRvUGF5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAXYW1vdW50V2l0aG91dENvbW1pc3Npb24FAAAABFVTRE4FAAAAA25pbAAAAAFpAQAAAAttYWtlUGF5bWVudAAAAAMAAAAJcmVjaXBpZW50AAAACXByb2R1Y3RJZAAAABBiYWNrZW5kU2lnbmF0dXJlBAAAABByZWNpcGllbnRBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAlyZWNpcGllbnQEAAAACyR0MDQ3Njc0ODQyCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAALJHQwNDc2NzQ4NDIAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAAskdDA0NzY3NDg0MgAAAAJfMgQAAAAMYmFja2VuZFByb29mCQAEuQAAAAIJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzCQAETAAAAAIJAAGkAAAAAQUAAAAJcG10QW1vdW50BQAAAANuaWwCAAAAATsDCQEAAAABIQAAAAEJAAnEAAAAAwkAAZsAAAABBQAAAAxiYWNrZW5kUHJvb2YJAAJZAAAAAQUAAAAQYmFja2VuZFNpZ25hdHVyZQUAAAANYmFja2VuZFB1YktleQkAAAIAAAABAgAAABpJbnZhbGlkIHByb29mIGZyb20gYmFja2VuZAMDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAARVU0ROCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAARVTFVTBwkAAAIAAAABAgAAAB9Bc3NldCBtdXN0IGJlIG9ubHkgVVNETiBvciBVTFVTBAAAAApjb21taXNzaW9uCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA1rZXlDb21taXNzaW9uBAAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAQYW1vdW50Q29tbWlzc2lvbgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAXYW1vdW50V2l0aG91dENvbW1pc3Npb24JAABlAAAAAgUAAAAJcG10QW1vdW50BQAAABBhbW91bnRDb21taXNzaW9uBAAAAAxhc3NldERpdmlkZXIDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAABFVTRE4AAAAAAAAPQkAAAAAAAAAAA+gEAAAADmFtb3VudENhc2hiYWNrCQAAawAAAAMFAAAACXBtdEFtb3VudAAAAAAAAAAAZAUAAAAMYXNzZXREaXZpZGVyAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAJcHJvZHVjdElkBAAAAApORlRhc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAACXByb2R1Y3RJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABByZWNpcGllbnRBZGRyZXNzBQAAABdhbW91bnRXaXRob3V0Q29tbWlzc2lvbgUAAAAKcG10QXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjb21taXNzaW9uQWRkcmVzcwUAAAAQYW1vdW50Q29tbWlzc2lvbgUAAAAKcG10QXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADmFtb3VudENhc2hiYWNrBQAAAARVTFVTCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAQUAAAAKTkZUYXNzZXRJZAUAAAADbmlsCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEHJlY2lwaWVudEFkZHJlc3MFAAAAF2Ftb3VudFdpdGhvdXRDb21taXNzaW9uBQAAAApwbXRBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWNvbW1pc3Npb25BZGRyZXNzBQAAABBhbW91bnRDb21taXNzaW9uBQAAAApwbXRBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAOYW1vdW50Q2FzaGJhY2sFAAAABFVMVVMFAAAAA25pbAAAAAD+0qZq", "height": 1867036, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F1FsW4rDkF41sWwBUBtAE8vYPgjugEzp8W8YJVDGAPMd Next: CKng7NpEX9NphT1zT6CV3dH66qQsPUf74TxaGBq4mqX6 Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 4 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyBuyULUSRate = "buy_ULUS_rate"
2323
2424 let commissionAddress = Address(base58'3P9pCG7EBbhAkTxJQkwp6oTyc12zghXGUBW')
2525
26+let backendPubKey = base58'5fJ73uaebbc12bwCegVoRZgNKfn4BqpH8NB8Rs2NpBmg'
27+
2628 @Callable(i)
2729 func makeNFT (name,description,productId) = {
28- let $t010121087 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
29- let pmtAmount = $t010121087._1
30- let pmtAssetId = $t010121087._2
30+ let $t010861161 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
31+ let pmtAmount = $t010861161._1
32+ let pmtAssetId = $t010861161._2
3133 let makeNFTfee = getIntegerValue(this, keyMakeNFTFee)
3234 if ((pmtAssetId != assetId))
3335 then throw("Asset must be USDN only")
6668
6769 @Callable(i)
6870 func buyULUS () = {
69- let $t031023177 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
70- let pmtAmount = $t031023177._1
71- let pmtAssetId = $t031023177._2
71+ let $t031763251 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
72+ let pmtAmount = $t031763251._1
73+ let pmtAssetId = $t031763251._2
7274 if ((pmtAssetId != assetId))
7375 then throw("Asset must be USDN only")
7476 else {
8486
8587 @Callable(i)
8688 func sellULUS () = {
87- let $t038313906 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
88- let pmtAmount = $t038313906._1
89- let pmtAssetId = $t038313906._2
89+ let $t039053980 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
90+ let pmtAmount = $t039053980._1
91+ let pmtAssetId = $t039053980._2
9092 if ((pmtAssetId != ULUS))
9193 then throw("Asset must be ULUS only")
9294 else {
101103
102104
103105 @Callable(i)
104-func makePayment (recipient,productId,proof) = {
106+func makePayment (recipient,productId,backendSignature) = {
105107 let recipientAddress = addressFromStringValue(recipient)
106- let $t046744749 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
107- let pmtAmount = $t046744749._1
108- let pmtAssetId = $t046744749._2
109- if (if ((pmtAssetId != USDN))
110- then (pmtAssetId != ULUS)
111- else false)
112- then throw("Asset must be only USDN or ULUS")
113- else {
114- let commission = getIntegerValue(this, keyCommission)
115- let commissionScaleDelimiter = getIntegerValue(this, keyCommissionScaleDelimiter)
116- let amountCommission = fraction(pmtAmount, commission, commissionScaleDelimiter)
117- let amountWithoutCommission = (pmtAmount - amountCommission)
118- let assetDivider = if ((pmtAssetId == USDN))
119- then 1000000
120- else 1000
121- let amountCashback = fraction(pmtAmount, 100, assetDivider)
122- if (isDefined(getString(this, productId)))
123- then {
124- let NFTassetId = fromBase58String(getStringValue(this, productId))
108+ let $t047674842 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
109+ let pmtAmount = $t047674842._1
110+ let pmtAssetId = $t047674842._2
111+ let backendProof = makeString([toString(this), toString(pmtAmount)], ";")
112+ if (!(sigVerify_8Kb(toBytes(backendProof), fromBase58String(backendSignature), backendPubKey)))
113+ then throw("Invalid proof from backend")
114+ else if (if ((pmtAssetId != USDN))
115+ then (pmtAssetId != ULUS)
116+ else false)
117+ then throw("Asset must be only USDN or ULUS")
118+ else {
119+ let commission = getIntegerValue(this, keyCommission)
120+ let commissionScaleDelimiter = getIntegerValue(this, keyCommissionScaleDelimiter)
121+ let amountCommission = fraction(pmtAmount, commission, commissionScaleDelimiter)
122+ let amountWithoutCommission = (pmtAmount - amountCommission)
123+ let assetDivider = if ((pmtAssetId == USDN))
124+ then 1000000
125+ else 1000
126+ let amountCashback = fraction(pmtAmount, 100, assetDivider)
127+ if (isDefined(getString(this, productId)))
128+ then {
129+ let NFTassetId = fromBase58String(getStringValue(this, productId))
125130 [ScriptTransfer(recipientAddress, amountWithoutCommission, pmtAssetId), ScriptTransfer(commissionAddress, amountCommission, pmtAssetId), ScriptTransfer(i.caller, amountCashback, ULUS), ScriptTransfer(i.caller, 1, NFTassetId)]
126- }
127- else [ScriptTransfer(recipientAddress, amountWithoutCommission, pmtAssetId), ScriptTransfer(commissionAddress, amountCommission, pmtAssetId), ScriptTransfer(i.caller, amountCashback, ULUS)]
128- }
131+ }
132+ else [ScriptTransfer(recipientAddress, amountWithoutCommission, pmtAssetId), ScriptTransfer(commissionAddress, amountCommission, pmtAssetId), ScriptTransfer(i.caller, amountCashback, ULUS)]
133+ }
129134 }
130135
131136
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 4 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyBuyULUSRate = "buy_ULUS_rate"
55
66 let keyBuyULUSRateScaleDelimiter = "buy_ULUS_rate_scale_delimiter"
77
88 let keySellULUSRate = "sell_ULUS_rate"
99
1010 let keySellULUSRateScaleDelimiter = "sell_ULUS_rate_scale_delimiter"
1111
1212 let keyMakeNFTFee = "key_make_NFT_fee"
1313
1414 let keyCommission = "commission"
1515
1616 let keyCommissionScaleDelimiter = "commission_scale_delimiter"
1717
1818 let USDN = base58'GPi1Q6QVgUmuomtThbim81hBYBEUWyf5BVmE4Tnd3sNg'
1919
2020 let ULUS = base58'7D191wpwpSs4WanizHWgiRhAYhCGkmpop4h3NzUQreig'
2121
2222 let assetId = USDN
2323
2424 let commissionAddress = Address(base58'3P9pCG7EBbhAkTxJQkwp6oTyc12zghXGUBW')
2525
26+let backendPubKey = base58'5fJ73uaebbc12bwCegVoRZgNKfn4BqpH8NB8Rs2NpBmg'
27+
2628 @Callable(i)
2729 func makeNFT (name,description,productId) = {
28- let $t010121087 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
29- let pmtAmount = $t010121087._1
30- let pmtAssetId = $t010121087._2
30+ let $t010861161 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
31+ let pmtAmount = $t010861161._1
32+ let pmtAssetId = $t010861161._2
3133 let makeNFTfee = getIntegerValue(this, keyMakeNFTFee)
3234 if ((pmtAssetId != assetId))
3335 then throw("Asset must be USDN only")
3436 else if ((makeNFTfee > pmtAmount))
3537 then throw(("Fee for make NFT token is " + toString(makeNFTfee)))
3638 else if (isDefined(getString(this, productId)))
3739 then throw("NFT for this productId is already issued.")
3840 else {
3941 let newAsset = Issue(name, (((description + "[") + productId) + "]"), 1, 0, false, unit, 0)
4042 let newAssetId = calculateAssetId(newAsset)
4143 [newAsset, StringEntry(productId, toBase58String(newAssetId)), ScriptTransfer(commissionAddress, pmtAmount, pmtAssetId)]
4244 }
4345 }
4446
4547
4648
4749 @Callable(i)
4850 func setParams () = if ((i.caller != this))
4951 then throw("Only the DApp itself can call this function")
5052 else [IntegerEntry(keyBuyULUSRate, 150000), IntegerEntry(keyBuyULUSRateScaleDelimiter, 1000), IntegerEntry(keySellULUSRate, 100000), IntegerEntry(keySellULUSRateScaleDelimiter, 1000), IntegerEntry(keyCommission, 30000), IntegerEntry(keyCommissionScaleDelimiter, 1000000), IntegerEntry(keyMakeNFTFee, 1000000)]
5153
5254
5355
5456 @Callable(i)
5557 func clearOldParams () = if ((i.caller != this))
5658 then throw("Only the DApp itself can call this function")
5759 else {
5860 let keyBuyUWORLDRate = "buy_UWORLD_rate"
5961 let keyBuyUWORLDRateScaleDelimiter = "buy_UWORLD_rate_scale_delimiter"
6062 let keySellUWORLDRate = "sell_UWORLD_rate"
6163 let keySellUWORLDRateScaleDelimiter = "sell_UWORLD_rate_scale_delimiter"
6264 [DeleteEntry(keyBuyUWORLDRate), DeleteEntry(keyBuyUWORLDRateScaleDelimiter), DeleteEntry(keySellUWORLDRate), DeleteEntry(keySellUWORLDRateScaleDelimiter)]
6365 }
6466
6567
6668
6769 @Callable(i)
6870 func buyULUS () = {
69- let $t031023177 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
70- let pmtAmount = $t031023177._1
71- let pmtAssetId = $t031023177._2
71+ let $t031763251 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
72+ let pmtAmount = $t031763251._1
73+ let pmtAssetId = $t031763251._2
7274 if ((pmtAssetId != assetId))
7375 then throw("Asset must be USDN only")
7476 else {
7577 let exchangeRate = getIntegerValue(this, keyBuyULUSRate)
7678 let exchangeRateScaleDelimiter = getIntegerValue(this, keyBuyULUSRateScaleDelimiter)
7779 let amountToPay = fraction(pmtAmount, exchangeRateScaleDelimiter, exchangeRate)
7880 let amountWithoutCommission = amountToPay
7981 [ScriptTransfer(i.caller, amountWithoutCommission, ULUS)]
8082 }
8183 }
8284
8385
8486
8587 @Callable(i)
8688 func sellULUS () = {
87- let $t038313906 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
88- let pmtAmount = $t038313906._1
89- let pmtAssetId = $t038313906._2
89+ let $t039053980 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
90+ let pmtAmount = $t039053980._1
91+ let pmtAssetId = $t039053980._2
9092 if ((pmtAssetId != ULUS))
9193 then throw("Asset must be ULUS only")
9294 else {
9395 let exchangeRate = getIntegerValue(this, keySellULUSRate)
9496 let exchangeRateScaleDelimiter = getIntegerValue(this, keySellULUSRateScaleDelimiter)
9597 let amountToPay = fraction(pmtAmount, exchangeRate, exchangeRateScaleDelimiter)
9698 let amountWithoutCommission = amountToPay
9799 [ScriptTransfer(i.caller, amountWithoutCommission, USDN)]
98100 }
99101 }
100102
101103
102104
103105 @Callable(i)
104-func makePayment (recipient,productId,proof) = {
106+func makePayment (recipient,productId,backendSignature) = {
105107 let recipientAddress = addressFromStringValue(recipient)
106- let $t046744749 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
107- let pmtAmount = $t046744749._1
108- let pmtAssetId = $t046744749._2
109- if (if ((pmtAssetId != USDN))
110- then (pmtAssetId != ULUS)
111- else false)
112- then throw("Asset must be only USDN or ULUS")
113- else {
114- let commission = getIntegerValue(this, keyCommission)
115- let commissionScaleDelimiter = getIntegerValue(this, keyCommissionScaleDelimiter)
116- let amountCommission = fraction(pmtAmount, commission, commissionScaleDelimiter)
117- let amountWithoutCommission = (pmtAmount - amountCommission)
118- let assetDivider = if ((pmtAssetId == USDN))
119- then 1000000
120- else 1000
121- let amountCashback = fraction(pmtAmount, 100, assetDivider)
122- if (isDefined(getString(this, productId)))
123- then {
124- let NFTassetId = fromBase58String(getStringValue(this, productId))
108+ let $t047674842 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
109+ let pmtAmount = $t047674842._1
110+ let pmtAssetId = $t047674842._2
111+ let backendProof = makeString([toString(this), toString(pmtAmount)], ";")
112+ if (!(sigVerify_8Kb(toBytes(backendProof), fromBase58String(backendSignature), backendPubKey)))
113+ then throw("Invalid proof from backend")
114+ else if (if ((pmtAssetId != USDN))
115+ then (pmtAssetId != ULUS)
116+ else false)
117+ then throw("Asset must be only USDN or ULUS")
118+ else {
119+ let commission = getIntegerValue(this, keyCommission)
120+ let commissionScaleDelimiter = getIntegerValue(this, keyCommissionScaleDelimiter)
121+ let amountCommission = fraction(pmtAmount, commission, commissionScaleDelimiter)
122+ let amountWithoutCommission = (pmtAmount - amountCommission)
123+ let assetDivider = if ((pmtAssetId == USDN))
124+ then 1000000
125+ else 1000
126+ let amountCashback = fraction(pmtAmount, 100, assetDivider)
127+ if (isDefined(getString(this, productId)))
128+ then {
129+ let NFTassetId = fromBase58String(getStringValue(this, productId))
125130 [ScriptTransfer(recipientAddress, amountWithoutCommission, pmtAssetId), ScriptTransfer(commissionAddress, amountCommission, pmtAssetId), ScriptTransfer(i.caller, amountCashback, ULUS), ScriptTransfer(i.caller, 1, NFTassetId)]
126- }
127- else [ScriptTransfer(recipientAddress, amountWithoutCommission, pmtAssetId), ScriptTransfer(commissionAddress, amountCommission, pmtAssetId), ScriptTransfer(i.caller, amountCashback, ULUS)]
128- }
131+ }
132+ else [ScriptTransfer(recipientAddress, amountWithoutCommission, pmtAssetId), ScriptTransfer(commissionAddress, amountCommission, pmtAssetId), ScriptTransfer(i.caller, amountCashback, ULUS)]
133+ }
129134 }
130135
131136

github/deemru/w8io/026f985 
32.50 ms