tx · 7pNQgskosDBQCVT36U5xcTwfksTZZwa2J6wJdVqQzHRD

3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7:  -0.00900000 Waves

2023.09.09 00:11 [3812659] smart account 3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7 > SELF 0.00000000 Waves

{ "type": 13, "id": "7pNQgskosDBQCVT36U5xcTwfksTZZwa2J6wJdVqQzHRD", "fee": 900000, "feeAssetId": null, "timestamp": 1694207470713, "version": 2, "chainId": 87, "sender": "3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7", "senderPublicKey": "8XKsuJqSe6FsspUz3sPvdADeLpP7e1tfiWx5tt6e674g", "proofs": [ "bQurRj2ukus1HCxRKeDnMXSZoXLdCBcV5e3betZ6uDaAhAYyHJhhubNY8Y3qVRvyT8UQbjUNKFXCKwMJGTgc1r8" ], "script": "base64:BgILCAISAwoBCBIAEgASARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAhNzdGF0aWNfaXRlbXNBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAIUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IACXdlYXJhYmxlcwkAzAgCAghBUlQtQ0FQRQkAzAgCAgdBUlQtSEFUCQDMCAICCkFSVC1YU0NBUkYJAMwIAgIMQVJULVhTV0VBVEVSBQNuaWwBD2tleUFydGVmYWN0RHVjawIGZHVja0lkCHdlYXJhYmxlCQCsAgIJAKwCAgUGZHVja0lkAgFfBQh3ZWFyYWJsZQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAEMdHJ5R2V0U3RyaW5nAQNrZXkJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIFBHRoaXMFA2tleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIcd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAARFnZXRCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwABD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAARBnZXRGZWVBZ2dyZWdhdG9yAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQdwYXltZW50AwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlXQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAlmZWVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFdDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBEnRyeUdldENvc21ldGljSXRlbQEEaXRlbQQDa2V5CQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0EByRtYXRjaDAJAJoIAgkBD2dldEl0ZW1zQWRkcmVzcwAFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEFBHVuaXQBCHdlYXJJdGVtAg9hc3NldElkV2VhckFibGUGZHVja0lkBAxhcnRlZmFjdE5hbWUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIFD2Fzc2V0SWRXZWFyQWJsZQUDbmlsBQNuaWwDCQAAAgUMYXJ0ZWZhY3ROYW1lBQxhcnRlZmFjdE5hbWUDAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUJd2VhcmFibGVzBQxhcnRlZmFjdE5hbWUJAQEhAQkBCWlzRGVmaW5lZAEJARJ0cnlHZXRDb3NtZXRpY0l0ZW0BBQxhcnRlZmFjdE5hbWUHCQACAQIbV1JJVEQ6IFVuc3VwcG9ydGVkIHdlYXJhYmxlBAphcnRlZmFjdElkCQEMdHJ5R2V0U3RyaW5nAQkBD2tleUFydGVmYWN0RHVjawIFBmR1Y2tJZAUMYXJ0ZWZhY3ROYW1lBAlib29zdER1Y2sDCQAAAgUMYXJ0ZWZhY3ROYW1lAgpBUlQtWFNDQVJGCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAg9tYW5pcHVsYXRlQm9vc3QJAMwIAgBFCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwFA25pbAMJAAACBQlib29zdER1Y2sFCWJvb3N0RHVjawMJAQIhPQIFCmFydGVmYWN0SWQCAAkAAgEJAKwCAgIaRHVjayBpcyBhbHJlYWR5IHdlYXJpbmcgYSAFDGFydGVmYWN0TmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUFD2Fzc2V0SWRXZWFyQWJsZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAUGb3JhY2xlBQNuaWwBaQEOd2Vhckl0ZW1Ub0R1Y2sABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwACBAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBA1zZWNvbmRBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ1zZWNvbmRQYXltZW50BmFtb3VudAABCQACAQIaV1JJVEQ6IE5GVCBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgkAzggCCQEId2Vhckl0ZW0CBQ1zZWNvbmRBc3NldElkBQZkdWNrSWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAUDbmlsBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQd2VhclhJdGVtc1RvRHVjawAEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAEDCQBmAgADCQCQAwEIBQFpCHBheW1lbnRzCQACAQIxV1dYSVREOiBQbGVhc2UgYXR0YWNoIGF0IGxlYXN0IDEgaXRlbSBhbmQgMSBkdWNrIQMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAcJAAIBAjFXV1hJVEQ6IFlvdSBjYW4gb25seSBhdHRhY2ggNSBpdGVtcyBhbmQgb25lIGR1Y2shCgEKaGFuZGxlSXRlbQIDYWNjB3BheW1lbnQEBWluZGV4CQDPCAIIBQFpCHBheW1lbnRzBQdwYXltZW50AwkAAAIFBWluZGV4AAAEBmR1Y2tJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkBAiE9AggFB3BheW1lbnQGYW1vdW50AAEJAAIBAhtXUklURDogRHVjayBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgUDYWNjCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUHcGF5bWVudAdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUDYWNjCQEId2Vhckl0ZW0CCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkCQDOCAIKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmhhbmRsZUl0ZW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFDHZhbGlkUGF5bWVudAA2rmYd", "height": 3812659, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4k1b1HJ6iEtczu3xScv6w9m9MyvjuDm4UuTESAmHtA3y Next: ABGtmL31P6gSzikFSSQvfMxhEWCWFwJMQJfzhitAq5sz Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func staticKey_oracleAddress () = "static_oracleAddress"
5+
6+
7+func staticKey_breederAddress () = "static_breederAddress"
8+
9+
10+func staticKey_itemsAddress () = "static_itemsAddress"
11+
12+
13+func staticKey_extraFee () = "static_extraFee"
14+
15+
16+func staticKey_feeAggregator () = "static_feeAggregator"
17+
18+
419 let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
520
621 func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
3348 }
3449
3550
36-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
51+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
3752
3853
39-func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
54+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
4055
4156
42-func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
57+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
58+
59+
60+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
61+
62+
63+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
64+ then throw("WCAP: Please attach waves")
65+ else {
66+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
67+ if ((payment.amount != feeAmount))
68+ then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
69+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
70+ }
4371
4472
4573 func tryGetCosmeticItem (item) = {
78106 @Callable(i)
79107 func configureOracle (oracle) = if ((i.caller != this))
80108 then throw("admin only")
81- else [StringEntry("static_oracleAddress", oracle)]
109+ else [StringEntry(staticKey_oracleAddress(), oracle)]
82110
83111
84112
86114 func wearItemToDuck () = {
87115 let firstPayment = value(i.payments[0])
88116 let secondPayment = value(i.payments[1])
117+ let validPayment = checkAdditionalPayment(i.payments[2])
89118 let duckId = toBase58String(value(firstPayment.assetId))
90119 let secondAssetId = toBase58String(value(secondPayment.assetId))
91120 if (if ((firstPayment.amount != 1))
95124 else {
96125 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
97126 if ((children == children))
98- then (wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)])
127+ then ((wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
99128 else throw("Strict value is not equal to itself.")
100129 }
101130 }
103132
104133
105134 @Callable(i)
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))))
135+func wearXItemsToDuck () = {
136+ let validPayment = checkAdditionalPayment(i.payments[1])
137+ if ((3 > size(i.payments)))
138+ then throw("WWXITD: Please attach at least 1 item and 1 duck!")
139+ else if ((size(i.payments) > 7))
140+ then throw("WWXITD: You can only attach 5 items and one duck!")
141+ else {
142+ func handleItem (acc,payment) = {
143+ let index = indexOf(i.payments, payment)
144+ if ((index == 0))
145+ then {
146+ let duckId = toBase58String(value(payment.assetId))
147+ if ((payment.amount != 1))
148+ then throw("WRITD: Duck is not attached")
149+ else {
150+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
151+ if ((children == children))
152+ then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
153+ else throw("Strict value is not equal to itself.")
154+ }
155+ }
156+ else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId))))
157+ }
158+
159+ ({
160+ let $l = i.payments
161+ let $s = size($l)
162+ let $acc0 = nil
163+ func $f0_1 ($a,$i) = if (($i >= $s))
164+ then $a
165+ else handleItem($a, $l[$i])
166+
167+ func $f0_2 ($a,$i) = if (($i >= $s))
168+ then $a
169+ else throw("List size exceeds 6")
170+
171+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
172+ } ++ validPayment)
126173 }
127-
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])
134-
135- func $f0_2 ($a,$i) = if (($i >= $s))
136- then $a
137- else throw("List size exceeds 6")
138-
139- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
140- }
174+ }
141175
142176
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func staticKey_oracleAddress () = "static_oracleAddress"
5+
6+
7+func staticKey_breederAddress () = "static_breederAddress"
8+
9+
10+func staticKey_itemsAddress () = "static_itemsAddress"
11+
12+
13+func staticKey_extraFee () = "static_extraFee"
14+
15+
16+func staticKey_feeAggregator () = "static_feeAggregator"
17+
18+
419 let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
520
621 func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
722
823
924 func tryGetStringExternal (address,key) = match getString(address, key) {
1025 case a: String =>
1126 a
1227 case _ =>
1328 ""
1429 }
1530
1631
1732 func tryGetString (key) = tryGetStringExternal(this, key)
1833
1934
2035 func asInt (value) = match value {
2136 case int: Int =>
2237 int
2338 case _ =>
2439 throw("wrong type, expected: Int")
2540 }
2641
2742
2843 func asString (value) = match value {
2944 case string: String =>
3045 string
3146 case _ =>
3247 throw("wrong type, expected: String")
3348 }
3449
3550
36-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
51+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
3752
3853
39-func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
54+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
4055
4156
42-func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
57+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
58+
59+
60+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
61+
62+
63+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
64+ then throw("WCAP: Please attach waves")
65+ else {
66+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
67+ if ((payment.amount != feeAmount))
68+ then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
69+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
70+ }
4371
4472
4573 func tryGetCosmeticItem (item) = {
4674 let key = ("direct_cosmetic_" + item)
4775 match getInteger(getItemsAddress(), key) {
4876 case a: Int =>
4977 a
5078 case _ =>
5179 unit
5280 }
5381 }
5482
5583
5684 func wearItem (assetIdWearAble,duckId) = {
5785 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
5886 if ((artefactName == artefactName))
5987 then if (if (!(containsElement(wearables, artefactName)))
6088 then !(isDefined(tryGetCosmeticItem(artefactName)))
6189 else false)
6290 then throw("WRITD: Unsupported wearable")
6391 else {
6492 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
6593 let boostDuck = if ((artefactName == "ART-XSCARF"))
6694 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
6795 else nil
6896 if ((boostDuck == boostDuck))
6997 then if ((artefactId != ""))
7098 then throw(("Duck is already wearing a " + artefactName))
7199 else [StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)]
72100 else throw("Strict value is not equal to itself.")
73101 }
74102 else throw("Strict value is not equal to itself.")
75103 }
76104
77105
78106 @Callable(i)
79107 func configureOracle (oracle) = if ((i.caller != this))
80108 then throw("admin only")
81- else [StringEntry("static_oracleAddress", oracle)]
109+ else [StringEntry(staticKey_oracleAddress(), oracle)]
82110
83111
84112
85113 @Callable(i)
86114 func wearItemToDuck () = {
87115 let firstPayment = value(i.payments[0])
88116 let secondPayment = value(i.payments[1])
117+ let validPayment = checkAdditionalPayment(i.payments[2])
89118 let duckId = toBase58String(value(firstPayment.assetId))
90119 let secondAssetId = toBase58String(value(secondPayment.assetId))
91120 if (if ((firstPayment.amount != 1))
92121 then true
93122 else (secondPayment.amount != 1))
94123 then throw("WRITD: NFT is not attached")
95124 else {
96125 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
97126 if ((children == children))
98- then (wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)])
127+ then ((wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
99128 else throw("Strict value is not equal to itself.")
100129 }
101130 }
102131
103132
104133
105134 @Callable(i)
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))))
135+func wearXItemsToDuck () = {
136+ let validPayment = checkAdditionalPayment(i.payments[1])
137+ if ((3 > size(i.payments)))
138+ then throw("WWXITD: Please attach at least 1 item and 1 duck!")
139+ else if ((size(i.payments) > 7))
140+ then throw("WWXITD: You can only attach 5 items and one duck!")
141+ else {
142+ func handleItem (acc,payment) = {
143+ let index = indexOf(i.payments, payment)
144+ if ((index == 0))
145+ then {
146+ let duckId = toBase58String(value(payment.assetId))
147+ if ((payment.amount != 1))
148+ then throw("WRITD: Duck is not attached")
149+ else {
150+ let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
151+ if ((children == children))
152+ then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
153+ else throw("Strict value is not equal to itself.")
154+ }
155+ }
156+ else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId))))
157+ }
158+
159+ ({
160+ let $l = i.payments
161+ let $s = size($l)
162+ let $acc0 = nil
163+ func $f0_1 ($a,$i) = if (($i >= $s))
164+ then $a
165+ else handleItem($a, $l[$i])
166+
167+ func $f0_2 ($a,$i) = if (($i >= $s))
168+ then $a
169+ else throw("List size exceeds 6")
170+
171+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
172+ } ++ validPayment)
126173 }
127-
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])
134-
135- func $f0_2 ($a,$i) = if (($i >= $s))
136- then $a
137- else throw("List size exceeds 6")
138-
139- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
140- }
174+ }
141175
142176

github/deemru/w8io/3ef1775 
34.28 ms