tx · 3QNKgHtz9rwsZobGNAZK6hcwf3NvUFMknqhWQNJp3bap

3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB:  -0.01400000 Waves

2020.07.08 10:30 [1077962] smart account 3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB > SELF 0.00000000 Waves

{ "type": 13, "id": "3QNKgHtz9rwsZobGNAZK6hcwf3NvUFMknqhWQNJp3bap", "fee": 1400000, "feeAssetId": null, "timestamp": 1594193458147, "version": 1, "sender": "3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB", "senderPublicKey": "Gd5NihbWQoWuTnSvq25TuV2BYZG4U1e9KDqZn9zBPix7", "proofs": [ "57pd6jtR84kpQ9d5qpMMM5baNFXTu3v1yj6GQTGBtGqNj2nhWvEssdA8gi4wU1T7gWqarY4iSMeZoCVY8hz8QEEM" ], "script": "base64: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aWQEAAAAAmlkCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAZpbnZva2UAAAANdHJhbnNhY3Rpb25JZAQAAAAKZW50cnlFeGlzdAkBAAAACmNoZWNrRW50cnkAAAACBQAAAARoYXNoBQAAAAR1dWlkBAAAAAl1dWlkRXhpc3QJAQAAAAljaGVja1VVSUQAAAABBQAAAAR1dWlkBAAAAAxjYWxsZXJJc0RhcHAJAAAAAAAAAgUAAAAEdGhpcwgFAAAABmludm9rZQAAAAZjYWxsZXIEAAAADWNhbGxlckFkZHJlc3MDBQAAAAxjYWxsZXJJc0RhcHAJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABBQAAAAxzaWduZXJQdWJLZXkJAAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABZjYWxsZXJJc1doaXRlTGlzdGVkTnVtCQEAAAASY2hlY2tJZldoaXRlTGlzdGVkAAAAAQUAAAANY2FsbGVyQWRkcmVzcwQAAAAESlNPTgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQEAAAASZ2V0SnNvbkJlZm9yZVZhbHVlAAAAAgUAAAAPc3RyaW5naWZpZWRKU09OAgAAAAdjcmVhdG9yAgAAAAEiBQAAAA1jYWxsZXJBZGRyZXNzAgAAAAEiCQEAAAARZ2V0SnNvbkFmdGVyVmFsdWUAAAACBQAAAA9zdHJpbmdpZmllZEpTT04CAAAAB2NyZWF0b3IEAAAADmFkZHJlc3Nlc0FycmF5CQAEtQAAAAIFAAAADGNvdW50ZXJQYXJ0cwIAAAABLAQAAAAOdG90YWxBZGRyZXNzZXMJAAGQAAAAAQUAAAAOYWRkcmVzc2VzQXJyYXkEAAAAD2dsb2JhbERhdGFUaXRsZQkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAFdGl0bGUFAAAABHV1aWQJAAJYAAAAAQUAAAACaWQEAAAADmdsb2JhbERhdGFIYXNoCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAARoYXNoBQAAAAR1dWlkCQACWAAAAAEFAAAAAmlkBAAAAA5nbG9iYWxEYXRhSnNvbgkBAAAACURhdGFFbnRyeQAA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BF9NQV8JAAJYAAAAAQUAAAACaWQCAAAAB1BFTkRJTkcFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAABGJhbmsFAAAABmFtb3VudAUAAAANYWNjZXB0ZWRUb2tlbgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAGRAAAAAgUAAAAOYWRkcmVzc2VzQXJyYXkAAAAAAAAAAAAAAAAAAAAAAAAFAAAADWFjY2VwdGVkVG9rZW4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABCQABkQAAAAIFAAAADmFkZHJlc3Nlc0FycmF5AAAAAAAAAAABAAAAAAAAAAAABQAAAA1hY2NlcHRlZFRva2VuCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkAAZEAAAACBQAAAA5hZGRyZXNzZXNBcnJheQAAAAAAAAAAAgAAAAAAAAAAAAUAAAANYWNjZXB0ZWRUb2tlbgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAAGRAAAAAgUAAAAOYWRkcmVzc2VzQXJyYXkAAAAAAAAAAAMAAAAAAAAAAAAFAAAADWFjY2VwdGVkVG9rZW4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABCQABkQAAAAIFAAAADmFkZHJlc3Nlc0FycmF5AAAAAAAAAAAEAAAAAAAAAAAABQAAAA1hY2NlcHRlZFRva2VuCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcp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", "chainId": 84, "height": 1077962, "spentComplexity": 0 } View: original | compacted Prev: D8risdpLfP8Lpwisdw4aAG4nP5JDVyoSeGAqMR2J5Ut6 Next: 7vsBkVhmfRQcWwGRQ6rvrv6EssxyDTQeshtwUa5sdNR Diff:
OldNewDifferences
185185
186186
187187 @Callable(invoke)
188-func createAgreement (hash,title,addresses,num,signerPubKey,uuid) = {
188+func createAgreement (hash,title,stringifiedJSON,counterParts,signerPubKey,uuid) = {
189189 let id = extract(invoke.transactionId)
190190 let entryExist = checkEntry(hash, uuid)
191191 let uuidExist = checkUUID(uuid)
194194 then toString(addressFromPublicKey(fromBase58String(signerPubKey)))
195195 else toBase58String(invoke.caller.bytes)
196196 let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress)
197- let JSON = ((((getJsonBeforeValue(addresses, "creator") + "\"") + callerAddress) + "\"") + getJsonAfterValue(addresses, "creator"))
198- let addressesArray = [getValue(addresses, "address1"), getValue(addresses, "address2"), getValue(addresses, "address3"), getValue(addresses, "address4"), getValue(addresses, "address5"), getValue(addresses, "address6")]
199- let totalAddresses = num
197+ let JSON = ((((getJsonBeforeValue(stringifiedJSON, "creator") + "\"") + callerAddress) + "\"") + getJsonAfterValue(stringifiedJSON, "creator"))
198+ let addressesArray = split(counterParts, ",")
199+ let totalAddresses = size(addressesArray)
200200 let globalDataTitle = DataEntry((title + uuid), toBase58String(id))
201201 let globalDataHash = DataEntry((hash + uuid), toBase58String(id))
202202 let globalDataJson = DataEntry(((("data_MA_" + toBase58String(id)) + "_") + callerAddress), JSON)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let storageVerifier = extract(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
55
66 let bank = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
77
88 let acceptedToken = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
99
1010 let usdnID = "3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC"
1111
1212 func checkEntry (prefix,uuid) = match getString(this, (prefix + uuid)) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 "NONE"
1717 }
1818
1919
2020 func checkEntryEmail (uuid,domain) = match getString(this, ((uuid + "@") + domain)) {
2121 case a: String =>
2222 a
2323 case _ =>
2424 "NONE"
2525 }
2626
2727
2828 func checkUUID (uuid) = match getString(this, uuid) {
2929 case a: String =>
3030 a
3131 case _ =>
3232 "NONE"
3333 }
3434
3535
3636 func checkIfWhiteListed (callerAddress) = match getInteger(this, ("addr_WHITELISTED_" + callerAddress)) {
3737 case a: Int =>
3838 a
3939 case _ =>
4040 0
4141 }
4242
4343
4444 func isAdress (addr) = if (if (if ((size(addr) == 35))
4545 then (take(addr, 2) == "3P")
4646 else false)
4747 then true
4848 else (take(addr, 2) == "3N"))
4949 then true
5050 else (take(addr, 2) == "3M")
5151
5252
5353 func countParties (accumulator,addr) = if ((size(addr) > 0))
5454 then (accumulator + 1)
5555 else (accumulator + 0)
5656
5757
5858 func checkIfPendingToSign (key) = match getString(this, key) {
5959 case a: String =>
6060 if ((a == "PENDING"))
6161 then true
6262 else false
6363 case _ =>
6464 false
6565 }
6666
6767
6868 func getValueString (json) = take(drop(json, 1), value(indexOf(drop(json, 1), "\"")))
6969
7070
7171 func getValue (json,key) = {
7272 let keyIndex = value(indexOf(json, (("\"" + key) + "\":")))
7373 let data = drop(json, ((keyIndex + size(key)) + 3))
7474 let jsonValue = getValueString(data)
7575 jsonValue
7676 }
7777
7878
7979 func getJsonBeforeValue (json,key) = {
8080 let keyIndex = value(indexOf(json, (("\"" + key) + "\":")))
8181 let data = take(json, ((keyIndex + size(key)) + 3))
8282 data
8383 }
8484
8585
8686 func getJsonAfterValue (json,key) = {
8787 let keyIndex = value(indexOf(json, (("\"" + key) + "\":")))
8888 let data = takeRight(json, (size(json) - ((((keyIndex + size(key)) + 3) + 0) + 2)))
8989 data
9090 }
9191
9292
9393 func asString (bv) = match bv {
9494 case bv0: String =>
9595 bv0
9696 case _ =>
9797 throw("Sponsored Public Key String expected")
9898 }
9999
100100
101101 @Callable(invoke)
102102 func fileCertification (hash,title,uuid,data,signerPubKey) = {
103103 let id = extract(invoke.transactionId)
104104 let entryExist = checkEntry(hash, uuid)
105105 let uuidExist = checkUUID(uuid)
106106 let callerIsDapp = (this == invoke.caller)
107107 let callerAddress = if (callerIsDapp)
108108 then toString(addressFromPublicKey(fromBase58String(signerPubKey)))
109109 else toBase58String(invoke.caller.bytes)
110110 let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress)
111111 if ((entryExist != "NONE"))
112112 then throw("This entry already exist")
113113 else if ((uuidExist != "NONE"))
114114 then throw("This uuid already exist")
115115 else if ((size(uuid) > 36))
116116 then throw("Uuid is too long, 36 characters max.")
117117 else if ((size(hash) > 64))
118118 then throw("Hash is too long, 64 characters max.")
119119 else if ((size(title) > 64))
120120 then throw("Title is too long, 64 characters max.")
121121 else if ((callerIsWhiteListedNum > 0))
122122 then ScriptResult(WriteSet([DataEntry(uuid, toBase58String(id)), DataEntry((hash + uuid), toBase58String(id)), DataEntry((title + uuid), toBase58String(id)), DataEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - 1)), DataEntry(((("data_fc_" + toBase58String(id)) + "_") + callerAddress), data)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken)]))
123123 else if (!(callerIsDapp))
124124 then {
125125 let payment = extract(invoke.payment)
126126 let amount = extract(payment.amount)
127127 let paymentAssetId = if (isDefined(payment.assetId))
128128 then extract(payment.assetId)
129129 else throw("Waves is not accepted as payment")
130130 let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(extract(paymentAssetId))))
131131 if ((acceptedToken != paymentAssetId))
132132 then throw("This token is not accepted at the moment")
133133 else if (if ((amount != currentPrice))
134134 then (0 >= callerIsWhiteListedNum)
135135 else false)
136136 then throw("The price is wrong")
137137 else ScriptResult(WriteSet([DataEntry(uuid, toBase58String(id)), DataEntry((hash + uuid), toBase58String(id)), DataEntry((title + uuid), toBase58String(id)), DataEntry(((("data_fc_" + toBase58String(id)) + "_") + callerAddress), data)]), TransferSet([ScriptTransfer(addressFromStringValue(bank), amount, payment.assetId)]))
138138 }
139139 else throw("You are not allowed to do that")
140140 }
141141
142142
143143
144144 @Callable(invoke)
145145 func emailCertification (domain,title,uuid,data,signerPubKey) = {
146146 let id = extract(invoke.transactionId)
147147 let entryExist = checkEntryEmail(domain, uuid)
148148 let uuidExist = checkUUID(uuid)
149149 let callerIsDapp = (this == invoke.caller)
150150 let callerAddress = if (callerIsDapp)
151151 then toString(addressFromPublicKey(fromBase58String(signerPubKey)))
152152 else toBase58String(invoke.caller.bytes)
153153 let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress)
154154 if ((entryExist != "NONE"))
155155 then throw("This entry already exist")
156156 else if ((uuidExist != "NONE"))
157157 then throw("This uuid already exist")
158158 else if ((size(uuid) > 36))
159159 then throw("Uuid is too long, 36 characters max.")
160160 else if ((size(domain) > 64))
161161 then throw("Domain is too long, 64 characters max.")
162162 else if ((size(title) > 64))
163163 then throw("Title is too long, 64 characters max.")
164164 else if ((callerIsWhiteListedNum > 0))
165165 then ScriptResult(WriteSet([DataEntry(uuid, toBase58String(id)), DataEntry(((uuid + "@") + domain), toBase58String(id)), DataEntry((title + uuid), toBase58String(id)), DataEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - 1)), DataEntry(((("data_ec_" + toBase58String(id)) + "_") + callerAddress), data)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken)]))
166166 else if (!(callerIsDapp))
167167 then {
168168 let payment = extract(invoke.payment)
169169 let amount = extract(payment.amount)
170170 let paymentAssetId = if (isDefined(payment.assetId))
171171 then extract(payment.assetId)
172172 else throw("Waves is not accepted as payment")
173173 let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(extract(paymentAssetId))))
174174 if ((acceptedToken != paymentAssetId))
175175 then throw("This token is not accepted at the moment")
176176 else if (if ((amount != currentPrice))
177177 then (0 >= callerIsWhiteListedNum)
178178 else false)
179179 then throw("The price is wrong")
180180 else ScriptResult(WriteSet([DataEntry(uuid, toBase58String(id)), DataEntry(((uuid + "@") + domain), toBase58String(id)), DataEntry((title + uuid), toBase58String(id)), DataEntry(((("data_ec_" + toBase58String(id)) + "_") + callerAddress), data)]), TransferSet([ScriptTransfer(addressFromStringValue(bank), amount, payment.assetId)]))
181181 }
182182 else throw("You are not allowed to do that")
183183 }
184184
185185
186186
187187 @Callable(invoke)
188-func createAgreement (hash,title,addresses,num,signerPubKey,uuid) = {
188+func createAgreement (hash,title,stringifiedJSON,counterParts,signerPubKey,uuid) = {
189189 let id = extract(invoke.transactionId)
190190 let entryExist = checkEntry(hash, uuid)
191191 let uuidExist = checkUUID(uuid)
192192 let callerIsDapp = (this == invoke.caller)
193193 let callerAddress = if (callerIsDapp)
194194 then toString(addressFromPublicKey(fromBase58String(signerPubKey)))
195195 else toBase58String(invoke.caller.bytes)
196196 let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress)
197- let JSON = ((((getJsonBeforeValue(addresses, "creator") + "\"") + callerAddress) + "\"") + getJsonAfterValue(addresses, "creator"))
198- let addressesArray = [getValue(addresses, "address1"), getValue(addresses, "address2"), getValue(addresses, "address3"), getValue(addresses, "address4"), getValue(addresses, "address5"), getValue(addresses, "address6")]
199- let totalAddresses = num
197+ let JSON = ((((getJsonBeforeValue(stringifiedJSON, "creator") + "\"") + callerAddress) + "\"") + getJsonAfterValue(stringifiedJSON, "creator"))
198+ let addressesArray = split(counterParts, ",")
199+ let totalAddresses = size(addressesArray)
200200 let globalDataTitle = DataEntry((title + uuid), toBase58String(id))
201201 let globalDataHash = DataEntry((hash + uuid), toBase58String(id))
202202 let globalDataJson = DataEntry(((("data_MA_" + toBase58String(id)) + "_") + callerAddress), JSON)
203203 let globalDataOwner = DataEntry(((callerAddress + "_MA_") + toBase58String(id)), ("SIGNED_" + toBase58String(id)))
204204 let dataWhiteListed = DataEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum - (totalAddresses + 1)))
205205 if ((entryExist != "NONE"))
206206 then throw("This entry already exist")
207207 else if ((uuidExist != "NONE"))
208208 then throw("This uuid already exist")
209209 else if ((size(uuid) > 36))
210210 then throw("Uuid is too long, 36 characters max.")
211211 else if ((size(hash) > 64))
212212 then throw("Message-id is too long, 64 characters max.")
213213 else if ((size(title) > 64))
214214 then throw("Title is too long, 64 characters max.")
215215 else if ((callerIsWhiteListedNum > 0))
216216 then if (((totalAddresses + 1) > callerIsWhiteListedNum))
217217 then throw("You don't have enough certification credit")
218218 else if ((totalAddresses == 6))
219219 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[5] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([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)]))
220220 else if ((totalAddresses == 5))
221221 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([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)]))
222222 else if ((totalAddresses == 4))
223223 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([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)]))
224224 else if ((totalAddresses == 3))
225225 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken)]))
226226 else if ((totalAddresses == 2))
227227 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken)]))
228228 else if ((totalAddresses == 1))
229229 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, dataWhiteListed, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken)]))
230230 else throw("Wrong number of participants")
231231 else if (!(callerIsDapp))
232232 then {
233233 let payment = extract(invoke.payment)
234234 let amount = if (isDefined(payment.amount))
235235 then extract(payment.amount)
236236 else 0
237237 let paymentAssetId = if (isDefined(payment.assetId))
238238 then extract(payment.assetId)
239239 else acceptedToken
240240 let currentPrice = getIntegerValue(storageVerifier, ("certification_fee_" + toBase58String(extract(paymentAssetId))))
241241 if (((currentPrice * (totalAddresses + 1)) > amount))
242242 then throw(("The price is wrong, it should be " + toString((currentPrice * (totalAddresses + 1)))))
243243 else if ((totalAddresses == 6))
244244 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[5] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([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)]))
245245 else if ((totalAddresses == 5))
246246 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[4] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([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)]))
247247 else if ((totalAddresses == 4))
248248 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[3] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([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)]))
249249 else if ((totalAddresses == 3))
250250 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[2] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[2]), 0, acceptedToken)]))
251251 else if ((totalAddresses == 2))
252252 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING"), DataEntry(((addressesArray[1] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[1]), 0, acceptedToken)]))
253253 else if ((totalAddresses == 1))
254254 then ScriptResult(WriteSet([globalDataTitle, globalDataHash, globalDataJson, globalDataOwner, DataEntry(((addressesArray[0] + "_MA_") + toBase58String(id)), "PENDING")]), TransferSet([ScriptTransfer(addressFromStringValue(bank), amount, acceptedToken), ScriptTransfer(addressFromStringValue(addressesArray[0]), 0, acceptedToken)]))
255255 else throw(("Needs 1 to 6 recipient addresses, currently sent: " + toString(totalAddresses)))
256256 }
257257 else throw("You are not allowed to do that")
258258 }
259259
260260
261261
262262 @Callable(invoke)
263263 func signAgreement (hash,agreementId,signerPubKey) = {
264264 let payment = extract(invoke.payment)
265265 let amount = extract(payment.amount)
266266 let id = extract(invoke.transactionId)
267267 let callerIsDapp = (this == invoke.caller)
268268 let signer = if (callerIsDapp)
269269 then toString(addressFromPublicKey(fromBase58String(signerPubKey)))
270270 else toBase58String(invoke.caller.bytes)
271271 let signingRequestExist = checkIfPendingToSign(((signer + "_MA_") + agreementId))
272272 if (!(signingRequestExist))
273273 then throw("Sorry there is no pending signature")
274274 else ScriptResult(WriteSet([DataEntry(((signer + "_MA_") + agreementId), ("SIGNED_" + toBase58String(id)))]), TransferSet([ScriptTransfer(addressFromStringValue(signer), 0, acceptedToken)]))
275275 }
276276
277277
278278
279279 @Callable(invoke)
280280 func usdnSignCredits () = {
281281 let payment = extract(invoke.payment)
282282 let callerAddress = toBase58String(invoke.caller.bytes)
283283 let tokenId = extract(payment.assetId)
284284 let amount = extract(payment.amount)
285285 let numberOfCredits = ((amount * 2) / 1000000)
286286 let callerIsWhiteListedNum = checkIfWhiteListed(callerAddress)
287287 if ((toBase58String(tokenId) != usdnID))
288288 then throw("Only USDN can be exchanged")
289289 else if (if (((amount % 1000000) != 0))
290290 then ((amount % 1000000) != 500000)
291291 else false)
292292 then throw(((("You can only exchange multiple of 0.5, you sent:" + dropRight(toString(amount), 6)) + ".") + takeRight(toString(amount), 6)))
293293 else ScriptResult(WriteSet([DataEntry(("addr_WHITELISTED_" + callerAddress), (callerIsWhiteListedNum + numberOfCredits))]), TransferSet([ScriptTransfer(addressFromStringValue(bank), amount, tokenId)]))
294294 }
295295
296296
297297 @Verifier(tx)
298298 func verifier () = match tx {
299299 case inv: InvokeScriptTransaction =>
300300 if (if (if ((inv.function == "fileCertification"))
301301 then true
302302 else (inv.function == "emailCertification"))
303303 then true
304304 else (inv.function == "createAgreement"))
305305 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
306306 else if ((inv.function == "signAgreement"))
307307 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
308308 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
309309 case _ =>
310310 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
311311 }
312312

github/deemru/w8io/6500d08 
97.69 ms