tx · 9x2YtvA7GH6RXteGd5AKxAqsHmrm4bZYWqyKcoZVBnRd

3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7:  -0.01000000 Waves

2023.11.03 22:33 [3893424] smart account 3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7 > SELF 0.00000000 Waves

{ "type": 13, "id": "9x2YtvA7GH6RXteGd5AKxAqsHmrm4bZYWqyKcoZVBnRd", "fee": 1000000, "feeAssetId": null, "timestamp": 1699040121629, "version": 2, "chainId": 87, "sender": "3PHUMZkr66B38WxHV1boULaEjjF7giGgVy7", "senderPublicKey": "8XKsuJqSe6FsspUz3sPvdADeLpP7e1tfiWx5tt6e674g", "proofs": [ "3NC1aaU9kKZad9FyBNUZZ9j9edzp7aWkPhFJ81dLJKQYu29xasJyAg8gtBJ1bVkFah61TNHu9QXhEtw3jdQMHjLz" ], "script": "base64:BgIRCAISAwoBCBIAEgQKAgQIEgATARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAhNzdGF0aWNfaXRlbXNBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBGHN0YXRpY0tleV9leHRyYUZlZVJlbW92ZQACFXN0YXRpY19leHRyYUZlZVJlbW92ZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgAJd2VhcmFibGVzCQDMCAICCEFSVC1DQVBFCQDMCAICB0FSVC1IQVQJAMwIAgIKQVJULVhTQ0FSRgkAzAgCAgxBUlQtWFNXRUFURVIFA25pbAEPa2V5QXJ0ZWZhY3REdWNrAgZkdWNrSWQId2VhcmFibGUJAKwCAgkArAICBQZkdWNrSWQCAV8FCHdlYXJhYmxlARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwBQZzdHJpbmcJAAIBAhx3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABEWdldEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAEPZ2V0SXRlbXNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCB3BheW1lbnQOYW1vdW50T3ZlcnJpZGUDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGVdDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAMJAQIhPQIFDmFtb3VudE92ZXJyaWRlAAAFDmFtb3VudE92ZXJyaWRlCQERQGV4dHJOYXRpdmUoMTA1MCkCCQEJZ2V0T3JhY2xlAAkBEnN0YXRpY0tleV9leHRyYUZlZQADCQECIT0CCAUHcGF5bWVudAZhbW91bnQFCWZlZUFtb3VudAkAAgEJAKwCAgkArAICAhxXQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQCkAwEFCWZlZUFtb3VudAITIGFtb3VudCBvZiB3YXZlbGV0cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFCWZlZUFtb3VudAUEdW5pdAUDbmlsARJ0cnlHZXRDb3NtZXRpY0l0ZW0BBGl0ZW0EA2tleQkArAICAhBkaXJlY3RfY29zbWV0aWNfBQRpdGVtBAckbWF0Y2gwCQCaCAIJAQ9nZXRJdGVtc0FkZHJlc3MABQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhBQR1bml0AQh3ZWFySXRlbQIPYXNzZXRJZFdlYXJBYmxlBmR1Y2tJZAQMYXJ0ZWZhY3ROYW1lCQEIYXNTdHJpbmcBCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhRjaGVja0FydGVmYWN0RGV0YWlscwkAzAgCBQ9hc3NldElkV2VhckFibGUFA25pbAUDbmlsAwkAAAIFDGFydGVmYWN0TmFtZQUMYXJ0ZWZhY3ROYW1lAwMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFCXdlYXJhYmxlcwUMYXJ0ZWZhY3ROYW1lCQEBIQEJAQlpc0RlZmluZWQBCQESdHJ5R2V0Q29zbWV0aWNJdGVtAQUMYXJ0ZWZhY3ROYW1lBwkAAgECG1dSSVREOiBVbnN1cHBvcnRlZCB3ZWFyYWJsZQQKYXJ0ZWZhY3RJZAkBDHRyeUdldFN0cmluZwEJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQQJYm9vc3REdWNrAwkAAAIFDGFydGVmYWN0TmFtZQIKQVJULVhTQ0FSRgkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIPbWFuaXB1bGF0ZUJvb3N0CQDMCAIARQkAzAgCBQZkdWNrSWQFA25pbAUDbmlsBQNuaWwDCQAAAgUJYm9vc3REdWNrBQlib29zdER1Y2sDCQECIT0CBQphcnRlZmFjdElkAgAJAAIBCQCsAgICGkR1Y2sgaXMgYWxyZWFkeSB3ZWFyaW5nIGEgBQxhcnRlZmFjdE5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUFydGVmYWN0RHVjawIFBmR1Y2tJZAUMYXJ0ZWZhY3ROYW1lBQ9hc3NldElkV2VhckFibGUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAFBm9yYWNsZQUDbmlsAWkBDndlYXJJdGVtVG9EdWNrAAQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDXNlY29uZFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAIJAJEDAggFAWkIcGF5bWVudHMAAgAABAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBA1zZWNvbmRBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ1zZWNvbmRQYXltZW50BmFtb3VudAABCQACAQIaV1JJVEQ6IE5GVCBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgkAzggCCQEId2Vhckl0ZW0CBQ1zZWNvbmRBc3NldElkBQZkdWNrSWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAUDbmlsBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEScmVtb3ZlSXRlbUZyb21EdWNrAghidXJuSXRlbQxhcnRlZmFjdE5hbWUECHdhdmVzRmVlAwUIYnVybkl0ZW0AAAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfZXh0cmFGZWVSZW1vdmUABAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABA9yb2JvRHVja1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAIJAJEDAggFAWkIcGF5bWVudHMAAgUId2F2ZXNGZWUEBmR1Y2tJZAkA2AQBCQEFdmFsdWUBCAULZHVja1BheW1lbnQHYXNzZXRJZAQKcm9ib0R1Y2tJZAkA2AQBCQEFdmFsdWUBCAUPcm9ib0R1Y2tQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFC2R1Y2tQYXltZW50BmFtb3VudAABBgkBAiE9AggFD3JvYm9EdWNrUGF5bWVudAZhbW91bnQAAQkAAgECGldSSVREOiBORlQgaXMgbm90IGF0dGFjaGVkBAhjaGlsZHJlbgkBBWFzSW50AQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuBBRhcnRlZmFjdE5hbWVSb2JvZHVjawkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUKcm9ib0R1Y2tJZAUDbmlsBQNuaWwDCQAAAgUUYXJ0ZWZhY3ROYW1lUm9ib2R1Y2sFFGFydGVmYWN0TmFtZVJvYm9kdWNrAwkBAiE9AgUUYXJ0ZWZhY3ROYW1lUm9ib2R1Y2sCDEFSVC1ST0JPRFVDSwkAAgECH09ubHkgcm9kb2R1Y2sgY2FuIHJlbW92ZSBpdGVtcyEDAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUJd2VhcmFibGVzBQxhcnRlZmFjdE5hbWUJAQEhAQkBCWlzRGVmaW5lZAEJARJ0cnlHZXRDb3NtZXRpY0l0ZW0BBQxhcnRlZmFjdE5hbWUHCQACAQIbV1JJVEQ6IFVuc3VwcG9ydGVkIHdlYXJhYmxlBAphcnRlZmFjdElkCQEMdHJ5R2V0U3RyaW5nAQkBD2tleUFydGVmYWN0RHVjawIFBmR1Y2tJZAUMYXJ0ZWZhY3ROYW1lBAlib29zdER1Y2sDCQAAAgUMYXJ0ZWZhY3ROYW1lAgpBUlQtWFNDQVJGCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAg9tYW5pcHVsYXRlQm9vc3QJAMwIAgBFCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwFA25pbAMJAAACBQlib29zdER1Y2sFCWJvb3N0RHVjawMJAAACBQphcnRlZmFjdElkAgAJAAIBCQCsAgICE0R1Y2sgbm90IHdlYXJpbmcgYSAFDGFydGVmYWN0TmFtZQQEYnVybgMFCGJ1cm5JdGVtCQDMCAIJAQRCdXJuAgkA2QQBBQphcnRlZmFjdElkAAEFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQphcnRlZmFjdElkBQNuaWwJAM4IAgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQgFC2R1Y2tQYXltZW50B2Fzc2V0SWQJAMwIAgkBBEJ1cm4CCQDZBAEFCnJvYm9EdWNrSWQAAQUDbmlsBQRidXJuBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQd2VhclhJdGVtc1RvRHVjawAEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCCQCRAwIIBQFpCHBheW1lbnRzAAEAAAMJAGYCAAMJAJADAQgFAWkIcGF5bWVudHMJAAIBAjFXV1hJVEQ6IFBsZWFzZSBhdHRhY2ggYXQgbGVhc3QgMSBpdGVtIGFuZCAxIGR1Y2shAwkAZgIJAJADAQgFAWkIcGF5bWVudHMABwkAAgECMVdXWElURDogWW91IGNhbiBvbmx5IGF0dGFjaCA1IGl0ZW1zIGFuZCBvbmUgZHVjayEKAQpoYW5kbGVJdGVtAgNhY2MHcGF5bWVudAQFaW5kZXgJAM8IAggFAWkIcGF5bWVudHMFB3BheW1lbnQDCQAAAgUFaW5kZXgAAAQGZHVja0lkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQDCQECIT0CCAUHcGF5bWVudAZhbW91bnQAAQkAAgECG1dSSVREOiBEdWNrIGlzIG5vdCBhdHRhY2hlZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQZkdWNrSWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgkAzggCBQNhY2MJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQdwYXltZW50B2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQNhY2MJAQh3ZWFySXRlbQIJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQJAM4IAgoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKaGFuZGxlSXRlbQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUMdmFsaWRQYXltZW50AAWHGBk=", "height": 3893424, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2XRRdr7ryt1VoNomTUPZ4KvZxXjXSxQTVmGpJ1fqKxDq Next: 2HYLpcktSSTNarcXjyMQ1f5jvvUAa67Wd2iMsDEp9hQJ Diff:
OldNewDifferences
153153 else {
154154 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
155155 if ((children == children))
156- then if (if (!(containsElement(wearables, artefactName)))
157- then !(isDefined(tryGetCosmeticItem(artefactName)))
158- else false)
159- then throw("WRITD: Unsupported wearable")
160- else {
161- let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
162- let boostDuck = if ((artefactName == "ART-XSCARF"))
163- then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
164- else nil
165- if ((boostDuck == boostDuck))
166- then if ((artefactId == ""))
167- then throw(("Duck not wearing a " + artefactName))
156+ then {
157+ let artefactNameRoboduck = asString(invoke(getItemsAddress(), "checkArtefactDetails", [roboDuckId], nil))
158+ if ((artefactNameRoboduck == artefactNameRoboduck))
159+ then if ((artefactNameRoboduck != "ART-ROBODUCK"))
160+ then throw("Only rododuck can remove items!")
161+ else if (if (!(containsElement(wearables, artefactName)))
162+ then !(isDefined(tryGetCosmeticItem(artefactName)))
163+ else false)
164+ then throw("WRITD: Unsupported wearable")
168165 else {
169- let burn = if (burnItem)
170- then [Burn(fromBase58String(artefactId), 1)]
171- else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
172- (([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment)
166+ let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
167+ let boostDuck = if ((artefactName == "ART-XSCARF"))
168+ then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
169+ else nil
170+ if ((boostDuck == boostDuck))
171+ then if ((artefactId == ""))
172+ then throw(("Duck not wearing a " + artefactName))
173+ else {
174+ let burn = if (burnItem)
175+ then [Burn(fromBase58String(artefactId), 1)]
176+ else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
177+ (([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment)
178+ }
179+ else throw("Strict value is not equal to itself.")
173180 }
174- else throw("Strict value is not equal to itself.")
175- }
181+ else throw("Strict value is not equal to itself.")
182+ }
176183 else throw("Strict value is not equal to itself.")
177184 }
178185 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func staticKey_oracleAddress () = "static_oracleAddress"
55
66
77 func staticKey_breederAddress () = "static_breederAddress"
88
99
1010 func staticKey_itemsAddress () = "static_itemsAddress"
1111
1212
1313 func staticKey_extraFee () = "static_extraFee"
1414
1515
1616 func staticKey_extraFeeRemove () = "static_extraFeeRemove"
1717
1818
1919 func staticKey_feeAggregator () = "static_feeAggregator"
2020
2121
2222 let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
2323
2424 func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
2525
2626
2727 func tryGetStringExternal (address,key) = match getString(address, key) {
2828 case a: String =>
2929 a
3030 case _ =>
3131 ""
3232 }
3333
3434
3535 func tryGetString (key) = tryGetStringExternal(this, key)
3636
3737
3838 func asInt (value) = match value {
3939 case int: Int =>
4040 int
4141 case _ =>
4242 throw("wrong type, expected: Int")
4343 }
4444
4545
4646 func asString (value) = match value {
4747 case string: String =>
4848 string
4949 case _ =>
5050 throw("wrong type, expected: String")
5151 }
5252
5353
5454 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
5555
5656
5757 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
5858
5959
6060 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
6161
6262
6363 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
6464
6565
6666 func checkAdditionalPayment (payment,amountOverride) = if (isDefined(payment.assetId))
6767 then throw("WCAP: Please attach waves")
6868 else {
6969 let feeAmount = if ((amountOverride != 0))
7070 then amountOverride
7171 else getIntegerValue(getOracle(), staticKey_extraFee())
7272 if ((payment.amount != feeAmount))
7373 then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
7474 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
7575 }
7676
7777
7878 func tryGetCosmeticItem (item) = {
7979 let key = ("direct_cosmetic_" + item)
8080 match getInteger(getItemsAddress(), key) {
8181 case a: Int =>
8282 a
8383 case _ =>
8484 unit
8585 }
8686 }
8787
8888
8989 func wearItem (assetIdWearAble,duckId) = {
9090 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
9191 if ((artefactName == artefactName))
9292 then if (if (!(containsElement(wearables, artefactName)))
9393 then !(isDefined(tryGetCosmeticItem(artefactName)))
9494 else false)
9595 then throw("WRITD: Unsupported wearable")
9696 else {
9797 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
9898 let boostDuck = if ((artefactName == "ART-XSCARF"))
9999 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
100100 else nil
101101 if ((boostDuck == boostDuck))
102102 then if ((artefactId != ""))
103103 then throw(("Duck is already wearing a " + artefactName))
104104 else [StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)]
105105 else throw("Strict value is not equal to itself.")
106106 }
107107 else throw("Strict value is not equal to itself.")
108108 }
109109
110110
111111 @Callable(i)
112112 func configureOracle (oracle) = if ((i.caller != this))
113113 then throw("admin only")
114114 else [StringEntry(staticKey_oracleAddress(), oracle)]
115115
116116
117117
118118 @Callable(i)
119119 func wearItemToDuck () = {
120120 let firstPayment = value(i.payments[0])
121121 let secondPayment = value(i.payments[1])
122122 let validPayment = checkAdditionalPayment(i.payments[2], 0)
123123 let duckId = toBase58String(value(firstPayment.assetId))
124124 let secondAssetId = toBase58String(value(secondPayment.assetId))
125125 if (if ((firstPayment.amount != 1))
126126 then true
127127 else (secondPayment.amount != 1))
128128 then throw("WRITD: NFT is not attached")
129129 else {
130130 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
131131 if ((children == children))
132132 then ((wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
133133 else throw("Strict value is not equal to itself.")
134134 }
135135 }
136136
137137
138138
139139 @Callable(i)
140140 func removeItemFromDuck (burnItem,artefactName) = {
141141 let wavesFee = if (burnItem)
142142 then 0
143143 else getIntegerValue(getOracle(), staticKey_extraFeeRemove())
144144 let duckPayment = value(i.payments[0])
145145 let roboDuckPayment = value(i.payments[1])
146146 let validPayment = checkAdditionalPayment(i.payments[2], wavesFee)
147147 let duckId = toBase58String(value(duckPayment.assetId))
148148 let roboDuckId = toBase58String(value(roboDuckPayment.assetId))
149149 if (if ((duckPayment.amount != 1))
150150 then true
151151 else (roboDuckPayment.amount != 1))
152152 then throw("WRITD: NFT is not attached")
153153 else {
154154 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
155155 if ((children == children))
156- then if (if (!(containsElement(wearables, artefactName)))
157- then !(isDefined(tryGetCosmeticItem(artefactName)))
158- else false)
159- then throw("WRITD: Unsupported wearable")
160- else {
161- let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
162- let boostDuck = if ((artefactName == "ART-XSCARF"))
163- then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
164- else nil
165- if ((boostDuck == boostDuck))
166- then if ((artefactId == ""))
167- then throw(("Duck not wearing a " + artefactName))
156+ then {
157+ let artefactNameRoboduck = asString(invoke(getItemsAddress(), "checkArtefactDetails", [roboDuckId], nil))
158+ if ((artefactNameRoboduck == artefactNameRoboduck))
159+ then if ((artefactNameRoboduck != "ART-ROBODUCK"))
160+ then throw("Only rododuck can remove items!")
161+ else if (if (!(containsElement(wearables, artefactName)))
162+ then !(isDefined(tryGetCosmeticItem(artefactName)))
163+ else false)
164+ then throw("WRITD: Unsupported wearable")
168165 else {
169- let burn = if (burnItem)
170- then [Burn(fromBase58String(artefactId), 1)]
171- else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
172- (([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment)
166+ let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
167+ let boostDuck = if ((artefactName == "ART-XSCARF"))
168+ then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
169+ else nil
170+ if ((boostDuck == boostDuck))
171+ then if ((artefactId == ""))
172+ then throw(("Duck not wearing a " + artefactName))
173+ else {
174+ let burn = if (burnItem)
175+ then [Burn(fromBase58String(artefactId), 1)]
176+ else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
177+ (([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment)
178+ }
179+ else throw("Strict value is not equal to itself.")
173180 }
174- else throw("Strict value is not equal to itself.")
175- }
181+ else throw("Strict value is not equal to itself.")
182+ }
176183 else throw("Strict value is not equal to itself.")
177184 }
178185 }
179186
180187
181188
182189 @Callable(i)
183190 func wearXItemsToDuck () = {
184191 let validPayment = checkAdditionalPayment(i.payments[1], 0)
185192 if ((3 > size(i.payments)))
186193 then throw("WWXITD: Please attach at least 1 item and 1 duck!")
187194 else if ((size(i.payments) > 7))
188195 then throw("WWXITD: You can only attach 5 items and one duck!")
189196 else {
190197 func handleItem (acc,payment) = {
191198 let index = indexOf(i.payments, payment)
192199 if ((index == 0))
193200 then {
194201 let duckId = toBase58String(value(payment.assetId))
195202 if ((payment.amount != 1))
196203 then throw("WRITD: Duck is not attached")
197204 else {
198205 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
199206 if ((children == children))
200207 then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
201208 else throw("Strict value is not equal to itself.")
202209 }
203210 }
204211 else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId))))
205212 }
206213
207214 ({
208215 let $l = i.payments
209216 let $s = size($l)
210217 let $acc0 = nil
211218 func $f0_1 ($a,$i) = if (($i >= $s))
212219 then $a
213220 else handleItem($a, $l[$i])
214221
215222 func $f0_2 ($a,$i) = if (($i >= $s))
216223 then $a
217224 else throw("List size exceeds 6")
218225
219226 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
220227 } ++ validPayment)
221228 }
222229 }
223230
224231

github/deemru/w8io/3ef1775 
47.88 ms