tx · 9nSDMuskYRASLBFmCZN89KibzWqkTnpNFQ8ErPPXeQ7J 3P9VVzzkP1Cfsk3LtTeuUaQqUt5D7sLthLe: -0.01000000 Waves 2022.07.01 20:33 [3186503] smart account 3P9VVzzkP1Cfsk3LtTeuUaQqUt5D7sLthLe > SELF 0.00000000 Waves
{ "type": 13, "id": "9nSDMuskYRASLBFmCZN89KibzWqkTnpNFQ8ErPPXeQ7J", "fee": 1000000, "feeAssetId": null, "timestamp": 1656696819340, "version": 2, "chainId": 87, "sender": "3P9VVzzkP1Cfsk3LtTeuUaQqUt5D7sLthLe", "senderPublicKey": "HiH9eknsCZ417kt2aJnJ9HrnrWCYcdRoGsFi8yANmYx8", "proofs": [ "4zZiVmN1seTkrwBVe2z9U9xLxP8ueL9dPuDnsedytE7RmRWCM6ZNtWTrJYXYbwqdFbAX2TojerbwcjJwe7GmcG9B" ], "script": "base64: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", "height": 3186503, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 79Z1Zp1DG2tpmF8uxFoV3siQ2LvaijSWJwt6GFZ3Jfqc Next: 5RidNqKmo6KneS4rLvZqimdJtHqyCdpT3C2GGLB5GsV2 Diff:
Old | New | Differences | |
---|---|---|---|
54 | 54 | } | |
55 | 55 | ||
56 | 56 | ||
57 | - | @Callable(i) | |
58 | - | func issuePluto (debug) = { | |
57 | + | func calculateIssuePluto (assetId,amount) = { | |
59 | 58 | let onboardingParameters = match invoke(parametersAddress, "getOnboardingParameters", [false], nil) { | |
60 | 59 | case in: List[Any] => | |
61 | 60 | in | |
82 | 81 | case _ => | |
83 | 82 | throw("cannot parse parameters") | |
84 | 83 | } | |
85 | - | let assetId = value(i.payments[0].assetId) | |
86 | 84 | let assetIdStr = toBase58String(assetId) | |
87 | - | let amount = i.payments[0].amount | |
88 | 85 | let poolStr = tryGetStrParameter((("asset_" + assetIdStr) + "_pool")) | |
89 | 86 | let poolAddress = addressFromStringValue(poolStr) | |
90 | 87 | let amountToBuyback = fraction(amount, buybackRatio, 10000) | |
105 | 102 | let teamPlutoIssued = fraction(totalPluto, teamPremium, 10000) | |
106 | 103 | let inv2 = invoke(issuerAddress, "requestIssue", [((plutoIssued + premiumPlutoIssued) + teamPlutoIssued)], nil) | |
107 | 104 | if ((inv2 == inv2)) | |
108 | - | then if (debug) | |
109 | - | then throw(((((((("issued: " + toString(plutoIssued)) + "; bought: ") + toString(plutoBought)) + "; premium: ") + toString(premiumPlutoIssued)) + "; team: ") + toString(teamPlutoIssued))) | |
110 | - | else [ScriptTransfer(treasuryAddress, amountToIssue, assetId), ScriptTransfer(i.caller, (totalPluto + premiumPlutoIssued), plutoId), ScriptTransfer(teamAddress, teamPlutoIssued, plutoId)] | |
105 | + | then [plutoIssued, plutoBought, premiumPlutoIssued, teamPlutoIssued, amountToIssue] | |
111 | 106 | else throw("Strict value is not equal to itself.") | |
112 | 107 | } | |
113 | 108 | else throw("Strict value is not equal to itself.") | |
114 | 109 | } | |
110 | + | else throw("Strict value is not equal to itself.") | |
111 | + | } | |
112 | + | ||
113 | + | ||
114 | + | @Callable(i) | |
115 | + | func issuePluto (debug) = { | |
116 | + | let assetId = value(i.payments[0].assetId) | |
117 | + | let result = calculateIssuePluto(assetId, value(i.payments[0].amount)) | |
118 | + | if ((result == result)) | |
119 | + | then if (debug) | |
120 | + | then throw(((((((("issued: " + toString(result[0])) + "; bought: ") + toString(result[1])) + "; premium: ") + toString(result[2])) + "; team: ") + toString(result[3]))) | |
121 | + | else [ScriptTransfer(treasuryAddress, result[4], assetId), ScriptTransfer(i.caller, ((result[0] + result[1]) + result[2]), plutoId), ScriptTransfer(teamAddress, result[3], plutoId)] | |
122 | + | else throw("Strict value is not equal to itself.") | |
123 | + | } | |
124 | + | ||
125 | + | ||
126 | + | ||
127 | + | @Callable(i) | |
128 | + | func evaluateIssuePluto (debug,assetIdStr,amount) = { | |
129 | + | let assetId = fromBase58String(assetIdStr) | |
130 | + | let result = calculateIssuePluto(assetId, amount) | |
131 | + | if ((result == result)) | |
132 | + | then if (debug) | |
133 | + | then throw(((((((("issued: " + toString(result[0])) + "; bought: ") + toString(result[1])) + "; premium: ") + toString(result[2])) + "; team: ") + toString(result[3]))) | |
134 | + | else $Tuple2(nil, (result[0] + result[1])) | |
115 | 135 | else throw("Strict value is not equal to itself.") | |
116 | 136 | } | |
117 | 137 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let plutoId = base58'YQFYoMwARMQzZs3wqucBTdJNWSbsYk3GAw7wsqU4gyA' | |
5 | 5 | ||
6 | 6 | let plutoIdStr = "YQFYoMwARMQzZs3wqucBTdJNWSbsYk3GAw7wsqU4gyA" | |
7 | 7 | ||
8 | 8 | let parametersAddress = Address(base58'3PPhk65Ab4UDgbxYUDW7YSXkzHfWtj7WBrB') | |
9 | 9 | ||
10 | 10 | let issuerAddress = Address(base58'3PF8pKC8CdmW9sEJUxQVSfezYRSJeThoNR3') | |
11 | 11 | ||
12 | 12 | let treasuryAddress = Address(base58'3PAeDQGNbYa3W2EacZkJG3dSiDnHsQarqzZ') | |
13 | 13 | ||
14 | 14 | let teamAddress = Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL') | |
15 | 15 | ||
16 | 16 | let Scale8 = 100000000 | |
17 | 17 | ||
18 | 18 | func tryGetInteger (key) = match getInteger(this, key) { | |
19 | 19 | case x: Int => | |
20 | 20 | x | |
21 | 21 | case _ => | |
22 | 22 | 0 | |
23 | 23 | } | |
24 | 24 | ||
25 | 25 | ||
26 | 26 | func tryGetIntParameter (key) = match getInteger(parametersAddress, key) { | |
27 | 27 | case x: Int => | |
28 | 28 | x | |
29 | 29 | case _ => | |
30 | 30 | 0 | |
31 | 31 | } | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func tryGetStrParameter (key) = match getString(parametersAddress, key) { | |
35 | 35 | case x: String => | |
36 | 36 | x | |
37 | 37 | case _ => | |
38 | 38 | "" | |
39 | 39 | } | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func calculateBuybackRatio () = { | |
43 | 43 | let treasurySize = tryGetIntParameter("stats_treasurySize") | |
44 | 44 | 5000 | |
45 | 45 | } | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func calculatePoolPrice (poolAddress,assetStr) = { | |
49 | 49 | let a0Weight = getIntegerValue(poolAddress, (("static_" + assetStr) + "_weight")) | |
50 | 50 | let a1Weight = getIntegerValue(poolAddress, (("static_" + plutoIdStr) + "_weight")) | |
51 | 51 | let a0Balance = getIntegerValue(poolAddress, (("global_" + assetStr) + "_balance")) | |
52 | 52 | let a1Balance = getIntegerValue(poolAddress, (("global_" + plutoIdStr) + "_balance")) | |
53 | 53 | fraction(Scale8, (a1Balance * a0Weight), (a0Balance * a1Weight)) | |
54 | 54 | } | |
55 | 55 | ||
56 | 56 | ||
57 | - | @Callable(i) | |
58 | - | func issuePluto (debug) = { | |
57 | + | func calculateIssuePluto (assetId,amount) = { | |
59 | 58 | let onboardingParameters = match invoke(parametersAddress, "getOnboardingParameters", [false], nil) { | |
60 | 59 | case in: List[Any] => | |
61 | 60 | in | |
62 | 61 | case _ => | |
63 | 62 | throw("cannot load parameters") | |
64 | 63 | } | |
65 | 64 | if ((onboardingParameters == onboardingParameters)) | |
66 | 65 | then { | |
67 | 66 | let buybackRatio = match onboardingParameters[4] { | |
68 | 67 | case x: Int => | |
69 | 68 | x | |
70 | 69 | case _ => | |
71 | 70 | throw("cannot parse parameters") | |
72 | 71 | } | |
73 | 72 | let premium = match onboardingParameters[1] { | |
74 | 73 | case x: Int => | |
75 | 74 | x | |
76 | 75 | case _ => | |
77 | 76 | throw("cannot parse parameters") | |
78 | 77 | } | |
79 | 78 | let teamPremium = match onboardingParameters[3] { | |
80 | 79 | case x: Int => | |
81 | 80 | x | |
82 | 81 | case _ => | |
83 | 82 | throw("cannot parse parameters") | |
84 | 83 | } | |
85 | - | let assetId = value(i.payments[0].assetId) | |
86 | 84 | let assetIdStr = toBase58String(assetId) | |
87 | - | let amount = i.payments[0].amount | |
88 | 85 | let poolStr = tryGetStrParameter((("asset_" + assetIdStr) + "_pool")) | |
89 | 86 | let poolAddress = addressFromStringValue(poolStr) | |
90 | 87 | let amountToBuyback = fraction(amount, buybackRatio, 10000) | |
91 | 88 | let amountToIssue = (amount - amountToBuyback) | |
92 | 89 | let inv = invoke(poolAddress, "swap", [plutoIdStr, 0], [AttachedPayment(assetId, amountToBuyback)]) | |
93 | 90 | if ((inv == inv)) | |
94 | 91 | then { | |
95 | 92 | let plutoBought = match inv { | |
96 | 93 | case x: Int => | |
97 | 94 | x | |
98 | 95 | case _ => | |
99 | 96 | 0 | |
100 | 97 | } | |
101 | 98 | let assetPriceToPluto = calculatePoolPrice(poolAddress, assetIdStr) | |
102 | 99 | let plutoIssued = fraction(amountToIssue, assetPriceToPluto, Scale8) | |
103 | 100 | let totalPluto = (plutoBought + plutoIssued) | |
104 | 101 | let premiumPlutoIssued = fraction(totalPluto, premium, 10000) | |
105 | 102 | let teamPlutoIssued = fraction(totalPluto, teamPremium, 10000) | |
106 | 103 | let inv2 = invoke(issuerAddress, "requestIssue", [((plutoIssued + premiumPlutoIssued) + teamPlutoIssued)], nil) | |
107 | 104 | if ((inv2 == inv2)) | |
108 | - | then if (debug) | |
109 | - | then throw(((((((("issued: " + toString(plutoIssued)) + "; bought: ") + toString(plutoBought)) + "; premium: ") + toString(premiumPlutoIssued)) + "; team: ") + toString(teamPlutoIssued))) | |
110 | - | else [ScriptTransfer(treasuryAddress, amountToIssue, assetId), ScriptTransfer(i.caller, (totalPluto + premiumPlutoIssued), plutoId), ScriptTransfer(teamAddress, teamPlutoIssued, plutoId)] | |
105 | + | then [plutoIssued, plutoBought, premiumPlutoIssued, teamPlutoIssued, amountToIssue] | |
111 | 106 | else throw("Strict value is not equal to itself.") | |
112 | 107 | } | |
113 | 108 | else throw("Strict value is not equal to itself.") | |
114 | 109 | } | |
110 | + | else throw("Strict value is not equal to itself.") | |
111 | + | } | |
112 | + | ||
113 | + | ||
114 | + | @Callable(i) | |
115 | + | func issuePluto (debug) = { | |
116 | + | let assetId = value(i.payments[0].assetId) | |
117 | + | let result = calculateIssuePluto(assetId, value(i.payments[0].amount)) | |
118 | + | if ((result == result)) | |
119 | + | then if (debug) | |
120 | + | then throw(((((((("issued: " + toString(result[0])) + "; bought: ") + toString(result[1])) + "; premium: ") + toString(result[2])) + "; team: ") + toString(result[3]))) | |
121 | + | else [ScriptTransfer(treasuryAddress, result[4], assetId), ScriptTransfer(i.caller, ((result[0] + result[1]) + result[2]), plutoId), ScriptTransfer(teamAddress, result[3], plutoId)] | |
122 | + | else throw("Strict value is not equal to itself.") | |
123 | + | } | |
124 | + | ||
125 | + | ||
126 | + | ||
127 | + | @Callable(i) | |
128 | + | func evaluateIssuePluto (debug,assetIdStr,amount) = { | |
129 | + | let assetId = fromBase58String(assetIdStr) | |
130 | + | let result = calculateIssuePluto(assetId, amount) | |
131 | + | if ((result == result)) | |
132 | + | then if (debug) | |
133 | + | then throw(((((((("issued: " + toString(result[0])) + "; bought: ") + toString(result[1])) + "; premium: ") + toString(result[2])) + "; team: ") + toString(result[3]))) | |
134 | + | else $Tuple2(nil, (result[0] + result[1])) | |
115 | 135 | else throw("Strict value is not equal to itself.") | |
116 | 136 | } | |
117 | 137 | ||
118 | 138 | ||
119 | 139 | @Verifier(tx) | |
120 | 140 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
121 | 141 |
github/deemru/w8io/6500d08 44.93 ms ◑