tx · G4khhUoNBXiftAKSdv7gCokLF2zotatEoMPfFX3gKxex 3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a: -0.01400000 Waves 2021.04.14 12:20 [1481938] smart account 3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a > SELF 0.00000000 Waves
{ "type": 13, "id": "G4khhUoNBXiftAKSdv7gCokLF2zotatEoMPfFX3gKxex", "fee": 1400000, "feeAssetId": null, "timestamp": 1618392003629, "version": 2, "chainId": 84, "sender": "3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a", "senderPublicKey": "98wdUyX2hd6XAj7ggvLJURbxcMbJum5CnatqPwMxv9Pw", "proofs": [ "5u6rf44W38gga5kTJTGWQ3MK7L6Q1wrQabvwMSciQKLiYzQrfXeCA8mjMhkqhfnwHNFpcZs7x3oxjPbKKkuZeU1y" ], "script": "base64:AAIEAAAAAAAAABUIAhIAEgASAwoBCBIDCgEIEgMKAQgAAAARAAAAAAlzZXBhcmF0b3ICAAAAA19fXwAAAAAHd2F2ZXNJZAIAAAAFV0FWRVMAAAAADWdlbmVzaXNIZWlnaHQAAAAAAAAWOGYAAAAADGNvbnRyYWN0TmFtZQIAAAANVmF1bHRDb250cmFjdAAAAAALcmVjZWlwdE5hbWUCAAAADFZhdWx0UmVjZWlwdAAAAAALY29udHJhY3RUYWcCAAAAAUMAAAAACnJlY2VpcHRUYWcCAAAAAVIAAAAADGR1cGxpY2F0ZVRhZwIAAAABRAAAAAANa2V5Tm9uY2VDb3VudAIAAAALTk9OQ0VfQ09VTlQAAAAACWtleUlzRnJlZQIAAAAHSVNfRlJFRQAAAAANa2V5UHJpdmF0ZUtleQIAAAALUFJJVkFURV9LRVkAAAAABm1heEludAB//////////wAAAAAObWF4RGF0YUtleVNpemUAAAAAAAAAAZAAAAAAE21heERlc2NyaXB0aW9uQnl0ZXMAAAAAAAAAA+gAAAAADG1heE5hbWVCeXRlcwAAAAAAAAAAEAEAAAANZ2VuZXJhdGVOb25jZQAAAAAEAAAACm5vbmNlVmFsdWUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAANa2V5Tm9uY2VDb3VudAAAAAAAAAAAAQMJAABnAAAAAgUAAAAKbm9uY2VWYWx1ZQUAAAAGbWF4SW50AAAAAAAAAAABCQAAZAAAAAIFAAAACm5vbmNlVmFsdWUAAAAAAAAAAAEBAAAAFGhhc1NlcGFyYXRvckluU3RyaW5nAAAAAgAAAA5mb3VuZFNlcGFyYXRvcgAAAA1zdHJpbmdUb0NoZWNrAwkAAAAAAAACBQAAAA5mb3VuZFNlcGFyYXRvcgYGCQEAAAAIY29udGFpbnMAAAACBQAAAA1zdHJpbmdUb0NoZWNrBQAAAAlzZXBhcmF0b3IAAAAFAAAAAWkBAAAAB2RlcG9zaXQAAAAAAwkAAGYAAAACBQAAAA1nZW5lc2lzSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAaV2FpdGluZyBmb3IgZ2VuZXNpcyBoZWlnaHQDCQAAAAAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAABZTZWxmIGNhbGwgaXMgZm9yYmlkZGVuAwMDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABBgkAAGYAAAACAAAAAAAAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQGCQAAZgAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAAGbWF4SW50CQAAAgAAAAECAAAAFkF0dGFjaGVkIHBheW1lbnQgaXNzdWUEAAAAD2NvbnRyYWN0QXNzZXRJZAQAAAAHJG1hdGNoMAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAAMaXNCeXRlVmVjdG9yBQAAAAckbWF0Y2gwCQACWAAAAAEICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAMaXNCeXRlVmVjdG9yAgAAAA1Vbmtub3duIGFzc2V0AAAAAmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAdpc1dhdmVzBQAAAAckbWF0Y2gwBQAAAAd3YXZlc0lkCQAAAgAAAAECAAAAEFdyb25nIGFzc2V0IHR5cGUEAAAADmNvbnRyYWN0RmllbGRzCQAETAAAAAIFAAAAC2NvbnRyYWN0VGFnCQAETAAAAAIJAAGkAAAAAQUAAAAGaGVpZ2h0CQAETAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAETAAAAAIFAAAAD2NvbnRyYWN0QXNzZXRJZAkABEwAAAACCQABpAAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAADbmlsAwkAAAAAAAACBAAAAA0kbGlzdDMzNTMzNDA1BQAAAA5jb250cmFjdEZpZWxkcwQAAAANJHNpemUzMzUzMzQwNQkAAZAAAAABBQAAAA0kbGlzdDMzNTMzNDA1BAAAAA0kYWNjMDMzNTMzNDA1BwMJAAAAAAAAAgUAAAANJHNpemUzMzUzMzQwNQAAAAAAAAAAAAUAAAANJGFjYzAzMzUzMzQwNQQAAAANJGFjYzEzMzUzMzQwNQkBAAAAFGhhc1NlcGFyYXRvckluU3RyaW5nAAAAAgUAAAANJGFjYzAzMzUzMzQwNQkAAZEAAAACBQAAAA0kbGlzdDMzNTMzNDA1AAAAAAAAAAAAAwkAAAAAAAACBQAAAA0kc2l6ZTMzNTMzNDA1AAAAAAAAAAABBQAAAA0kYWNjMTMzNTMzNDA1BAAAAA0kYWNjMjMzNTMzNDA1CQEAAAAUaGFzU2VwYXJhdG9ySW5TdHJpbmcAAAACBQAAAA0kYWNjMTMzNTMzNDA1CQABkQAAAAIFAAAADSRsaXN0MzM1MzM0MDUAAAAAAAAAAAEDCQAAAAAAAAIFAAAADSRzaXplMzM1MzM0MDUAAAAAAAAAAAIFAAAADSRhY2MyMzM1MzM0MDUEAAAADSRhY2MzMzM1MzM0MDUJAQAAABRoYXNTZXBhcmF0b3JJblN0cmluZwAAAAIFAAAADSRhY2MyMzM1MzM0MDUJAAGRAAAAAgUAAAANJGxpc3QzMzUzMzQwNQAAAAAAAAAAAgMJAAAAAAAAAgUAAAANJHNpemUzMzUzMzQwNQAAAAAAAAAAAwUAAAANJGFjYzMzMzUzMzQwNQQAAAANJGFjYzQzMzUzMzQwNQkBAAAAFGhhc1NlcGFyYXRvckluU3RyaW5nAAAAAgUAAAANJGFjYzMzMzUzMzQwNQkAAZEAAAACBQAAAA0kbGlzdDMzNTMzNDA1AAAAAAAAAAADAwkAAAAAAAACBQAAAA0kc2l6ZTMzNTMzNDA1AAAAAAAAAAAEBQAAAA0kYWNjNDMzNTMzNDA1BAAAAA0kYWNjNTMzNTMzNDA1CQEAAAAUaGFzU2VwYXJhdG9ySW5TdHJpbmcAAAACBQAAAA0kYWNjNDMzNTMzNDA1CQABkQAAAAIFAAAADSRsaXN0MzM1MzM0MDUAAAAAAAAAAAQDCQAAAAAAAAIFAAAADSRzaXplMzM1MzM0MDUAAAAAAAAAAAUFAAAADSRhY2M1MzM1MzM0MDUEAAAADSRhY2M2MzM1MzM0MDUJAQAAABRoYXNTZXBhcmF0b3JJblN0cmluZwAAAAIFAAAADSRhY2M1MzM1MzM0MDUJAAGRAAAAAgUAAAAN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DGNvbnRyYWN0SW5mbwAAAAJpZAkABEwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAADbmlsAwkAAAAAAAACBAAAAA0kbGlzdDYzNDE2MzkyBQAAAA1yZWNlaXB0RmllbGRzBAAAAA0kc2l6ZTYzNDE2MzkyCQABkAAAAAEFAAAADSRsaXN0NjM0MTYzOTIEAAAADSRhY2MwNjM0MTYzOTIHAwkAAAAAAAACBQAAAA0kc2l6ZTYzNDE2MzkyAAAAAAAAAAAABQAAAA0kYWNjMDYzNDE2MzkyBAAAAA0kYWNjMTYzNDE2MzkyCQEAAAAUaGFzU2VwYXJhdG9ySW5TdHJpbmcAAAACBQAAAA0kYWNjMDYzNDE2MzkyCQABkQAAAAIFAAAADSRsaXN0NjM0MTYzOTIAAAAAAAAAAAADCQAAAAAAAAIFAAAADSRzaXplNjM0MTYzOTIAAAAAAAAAAAEFAAAADSRhY2MxNjM0MTYzOTIEAAAADSRhY2MyNjM0MTYzOTIJAQAAABRoYXNTZXBhcmF0b3JJblN0cmluZwAAAAIFAAAADSRhY2MxNjM0MTYzOTIJAAGRAAAAAgUAAAANJGxpc3Q2MzQxNjM5MgAAAAAAAAAAAQMJAAAAAAAAAgUAAAANJHNpemU2MzQxNjM5MgAAAAAAAAAAAgUAAAANJGFjYzI2MzQxNjM5MgQAAAANJGFjYzM2MzQxNjM5MgkBAAAAFGhhc1NlcGFyYXRvckluU3RyaW5nAAAAAgUAAAANJGFjYzI2MzQxNjM5MgkAAZEAAAACBQAAAA0kbGlzdDYzNDE2MzkyAAAAAAAAAAACAwkAAAAAAAACBQAAAA0kc2l6ZTYzNDE2MzkyAAAAAAAAAAADBQAAAA0kYWNjMzYzNDE2MzkyBAAAAA0kYWNjNDYzNDE2MzkyCQEAAAAUaGFzU2VwYXJhdG9ySW5TdHJpbmcAAAACBQAAAA0kYWNjMzYzNDE2MzkyCQABkQAAAAIFAAAADSRsaXN0NjM0MTYzOTIAAAAAAAAAAAMDCQAAAAAAAAIFAAAADSRzaXplNjM0MTYzOTIAAAAAAAAAAAQFAAAADSRhY2M0NjM0MTYzOTIEAAAADSRhY2M1NjM0MTYzOTIJAQAAABRoYXNTZXBhcmF0b3JJblN0cmluZwAAAAIFAAAADSRhY2M0NjM0MTYzOTIJAAGRAAAAAgUAAAANJGxpc3Q2MzQxNjM5MgAAAAAAAAAABAMJAAAAAAAAAgUAAAANJHNpemU2MzQxNjM5MgAAAAAAAAAABQUAAAANJGFjYzU2MzQxNjM5MgQAAAANJGFjYzY2MzQxNjM5MgkBAAAAFGhhc1NlcGFyYXRvckluU3RyaW5nAAAAAgUAAAANJGFjYzU2MzQxNjM5MgkAAZEAAAACBQAAAA0kbGlzdDYzNDE2MzkyAAAAAAAAAAAFAwkAAAAAAAACBQAAAA0kc2l6ZTYzNDE2MzkyAAAAAAAAAAAGBQAAAA0kYWNjNjYzNDE2MzkyBAAAAA0kYWNjNzYzNDE2MzkyCQEAAAAUaGFzU2VwYXJhdG9ySW5TdHJpbmcAAAACBQAAAA0kYWNjNjYzNDE2MzkyCQABkQAAAAIFAAAADSRsaXN0NjM0MTYzOTIAAAAAAAAAAAYDCQAAAAAAAAIFAAAADSRzaXplNjM0MTYzOTIAAAAAAAAAAAcFAAAADSRhY2M3NjM0MTYzOTIEAAAADSRhY2M4NjM0MTYzOTIJAQAAABRoYXNTZXBhcmF0b3JJblN0cmluZwAAAAIFAAAADSRhY2M3NjM0MTYzOTIJAAGRAAAAAgUAAAANJGxpc3Q2MzQxNjM5MgAAAAAAAAAABwMJAAAAAAAAAgUAAAANJHNpemU2MzQxNjM5MgAAAAAAAAAACAUAAAANJGFjYzg2MzQxNjM5MgQAAAANJGFjYzk2MzQxNjM5MgkBAAAAFGhhc1NlcGFyYXRvckluU3RyaW5nAAAAAgUAAAANJGFjYzg2MzQxNjM5MgkAAZEAAAACBQAAAA0kbGlzdDYzNDE2MzkyAAAAAAAAAAAICQAAAgAAAAECAAAAEkxpc3Qgc2l6ZSBleGNlZWQgOAYJAAACAAAAAQIAAAAZU2VwYXJhdG9yIGZvdW5kIGluIGZpZWxkcwQAAAAScmVjZWlwdERlc2NyaXB0aW9uCQAEuQAAAAIFAAAADXJlY2VpcHRGaWVsZHMFAAAACXNlcGFyYXRvcgMJAABmAAAAAgkAAMgAAAABCQABmwAAAAEFAAAAEnJlY2VpcHREZXNjcmlwdGlvbgUAAAATbWF4RGVzY3JpcHRpb25CeXRlcwkAAAIAAAABAgAAABFUb28gbG9uZyBjb250cmFjdAQA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", "height": 1481938, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 8nKLKSkTgWC3DpFu4carWYj7H8nbwg5kVwSHATW3wMk3 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 4 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let separator = "___" | |
5 | + | ||
6 | + | let wavesId = "WAVES" | |
7 | + | ||
8 | + | let genesisHeight = 1456230 | |
9 | + | ||
10 | + | let contractName = "VaultContract" | |
11 | + | ||
12 | + | let receiptName = "VaultReceipt" | |
13 | + | ||
14 | + | let contractTag = "C" | |
15 | + | ||
16 | + | let receiptTag = "R" | |
17 | + | ||
18 | + | let duplicateTag = "D" | |
19 | + | ||
20 | + | let keyNonceCount = "NONCE_COUNT" | |
21 | + | ||
22 | + | let keyIsFree = "IS_FREE" | |
23 | + | ||
24 | + | let keyPrivateKey = "PRIVATE_KEY" | |
25 | + | ||
26 | + | let maxInt = 9223372036854775807 | |
27 | + | ||
28 | + | let maxDataKeySize = 400 | |
29 | + | ||
30 | + | let maxDescriptionBytes = 1000 | |
31 | + | ||
32 | + | let maxNameBytes = 16 | |
33 | + | ||
34 | + | func generateNonce () = { | |
35 | + | let nonceValue = valueOrElse(getInteger(this, keyNonceCount), 1) | |
36 | + | if ((nonceValue >= maxInt)) | |
37 | + | then 1 | |
38 | + | else (nonceValue + 1) | |
39 | + | } | |
40 | + | ||
41 | + | ||
42 | + | func hasSeparatorInString (foundSeparator,stringToCheck) = if ((foundSeparator == true)) | |
43 | + | then true | |
44 | + | else contains(stringToCheck, separator) | |
45 | + | ||
46 | + | ||
47 | + | @Callable(i) | |
48 | + | func deposit () = if ((genesisHeight > height)) | |
49 | + | then throw("Waiting for genesis height") | |
50 | + | else if ((this == i.caller)) | |
51 | + | then throw("Self call is forbidden") | |
52 | + | else if (if (if ((size(i.payments) != 1)) | |
53 | + | then true | |
54 | + | else (1 > i.payments[0].amount)) | |
55 | + | then true | |
56 | + | else (i.payments[0].amount > maxInt)) | |
57 | + | then throw("Attached payment issue") | |
58 | + | else { | |
59 | + | let contractAssetId = match i.payments[0].assetId { | |
60 | + | case isByteVector: ByteVector => | |
61 | + | toBase58String(valueOrErrorMessage(assetInfo(isByteVector), "Unknown asset").id) | |
62 | + | case isWaves: Unit => | |
63 | + | wavesId | |
64 | + | case _ => | |
65 | + | throw("Wrong asset type") | |
66 | + | } | |
67 | + | let contractFields = [contractTag, toString(height), toString(i.caller), contractAssetId, toString(i.payments[0].amount)] | |
68 | + | if (({ | |
69 | + | let $list33533405 = contractFields | |
70 | + | let $size33533405 = size($list33533405) | |
71 | + | let $acc033533405 = false | |
72 | + | if (($size33533405 == 0)) | |
73 | + | then $acc033533405 | |
74 | + | else { | |
75 | + | let $acc133533405 = hasSeparatorInString($acc033533405, $list33533405[0]) | |
76 | + | if (($size33533405 == 1)) | |
77 | + | then $acc133533405 | |
78 | + | else { | |
79 | + | let $acc233533405 = hasSeparatorInString($acc133533405, $list33533405[1]) | |
80 | + | if (($size33533405 == 2)) | |
81 | + | then $acc233533405 | |
82 | + | else { | |
83 | + | let $acc333533405 = hasSeparatorInString($acc233533405, $list33533405[2]) | |
84 | + | if (($size33533405 == 3)) | |
85 | + | then $acc333533405 | |
86 | + | else { | |
87 | + | let $acc433533405 = hasSeparatorInString($acc333533405, $list33533405[3]) | |
88 | + | if (($size33533405 == 4)) | |
89 | + | then $acc433533405 | |
90 | + | else { | |
91 | + | let $acc533533405 = hasSeparatorInString($acc433533405, $list33533405[4]) | |
92 | + | if (($size33533405 == 5)) | |
93 | + | then $acc533533405 | |
94 | + | else { | |
95 | + | let $acc633533405 = hasSeparatorInString($acc533533405, $list33533405[5]) | |
96 | + | throw("List size exceed 5") | |
97 | + | } | |
98 | + | } | |
99 | + | } | |
100 | + | } | |
101 | + | } | |
102 | + | } | |
103 | + | } == true)) | |
104 | + | then throw("Separator found in fields") | |
105 | + | else { | |
106 | + | let contractDescription = makeString(contractFields, separator) | |
107 | + | if ((size(toBytes(contractDescription)) > maxDescriptionBytes)) | |
108 | + | then throw("Too long contract") | |
109 | + | else { | |
110 | + | let nonce = generateNonce() | |
111 | + | let actionIssue = Issue(contractName, contractDescription, 1, 0, false, unit, nonce) | |
112 | + | let actionTransfer = ScriptTransfer(i.caller, actionIssue.quantity, calculateAssetId(actionIssue)) | |
113 | + | [IntegerEntry(keyNonceCount, nonce), actionIssue, actionTransfer] | |
114 | + | } | |
115 | + | } | |
116 | + | } | |
117 | + | ||
118 | + | ||
119 | + | ||
120 | + | @Callable(i) | |
121 | + | func withdraw () = if ((this == i.caller)) | |
122 | + | then throw("Self call is forbidden") | |
123 | + | else if (if ((size(i.payments) != 1)) | |
124 | + | then true | |
125 | + | else (i.payments[0].amount != 1)) | |
126 | + | then throw("Attached payment issue") | |
127 | + | else { | |
128 | + | let contractInfo = valueOrErrorMessage(assetInfo(valueOrErrorMessage(i.payments[0].assetId, "Wrong asset type")), "Unknown asset") | |
129 | + | if ((contractInfo.issuer != this)) | |
130 | + | then throw("Unknown issuer") | |
131 | + | else { | |
132 | + | let contractFields = split(contractInfo.description, separator) | |
133 | + | if ((size(contractFields) != 5)) | |
134 | + | then throw("Wrong fields amount") | |
135 | + | else if ((contractFields[0] != contractTag)) | |
136 | + | then throw("Not a contract") | |
137 | + | else { | |
138 | + | let contractHeight = valueOrErrorMessage(parseInt(contractFields[1]), "Not a height") | |
139 | + | if ((isDefined(addressFromString(contractFields[2])) != true)) | |
140 | + | then throw("Not an address") | |
141 | + | else { | |
142 | + | let contractAssetQuantity = valueOrErrorMessage(parseInt(contractFields[4]), "Not a quantity") | |
143 | + | let contractAsset = match assetInfo(fromBase58String(contractFields[3])) { | |
144 | + | case isAsset: Asset => | |
145 | + | $Tuple2(isAsset.id, assetBalance(this, isAsset.id)) | |
146 | + | case maybeWaves: Unit => | |
147 | + | if ((contractFields[3] == wavesId)) | |
148 | + | then $Tuple2(unit, wavesBalance(this).available) | |
149 | + | else throw("Unknown asset") | |
150 | + | case _ => | |
151 | + | throw("Unknown asset") | |
152 | + | } | |
153 | + | if (if ((genesisHeight > contractHeight)) | |
154 | + | then true | |
155 | + | else (contractHeight >= height)) | |
156 | + | then throw("Not in height scope") | |
157 | + | else if (if ((1 > contractAssetQuantity)) | |
158 | + | then true | |
159 | + | else (contractAssetQuantity > maxInt)) | |
160 | + | then throw("Quantity out-of-range") | |
161 | + | else if ((contractAssetQuantity > contractAsset._2)) | |
162 | + | then throw("Insuffisant balance") | |
163 | + | else { | |
164 | + | let receiptFields = [receiptTag, toString(contractHeight), contractFields[2], contractFields[3], toString(contractAssetQuantity), toString(height), toBase58String(contractInfo.id), toString(i.caller)] | |
165 | + | if (({ | |
166 | + | let $list63416392 = receiptFields | |
167 | + | let $size63416392 = size($list63416392) | |
168 | + | let $acc063416392 = false | |
169 | + | if (($size63416392 == 0)) | |
170 | + | then $acc063416392 | |
171 | + | else { | |
172 | + | let $acc163416392 = hasSeparatorInString($acc063416392, $list63416392[0]) | |
173 | + | if (($size63416392 == 1)) | |
174 | + | then $acc163416392 | |
175 | + | else { | |
176 | + | let $acc263416392 = hasSeparatorInString($acc163416392, $list63416392[1]) | |
177 | + | if (($size63416392 == 2)) | |
178 | + | then $acc263416392 | |
179 | + | else { | |
180 | + | let $acc363416392 = hasSeparatorInString($acc263416392, $list63416392[2]) | |
181 | + | if (($size63416392 == 3)) | |
182 | + | then $acc363416392 | |
183 | + | else { | |
184 | + | let $acc463416392 = hasSeparatorInString($acc363416392, $list63416392[3]) | |
185 | + | if (($size63416392 == 4)) | |
186 | + | then $acc463416392 | |
187 | + | else { | |
188 | + | let $acc563416392 = hasSeparatorInString($acc463416392, $list63416392[4]) | |
189 | + | if (($size63416392 == 5)) | |
190 | + | then $acc563416392 | |
191 | + | else { | |
192 | + | let $acc663416392 = hasSeparatorInString($acc563416392, $list63416392[5]) | |
193 | + | if (($size63416392 == 6)) | |
194 | + | then $acc663416392 | |
195 | + | else { | |
196 | + | let $acc763416392 = hasSeparatorInString($acc663416392, $list63416392[6]) | |
197 | + | if (($size63416392 == 7)) | |
198 | + | then $acc763416392 | |
199 | + | else { | |
200 | + | let $acc863416392 = hasSeparatorInString($acc763416392, $list63416392[7]) | |
201 | + | if (($size63416392 == 8)) | |
202 | + | then $acc863416392 | |
203 | + | else { | |
204 | + | let $acc963416392 = hasSeparatorInString($acc863416392, $list63416392[8]) | |
205 | + | throw("List size exceed 8") | |
206 | + | } | |
207 | + | } | |
208 | + | } | |
209 | + | } | |
210 | + | } | |
211 | + | } | |
212 | + | } | |
213 | + | } | |
214 | + | } | |
215 | + | } == true)) | |
216 | + | then throw("Separator found in fields") | |
217 | + | else { | |
218 | + | let receiptDescription = makeString(receiptFields, separator) | |
219 | + | if ((size(toBytes(receiptDescription)) > maxDescriptionBytes)) | |
220 | + | then throw("Too long contract") | |
221 | + | else { | |
222 | + | let nonce = generateNonce() | |
223 | + | let receiptIssue = Issue(receiptName, receiptDescription, 1, 0, false, unit, nonce) | |
224 | + | let receiptId = calculateAssetId(receiptIssue) | |
225 | + | [IntegerEntry(keyNonceCount, nonce), Burn(contractInfo.id, 1), receiptIssue, ScriptTransfer(i.caller, receiptIssue.quantity, receiptId), ScriptTransfer(i.caller, contractAssetQuantity, contractAsset._1)] | |
226 | + | } | |
227 | + | } | |
228 | + | } | |
229 | + | } | |
230 | + | } | |
231 | + | } | |
232 | + | } | |
233 | + | ||
234 | + | ||
235 | + | ||
236 | + | @Callable(i) | |
237 | + | func claim (assetId) = if ((this == i.caller)) | |
238 | + | then throw("Self call is forbidden") | |
239 | + | else if ((1 > size(assetId))) | |
240 | + | then throw("Empty asset id") | |
241 | + | else if ((size(i.payments) != 0)) | |
242 | + | then throw("No need payment") | |
243 | + | else { | |
244 | + | let assetData = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Unknown asset") | |
245 | + | if ((assetData.issuer != this)) | |
246 | + | then throw("Unknown issuer") | |
247 | + | else if ((assetBalance(this, assetData.id) != 1)) | |
248 | + | then throw("Unavailable") | |
249 | + | else { | |
250 | + | let callerAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(split(assetData.description, separator)[2], "Address field missing")), "Not an address") | |
251 | + | if ((i.caller != callerAddress)) | |
252 | + | then throw("Not owner") | |
253 | + | else [ScriptTransfer(i.caller, 1, assetData.id)] | |
254 | + | } | |
255 | + | } | |
256 | + | ||
257 | + | ||
258 | + | ||
259 | + | @Callable(i) | |
260 | + | func duplicate (assetId) = if ((this == i.caller)) | |
261 | + | then throw("Self call is forbidden") | |
262 | + | else if ((1 > size(assetId))) | |
263 | + | then throw("Empty asset id") | |
264 | + | else if ((size(i.payments) != 0)) | |
265 | + | then throw("No need payment") | |
266 | + | else { | |
267 | + | let assetData = valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "Unknown asset") | |
268 | + | if ((assetData.issuer != this)) | |
269 | + | then throw("Unknown issuer") | |
270 | + | else if ((assetBalance(i.caller, assetData.id) != 1)) | |
271 | + | then throw("Not owner") | |
272 | + | else { | |
273 | + | let assetFields = split(assetData.description, separator) | |
274 | + | if ((1 > size(assetFields))) | |
275 | + | then throw("No tag found") | |
276 | + | else if (if ((assetFields[0] != contractTag)) | |
277 | + | then (assetFields[0] != receiptTag) | |
278 | + | else false) | |
279 | + | then throw("Not a contract or receipt") | |
280 | + | else { | |
281 | + | let duplicateName = (duplicateTag + assetData.name) | |
282 | + | let duplicateDescription = (duplicateTag + assetData.description) | |
283 | + | if (if ((size(toBytes(duplicateDescription)) > maxDescriptionBytes)) | |
284 | + | then true | |
285 | + | else (size(toBytes(duplicateName)) > maxNameBytes)) | |
286 | + | then throw("Too long, can't duplicate") | |
287 | + | else { | |
288 | + | let nonce = generateNonce() | |
289 | + | let duplicateIssue = Issue(duplicateName, duplicateDescription, 1, 0, false, unit, nonce) | |
290 | + | let duplicateId = calculateAssetId(duplicateIssue) | |
291 | + | [IntegerEntry(keyNonceCount, nonce), duplicateIssue, ScriptTransfer(i.caller, 1, assetData.id)] | |
292 | + | } | |
293 | + | } | |
294 | + | } | |
295 | + | } | |
296 | + | ||
297 | + | ||
298 | + | ||
299 | + | @Callable(i) | |
300 | + | func makeFree (privKey) = if (if ((this != i.caller)) | |
301 | + | then true | |
302 | + | else (valueOrElse(getBoolean(this, keyIsFree), false) == true)) | |
303 | + | then throw("Access denied") | |
304 | + | else [BooleanEntry(keyIsFree, true), StringEntry(keyPrivateKey, privKey)] | |
305 | + | ||
306 | + | ||
307 | + | @Verifier(tx) | |
308 | + | func verify () = if ((valueOrElse(getBoolean(this, keyIsFree), false) != false)) | |
309 | + | then false | |
310 | + | else match tx { | |
311 | + | case isUpdate: SetScriptTransaction => | |
312 | + | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
313 | + | case _ => | |
314 | + | false | |
315 | + | } | |
316 | + |
github/deemru/w8io/169f3d6 41.07 ms ◑![]()