tx · BCCgZSnnRzFMcqioSobSgerGgrZbkX5ckeZKL4XAe2QM

3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7:  -0.00400000 Waves

2022.08.24 14:55 [3264010] smart account 3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7 > SELF 0.00000000 Waves

{ "type": 13, "id": "BCCgZSnnRzFMcqioSobSgerGgrZbkX5ckeZKL4XAe2QM", "fee": 400000, "feeAssetId": null, "timestamp": 1661342168512, "version": 2, "chainId": 87, "sender": "3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7", "senderPublicKey": "8XKsuJqSe6FsspUz3sPvdADeLpP7e1tfiWx5tt6e674g", "proofs": [ "2c6eCYVcCexYeWnte3NE7KLtzUBcN1eatMyoJoBAaB1aKMQsApNWurHBRJJGWnxTDa5uLnBCW6k4NNBq1WxyY2Zg" ], "script": "base64:BgILCAISAwoBCBIAEgALAAl3ZWFyYWJsZXMJAMwIAgIIQVJULUNBUEUJAMwIAgIHQVJULUhBVAkAzAgCAgpBUlQtWFNDQVJGCQDMCAICDEFSVC1YU1dFQVRFUgUDbmlsAQ9rZXlBcnRlZmFjdER1Y2sCBmR1Y2tJZAh3ZWFyYWJsZQkArAICCQCsAgIFBmR1Y2tJZAIBXwUId2VhcmFibGUBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAFBnN0cmluZwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQIUc3RhdGljX29yYWNsZUFkZHJlc3MBEWdldEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAITc3RhdGljX2l0ZW1zQWRkcmVzcwESdHJ5R2V0Q29zbWV0aWNJdGVtAQRpdGVtBANrZXkJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQQHJG1hdGNoMAkAmggCCQEPZ2V0SXRlbXNBZGRyZXNzAAUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQUEdW5pdAEId2Vhckl0ZW0CD2Fzc2V0SWRXZWFyQWJsZQZkdWNrSWQEDGFydGVmYWN0TmFtZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFA25pbAMJAAACBQxhcnRlZmFjdE5hbWUFDGFydGVmYWN0TmFtZQMDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQl3ZWFyYWJsZXMFDGFydGVmYWN0TmFtZQkBASEBCQEJaXNEZWZpbmVkAQkBEnRyeUdldENvc21ldGljSXRlbQEFDGFydGVmYWN0TmFtZQcJAAIBAhtXUklURDogVW5zdXBwb3J0ZWQgd2VhcmFibGUECmFydGVmYWN0SWQJAQx0cnlHZXRTdHJpbmcBCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUECWJvb3N0RHVjawMJAAACBQxhcnRlZmFjdE5hbWUCCkFSVC1YU0NBUkYJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACD21hbmlwdWxhdGVCb29zdAkAzAgCAEUJAMwIAgUGZHVja0lkBQNuaWwFA25pbAUDbmlsAwkAAAIFCWJvb3N0RHVjawUJYm9vc3REdWNrAwkBAiE9AgUKYXJ0ZWZhY3RJZAIACQACAQkArAICAhpEdWNrIGlzIGFscmVhZHkgd2VhcmluZyBhIAUMYXJ0ZWZhY3ROYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQUPYXNzZXRJZFdlYXJBYmxlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlBQNuaWwBaQEOd2Vhckl0ZW1Ub0R1Y2sABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBA1zZWNvbmRBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ1zZWNvbmRQYXltZW50BmFtb3VudAABCQACAQIaV1JJVEQ6IE5GVCBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgkBCHdlYXJJdGVtAgUNc2Vjb25kQXNzZXRJZAUGZHVja0lkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARB3ZWFyWEl0ZW1zVG9EdWNrAAMJAGYCAAIJAJADAQgFAWkIcGF5bWVudHMJAAIBAjFXV1hJVEQ6IFBsZWFzZSBhdHRhY2ggYXQgbGVhc3QgMSBpdGVtIGFuZCAxIGR1Y2shAwkAZgIJAJADAQgFAWkIcGF5bWVudHMABgkAAgECMVdXWElURDogWW91IGNhbiBvbmx5IGF0dGFjaCA1IGl0ZW1zIGFuZCBvbmUgZHVjayEKAQpoYW5kbGVJdGVtAgNhY2MHcGF5bWVudAQFaW5kZXgJAM8IAggFAWkIcGF5bWVudHMFB3BheW1lbnQDCQAAAgUFaW5kZXgAAAQGZHVja0lkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQDCQECIT0CCAUHcGF5bWVudAZhbW91bnQAAQkAAgECG1dSSVREOiBEdWNrIGlzIG5vdCBhdHRhY2hlZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQZkdWNrSWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgkAzggCBQNhY2MJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQdwYXltZW50B2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQNhY2MJAQh3ZWFySXRlbQIJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmhhbmRsZUl0ZW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYAdg0PAA==", "height": 3264010, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AUWNshxvAnJ6v2BZYnKLtjVkZL2wSNWjbtxcUJRH6SuP Next: 3oD5VvQAopHjXgM6YdTFxpj7iNz67tVRiGkvsHDW1jUX Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
4242 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
4343
4444
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.")
75+ }
76+
77+
4578 @Callable(i)
4679 func configureOracle (oracle) = if ((i.caller != this))
4780 then throw("admin only")
5891 if (if ((firstPayment.amount != 1))
5992 then true
6093 else (secondPayment.amount != 1))
61- then throw("NFT is not attached")
94+ then throw("WRITD: NFT is not attached")
6295 else {
6396 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
6497 if ((children == children))
65- then {
66- let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [secondAssetId], nil))
67- if ((artefactName == artefactName))
68- then if (!(containsElement(wearables, artefactName)))
69- then throw("Unsupported wearable")
70- else {
71- let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
72- let boostDuck = if ((artefactName == "ART-XSCARF"))
73- then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
74- else nil
75- if ((boostDuck == boostDuck))
76- then if ((artefactId != ""))
77- then throw(("Duck is already wearing a " + artefactName))
78- else [StringEntry(keyArtefactDuck(duckId, artefactName), secondAssetId), ScriptTransfer(i.caller, 1, firstPayment.assetId)]
79- else throw("Strict value is not equal to itself.")
80- }
81- else throw("Strict value is not equal to itself.")
82- }
98+ then (wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)])
8399 else throw("Strict value is not equal to itself.")
84100 }
85101 }
102+
103+
104+
105+@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))))
126+ }
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+ }
86141
87142
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
55
66 func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
77
88
99 func tryGetStringExternal (address,key) = match getString(address, key) {
1010 case a: String =>
1111 a
1212 case _ =>
1313 ""
1414 }
1515
1616
1717 func tryGetString (key) = tryGetStringExternal(this, key)
1818
1919
2020 func asInt (value) = match value {
2121 case int: Int =>
2222 int
2323 case _ =>
2424 throw("wrong type, expected: Int")
2525 }
2626
2727
2828 func asString (value) = match value {
2929 case string: String =>
3030 string
3131 case _ =>
3232 throw("wrong type, expected: String")
3333 }
3434
3535
3636 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
3737
3838
3939 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
4040
4141
4242 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
4343
4444
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.")
75+ }
76+
77+
4578 @Callable(i)
4679 func configureOracle (oracle) = if ((i.caller != this))
4780 then throw("admin only")
4881 else [StringEntry("static_oracleAddress", oracle)]
4982
5083
5184
5285 @Callable(i)
5386 func wearItemToDuck () = {
5487 let firstPayment = value(i.payments[0])
5588 let secondPayment = value(i.payments[1])
5689 let duckId = toBase58String(value(firstPayment.assetId))
5790 let secondAssetId = toBase58String(value(secondPayment.assetId))
5891 if (if ((firstPayment.amount != 1))
5992 then true
6093 else (secondPayment.amount != 1))
61- then throw("NFT is not attached")
94+ then throw("WRITD: NFT is not attached")
6295 else {
6396 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
6497 if ((children == children))
65- then {
66- let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [secondAssetId], nil))
67- if ((artefactName == artefactName))
68- then if (!(containsElement(wearables, artefactName)))
69- then throw("Unsupported wearable")
70- else {
71- let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
72- let boostDuck = if ((artefactName == "ART-XSCARF"))
73- then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
74- else nil
75- if ((boostDuck == boostDuck))
76- then if ((artefactId != ""))
77- then throw(("Duck is already wearing a " + artefactName))
78- else [StringEntry(keyArtefactDuck(duckId, artefactName), secondAssetId), ScriptTransfer(i.caller, 1, firstPayment.assetId)]
79- else throw("Strict value is not equal to itself.")
80- }
81- else throw("Strict value is not equal to itself.")
82- }
98+ then (wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)])
8399 else throw("Strict value is not equal to itself.")
84100 }
85101 }
102+
103+
104+
105+@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))))
126+ }
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+ }
86141
87142

github/deemru/w8io/3ef1775 
34.08 ms