tx · DLkW8ukNff24DsA7oDQSsCuddwSALC8VQTJVKyyGYx47

3MqrPz6CEgw6TYwc3sERfB1jTe7sCicekkm:  -0.01400000 Waves

2021.04.14 13:29 [1482004] smart account 3MqrPz6CEgw6TYwc3sERfB1jTe7sCicekkm > SELF 0.00000000 Waves

{ "type": 13, "id": "DLkW8ukNff24DsA7oDQSsCuddwSALC8VQTJVKyyGYx47", "fee": 1400000, "feeAssetId": null, "timestamp": 1618396174312, "version": 2, "chainId": 84, "sender": "3MqrPz6CEgw6TYwc3sERfB1jTe7sCicekkm", "senderPublicKey": "85Rjf8X8pXi8FDJMt6pcth4MhYdJduU9YsE3xsgJrkug", "proofs": [ "5YppxCf9JpWAsQN9BztakmjZknJKQFFn8DhgH7hoHEe2s3yCe7QAnfxFY6figcnCpDQKRSRiuGPMLaaWutm8VJaQ" ], "script": "base64:AAIEAAAAAAAAAAQIAhIAAAAAAAAAAAEAAAABaQEAAAAEY2FsbAAAAAAEAAAABWFzc2V0CQAEQwAAAAcCAAAABUFzc2V0AgAAAAAAAAAAAAAAAAEAAAAAAAAAAAAGBQAAAAR1bml0AAAAAAAAAAAABAAAAAdhc3NldElkCQAEOAAAAAEFAAAABWFzc2V0CQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAICAAAAA2JpbgEAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACAgAAAARib29sBgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAADaW50AAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAA3N0cgIAAAAACQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAECAAAAA3N0cgkABEwAAAACBQAAAAVhc3NldAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAB2Fzc2V0SWQAAAAAAAAAAAEHCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAHYXNzZXRJZAAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5KOU8bg==", "height": 1482004, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H6o5jGQnuStS8DQE4iChKPYAonwDaGymW9jvuRodFEAd Next: Ftu8RRhSYabMDxiCuxf179xPpMqw15dMEj2Cb6B8x4TV Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let version = 1
5-
6-let separator = "___"
7-
8-let decimals = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000]
9-
10-let maxInt = 9223372036854775807
11-
12-let addrPrivileges = addressFromStringValue("3Myojf1j7W2S5XSKemGaqErcSYghqCgQ1gp")
13-
14-let addrVault = addressFromStringValue("3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a")
15-
16-let nibelAsset = base58'8c6SCeWJj6M1VFBaFEg2LWxYS77ZHkmiMeAs6MMSDi1v'
17-
18-let nibelAmountPerBlocks = 1000000000000
19-
20-let nibelGenesisBlock = 0
21-
22-let nibelHavlingDelay = 100000
23-
24-let sharedKeyMainOperator = "MAIN_OPERATOR"
25-
26-let sharedKeyPrivilege = "PRIVILEGE"
27-
28-let sharedReceiptTag = "R"
29-
30-let keyForgesTotalWeight = "FORGES_TOTAL_WEIGHT"
31-
32-let keyForgeSettingsEnabled = "FS_ENABLED_"
33-
34-let keyForgeSettingsSupplies = "FS_SUPPLIES_"
35-
36-let keyForgeSettingsWeight = "FS_WEIGHT_"
37-
38-func isSafeString (stringToTest) = if ((contains(stringToTest, separator) == false))
39- then (contains(stringToTest, " ") == false)
40- else false
414
425
43-func isSafeInteger (integerToTest) = match integerToTest {
44- case isString: String =>
45- match parseInt(isString) {
46- case isInteger: Int =>
47- if ((isInteger >= 0))
48- then (maxInt >= isInteger)
49- else false
50- case _ =>
51- false
52- }
53- case isInteger: Int =>
54- if ((isInteger >= 0))
55- then (maxInt >= isInteger)
56- else false
57- case _ =>
58- false
59-}
60-
61-
62-func toSafeInteger (stringToConvert) = {
63- let parsedInteger = valueOrErrorMessage(parseInt(stringToConvert), "Not a string int")
64- if ((isSafeInteger(parsedInteger) != true))
65- then throw("Not safe")
66- else parsedInteger
6+@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)]
6711 }
6812
6913
70-func isAsset (assetToTest) = match assetToTest {
71- case isString: String =>
72- isDefined(assetInfo(fromBase58String(isString)))
73- case isByteVector: ByteVector =>
74- isDefined(assetInfo(isByteVector))
75- case _ =>
76- false
77-}
78-
79-
80-func isWhitelisted (assetToTest) = isDefined(getBoolean(this, (keyForgeSettingsEnabled + assetToTest)))
81-
82-
83-func hasPrivilege (callerAddress,privilegeName) = if ((addressFromStringValue(getStringValue(addrPrivileges, sharedKeyMainOperator)) == callerAddress))
84- then true
85- else match getInteger(addrPrivileges, (((((sharedKeyPrivilege + separator) + toBase58String(callerAddress.bytes)) + separator) + toBase58String(this.bytes)) + privilegeName)) {
86- case isInteger: Int =>
87- true
88- case _ =>
89- false
90- }
91-
92-
93-func calcForgeWeight (forgeSupplies) = fraction(1, maxInt, forgeSupplies)
94-
95-
96-@Callable(i)
97-func addAssetToWhitelist (assetToAdd,assetTotalSupplies) = if ((hasPrivilege(i.caller, "addAssetToWhitelist") != true))
98- then throw("Access denied")
99- else if (if ((isAsset(assetToAdd) != true))
100- then true
101- else (isSafeInteger(assetTotalSupplies) != true))
102- then throw("Data validation")
103- else if ((isWhitelisted(assetToAdd) != false))
104- then throw("Asset already whitelisted")
105- else {
106- let forgeWeight = calcForgeWeight(assetTotalSupplies)
107- let newForgesTotalWeight = (getIntegerValue(this, keyForgesTotalWeight) + forgeWeight)
108-[BooleanEntry((keyForgeSettingsEnabled + assetToAdd), true), IntegerEntry((keyForgeSettingsSupplies + assetToAdd), assetTotalSupplies), IntegerEntry((keyForgeSettingsWeight + assetToAdd), forgeWeight), IntegerEntry(keyForgesTotalWeight, newForgesTotalWeight)]
109- }
110-
111-
112-
113-@Callable(i)
114-func removeAssetFromWhitelist (assetToRemove) = if ((hasPrivilege(i.caller, "removeAssetFromWhitelist") != true))
115- then throw("Access denied")
116- else if ((isAsset(assetToRemove) != true))
117- then throw("Data validation")
118- else if ((isWhitelisted(assetToRemove) != true))
119- then throw("Asset not whitelisted")
120- else {
121- let actions = [DeleteEntry((keyForgeSettingsEnabled + assetToRemove)), DeleteEntry((keyForgeSettingsSupplies + assetToRemove)), DeleteEntry((keyForgeSettingsWeight + assetToRemove))]
122- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToRemove)) != true))
123- then actions
124- else IntegerEntry(keyForgesTotalWeight, (getIntegerValue(this, keyForgesTotalWeight) - getIntegerValue(this, (keyForgeSettingsWeight + assetToRemove)))) :: actions
125- }
126-
127-
128-
129-@Callable(i)
130-func enableDisableForge (assetToToggle) = if ((hasPrivilege(i.caller, "enableDisableForge") != true))
131- then throw("Access denied")
132- else if ((isAsset(assetToToggle) != true))
133- then throw("Data validation")
134- else {
135- let forgeWeight = getIntegerValue(this, keyForgeSettingsWeight)
136- let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
137- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToToggle)) != true))
138- then [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight + forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), true)]
139- else [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight - forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), false)]
140- }
141-
142-
143-
144-@Callable(i)
145-func updateForgeAssetSupplies (assetToUpdate,newSuppliesValue) = if ((hasPrivilege(i.caller, "updateForgeAssetSupplies") != true))
146- then throw("Access denied")
147- else if (if ((isAsset(assetToUpdate) != true))
148- then true
149- else (isSafeInteger(newSuppliesValue) != true))
150- then throw("Data validation")
151- else if ((isWhitelisted(assetToUpdate) != true))
152- then throw("Asset not whitelisted")
153- else {
154- let currentForgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + assetToUpdate))
155- let newForgeWeight = calcForgeWeight(newSuppliesValue)
156- let actions = [IntegerEntry((keyForgeSettingsWeight + assetToUpdate), newForgeWeight), IntegerEntry((keyForgeSettingsSupplies + assetToUpdate), newSuppliesValue)]
157- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToUpdate)) != true))
158- then actions
159- else IntegerEntry(keyForgesTotalWeight, ((getIntegerValue(this, keyForgesTotalWeight) + newForgeWeight) - currentForgeWeight)) :: actions
160- }
161-
162-
163-
164-@Callable(i)
165-func claim () = if ((this == i.caller))
166- then throw("Self-invoke forbidden")
167- else if (if ((size(i.payments) != 1))
168- then true
169- else (i.payments[0].amount != 1))
170- then throw("Payment issue")
171- else {
172- let receiptInfo = valueOrErrorMessage(assetInfo(valueOrErrorMessage(i.payments[0].assetId, "Wrong asset type")), "Unknown asset")
173- if ((receiptInfo.issuer != addrVault))
174- then throw("Unknown issuer")
175- else {
176- let receiptFields = split(receiptInfo.description, separator)
177- if (if ((size(receiptFields) != 8))
178- then true
179- else (receiptFields[0] != sharedReceiptTag))
180- then throw("Not a receipt")
181- else if ((isWhitelisted(receiptFields[3]) != true))
182- then throw("Not whitelisted")
183- else {
184- let startingBlock = toSafeInteger(receiptFields[1])
185- let endingBlock = toSafeInteger(receiptFields[5])
186- let assetQuantity = toSafeInteger(receiptFields[4])
187- let eligibleBlocks = (endingBlock - startingBlock)
188- if (if ((nibelGenesisBlock > startingBlock))
189- then true
190- else (nibelGenesisBlock > endingBlock))
191- then throw("Not eligible")
192- else if ((isSafeInteger(eligibleBlocks) != true))
193- then throw("Corrupted receipt")
194- else {
195- let forgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + receiptFields[3]))
196- let forgeSupplies = getIntegerValue(this, (keyForgeSettingsSupplies + receiptFields[3]))
197- let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
198- let forgeShare = fraction(1, forgeWeight, forgesTotalWeight)
199- let forgeBlockValue = fraction(nibelAmountPerBlocks, forgeShare, 1)
200- let callerShare = (fraction(eligibleBlocks, assetQuantity, forgeSupplies) * forgeBlockValue)
201-[IntegerEntry("assetQuantity", assetQuantity), IntegerEntry("eligibleBlocks", eligibleBlocks), IntegerEntry("forgeWeight", forgeWeight), IntegerEntry("forgeSupplies", forgeSupplies), IntegerEntry("forgesTotalWeight", forgesTotalWeight), IntegerEntry("forgeShare", forgeShare), IntegerEntry("forgeBlockValue", forgeBlockValue), IntegerEntry("callerShare", callerShare)]
202- }
203- }
204- }
205- }
206-
14+@Verifier(tx)
15+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
20716

github/deemru/w8io/169f3d6 
58.87 ms