tx · 4k1b1HJ6iEtczu3xScv6w9m9MyvjuDm4UuTESAmHtA3y

3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7:  -0.01000000 Waves

2022.12.12 14:47 [3422555] smart account 3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7 > SELF 0.00000000 Waves

{ "type": 13, "id": "4k1b1HJ6iEtczu3xScv6w9m9MyvjuDm4UuTESAmHtA3y", "fee": 1000000, "feeAssetId": null, "timestamp": 1670845612437, "version": 2, "chainId": 87, "sender": "3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7", "senderPublicKey": "8XKsuJqSe6FsspUz3sPvdADeLpP7e1tfiWx5tt6e674g", "proofs": [ "2RCY6JPqTzFcsrK2eD58BRQytc3TDcaDeLKaDcRd1xw32JpzeWXxtAjMktx7BqafsQnPtNe6HgC9SE15M5pQAXr4" ], "script": "base64:BgILCAISAwoBCBIAEgALAAl3ZWFyYWJsZXMJAMwIAgIIQVJULUNBUEUJAMwIAgIHQVJULUhBVAkAzAgCAgpBUlQtWFNDQVJGCQDMCAICDEFSVC1YU1dFQVRFUgUDbmlsAQ9rZXlBcnRlZmFjdER1Y2sCBmR1Y2tJZAh3ZWFyYWJsZQkArAICCQCsAgIFBmR1Y2tJZAIBXwUId2VhcmFibGUBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAFBnN0cmluZwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQIUc3RhdGljX29yYWNsZUFkZHJlc3MBEWdldEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAITc3RhdGljX2l0ZW1zQWRkcmVzcwESdHJ5R2V0Q29zbWV0aWNJdGVtAQRpdGVtBANrZXkJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQQHJG1hdGNoMAkAmggCCQEPZ2V0SXRlbXNBZGRyZXNzAAUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQUEdW5pdAEId2Vhckl0ZW0CD2Fzc2V0SWRXZWFyQWJsZQZkdWNrSWQEDGFydGVmYWN0TmFtZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFA25pbAMJAAACBQxhcnRlZmFjdE5hbWUFDGFydGVmYWN0TmFtZQMDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQl3ZWFyYWJsZXMFDGFydGVmYWN0TmFtZQkBASEBCQEJaXNEZWZpbmVkAQkBEnRyeUdldENvc21ldGljSXRlbQEFDGFydGVmYWN0TmFtZQcJAAIBAhtXUklURDogVW5zdXBwb3J0ZWQgd2VhcmFibGUECmFydGVmYWN0SWQJAQx0cnlHZXRTdHJpbmcBCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUECWJvb3N0RHVjawMJAAACBQxhcnRlZmFjdE5hbWUCCkFSVC1YU0NBUkYJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACD21hbmlwdWxhdGVCb29zdAkAzAgCAEUJAMwIAgUGZHVja0lkBQNuaWwFA25pbAUDbmlsAwkAAAIFCWJvb3N0RHVjawUJYm9vc3REdWNrAwkBAiE9AgUKYXJ0ZWZhY3RJZAIACQACAQkArAICAhpEdWNrIGlzIGFscmVhZHkgd2VhcmluZyBhIAUMYXJ0ZWZhY3ROYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQUPYXNzZXRJZFdlYXJBYmxlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlBQNuaWwBaQEOd2Vhckl0ZW1Ub0R1Y2sABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBA1zZWNvbmRBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ1zZWNvbmRQYXltZW50BmFtb3VudAABCQACAQIaV1JJVEQ6IE5GVCBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgkBCHdlYXJJdGVtAgUNc2Vjb25kQXNzZXRJZAUGZHVja0lkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARB3ZWFyWEl0ZW1zVG9EdWNrAAMJAGYCAAIJAJADAQgFAWkIcGF5bWVudHMJAAIBAjFXV1hJVEQ6IFBsZWFzZSBhdHRhY2ggYXQgbGVhc3QgMSBpdGVtIGFuZCAxIGR1Y2shAwkAZgIJAJADAQgFAWkIcGF5bWVudHMABgkAAgECMVdXWElURDogWW91IGNhbiBvbmx5IGF0dGFjaCA1IGl0ZW1zIGFuZCBvbmUgZHVjayEKAQpoYW5kbGVJdGVtAgNhY2MHcGF5bWVudAQFaW5kZXgJAM8IAggFAWkIcGF5bWVudHMFB3BheW1lbnQDCQAAAgUFaW5kZXgAAAQGZHVja0lkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQDCQECIT0CCAUHcGF5bWVudAZhbW91bnQAAQkAAgECG1dSSVREOiBEdWNrIGlzIG5vdCBhdHRhY2hlZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQZkdWNrSWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgkAzggCBQNhY2MJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQdwYXltZW50B2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQNhY2MJAQh3ZWFySXRlbQIJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmhhbmRsZUl0ZW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYAdg0PAA==", "height": 3422555, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ERWW69jcaUNF2UhkgWDJAbcmFGnsG2siJ9GZooqEuk4q Next: 7pNQgskosDBQCVT36U5xcTwfksTZZwa2J6wJdVqQzHRD Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
4+let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
55
6-
7-func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
8-
9-
10-func keyFeedLimit (owner) = ("limit_" + owner)
11-
12-
13-let stakeable = ["ART-LAKE", "ART-XTREE", "ART-XSOCK", "ART-XMISTL"]
14-
15-func tryGetString (key) = match getString(this, key) {
16- case a: String =>
17- a
18- case _ =>
19- ""
20-}
21-
22-
23-func tryGetInteger (key) = match getInteger(this, key) {
24- case a: Int =>
25- a
26- case _ =>
27- 0
28-}
6+func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
297
308
319 func tryGetStringExternal (address,key) = match getString(address, key) {
3614 }
3715
3816
39-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
17+func tryGetString (key) = tryGetStringExternal(this, key)
4018
4119
42-func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
20+func asInt (value) = match value {
21+ case int: Int =>
22+ int
23+ case _ =>
24+ throw("wrong type, expected: Int")
25+}
4326
4427
4528 func asString (value) = match value {
5033 }
5134
5235
53-func asInt (value) = match value {
54- case int: Int =>
55- int
56- case _ =>
57- throw("wrong type, expected: Int")
58-}
36+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
5937
6038
61-func itemIsInCoolDown (artefactName,artefactId) = {
62- let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
63- let cooldownPeriod = 240
64- if ((height > (unstakeHeightLast + cooldownPeriod)))
65- then false
66- else true
39+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
40+
41+
42+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
43+
44+
45+func tryGetCosmeticItem (item) = {
46+ let key = ("direct_cosmetic_" + item)
47+ match getInteger(getItemsAddress(), key) {
48+ case a: Int =>
49+ a
50+ case _ =>
51+ unit
52+ }
53+ }
54+
55+
56+func wearItem (assetIdWearAble,duckId) = {
57+ let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
58+ if ((artefactName == artefactName))
59+ then if (if (!(containsElement(wearables, artefactName)))
60+ then !(isDefined(tryGetCosmeticItem(artefactName)))
61+ else false)
62+ then throw("WRITD: Unsupported wearable")
63+ else {
64+ let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
65+ let boostDuck = if ((artefactName == "ART-XSCARF"))
66+ then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
67+ else nil
68+ if ((boostDuck == boostDuck))
69+ then if ((artefactId != ""))
70+ then throw(("Duck is already wearing a " + artefactName))
71+ else [StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)]
72+ else throw("Strict value is not equal to itself.")
73+ }
74+ else throw("Strict value is not equal to itself.")
6775 }
6876
6977
7583
7684
7785 @Callable(i)
78-func stakeItem () = if (!(if ((size(i.payments) == 1))
79- then (i.payments[0].amount == 1)
80- else false))
81- then throw("Invalid payment")
82- else {
83- let assetId = value(i.payments[0].assetId)
84- let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
85- if ((artefactName == artefactName))
86- then if (!(containsElement(stakeable, artefactName)))
87- then throw("You can't stake this artafect")
88- else if (itemIsInCoolDown(artefactName, toBase58String(assetId)))
89- then throw("Item can't be staked yet, it's in cooldown")
90- else {
91- let invoker = toString(i.caller)
92- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
93- if ((artefactId != ""))
94- then throw(("You are already staking " + artefactName))
95- else {
96- let boostDuck = if ((artefactName == "ART-LAKE"))
97- then invoke(getItemsAddress(), "manipulateBoostAccount", [2, invoker], nil)
98- else if ((artefactName == "ART-XTREE"))
99- then invoke(getItemsAddress(), "manipulateBoostAccount", [3, invoker], nil)
100- else nil
101- if ((boostDuck == boostDuck))
102- then [StringEntry(keyArtefactOwner(artefactName, invoker), toBase58String(assetId))]
103- else throw("Strict value is not equal to itself.")
104- }
105- }
106- else throw("Strict value is not equal to itself.")
107- }
86+func wearItemToDuck () = {
87+ let firstPayment = value(i.payments[0])
88+ let secondPayment = value(i.payments[1])
89+ let duckId = toBase58String(value(firstPayment.assetId))
90+ let secondAssetId = toBase58String(value(secondPayment.assetId))
91+ if (if ((firstPayment.amount != 1))
92+ then true
93+ else (secondPayment.amount != 1))
94+ then throw("WRITD: NFT is not attached")
95+ else {
96+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
97+ if ((children == children))
98+ then (wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)])
99+ else throw("Strict value is not equal to itself.")
100+ }
101+ }
108102
109103
110104
111105 @Callable(i)
112-func unstakeItem (artefactName) = if (!(containsElement(stakeable, artefactName)))
113- then throw("This artefact doesn't exist")
114- else {
115- let invoker = toString(i.caller)
116- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
117- if ((artefactId == "ART-XSOCK"))
118- then throw("You can not unstake ART-XSOCK anymore")
119- else if ((artefactId == ""))
120- then throw(("You didnt stake " + artefactName))
121- else {
122- let boostDuck = if ((artefactName == "ART-LAKE"))
123- then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil)
124- else if ((artefactName == "ART-XTREE"))
125- then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil)
126- else nil
127- if ((boostDuck == boostDuck))
128- then [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
129- else throw("Strict value is not equal to itself.")
130- }
131- }
106+func wearXItemsToDuck () = if ((2 > size(i.payments)))
107+ then throw("WWXITD: Please attach at least 1 item and 1 duck!")
108+ else if ((size(i.payments) > 6))
109+ then throw("WWXITD: You can only attach 5 items and one duck!")
110+ else {
111+ func handleItem (acc,payment) = {
112+ let index = indexOf(i.payments, payment)
113+ if ((index == 0))
114+ then {
115+ let duckId = toBase58String(value(payment.assetId))
116+ if ((payment.amount != 1))
117+ then throw("WRITD: Duck is not attached")
118+ else {
119+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
120+ if ((children == children))
121+ then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
122+ else throw("Strict value is not equal to itself.")
123+ }
124+ }
125+ else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[0].assetId))))
126+ }
132127
128+ let $l = i.payments
129+ let $s = size($l)
130+ let $acc0 = nil
131+ func $f0_1 ($a,$i) = if (($i >= $s))
132+ then $a
133+ else handleItem($a, $l[$i])
133134
135+ func $f0_2 ($a,$i) = if (($i >= $s))
136+ then $a
137+ else throw("List size exceeds 6")
134138
135-@Callable(i)
136-func oneTimeUseFeed () = if (!(if ((size(i.payments) == 1))
137- then (i.payments[0].amount == 1)
138- else false))
139- then throw("Invalid payment")
140- else {
141- let assetId = value(i.payments[0].assetId)
142- let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
143- if ((artefactName == artefactName))
144- then if ((artefactName != "ART-FEED10"))
145- then throw("You can't use this artafect to earn feedlimit!")
146- else {
147- let invoker = toString(i.caller)
148-[IntegerEntry(keyFeedLimit(invoker), (tryGetInteger(keyFeedLimit(invoker)) + 10))]
149- }
150- else throw("Strict value is not equal to itself.")
151- }
139+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
140+ }
152141
153-
154-@Verifier(tx)
155-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
156142
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func keyUnstakeHeight (artefactName,artefactId) = (((artefactName + "_") + artefactId) + "_unstake_height")
4+let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
55
6-
7-func keyArtefactOwner (artefactName,owner) = (((artefactName + "_") + owner) + "_owner")
8-
9-
10-func keyFeedLimit (owner) = ("limit_" + owner)
11-
12-
13-let stakeable = ["ART-LAKE", "ART-XTREE", "ART-XSOCK", "ART-XMISTL"]
14-
15-func tryGetString (key) = match getString(this, key) {
16- case a: String =>
17- a
18- case _ =>
19- ""
20-}
21-
22-
23-func tryGetInteger (key) = match getInteger(this, key) {
24- case a: Int =>
25- a
26- case _ =>
27- 0
28-}
6+func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
297
308
319 func tryGetStringExternal (address,key) = match getString(address, key) {
3210 case a: String =>
3311 a
3412 case _ =>
3513 ""
3614 }
3715
3816
39-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
17+func tryGetString (key) = tryGetStringExternal(this, key)
4018
4119
42-func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
20+func asInt (value) = match value {
21+ case int: Int =>
22+ int
23+ case _ =>
24+ throw("wrong type, expected: Int")
25+}
4326
4427
4528 func asString (value) = match value {
4629 case string: String =>
4730 string
4831 case _ =>
4932 throw("wrong type, expected: String")
5033 }
5134
5235
53-func asInt (value) = match value {
54- case int: Int =>
55- int
56- case _ =>
57- throw("wrong type, expected: Int")
58-}
36+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
5937
6038
61-func itemIsInCoolDown (artefactName,artefactId) = {
62- let unstakeHeightLast = tryGetInteger(keyUnstakeHeight(artefactName, artefactId))
63- let cooldownPeriod = 240
64- if ((height > (unstakeHeightLast + cooldownPeriod)))
65- then false
66- else true
39+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
40+
41+
42+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
43+
44+
45+func tryGetCosmeticItem (item) = {
46+ let key = ("direct_cosmetic_" + item)
47+ match getInteger(getItemsAddress(), key) {
48+ case a: Int =>
49+ a
50+ case _ =>
51+ unit
52+ }
53+ }
54+
55+
56+func wearItem (assetIdWearAble,duckId) = {
57+ let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
58+ if ((artefactName == artefactName))
59+ then if (if (!(containsElement(wearables, artefactName)))
60+ then !(isDefined(tryGetCosmeticItem(artefactName)))
61+ else false)
62+ then throw("WRITD: Unsupported wearable")
63+ else {
64+ let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
65+ let boostDuck = if ((artefactName == "ART-XSCARF"))
66+ then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
67+ else nil
68+ if ((boostDuck == boostDuck))
69+ then if ((artefactId != ""))
70+ then throw(("Duck is already wearing a " + artefactName))
71+ else [StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)]
72+ else throw("Strict value is not equal to itself.")
73+ }
74+ else throw("Strict value is not equal to itself.")
6775 }
6876
6977
7078 @Callable(i)
7179 func configureOracle (oracle) = if ((i.caller != this))
7280 then throw("admin only")
7381 else [StringEntry("static_oracleAddress", oracle)]
7482
7583
7684
7785 @Callable(i)
78-func stakeItem () = if (!(if ((size(i.payments) == 1))
79- then (i.payments[0].amount == 1)
80- else false))
81- then throw("Invalid payment")
82- else {
83- let assetId = value(i.payments[0].assetId)
84- let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
85- if ((artefactName == artefactName))
86- then if (!(containsElement(stakeable, artefactName)))
87- then throw("You can't stake this artafect")
88- else if (itemIsInCoolDown(artefactName, toBase58String(assetId)))
89- then throw("Item can't be staked yet, it's in cooldown")
90- else {
91- let invoker = toString(i.caller)
92- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
93- if ((artefactId != ""))
94- then throw(("You are already staking " + artefactName))
95- else {
96- let boostDuck = if ((artefactName == "ART-LAKE"))
97- then invoke(getItemsAddress(), "manipulateBoostAccount", [2, invoker], nil)
98- else if ((artefactName == "ART-XTREE"))
99- then invoke(getItemsAddress(), "manipulateBoostAccount", [3, invoker], nil)
100- else nil
101- if ((boostDuck == boostDuck))
102- then [StringEntry(keyArtefactOwner(artefactName, invoker), toBase58String(assetId))]
103- else throw("Strict value is not equal to itself.")
104- }
105- }
106- else throw("Strict value is not equal to itself.")
107- }
86+func wearItemToDuck () = {
87+ let firstPayment = value(i.payments[0])
88+ let secondPayment = value(i.payments[1])
89+ let duckId = toBase58String(value(firstPayment.assetId))
90+ let secondAssetId = toBase58String(value(secondPayment.assetId))
91+ if (if ((firstPayment.amount != 1))
92+ then true
93+ else (secondPayment.amount != 1))
94+ then throw("WRITD: NFT is not attached")
95+ else {
96+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
97+ if ((children == children))
98+ then (wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)])
99+ else throw("Strict value is not equal to itself.")
100+ }
101+ }
108102
109103
110104
111105 @Callable(i)
112-func unstakeItem (artefactName) = if (!(containsElement(stakeable, artefactName)))
113- then throw("This artefact doesn't exist")
114- else {
115- let invoker = toString(i.caller)
116- let artefactId = tryGetString(keyArtefactOwner(artefactName, invoker))
117- if ((artefactId == "ART-XSOCK"))
118- then throw("You can not unstake ART-XSOCK anymore")
119- else if ((artefactId == ""))
120- then throw(("You didnt stake " + artefactName))
121- else {
122- let boostDuck = if ((artefactName == "ART-LAKE"))
123- then invoke(getItemsAddress(), "manipulateBoostAccount", [-2, invoker], nil)
124- else if ((artefactName == "ART-XTREE"))
125- then invoke(getItemsAddress(), "manipulateBoostAccount", [-3, invoker], nil)
126- else nil
127- if ((boostDuck == boostDuck))
128- then [IntegerEntry(keyUnstakeHeight(artefactName, artefactId), height), ScriptTransfer(i.caller, 1, fromBase58String(artefactId)), DeleteEntry(keyArtefactOwner(artefactName, invoker))]
129- else throw("Strict value is not equal to itself.")
130- }
131- }
106+func wearXItemsToDuck () = if ((2 > size(i.payments)))
107+ then throw("WWXITD: Please attach at least 1 item and 1 duck!")
108+ else if ((size(i.payments) > 6))
109+ then throw("WWXITD: You can only attach 5 items and one duck!")
110+ else {
111+ func handleItem (acc,payment) = {
112+ let index = indexOf(i.payments, payment)
113+ if ((index == 0))
114+ then {
115+ let duckId = toBase58String(value(payment.assetId))
116+ if ((payment.amount != 1))
117+ then throw("WRITD: Duck is not attached")
118+ else {
119+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
120+ if ((children == children))
121+ then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
122+ else throw("Strict value is not equal to itself.")
123+ }
124+ }
125+ else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[0].assetId))))
126+ }
132127
128+ let $l = i.payments
129+ let $s = size($l)
130+ let $acc0 = nil
131+ func $f0_1 ($a,$i) = if (($i >= $s))
132+ then $a
133+ else handleItem($a, $l[$i])
133134
135+ func $f0_2 ($a,$i) = if (($i >= $s))
136+ then $a
137+ else throw("List size exceeds 6")
134138
135-@Callable(i)
136-func oneTimeUseFeed () = if (!(if ((size(i.payments) == 1))
137- then (i.payments[0].amount == 1)
138- else false))
139- then throw("Invalid payment")
140- else {
141- let assetId = value(i.payments[0].assetId)
142- let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
143- if ((artefactName == artefactName))
144- then if ((artefactName != "ART-FEED10"))
145- then throw("You can't use this artafect to earn feedlimit!")
146- else {
147- let invoker = toString(i.caller)
148-[IntegerEntry(keyFeedLimit(invoker), (tryGetInteger(keyFeedLimit(invoker)) + 10))]
149- }
150- else throw("Strict value is not equal to itself.")
151- }
139+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
140+ }
152141
153-
154-@Verifier(tx)
155-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
156142

github/deemru/w8io/3ef1775 
37.40 ms