tx · GnAQ2wAHZuyCQxmSUhTgJjy8WQ8ifg5o4KiWX9bdCLcE 3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a: -0.01400000 Waves 2021.04.29 23:12 [1504208] smart account 3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a > SELF 0.00000000 Waves
{ "type": 13, "id": "GnAQ2wAHZuyCQxmSUhTgJjy8WQ8ifg5o4KiWX9bdCLcE", "fee": 1400000, "feeAssetId": null, "timestamp": 1619727173711, "version": 2, "chainId": 84, "sender": "3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a", "senderPublicKey": "98wdUyX2hd6XAj7ggvLJURbxcMbJum5CnatqPwMxv9Pw", "proofs": [ "2Y5noCPp7HpJDWb6ZXaHJcWfKWi2RiL1mM5jRCnUXroyY3fdbQYKuyFX52y3rG1ffnYqB6boPt33MdtLjDsX8EED" ], "script": "base64:AAIEAAAAAAAAABUIAhIAEgASAwoBCBIDCgEIEgMKAQgAAAAkAAAAAAphcHBWZXJzaW9uAAAAAAAAAAADAAAAAAdhcHBOYW1lAgAAAA5OaWJlbE5ldCBWYXVsdAAAAAAQYXBwR2VuZXNpc0hlaWdodAAAAAAAABY4ZgAAAAAJc2VwYXJhdG9yAgAAAAFfAAAAAAV3YXZlcwIAAAAFV0FWRVMAAAAABm1heEludAB//////////wAAAAANaW5zdXJhbmNlTmFtZQIAAAAJSW5zdXJhbmNlAAAAAAtyZWNlaXB0TmFtZQIAAAAHUmVjZWlwdAAAAAAOaUR1cGxpY2F0ZU5hbWUCAAAAC0R1SW5zdXJhbmNlAAAAAA5yRHVwbGljYXRlTmFtZQIAAAAJRHVSZWNlaXB0AAAAAA1pbnN1cmFuY2VUeXBlAgAAAAFpAAAAAAtyZWNlaXB0VHlwZQIAAAABcgAAAAANZHVwbGljYXRlVHlwZQIAAAABZAAAAAAOY29uY2x1c2lvblR5cGUCAAAAAWMAAAAACGtleU5vbmNlAgAAAAVub25jZQAAAAAMa2V5QXBwSXNGcmVlAgAAAAthcHBfaXNfZnJlZQAAAAAQa2V5QXBwUHJpdmF0ZUtleQIAAAAPYXBwX3ByaXZhdGVfa2V5AAAAAA1rZXlBcHBWZXJzaW9uAgAAAAthcHBfdmVyc2lvbgAAAAAVa2V5QXBwRnJlZVNpbmNlSGVpZ2h0AgAAABVhcHBfZnJlZV9zaW5jZV9oZWlnaHQAAAAACmtleUFwcE5hbWUCAAAACGFwcF9uYW1lAAAAAAdrZXlUeXBlAgAAAAR0eXBlAAAAAAlrZXlIZWlnaHQCAAAABmhlaWdodAAAAAAJa2V5U2lnbmVyAgAAAAZzaWduZXIAAAAACGtleUFzc2V0AgAAAAVhc3NldAAAAAAJa2V5QW1vdW50AgAAAAZhbW91bnQAAAAAEmtleUluc3VyYW5jZUhlaWdodAIAAAAQaW5zdXJhbmNlX2hlaWdodAAAAAASa2V5SW5zdXJhbmNlU2lnbmVyAgAAABBpbnN1cmFuY2Vfc2lnbmVyAAAAAA5rZXlJbnN1cmFuY2VJZAIAAAASaW5zdXJhbmNlX2Fzc2V0X2lkAAAAAAxrZXlSZWNlaXB0SWQCAAAAEHJlY2VpcHRfYXNzZXRf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", "height": 1504208, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8nKLKSkTgWC3DpFu4carWYj7H8nbwg5kVwSHATW3wMk3 Next: 7PF38XBNjytqqoyrZRPzUBVRGhJ8xpyKjmUErPH1VZvn Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let appVersion = 3 | |
5 | + | ||
6 | + | let appName = "NibelNet Vault" | |
7 | + | ||
8 | + | let appGenesisHeight = 1456230 | |
9 | + | ||
10 | + | let separator = "_" | |
11 | + | ||
12 | + | let waves = "WAVES" | |
13 | + | ||
14 | + | let maxInt = 9223372036854775807 | |
15 | + | ||
16 | + | let insuranceName = "Insurance" | |
17 | + | ||
18 | + | let receiptName = "Receipt" | |
19 | + | ||
20 | + | let iDuplicateName = "DuInsurance" | |
21 | + | ||
22 | + | let rDuplicateName = "DuReceipt" | |
23 | + | ||
24 | + | let insuranceType = "i" | |
25 | + | ||
26 | + | let receiptType = "r" | |
27 | + | ||
28 | + | let duplicateType = "d" | |
29 | + | ||
30 | + | let conclusionType = "c" | |
31 | + | ||
32 | + | let keyNonce = "nonce" | |
33 | + | ||
34 | + | let keyAppIsFree = "app_is_free" | |
35 | + | ||
36 | + | let keyAppPrivateKey = "app_private_key" | |
37 | + | ||
38 | + | let keyAppVersion = "app_version" | |
39 | + | ||
40 | + | let keyAppFreeSinceHeight = "app_free_since_height" | |
41 | + | ||
42 | + | let keyAppName = "app_name" | |
43 | + | ||
44 | + | let keyType = "type" | |
45 | + | ||
46 | + | let keyHeight = "height" | |
47 | + | ||
48 | + | let keySigner = "signer" | |
49 | + | ||
50 | + | let keyAsset = "asset" | |
51 | + | ||
52 | + | let keyAmount = "amount" | |
53 | + | ||
54 | + | let keyInsuranceHeight = "insurance_height" | |
55 | + | ||
56 | + | let keyInsuranceSigner = "insurance_signer" | |
57 | + | ||
58 | + | let keyInsuranceId = "insurance_asset_id" | |
59 | + | ||
60 | + | let keyReceiptId = "receipt_asset_id" | |
61 | + | ||
62 | + | let keyDuplicateOf = "duplicate_of_asset_id" | |
63 | + | ||
64 | + | let keyDuplicateType = "duplicate_type" | |
65 | + | ||
66 | + | func hasAccess (caller) = if (if ((caller == this)) | |
67 | + | then true | |
68 | + | else (appGenesisHeight > height)) | |
69 | + | then throw("Access denied") | |
70 | + | else unit | |
71 | + | ||
72 | + | ||
73 | + | func getNonce () = { | |
74 | + | let nonce = valueOrElse(getInteger(this, keyNonce), 0) | |
75 | + | if ((nonce >= maxInt)) | |
76 | + | then 1 | |
77 | + | else (nonce + 1) | |
78 | + | } | |
79 | + | ||
80 | + | ||
81 | + | func inRange (integer,mini,maxi) = if ((integer >= mini)) | |
82 | + | then (maxi >= integer) | |
83 | + | else false | |
84 | + | ||
85 | + | ||
86 | + | func with (str1,str2) = ((str1 + separator) + str2) | |
87 | + | ||
88 | + | ||
89 | + | func assetTypeValidation (info,enforceType) = if ((info.issuer != this)) | |
90 | + | then throw("Unknown issuer") | |
91 | + | else { | |
92 | + | let type = getStringValue(this, with(keyType, toBase58String(info.id))) | |
93 | + | let isInsurance = if ((info.name == insuranceName)) | |
94 | + | then (type == insuranceType) | |
95 | + | else false | |
96 | + | let isReceipt = if ((info.name == receiptType)) | |
97 | + | then (type == receiptType) | |
98 | + | else false | |
99 | + | match enforceType { | |
100 | + | case isType: String => | |
101 | + | if (if (if (isInsurance) | |
102 | + | then (isType == insuranceType) | |
103 | + | else false) | |
104 | + | then true | |
105 | + | else if (isReceipt) | |
106 | + | then (isType == receiptType) | |
107 | + | else false) | |
108 | + | then info | |
109 | + | else throw("Unknown type") | |
110 | + | case _ => | |
111 | + | if (if (!(isInsurance)) | |
112 | + | then !(isReceipt) | |
113 | + | else false) | |
114 | + | then throw("Unknown type") | |
115 | + | else info | |
116 | + | } | |
117 | + | } | |
4 | 118 | ||
5 | 119 | ||
6 | 120 | @Callable(i) | |
7 | - | func call () = { | |
8 | - | let asset = Issue("Asset", "", 1, 0, true, unit, 0) | |
9 | - | let assetId = calculateAssetId(asset) | |
10 | - | [BinaryEntry("bin", base58''), BooleanEntry("bool", true), IntegerEntry("int", 1), StringEntry("str", ""), DeleteEntry("str"), asset, Reissue(assetId, 1, false), Burn(assetId, 1), ScriptTransfer(i.caller, 1, assetId)] | |
11 | - | } | |
121 | + | func deposit () = valueOrElse(hasAccess(i.caller), if (if ((size(i.payments) != 1)) | |
122 | + | then true | |
123 | + | else !(inRange(i.payments[0].amount, 1, maxInt))) | |
124 | + | then throw("Require one valid payment") | |
125 | + | else { | |
126 | + | let assetId = match i.payments[0].assetId { | |
127 | + | case isAsset: ByteVector => | |
128 | + | toBase58String(valueOrErrorMessage(assetInfo(isAsset), "Unknown asset").id) | |
129 | + | case isWaves: Unit => | |
130 | + | waves | |
131 | + | case _ => | |
132 | + | throw("Unknown asset type") | |
133 | + | } | |
134 | + | let nonce = getNonce() | |
135 | + | let insuranceSigner = toString(i.caller) | |
136 | + | let insuranceDesc = makeString([appName, insuranceName, "| Height:", toString(height), "| Signer:", insuranceSigner, "| Asset ID:", assetId, "| Amount:", toString(i.payments[0].amount), "(includes decimals)"], " ") | |
137 | + | let insuranceIssue = Issue(insuranceName, insuranceDesc, 1, 0, false, unit, nonce) | |
138 | + | let insuranceId = calculateAssetId(insuranceIssue) | |
139 | + | let id = toBase58String(insuranceId) | |
140 | + | [IntegerEntry(keyNonce, nonce), insuranceIssue, ScriptTransfer(i.caller, 1, insuranceId), StringEntry(with(keyType, id), insuranceType), IntegerEntry(with(keyHeight, id), height), StringEntry(with(keySigner, id), insuranceSigner), StringEntry(with(keyAsset, id), assetId), IntegerEntry(with(keyAmount, id), i.payments[0].amount)] | |
141 | + | }) | |
142 | + | ||
143 | + | ||
144 | + | ||
145 | + | @Callable(i) | |
146 | + | func withdraw () = valueOrElse(hasAccess(i.caller), if (if ((size(i.payments) != 1)) | |
147 | + | then true | |
148 | + | else (i.payments[0].amount != 1)) | |
149 | + | then throw("Require one NFT payment") | |
150 | + | else { | |
151 | + | let insuranceInfo = assetTypeValidation(valueOrErrorMessage(assetInfo(valueOrErrorMessage(i.payments[0].assetId, "No Waves payment")), "Unknown asset"), insuranceType) | |
152 | + | let insuranceId = toBase58String(insuranceInfo.id) | |
153 | + | let insuranceHeight = getIntegerValue(this, with(keyHeight, insuranceId)) | |
154 | + | let insuranceSigner = getStringValue(this, with(keySigner, insuranceId)) | |
155 | + | let insuranceAsset = getStringValue(this, with(keyAsset, insuranceId)) | |
156 | + | let insuranceAssetAmount = getIntegerValue(this, with(keyAmount, insuranceId)) | |
157 | + | let nonce = getNonce() | |
158 | + | let receiptSigner = toString(i.caller) | |
159 | + | let receiptDesc = makeString([appName, receiptName, "| Insurance Height:", toString(insuranceHeight), "| Insurance Signer:", insuranceSigner, "| Insurance ID:", insuranceId, "| Asset ID:", insuranceAsset, "| Amount:", toString(insuranceAssetAmount), "(includes decimals)", "| Height:", toString(height), "| Signer:", receiptSigner], " ") | |
160 | + | let receiptIssue = Issue(receiptName, receiptDesc, 1, 0, false, unit, nonce) | |
161 | + | let receiptId = calculateAssetId(receiptIssue) | |
162 | + | let id = toBase58String(receiptId) | |
163 | + | let receiptAssetTranfer = match assetInfo(fromBase58String(insuranceAsset)) { | |
164 | + | case isAsset: Asset => | |
165 | + | ScriptTransfer(i.caller, insuranceAssetAmount, isAsset.id) | |
166 | + | case maybeWaves => | |
167 | + | if ((insuranceAsset == waves)) | |
168 | + | then ScriptTransfer(i.caller, insuranceAssetAmount, unit) | |
169 | + | else throw("Unknown asset") | |
170 | + | } | |
171 | + | [IntegerEntry(keyNonce, nonce), Burn(insuranceInfo.id, 1), receiptIssue, ScriptTransfer(i.caller, 1, receiptId), receiptAssetTranfer, StringEntry(with(keyType, insuranceId), conclusionType), StringEntry(with(keyReceiptId, insuranceId), id), StringEntry(with(keyType, id), receiptType), IntegerEntry(with(keyInsuranceHeight, id), insuranceHeight), StringEntry(with(keyInsuranceSigner, id), insuranceSigner), StringEntry(with(keyInsuranceId, id), insuranceId), StringEntry(with(keyAsset, id), insuranceAsset), IntegerEntry(with(keyAmount, id), insuranceAssetAmount), IntegerEntry(with(keyHeight, id), height), StringEntry(with(keySigner, id), receiptSigner)] | |
172 | + | }) | |
173 | + | ||
174 | + | ||
175 | + | ||
176 | + | @Callable(i) | |
177 | + | func claim (claimAssetId) = valueOrElse(hasAccess(i.caller), if ((size(i.payments) != 0)) | |
178 | + | then throw("No need payment") | |
179 | + | else { | |
180 | + | let claimAssetInfo = assetTypeValidation(valueOrErrorMessage(assetInfo(fromBase58String(claimAssetId)), "Unknown asset"), unit) | |
181 | + | if ((assetBalance(this, claimAssetInfo.id) != 1)) | |
182 | + | then throw("Insuffisant balance") | |
183 | + | else if ((toString(i.caller) != getStringValue(this, with(keySigner, claimAssetId)))) | |
184 | + | then throw("Caller isn't last signer") | |
185 | + | else [ScriptTransfer(i.caller, 1, claimAssetInfo.id)] | |
186 | + | }) | |
187 | + | ||
188 | + | ||
189 | + | ||
190 | + | @Callable(i) | |
191 | + | func duplicate (toDuplicateId) = valueOrElse(hasAccess(i.caller), if ((size(i.payments) != 0)) | |
192 | + | then throw("No need payment") | |
193 | + | else { | |
194 | + | let toDuplicateInfo = assetTypeValidation(valueOrErrorMessage(assetInfo(fromBase58String(toDuplicateId)), "Unknown asset"), unit) | |
195 | + | let toDuplicateType = getStringValue(this, with(keyType, toDuplicateId)) | |
196 | + | if ((assetBalance(i.caller, toDuplicateInfo.id) != 1)) | |
197 | + | then throw("Caller isn't owner") | |
198 | + | else { | |
199 | + | let nonce = getNonce() | |
200 | + | let duplicateSigner = toString(i.caller) | |
201 | + | let $t079328406 = if ((toDuplicateType == insuranceType)) | |
202 | + | then $Tuple2(iDuplicateName, makeString([appName, iDuplicateName, "| Insurance ID:", toDuplicateId, "| Height:", toString(height), "| Duplicate Signer:", duplicateSigner], " ")) | |
203 | + | else $Tuple2(rDuplicateName, makeString([appName, rDuplicateName, "| Receipt ID:", toDuplicateId, "| Height:", toString(height), "| Duplicate Signer:", duplicateSigner], " ")) | |
204 | + | let duplicateName = $t079328406._1 | |
205 | + | let duplicateDesc = $t079328406._2 | |
206 | + | let duplicateIssue = Issue(duplicateName, duplicateDesc, 1, 0, false, unit, nonce) | |
207 | + | let duplicateId = calculateAssetId(duplicateIssue) | |
208 | + | let id = toBase58String(duplicateId) | |
209 | + | [IntegerEntry(keyNonce, nonce), duplicateIssue, ScriptTransfer(i.caller, 1, duplicateId), StringEntry(with(keyType, id), duplicateType), IntegerEntry(with(keyHeight, id), height), StringEntry(with(keyDuplicateType, id), toDuplicateType), StringEntry(with(keyDuplicateOf, id), toDuplicateId), StringEntry(with(keySigner, id), duplicateSigner)] | |
210 | + | } | |
211 | + | }) | |
212 | + | ||
213 | + | ||
214 | + | ||
215 | + | @Callable(i) | |
216 | + | func freedom (privKey) = if (if ((this != i.caller)) | |
217 | + | then true | |
218 | + | else valueOrElse(getBoolean(this, keyAppIsFree), false)) | |
219 | + | then throw("Access denied") | |
220 | + | else [BooleanEntry(keyAppIsFree, true), StringEntry(keyAppPrivateKey, privKey), IntegerEntry(keyAppVersion, appVersion), StringEntry(keyAppName, appName), IntegerEntry(keyAppFreeSinceHeight, height)] | |
12 | 221 | ||
13 | 222 | ||
14 | 223 | @Verifier(tx) | |
15 | - | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
224 | + | func verify () = if (valueOrElse(getBoolean(this, keyAppIsFree), false)) | |
225 | + | then false | |
226 | + | else match tx { | |
227 | + | case isUpdate: SetScriptTransaction => | |
228 | + | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
229 | + | case _ => | |
230 | + | false | |
231 | + | } | |
16 | 232 |
github/deemru/w8io/169f3d6 50.41 ms ◑![]()