tx · 8WkdyTnnCcFtXPLHSa4gKP5UKuwpkp2otiZL5o7z9Ghb

3MxbD7vwyGjwsRxT8fmMB9fngo59VfHcrea:  -0.00800000 Waves

2022.08.18 03:29 [2189199] smart account 3MxbD7vwyGjwsRxT8fmMB9fngo59VfHcrea > SELF 0.00000000 Waves

{ "type": 13, "id": "8WkdyTnnCcFtXPLHSa4gKP5UKuwpkp2otiZL5o7z9Ghb", "fee": 800000, "feeAssetId": null, "timestamp": 1660782605940, "version": 2, "chainId": 84, "sender": "3MxbD7vwyGjwsRxT8fmMB9fngo59VfHcrea", "senderPublicKey": "7kBiESqWjiW6nNeStcbrVX9XRQkWmUM51MZFRZNQEVfR", "proofs": [ "61bw1fzBUZV9TteVrAhM2jNTw4SEJBV994fyVVmdQhhxE7eSLeBcApUEkKz41iLuyGD1EPzzT5eXCfrqXYPtW61P" ], "script": "base64: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", "height": 2189199, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5t1ZsHUpihAeFQBjG7BSDwL5RfKK6EFwRnGDDXJXPEF4 Next: FM2NRA8cimTT2KL2Qwus9YYvd8uFkrE8geU3Utx4CN3y Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let admin = base58'3MxZPzVdHQYNjp99N7VRuR4RLmJUqnDg9ok'
5+
46 let coalAssetId = base58'4MhpjsP1MPpC49v6zBr7eAAEPZdmHWcrSqcSv8tZcpjo'
57
68 func tryGetInteger (key) = match getInteger(this, key) {
4951
5052
5153 @Callable(i)
52-func createFurnace (lifetime) = if ((size(i.payments) != 1))
53- then throw("You should to provide reward")
54- else {
55- let rewardAmount = i.payments[0].amount
56- let rewardAssetId = i.payments[0].assetId
57- let newFurnacesAmount = (tryGetInteger("global_furnacesAmount") + 1)
58- let furnaceId = toString(newFurnacesAmount)
54+func createFurnace (lifetime) = if ((toBase58String(i.caller.bytes) != toBase58String(admin)))
55+ then throw("You cannot create furnace")
56+ else if ((size(i.payments) != 1))
57+ then throw("You should to provide reward")
58+ else {
59+ let rewardAmount = i.payments[0].amount
60+ let rewardAssetId = i.payments[0].assetId
61+ let newFurnacesAmount = (tryGetInteger("global_furnacesAmount") + 1)
62+ let furnaceId = toString(newFurnacesAmount)
5963 [IntegerEntry("global_furnacesAmount", newFurnacesAmount), IntegerEntry((("furnace_" + furnaceId) + "_lifetime"), lifetime), IntegerEntry((("furnace_" + furnaceId) + "_rewardAmount"), rewardAmount), StringEntry((("furnace_" + furnaceId) + "_rewardAssetId"), getAssetString(rewardAssetId))]
60- }
64+ }
6165
6266
6367
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let admin = base58'3MxZPzVdHQYNjp99N7VRuR4RLmJUqnDg9ok'
5+
46 let coalAssetId = base58'4MhpjsP1MPpC49v6zBr7eAAEPZdmHWcrSqcSv8tZcpjo'
57
68 func tryGetInteger (key) = match getInteger(this, key) {
79 case b: Int =>
810 b
911 case _ =>
1012 0
1113 }
1214
1315
1416 func tryGetBoolean (key) = match getBoolean(this, key) {
1517 case b: Boolean =>
1618 b
1719 case _ =>
1820 false
1921 }
2022
2123
2224 func getAssetString (assetId) = match assetId {
2325 case b: ByteVector =>
2426 toBase58String(b)
2527 case _ =>
2628 "WAVES"
2729 }
2830
2931
3032 func tryGetString (key) = match getString(this, key) {
3133 case b: String =>
3234 b
3335 case _ =>
3436 ""
3537 }
3638
3739
3840 func tryGetBinary (key) = match getBinary(this, key) {
3941 case b: ByteVector =>
4042 b
4143 case _ =>
4244 base58''
4345 }
4446
4547
4648 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
4749 then unit
4850 else fromBase58String(assetIdStr)
4951
5052
5153 @Callable(i)
52-func createFurnace (lifetime) = if ((size(i.payments) != 1))
53- then throw("You should to provide reward")
54- else {
55- let rewardAmount = i.payments[0].amount
56- let rewardAssetId = i.payments[0].assetId
57- let newFurnacesAmount = (tryGetInteger("global_furnacesAmount") + 1)
58- let furnaceId = toString(newFurnacesAmount)
54+func createFurnace (lifetime) = if ((toBase58String(i.caller.bytes) != toBase58String(admin)))
55+ then throw("You cannot create furnace")
56+ else if ((size(i.payments) != 1))
57+ then throw("You should to provide reward")
58+ else {
59+ let rewardAmount = i.payments[0].amount
60+ let rewardAssetId = i.payments[0].assetId
61+ let newFurnacesAmount = (tryGetInteger("global_furnacesAmount") + 1)
62+ let furnaceId = toString(newFurnacesAmount)
5963 [IntegerEntry("global_furnacesAmount", newFurnacesAmount), IntegerEntry((("furnace_" + furnaceId) + "_lifetime"), lifetime), IntegerEntry((("furnace_" + furnaceId) + "_rewardAmount"), rewardAmount), StringEntry((("furnace_" + furnaceId) + "_rewardAssetId"), getAssetString(rewardAssetId))]
60- }
64+ }
6165
6266
6367
6468 @Callable(i)
6569 func burn (furnaceId) = {
6670 let isFinished = tryGetBoolean((("furnace_" + furnaceId) + "_finished"))
6771 if (isFinished)
6872 then throw("Already finished")
6973 else if ((size(i.payments) != 1))
7074 then throw("You should to provide payment")
7175 else if ((i.payments[0].assetId != coalAssetId))
7276 then throw("Invalid coal")
7377 else if ((i.payments[0].amount != 1))
7478 then throw("You can burn only 1 coal")
7579 else {
7680 let callerAddress = toBase58String(i.caller.bytes)
7781 [Burn(coalAssetId, i.payments[0].amount), IntegerEntry((("furnace_" + furnaceId) + "_lastBurn"), height), StringEntry((("furnace_" + furnaceId) + "_lastStoker"), callerAddress)]
7882 }
7983 }
8084
8185
8286
8387 @Callable(i)
8488 func claim (furnaceId) = {
8589 let isFinished = tryGetBoolean((("furnace_" + furnaceId) + "_finished"))
8690 let lifetime = tryGetInteger((("furnace_" + furnaceId) + "_lifetime"))
8791 let lastBurn = tryGetInteger((("furnace_" + furnaceId) + "_lastBurn"))
8892 let rewardAsset = tryGetString((("furnace_" + furnaceId) + "_rewardAssetId"))
8993 let lastStoker = tryGetString((("furnace_" + furnaceId) + "_lastStoker"))
9094 let rewardAmount = tryGetInteger((("furnace_" + furnaceId) + "_rewardAmount"))
9195 let finishHeight = (lastBurn + lifetime)
9296 if (isFinished)
9397 then throw("Already finished")
9498 else if ((lifetime == 0))
9599 then throw("Cannot find furnace")
96100 else if ((lastBurn == 0))
97101 then throw("Furnace not found")
98102 else if ((finishHeight > height))
99103 then throw("Time has not run out")
100104 else if ((rewardAsset == ""))
101105 then throw("Cannot find reward asset")
102106 else if ((lastStoker == ""))
103107 then throw("Cannot find last stoker")
104108 else if ((rewardAmount == 0))
105109 then throw("Reward already sent to winner")
106110 else [BooleanEntry((("furnace_" + furnaceId) + "_finished"), true), ScriptTransfer(Address(fromBase58String(lastStoker)), rewardAmount, getAssetBytes(rewardAsset))]
107111 }
108112
109113
110114 @Verifier(tx)
111115 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
112116

github/deemru/w8io/c3f4982 
41.84 ms