tx · 8FCBdbJytynKXN6uFDQhu5adeQhTErDFK9wGXLSnB4av 3MxcXrNbMZKYaSrhcfeMm2hZnBeCu3yRWsw: -0.01000000 Waves 2021.08.30 15:06 [1681055] smart account 3MxcXrNbMZKYaSrhcfeMm2hZnBeCu3yRWsw > SELF 0.00000000 Waves
{ "type": 13, "id": "8FCBdbJytynKXN6uFDQhu5adeQhTErDFK9wGXLSnB4av", "fee": 1000000, "feeAssetId": null, "timestamp": 1630325204429, "version": 2, "chainId": 84, "sender": "3MxcXrNbMZKYaSrhcfeMm2hZnBeCu3yRWsw", "senderPublicKey": "J4oyCYPVt7k14x7c4W8XAAWTJS4WKyxwJGZ8aqYtuL2S", "proofs": [ "4EgbYzpDRSb9A7XdZ4KYu2iendvMhLgkvWvSvf56o8hAhdrCehMwMFv52gfg2gATBswCH24F8tirnxbxRr1D2qKH" ], "script": "base64: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", "height": 1681055, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: Ax5c5ykGHYWX9zu8vwQFdhGZtAfrePTg9MwKiSSur926 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 4 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let storageVerifier = value(addressFromString("3PAjrTqYLgFG24kRwiyU34noumz4pz2kXPK")) | |
5 | + | ||
6 | + | let bank = "3PFacsvuU9sn2ZstaLCWKWn48yT1vfARRRU" | |
7 | + | ||
8 | + | let acceptedToken = base58'9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y' | |
9 | + | ||
10 | + | let usdnID = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" | |
11 | + | ||
12 | + | func checkEntry (prefix,uuid) = match getString(this, (prefix + uuid)) { | |
13 | + | case a: String => | |
14 | + | a | |
15 | + | case _ => | |
16 | + | "NONE" | |
17 | + | } | |
18 | + | ||
19 | + | ||
20 | + | func checkEntryEmail (uuid,domain) = match getString(this, ((uuid + "@") + domain)) { | |
21 | + | case a: String => | |
22 | + | a | |
23 | + | case _ => | |
24 | + | "NONE" | |
25 | + | } | |
26 | + | ||
27 | + | ||
28 | + | func checkUUID (uuid) = match getString(this, uuid) { | |
29 | + | case a: String => | |
30 | + | a | |
31 | + | case _ => | |
32 | + | "NONE" | |
33 | + | } | |
34 | + | ||
35 | + | ||
36 | + | func checkIfWhiteListed (callerAddress) = match getInteger(this, ("addr_WHITELISTED_" + callerAddress)) { | |
37 | + | case a: Int => | |
38 | + | a | |
39 | + | case _ => | |
40 | + | 0 | |
41 | + | } | |
42 | + | ||
43 | + | ||
44 | + | func checkIfPendingToSign (key) = match getString(this, key) { | |
45 | + | case a: String => | |
46 | + | if ((a == "PENDING")) | |
47 | + | then true | |
48 | + | else false | |
49 | + | case _ => | |
50 | + | false | |
51 | + | } | |
52 | + | ||
53 | + | ||
54 | + | func getJsonBeforeValue (json,key) = { | |
55 | + | let keyIndex = value(indexOf(json, (("\"" + key) + "\":"))) | |
56 | + | let data = take(json, ((keyIndex + size(key)) + 3)) | |
57 | + | data | |
58 | + | } | |
59 | + | ||
60 | + | ||
61 | + | func getJsonAfterValue (json,key) = { | |
62 | + | let keyIndex = value(indexOf(json, (("\"" + key) + "\":"))) | |
63 | + | let data = takeRight(json, (size(json) - ((((keyIndex + size(key)) + 3) + 0) + 2))) | |
64 | + | data | |
65 | + | } | |
66 | + | ||
67 | + | ||
68 | + | func asString (bv) = match bv { | |
69 | + | case bv0: String => | |
70 | + | bv0 | |
71 | + | case _ => | |
72 | + | throw("Sponsored Public Key String expected") | |
73 | + | } | |
74 | + | ||
75 | + | ||
76 | + | @Callable(invoke) | |
77 | + | func fileCertification (hash,title,uuid,data,signerPubKey) = { | |
78 | + | let id = value(invoke.transactionId) | |
79 | + | let entryExist = checkEntry(hash, uuid) | |
80 | + | let uuidExist = checkUUID(uuid) | |
81 | + | let callerIsDapp = (this == invoke.caller) | |
82 | + | let callerAddress = if (callerIsDapp) | |
83 | + | then toString(addressFromPublicKey(fromBase58String(signerPubKey))) | |
84 | + | else toBase58String(invoke.caller.bytes) | |
85 | + | let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress) | |
86 | + | if ((entryExist != "NONE")) | |
87 | + | then throw("This entry already exist") | |
88 | + | else if ((uuidExist != "NONE")) | |
89 | + | then throw("This uuid already exist") | |
90 | + | else if ((size(uuid) != 36)) | |
91 | + | then throw("Uuid should be 36 characters.") | |
92 | + | else if ((size(hash) != 64)) | |
93 | + | then throw("Hash should be 64 characters.") | |
94 | + | else if ((size(title) > 64)) | |
95 | + | then throw("Title is too long, 64 characters max.") | |
96 | + | else if ((callerIsWhiteListedNum > 0)) | |
97 | + | then [StringEntry(uuid, toBase58String(id)), StringEntry((hash + uuid), toBase58String(id)), StringEntry((title + uuid), toBase58String(id)), IntegerEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - 1)), StringEntry(((("data_fc_" + toBase58String(id)) + "_") + callerAddress), data), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken)] | |
98 | + | else if (!(callerIsDapp)) | |
99 | + | then { | |
100 | + | let payment = value(invoke.payments[0]) | |
101 | + | let amount = value(payment.amount) | |
102 | + | let paymentAssetId = if (isDefined(payment.assetId)) | |
103 | + | then value(payment.assetId) | |
104 | + | else throw("Waves is not accepted as payment") | |
105 | + | let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(value(paymentAssetId)))) | |
106 | + | if ((acceptedToken != paymentAssetId)) | |
107 | + | then throw("This token is not accepted at the moment") | |
108 | + | else if (if ((amount != currentPrice)) | |
109 | + | then (0 >= callerIsWhiteListedNum) | |
110 | + | else false) | |
111 | + | then throw("The price is wrong") | |
112 | + | else [StringEntry(uuid, toBase58String(id)), StringEntry((hash + uuid), toBase58String(id)), StringEntry((title + uuid), toBase58String(id)), StringEntry(((("data_fc_" + toBase58String(id)) + "_") + callerAddress), data), ScriptTransfer(addressFromStringValue(bank), amount, payment.assetId)] | |
113 | + | } | |
114 | + | else throw("You are not allowed to do that") | |
115 | + | } | |
116 | + | ||
117 | + | ||
118 | + | ||
119 | + | @Callable(invoke) | |
120 | + | func revokeCertification (certificationId,signerPubKey) = { | |
121 | + | let id = value(invoke.transactionId) | |
122 | + | let callerIsDapp = (this == invoke.caller) | |
123 | + | let callerAddress = if (callerIsDapp) | |
124 | + | then toString(addressFromPublicKey(fromBase58String(signerPubKey))) | |
125 | + | else toBase58String(invoke.caller.bytes) | |
126 | + | let entryExist = match getString(this, ((("data_fc_" + certificationId) + "_") + callerAddress)) { | |
127 | + | case a: String => | |
128 | + | a | |
129 | + | case _ => | |
130 | + | "NONE" | |
131 | + | } | |
132 | + | let isRevoked = match getString(this, ("STATUS_FC_" + certificationId)) { | |
133 | + | case a: String => | |
134 | + | a | |
135 | + | case _ => | |
136 | + | "NONE" | |
137 | + | } | |
138 | + | let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress) | |
139 | + | let newJson = (((dropRight(entryExist, 1) + ",\"status\":\"REVOKED_") + toBase58String(id)) + "\"}") | |
140 | + | if ((isRevoked != "NONE")) | |
141 | + | then throw("This certification have already been revoked.") | |
142 | + | else if ((entryExist == "NONE")) | |
143 | + | then throw("You cannot change the status of this certification.") | |
144 | + | else if ((callerIsWhiteListedNum > 0)) | |
145 | + | then [IntegerEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - 1)), StringEntry(("STATUS_FC_" + certificationId), ("REVOKED_" + toBase58String(id))), StringEntry(((("data_fc_" + certificationId) + "_") + callerAddress), newJson)] | |
146 | + | else if (!(callerIsDapp)) | |
147 | + | then { | |
148 | + | let payment = value(invoke.payments[0]) | |
149 | + | let amount = value(payment.amount) | |
150 | + | let paymentAssetId = if (isDefined(payment.assetId)) | |
151 | + | then value(payment.assetId) | |
152 | + | else throw("Waves is not accepted as payment") | |
153 | + | let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(value(paymentAssetId)))) | |
154 | + | if ((acceptedToken != paymentAssetId)) | |
155 | + | then throw("This token is not accepted at the moment") | |
156 | + | else if (if ((amount != currentPrice)) | |
157 | + | then (0 >= callerIsWhiteListedNum) | |
158 | + | else false) | |
159 | + | then throw("The price is wrong") | |
160 | + | else [StringEntry(("STATUS_FC_" + certificationId), ("REVOKED_" + toBase58String(id))), StringEntry(((("data_fc_" + certificationId) + "_") + callerAddress), newJson), ScriptTransfer(addressFromStringValue(bank), amount, payment.assetId)] | |
161 | + | } | |
162 | + | else throw("You are not allowed to do that") | |
163 | + | } | |
164 | + | ||
165 | + | ||
166 | + | ||
167 | + | @Callable(invoke) | |
168 | + | func emailCertification (domain,title,uuid,data,signerPubKey) = { | |
169 | + | let id = value(invoke.transactionId) | |
170 | + | let entryExist = checkEntryEmail(domain, uuid) | |
171 | + | let uuidExist = checkUUID(uuid) | |
172 | + | let callerIsDapp = (this == invoke.caller) | |
173 | + | let callerAddress = if (callerIsDapp) | |
174 | + | then toString(addressFromPublicKey(fromBase58String(signerPubKey))) | |
175 | + | else toBase58String(invoke.caller.bytes) | |
176 | + | let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress) | |
177 | + | if ((entryExist != "NONE")) | |
178 | + | then throw("This entry already exist") | |
179 | + | else if ((uuidExist != "NONE")) | |
180 | + | then throw("This uuid already exist") | |
181 | + | else if ((size(uuid) > 36)) | |
182 | + | then throw("Uuid is too long, 36 characters max.") | |
183 | + | else if ((size(domain) > 64)) | |
184 | + | then throw("Domain is too long, 64 characters max.") | |
185 | + | else if ((size(title) > 64)) | |
186 | + | then throw("Title is too long, 64 characters max.") | |
187 | + | else if ((callerIsWhiteListedNum > 0)) | |
188 | + | then [StringEntry(uuid, toBase58String(id)), StringEntry(((uuid + "@") + domain), toBase58String(id)), StringEntry((title + uuid), toBase58String(id)), IntegerEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - 1)), StringEntry(((("data_ec_" + toBase58String(id)) + "_") + callerAddress), data), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken)] | |
189 | + | else if (!(callerIsDapp)) | |
190 | + | then { | |
191 | + | let payment = value(invoke.payments[0]) | |
192 | + | let amount = value(payment.amount) | |
193 | + | let paymentAssetId = if (isDefined(payment.assetId)) | |
194 | + | then value(payment.assetId) | |
195 | + | else throw("Waves is not accepted as payment") | |
196 | + | let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(value(paymentAssetId)))) | |
197 | + | if ((acceptedToken != paymentAssetId)) | |
198 | + | then throw("This token is not accepted at the moment") | |
199 | + | else if (if ((amount != currentPrice)) | |
200 | + | then (0 >= callerIsWhiteListedNum) | |
201 | + | else false) | |
202 | + | then throw("The price is wrong") | |
203 | + | else [StringEntry(uuid, toBase58String(id)), StringEntry(((uuid + "@") + domain), toBase58String(id)), StringEntry((title + uuid), toBase58String(id)), StringEntry(((("data_ec_" + toBase58String(id)) + "_") + callerAddress), data), ScriptTransfer(addressFromStringValue(bank), amount, payment.assetId)] | |
204 | + | } | |
205 | + | else throw("You are not allowed to do that") | |
206 | + | } | |
207 | + | ||
208 | + | ||
209 | + | ||
210 | + | @Callable(invoke) | |
211 | + | func createAgreement (hash,title,stringifiedJSON,counterParts,signerPubKey,uuid) = { | |
212 | + | let id = value(invoke.transactionId) | |
213 | + | let entryExist = checkEntry(hash, uuid) | |
214 | + | let uuidExist = checkUUID(uuid) | |
215 | + | let callerIsDapp = (this == invoke.caller) | |
216 | + | let callerAddress = if (callerIsDapp) | |
217 | + | then toString(addressFromPublicKey(fromBase58String(signerPubKey))) | |
218 | + | else toBase58String(invoke.caller.bytes) | |
219 | + | let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress) | |
220 | + | let JSON = ((((getJsonBeforeValue(stringifiedJSON, "creator") + "\"") + callerAddress) + "\"") + getJsonAfterValue(stringifiedJSON, "creator")) | |
221 | + | let addressesArray = split(counterParts, ",") | |
222 | + | let totalAddresses = size(addressesArray) | |
223 | + | let globalDataTitle = StringEntry((title + uuid), toBase58String(id)) | |
224 | + | let globalDataHash = StringEntry((hash + uuid), toBase58String(id)) | |
225 | + | let globalDataJson = StringEntry(((("data_MA_" + toBase58String(id)) + "_") + callerAddress), JSON) | |
226 | + | let globalDataOwner = StringEntry(((callerAddress + "_MA_") + toBase58String(id)), ("SIGNED_" + toBase58String(id))) | |
227 | + | let dataWhiteListed = IntegerEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - (totalAddresses + 1))) | |
228 | + | if ((entryExist != "NONE")) | |
229 | + | then throw("This entry already exist") | |
230 | + | else if ((uuidExist != "NONE")) | |
231 | + | then throw("This uuid already exist") | |
232 | + | else if ((size(uuid) > 36)) | |
233 | + | then throw("Uuid is too long, 36 characters max.") | |
234 | + | else if ((size(hash) > 64)) | |
235 | + | then throw("Message-id is too long, 64 characters max.") | |
236 | + | else if ((size(title) > 64)) | |
237 | + | then throw("Title is too long, 64 characters max.") | |
238 | + | else if ((callerIsWhiteListedNum > 0)) | |
239 | + | then if (((totalAddresses + 1) > callerIsWhiteListedNum)) | |
240 | + | then throw("You don't have enough certification credit") | |
241 | + | else if ((totalAddresses == 6)) | |
242 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[5] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[3]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[4]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[5]), 0, acceptedToken)] | |
243 | + | else if ((totalAddresses == 5)) | |
244 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[3]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[4]), 0, acceptedToken)] | |
245 | + | else if ((totalAddresses == 4)) | |
246 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[3]), 0, acceptedToken)] | |
247 | + | else if ((totalAddresses == 3)) | |
248 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken)] | |
249 | + | else if ((totalAddresses == 2)) | |
250 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken)] | |
251 | + | else if ((totalAddresses == 1)) | |
252 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken)] | |
253 | + | else throw("Wrong number of participants") | |
254 | + | else if (!(callerIsDapp)) | |
255 | + | then { | |
256 | + | let payment = value(invoke.payments[0]) | |
257 | + | let amount = if (isDefined(payment.amount)) | |
258 | + | then value(payment.amount) | |
259 | + | else 0 | |
260 | + | let paymentAssetId = if (isDefined(payment.assetId)) | |
261 | + | then value(payment.assetId) | |
262 | + | else acceptedToken | |
263 | + | let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(value(paymentAssetId)))) | |
264 | + | if (((currentPrice * (totalAddresses + 1)) > amount)) | |
265 | + | then throw(("The price is wrong, it should be " + toString((currentPrice * (totalAddresses + 1))))) | |
266 | + | else if ((totalAddresses == 6)) | |
267 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[5] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[3]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[4]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[5]), 0, acceptedToken)] | |
268 | + | else if ((totalAddresses == 5)) | |
269 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[3]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[4]), 0, acceptedToken)] | |
270 | + | else if ((totalAddresses == 4)) | |
271 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[3]), 0, acceptedToken)] | |
272 | + | else if ((totalAddresses == 3)) | |
273 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken)] | |
274 | + | else if ((totalAddresses == 2)) | |
275 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), StringEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken)] | |
276 | + | else if ((totalAddresses == 1)) | |
277 | + | then [globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, StringEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken)] | |
278 | + | else throw(("Needs 1 to 6 recipient addresses, currently sent: " + toString(totalAddresses))) | |
279 | + | } | |
280 | + | else throw("You are not allowed to do that") | |
281 | + | } | |
282 | + | ||
283 | + | ||
284 | + | ||
285 | + | @Callable(invoke) | |
286 | + | func signAgreement (hash,agreementId,signerPubKey) = { | |
287 | + | let payment = value(invoke.payments[0]) | |
288 | + | let amount = value(payment.amount) | |
289 | + | let id = value(invoke.transactionId) | |
290 | + | let callerIsDapp = (this == invoke.caller) | |
291 | + | let signer = if (callerIsDapp) | |
292 | + | then toString(addressFromPublicKey(fromBase58String(signerPubKey))) | |
293 | + | else toBase58String(invoke.caller.bytes) | |
294 | + | let signingRequestExist = checkIfPendingToSign(((signer + "_MA_") + agreementId)) | |
295 | + | if (!(signingRequestExist)) | |
296 | + | then throw("Sorry there is no pending signature") | |
297 | + | else [StringEntry(((signer + "_MA_") + agreementId), ("SIGNED_" + toBase58String(id))), ScriptTransfer(addressFromStringValue(signer), 0, acceptedToken)] | |
298 | + | } | |
299 | + | ||
300 | + | ||
301 | + | ||
302 | + | @Callable(invoke) | |
303 | + | func usdnSignCredits () = { | |
304 | + | let payment = value(invoke.payments[0]) | |
305 | + | let callerAddress = toBase58String(invoke.caller.bytes) | |
306 | + | let tokenId = value(payment.assetId) | |
307 | + | let amount = value(payment.amount) | |
308 | + | let numberOfCredits = ((amount * 2) / 1000000) | |
309 | + | let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress) | |
310 | + | if ((toBase58String(tokenId) != usdnID)) | |
311 | + | then throw("Only USDN can be exchanged") | |
312 | + | else if (if (((amount % 1000000) != 0)) | |
313 | + | then ((amount % 1000000) != 500000) | |
314 | + | else false) | |
315 | + | then throw(((("You can only exchange multiple of 0.5, you sent:" + dropRight(toString(amount), 6)) + ".") + takeRight(toString(amount), 6))) | |
316 | + | else [IntegerEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum + numberOfCredits)), ScriptTransfer(addressFromStringValue(bank), amount, tokenId)] | |
317 | + | } | |
318 | + | ||
319 | + | ||
320 | + | @Verifier(tx) | |
321 | + | func verifier () = match tx { | |
322 | + | case inv: InvokeScriptTransaction => | |
323 | + | if (if (if ((inv.function == "fileCertification")) | |
324 | + | then true | |
325 | + | else (inv.function == "emailCertification")) | |
326 | + | then true | |
327 | + | else (inv.function == "createAgreement")) | |
328 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4]))) | |
329 | + | else if ((inv.function == "signAgreement")) | |
330 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2]))) | |
331 | + | else if ((inv.function == "revokeCertification")) | |
332 | + | then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[1]))) | |
333 | + | else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
334 | + | case _ => | |
335 | + | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
336 | + | } | |
337 | + |
github/deemru/w8io/c3f4982 38.71 ms ◑