tx · A58P45XBxWJVReZM3jtpcTPjNFDBCPrSiJXboKL9HHWK

3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe:  -0.01500000 Waves

2024.12.27 22:02 [3433324] smart account 3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe > SELF 0.00000000 Waves

{ "type": 13, "id": "A58P45XBxWJVReZM3jtpcTPjNFDBCPrSiJXboKL9HHWK", "fee": 1500000, "feeAssetId": null, "timestamp": 1735326226293, "version": 2, "chainId": 84, "sender": "3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe", "senderPublicKey": "CqqNd9FdJdY64okp1oAAQ8z3kyrEcd6UKxtboqZgrSaP", "proofs": [ "5CNfxYmcrp3vxFDF2qYutGS2iXCEkE1ZDmtGwzf6Q29E2C7jRzJBpmVBpTdB5a6dv9iQREbUDw38Y7dbCjAmPy6p" ], "script": "base64:BgIWCAISAwoBCBIAEgQKAgQIEgASAwoBCCEBB2dldEJvb2wBA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBCWlzVGVzdEVudgAJAQdnZXRCb29sAQIHVEVTVEVOVgEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwEYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAIVc3RhdGljX2JyZWVkZXJBZGRyZXNzARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAITc3RhdGljX2l0ZW1zQWRkcmVzcwESc3RhdGljS2V5X2V4dHJhRmVlAAIPc3RhdGljX2V4dHJhRmVlARhzdGF0aWNLZXlfZXh0cmFGZWVSZW1vdmUAAhVzdGF0aWNfZXh0cmFGZWVSZW1vdmUBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAIUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IACXdlYXJhYmxlcwkAzAgCAghBUlQtQ0FQRQkAzAgCAgdBUlQtSEFUCQDMCAICCkFSVC1YU0NBUkYJAMwIAgIMQVJULVhTV0VBVEVSBQNuaWwBD2tleUFydGVmYWN0RHVjawIGZHVja0lkCHdlYXJhYmxlCQCsAgIJAKwCAgUGZHVja0lkAgFfBQh3ZWFyYWJsZQEMa2V5VHlwZXNEdWNrAgZkdWNrSWQEdHlwZQkArAICCQCsAgIFBmR1Y2tJZAIBXwUEdHlwZQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAEMdHJ5R2V0U3RyaW5nAQNrZXkJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIFBHRoaXMFA2tleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIcd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZwEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAARFnZXRCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwABD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAARBnZXRGZWVBZ2dyZWdhdG9yAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAh1zdGF0aWNfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwEXZ2V0VHVydGxlQnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACG3N0YXRpY190dXJ0bGVCcmVlZGVyQWRkcmVzcwETZ2V0SW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACHXN0YXRpY19jYW5pbmVJbmN1YmF0b3JBZGRyZXNzARdnZXRDYW5pbmVCcmVlZGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIbc3RhdGljX2NhbmluZUJyZWVkZXJBZGRyZXNzARlnZXRGZWxpbmVJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAh1zdGF0aWNfZmVsaW5lSW5jdWJhdG9yQWRkcmVzcwEXZ2V0RmVsaW5lQnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACG3N0YXRpY19mZWxpbmVCcmVlZGVyQWRkcmVzcwEXZ2V0TXV0YW50QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACHXN0YXRpY19tdXRhbnRJbmN1YmF0b3JBZGRyZXNzARZjaGVja0FkZGl0aW9uYWxQYXltZW50AgdwYXltZW50DmFtb3VudE92ZXJyaWRlAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlXQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAlmZWVBbW91bnQDCQECIT0CBQ5hbW91bnRPdmVycmlkZQAABQ5hbW91bnRPdmVycmlkZQkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcV0NBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAESdHJ5R2V0Q29zbWV0aWNJdGVtAQRpdGVtBANrZXkJAKwCAgIQZGlyZWN0X2Nvc21ldGljXwUEaXRlbQQHJG1hdGNoMAkAmggCCQEPZ2V0SXRlbXNBZGRyZXNzAAUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQUEdW5pdAEKdHJ5R2V0VHlwZQEId2VhcmFibGUJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQ9nZXRJdGVtc0FkZHJlc3MACQCsAgICDnR5cGVfY29zbWV0aWNfBQh3ZWFyYWJsZQEId2Vhckl0ZW0DD2Fzc2V0SWRXZWFyQWJsZQZkdWNrSWQIYWxsVHlwZXMEDGFydGVmYWN0TmFtZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFA25pbAMJAAACBQxhcnRlZmFjdE5hbWUFDGFydGVmYWN0TmFtZQMDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQl3ZWFyYWJsZXMFDGFydGVmYWN0TmFtZQkBASEBCQEJaXNEZWZpbmVkAQkBEnRyeUdldENvc21ldGljSXRlbQEFDGFydGVmYWN0TmFtZQcJAAIBAhtXUklURDogVW5zdXBwb3J0ZWQgd2VhcmFibGUECmFydGVmYWN0SWQJAQx0cnlHZXRTdHJpbmcBCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUECWJvb3N0RHVjawMJAAACBQxhcnRlZmFjdE5hbWUCCkFSVC1YU0NBUkYJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACD21hbmlwdWxhdGVCb29zdAkAzAgCAEUJAMwIAgUGZHVja0lkBQNuaWwFA25pbAUDbmlsAwkAAAIFCWJvb3N0RHVjawUJYm9vc3REdWNrAwkBAiE9AgUKYXJ0ZWZhY3RJZAIACQACAQkArAICAhpEdWNrIGlzIGFscmVhZHkgd2VhcmluZyBhIAUMYXJ0ZWZhY3ROYW1lBAR0eXBlCQEKdHJ5R2V0VHlwZQEFDGFydGVmYWN0TmFtZQMDCQEBIQEFCGFsbFR5cGVzCQECIT0CBQR0eXBlAgNQRVQHCQACAQIyWW91IGNhbid0IGF0dGFjaCB0aGlzIGl0ZW0gdG8geW91ciBORlQhIFBldHMgb25seSEECnR5cGVPbkR1Y2sDCQECIT0CBQR0eXBlAgAJAQIhPQIJAQx0cnlHZXRTdHJpbmcBCQEMa2V5VHlwZXNEdWNrAgUGZHVja0lkBQR0eXBlAgAJAAIBCQCsAgICJlR5cGUgdW5kZWZpbmVkLCBwbGVhc2UgY29udGFjdCBhZG1pbnMgBQxhcnRlZmFjdE5hbWUDBQp0eXBlT25EdWNrCQACAQIyWW91IGNhbiBvbmx5IGF0dGFjaCAxIGZyb20gZWFjaCB0eXBlIHRvIHlvdXIgZHVjayEECnR5cGVSZXN1bHQDCQECIT0CBQR0eXBlAgAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAUEdHlwZQUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFCnR5cGVSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BFXRyeUdldEJvb2xlYW5FeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJsIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHARRnZXRJZkFsbFR5cGVzQWxsb3dlZAEHYXNzZXRJZAQGaXNzdWVyCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgQLYmxhY2tsaXN0ZWQJARV0cnlHZXRCb29sZWFuRXh0ZXJuYWwCBQZpc3N1ZXIJAKwCAgkA2AQBBQdhc3NldElkAgxfYmxhY2tsaXN0ZWQDBQtibGFja2xpc3RlZAkAAgECEEdPIEZVQ0sgWU9VUlNFTEYEBG5hbWUICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEbmFtZQMDCQAAAgUGaXNzdWVyCQETZ2V0SW5jdWJhdG9yQWRkcmVzcwAGCQAAAgUGaXNzdWVyCQERZ2V0QnJlZWRlckFkZHJlc3MABgMDCQAAAgUGaXNzdWVyCQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwAGCQAAAgUGaXNzdWVyCQEXZ2V0VHVydGxlQnJlZWRlckFkZHJlc3MABwMDCQAAAgUGaXNzdWVyCQEZZ2V0Q2FuaW5lSW5jdWJhdG9yQWRkcmVzcwAGCQAAAgUGaXNzdWVyCQEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MABwMDCQAAAgUGaXNzdWVyCQEZZ2V0RmVsaW5lSW5jdWJhdG9yQWRkcmVzcwAGCQAAAgUGaXNzdWVyCQEXZ2V0RmVsaW5lQnJlZWRlckFkZHJlc3MABwMJAAACBQZpc3N1ZXIJARdnZXRNdXRhbnRCcmVlZGVyQWRkcmVzcwAHCQACAQIbTUFHOiBBc3NldCBpcyBub3Qgc3VwcG9ydGVkBQFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAUGb3JhY2xlBQNuaWwBaQEOd2Vhckl0ZW1Ub0R1Y2sABAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AgkAkQMCCAUBaQhwYXltZW50cwACAAAEBmR1Y2tJZAkA2AQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQEDXNlY29uZEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFDXNlY29uZFBheW1lbnQHYXNzZXRJZAMDCQECIT0CCAUMZmlyc3RQYXltZW50BmFtb3VudAABBgkBAiE9AggFDXNlY29uZFBheW1lbnQGYW1vdW50AAEJAAIBAhpXUklURDogTkZUIGlzIG5vdCBhdHRhY2hlZAQIYWxsVHlwZXMJARRnZXRJZkFsbFR5cGVzQWxsb3dlZAEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAkAzggCCQDOCAIJAQh3ZWFySXRlbQMFDXNlY29uZEFzc2V0SWQFBmR1Y2tJZAUIYWxsVHlwZXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAUDbmlsBQx2YWxpZFBheW1lbnQBaQEScmVtb3ZlSXRlbUZyb21EdWNrAghidXJuSXRlbQxhcnRlZmFjdE5hbWUECHdhdmVzRmVlAwUIYnVybkl0ZW0AAAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfZXh0cmFGZWVSZW1vdmUABAtkdWNrUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABA9yb2JvRHVja1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAIJAJEDAggFAWkIcGF5bWVudHMAAgUId2F2ZXNGZWUEBmR1Y2tJZAkA2AQBCQEFdmFsdWUBCAULZHVja1BheW1lbnQHYXNzZXRJZAQKcm9ib0R1Y2tJZAkA2AQBCQEFdmFsdWUBCAUPcm9ib0R1Y2tQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFC2R1Y2tQYXltZW50BmFtb3VudAABBgkBAiE9AggFD3JvYm9EdWNrUGF5bWVudAZhbW91bnQAAQkAAgECGldSSVREOiBORlQgaXMgbm90IGF0dGFjaGVkBAhjaGlsZHJlbgkBBWFzSW50AQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuBBRhcnRlZmFjdE5hbWVSb2JvZHVjawkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUKcm9ib0R1Y2tJZAUDbmlsBQNuaWwDCQAAAgUUYXJ0ZWZhY3ROYW1lUm9ib2R1Y2sFFGFydGVmYWN0TmFtZVJvYm9kdWNrAwkBAiE9AgUUYXJ0ZWZhY3ROYW1lUm9ib2R1Y2sCDEFSVC1ST0JPRFVDSwkAAgECH09ubHkgcm9kb2R1Y2sgY2FuIHJlbW92ZSBpdGVtcyEDAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUJd2VhcmFibGVzBQxhcnRlZmFjdE5hbWUJAQEhAQkBCWlzRGVmaW5lZAEJARJ0cnlHZXRDb3NtZXRpY0l0ZW0BBQxhcnRlZmFjdE5hbWUHCQACAQIbV1JJVEQ6IFVuc3VwcG9ydGVkIHdlYXJhYmxlBAphcnRlZmFjdElkCQEMdHJ5R2V0U3RyaW5nAQkBD2tleUFydGVmYWN0RHVjawIFBmR1Y2tJZAUMYXJ0ZWZhY3ROYW1lBAlib29zdER1Y2sDCQAAAgUMYXJ0ZWZhY3ROYW1lAgpBUlQtWFNDQVJGCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAg9tYW5pcHVsYXRlQm9vc3QJAMwIAgBFCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwFA25pbAMJAAACBQlib29zdER1Y2sFCWJvb3N0RHVjawMJAAACBQphcnRlZmFjdElkAgAJAAIBCQCsAgICE0R1Y2sgbm90IHdlYXJpbmcgYSAFDGFydGVmYWN0TmFtZQQEdHlwZQkBCnRyeUdldFR5cGUBBQxhcnRlZmFjdE5hbWUECnR5cGVSZXN1bHQDCQECIT0CBQR0eXBlAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAUEdHlwZQUDbmlsBQNuaWwEBGJ1cm4DBQhidXJuSXRlbQkAzAgCCQEEQnVybgIJANkEAQUKYXJ0ZWZhY3RJZAABBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUKYXJ0ZWZhY3RJZAUDbmlsCQDOCAIJAM4IAgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQgFC2R1Y2tQYXltZW50B2Fzc2V0SWQJAMwIAgkBBEJ1cm4CCQDZBAEFCnJvYm9EdWNrSWQAAQUDbmlsBQRidXJuBQx2YWxpZFBheW1lbnQFCnR5cGVSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQd2VhclhJdGVtc1RvRHVjawAEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCCQCRAwIIBQFpCHBheW1lbnRzAAEAAAMJAGYCAAMJAJADAQgFAWkIcGF5bWVudHMJAAIBAjFXV1hJVEQ6IFBsZWFzZSBhdHRhY2ggYXQgbGVhc3QgMSBpdGVtIGFuZCAxIGR1Y2shAwkAZgIJAJADAQgFAWkIcGF5bWVudHMABwkAAgECMVdXWElURDogWW91IGNhbiBvbmx5IGF0dGFjaCA1IGl0ZW1zIGFuZCBvbmUgZHVjayEKAQpoYW5kbGVJdGVtAgNhY2MHcGF5bWVudAQFaW5kZXgJAM8IAggFAWkIcGF5bWVudHMFB3BheW1lbnQDCQAAAgUFaW5kZXgAAAQGZHVja0lkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQDCQECIT0CCAUHcGF5bWVudAZhbW91bnQAAQkAAgECG1dSSVREOiBEdWNrIGlzIG5vdCBhdHRhY2hlZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQZkdWNrSWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgkAzggCBQNhY2MJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQdwYXltZW50B2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQNhY2MJAQh3ZWFySXRlbQMJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQGCQDOCAIKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmhhbmRsZUl0ZW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFDHZhbGlkUGF5bWVudAFpARZjYWxjdWxhdGVXZWFyYmxlc0Jvb3N0AQZkdWNrSWQEBGJhY2sJAQx0cnlHZXRTdHJpbmcBCQEMa2V5VHlwZXNEdWNrAgUGZHVja0lkAgRCQUNLBARoZWFkCQEMdHJ5R2V0U3RyaW5nAQkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAIESEVBRAQJbGVmdF93aW5nCQEMdHJ5R2V0U3RyaW5nAQkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAIJTEVGVF9XSU5HBApyaWdodF93aW5nCQEMdHJ5R2V0U3RyaW5nAQkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAIKUklHSFRfV0lORwQDdG9wCQEMdHJ5R2V0U3RyaW5nAQkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAIDVE9QBANwZXQJAQx0cnlHZXRTdHJpbmcBCQEMa2V5VHlwZXNEdWNrAgUGZHVja0lkAgNQRVQEBHRhaWwJAQx0cnlHZXRTdHJpbmcBCQEMa2V5VHlwZXNEdWNrAgUGZHVja0lkAgRUQUlMBAlhY2Nlc3NvcnkJAQx0cnlHZXRTdHJpbmcBCQEMa2V5VHlwZXNEdWNrAgUGZHVja0lkAglBQ0NFU1NPUlkEDGFzc2V0SWRBcnJheQkAzAgCBQRiYWNrCQDMCAIFBGhlYWQJAMwIAgUJbGVmdF93aW5nCQDMCAIFCnJpZ2h0X3dpbmcJAMwIAgUDdG9wCQDMCAIFA3BldAkAzAgCBQR0YWlsCQDMCAIFCWFjY2Vzc29yeQUDbmlsCgEPY291bnRUb3RhbEJvb3N0AgNhY2MHYXNzZXRJZAMJAQIhPQIFB2Fzc2V0SWQCAAQMYXJ0ZWZhY3ROYW1lCQEIYXNTdHJpbmcBCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhRjaGVja0FydGVmYWN0RGV0YWlscwkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQxhcnRlZmFjdE5hbWUFDGFydGVmYWN0TmFtZQQFYm9vc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQCsAgICBmJvb3N0XwUMYXJ0ZWZhY3ROYW1lCQCsAgICE05vIGJvb3N0IGZvdW5kIGZvciAFDGFydGVmYWN0TmFtZQkAZAIFA2FjYwUFYm9vc3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA2FjYwQKdG90YWxCb29zdAoAAiRsBQxhc3NldElkQXJyYXkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NvdW50VG90YWxCb29zdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgIKdG90YWxCb29zdAUKdG90YWxCb29zdAUDbmlsBQp0b3RhbEJvb3N0AQJ0eAEGdmVyaWZ5AAMJAQlpc1Rlc3RFbnYACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAlmaXJzdFVzZXIBIFEc5P1m/xJp0vFaFJ87suL0O3/By2gnojRebDjXV91tBApzZWNvbmRVc2VyASBccg5LrvEhT2bmGUX6aqKx7bE2KVlfGczMsOFNQYhqfQQJdGhpcmRVc2VyASCgr5HlLXlDYWEyEq2OufoYWVGdLVNJNsPQo/eoYBk7TgQPZmlyc3RVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCWZpcnN0VXNlcgABAAAEEHNlY29uZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQpzZWNvbmRVc2VyAAEAAAQPdGhpcmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCXRoaXJkVXNlcgABAAAED3NpZ25hdHVyZXNDb3VudAkAZAIJAGQCBQ9maXJzdFVzZXJTaWduZWQFEHNlY29uZFVzZXJTaWduZWQFD3RoaXJkVXNlclNpZ25lZAQHJG1hdGNoMAUCdHgJAGcCBQ9zaWduYXR1cmVzQ291bnQAAkab6oA=", "height": 3433324, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GcfYNFwa8wzERYTomDtNgdyEtAhTjfH3T5qHYn36Lcjz Next: ADWHsvHiAEdRJBP3w8b2uNUxPrpsxS7PWuM9cxPuuGuL Diff:
OldNewDifferences
329329 }
330330
331331
332+
333+@Callable(i)
334+func calculateWearblesBoost (duckId) = {
335+ let back = tryGetString(keyTypesDuck(duckId, "BACK"))
336+ let head = tryGetString(keyTypesDuck(duckId, "HEAD"))
337+ let left_wing = tryGetString(keyTypesDuck(duckId, "LEFT_WING"))
338+ let right_wing = tryGetString(keyTypesDuck(duckId, "RIGHT_WING"))
339+ let top = tryGetString(keyTypesDuck(duckId, "TOP"))
340+ let pet = tryGetString(keyTypesDuck(duckId, "PET"))
341+ let tail = tryGetString(keyTypesDuck(duckId, "TAIL"))
342+ let accessory = tryGetString(keyTypesDuck(duckId, "ACCESSORY"))
343+ let assetIdArray = [back, head, left_wing, right_wing, top, pet, tail, accessory]
344+ func countTotalBoost (acc,assetId) = if ((assetId != ""))
345+ then {
346+ let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetId], nil))
347+ if ((artefactName == artefactName))
348+ then {
349+ let boost = valueOrErrorMessage(getInteger(("boost_" + artefactName)), ("No boost found for " + artefactName))
350+ (acc + boost)
351+ }
352+ else throw("Strict value is not equal to itself.")
353+ }
354+ else acc
355+
356+ let totalBoost = {
357+ let $l = assetIdArray
358+ let $s = size($l)
359+ let $acc0 = 0
360+ func $f0_1 ($a,$i) = if (($i >= $s))
361+ then $a
362+ else countTotalBoost($a, $l[$i])
363+
364+ func $f0_2 ($a,$i) = if (($i >= $s))
365+ then $a
366+ else throw("List size exceeds 8")
367+
368+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
369+ }
370+ $Tuple2([IntegerEntry("totalBoost", totalBoost)], totalBoost)
371+ }
372+
373+
332374 @Verifier(tx)
333375 func verify () = if (isTestEnv())
334376 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getBool (key) = match getBoolean(this, key) {
55 case b: Boolean =>
66 b
77 case _ =>
88 false
99 }
1010
1111
1212 func isTestEnv () = getBool("TESTENV")
1313
1414
1515 func staticKey_oracleAddress () = "static_oracleAddress"
1616
1717
1818 func staticKey_breederAddress () = "static_breederAddress"
1919
2020
2121 func staticKey_itemsAddress () = "static_itemsAddress"
2222
2323
2424 func staticKey_extraFee () = "static_extraFee"
2525
2626
2727 func staticKey_extraFeeRemove () = "static_extraFeeRemove"
2828
2929
3030 func staticKey_feeAggregator () = "static_feeAggregator"
3131
3232
3333 let wearables = ["ART-CAPE", "ART-HAT", "ART-XSCARF", "ART-XSWEATER"]
3434
3535 func keyArtefactDuck (duckId,wearable) = ((duckId + "_") + wearable)
3636
3737
3838 func keyTypesDuck (duckId,type) = ((duckId + "_") + type)
3939
4040
4141 func tryGetStringExternal (address,key) = match getString(address, key) {
4242 case a: String =>
4343 a
4444 case _ =>
4545 ""
4646 }
4747
4848
4949 func tryGetString (key) = tryGetStringExternal(this, key)
5050
5151
5252 func asInt (value) = match value {
5353 case int: Int =>
5454 int
5555 case _ =>
5656 throw("wrong type, expected: Int")
5757 }
5858
5959
6060 func asString (value) = match value {
6161 case string: String =>
6262 string
6363 case _ =>
6464 throw("wrong type, expected: String")
6565 }
6666
6767
6868 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
6969
7070
7171 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
7272
7373
7474 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
7575
7676
7777 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
7878
7979
8080 func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleIncubatorAddress")))
8181
8282
8383 func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleBreederAddress")))
8484
8585
8686 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
8787
8888
8989 func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineIncubatorAddress")))
9090
9191
9292 func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineBreederAddress")))
9393
9494
9595 func getFelineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineIncubatorAddress")))
9696
9797
9898 func getFelineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineBreederAddress")))
9999
100100
101101 func getMutantBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_mutantIncubatorAddress")))
102102
103103
104104 func checkAdditionalPayment (payment,amountOverride) = if (isDefined(payment.assetId))
105105 then throw("WCAP: Please attach waves")
106106 else {
107107 let feeAmount = if ((amountOverride != 0))
108108 then amountOverride
109109 else getIntegerValue(getOracle(), staticKey_extraFee())
110110 if ((payment.amount != feeAmount))
111111 then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
112112 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
113113 }
114114
115115
116116 func tryGetCosmeticItem (item) = {
117117 let key = ("direct_cosmetic_" + item)
118118 match getInteger(getItemsAddress(), key) {
119119 case a: Int =>
120120 a
121121 case _ =>
122122 unit
123123 }
124124 }
125125
126126
127127 func tryGetType (wearable) = tryGetStringExternal(getItemsAddress(), ("type_cosmetic_" + wearable))
128128
129129
130130 func wearItem (assetIdWearAble,duckId,allTypes) = {
131131 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
132132 if ((artefactName == artefactName))
133133 then if (if (!(containsElement(wearables, artefactName)))
134134 then !(isDefined(tryGetCosmeticItem(artefactName)))
135135 else false)
136136 then throw("WRITD: Unsupported wearable")
137137 else {
138138 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
139139 let boostDuck = if ((artefactName == "ART-XSCARF"))
140140 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
141141 else nil
142142 if ((boostDuck == boostDuck))
143143 then if ((artefactId != ""))
144144 then throw(("Duck is already wearing a " + artefactName))
145145 else {
146146 let type = tryGetType(artefactName)
147147 if (if (!(allTypes))
148148 then (type != "PET")
149149 else false)
150150 then throw("You can't attach this item to your NFT! Pets only!")
151151 else {
152152 let typeOnDuck = if ((type != ""))
153153 then (tryGetString(keyTypesDuck(duckId, type)) != "")
154154 else throw(("Type undefined, please contact admins " + artefactName))
155155 if (typeOnDuck)
156156 then throw("You can only attach 1 from each type to your duck!")
157157 else {
158158 let typeResult = if ((type != ""))
159159 then [StringEntry(keyTypesDuck(duckId, type), assetIdWearAble)]
160160 else nil
161161 ([StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)] ++ typeResult)
162162 }
163163 }
164164 }
165165 else throw("Strict value is not equal to itself.")
166166 }
167167 else throw("Strict value is not equal to itself.")
168168 }
169169
170170
171171 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
172172 case b: Boolean =>
173173 b
174174 case _ =>
175175 false
176176 }
177177
178178
179179 func getIfAllTypesAllowed (assetId) = {
180180 let issuer = value(assetInfo(assetId)).issuer
181181 let blacklisted = tryGetBooleanExternal(issuer, (toBase58String(assetId) + "_blacklisted"))
182182 if (blacklisted)
183183 then throw("GO FUCK YOURSELF")
184184 else {
185185 let name = value(assetInfo(assetId)).name
186186 if (if ((issuer == getIncubatorAddress()))
187187 then true
188188 else (issuer == getBreederAddress()))
189189 then true
190190 else if (if ((issuer == getTurtleIncubatorAddress()))
191191 then true
192192 else (issuer == getTurtleBreederAddress()))
193193 then false
194194 else if (if ((issuer == getCanineIncubatorAddress()))
195195 then true
196196 else (issuer == getCanineBreederAddress()))
197197 then false
198198 else if (if ((issuer == getFelineIncubatorAddress()))
199199 then true
200200 else (issuer == getFelineBreederAddress()))
201201 then false
202202 else if ((issuer == getMutantBreederAddress()))
203203 then false
204204 else throw("MAG: Asset is not supported")
205205 }
206206 }
207207
208208
209209 @Callable(i)
210210 func configureOracle (oracle) = if ((i.caller != this))
211211 then throw("admin only")
212212 else [StringEntry(staticKey_oracleAddress(), oracle)]
213213
214214
215215
216216 @Callable(i)
217217 func wearItemToDuck () = {
218218 let firstPayment = value(i.payments[0])
219219 let secondPayment = value(i.payments[1])
220220 let validPayment = checkAdditionalPayment(i.payments[2], 0)
221221 let duckId = toBase58String(value(firstPayment.assetId))
222222 let secondAssetId = toBase58String(value(secondPayment.assetId))
223223 if (if ((firstPayment.amount != 1))
224224 then true
225225 else (secondPayment.amount != 1))
226226 then throw("WRITD: NFT is not attached")
227227 else {
228228 let allTypes = getIfAllTypesAllowed(value(firstPayment.assetId))
229229 ((wearItem(secondAssetId, duckId, allTypes) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
230230 }
231231 }
232232
233233
234234
235235 @Callable(i)
236236 func removeItemFromDuck (burnItem,artefactName) = {
237237 let wavesFee = if (burnItem)
238238 then 0
239239 else getIntegerValue(getOracle(), staticKey_extraFeeRemove())
240240 let duckPayment = value(i.payments[0])
241241 let roboDuckPayment = value(i.payments[1])
242242 let validPayment = checkAdditionalPayment(i.payments[2], wavesFee)
243243 let duckId = toBase58String(value(duckPayment.assetId))
244244 let roboDuckId = toBase58String(value(roboDuckPayment.assetId))
245245 if (if ((duckPayment.amount != 1))
246246 then true
247247 else (roboDuckPayment.amount != 1))
248248 then throw("WRITD: NFT is not attached")
249249 else {
250250 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
251251 if ((children == children))
252252 then {
253253 let artefactNameRoboduck = asString(invoke(getItemsAddress(), "checkArtefactDetails", [roboDuckId], nil))
254254 if ((artefactNameRoboduck == artefactNameRoboduck))
255255 then if ((artefactNameRoboduck != "ART-ROBODUCK"))
256256 then throw("Only rododuck can remove items!")
257257 else if (if (!(containsElement(wearables, artefactName)))
258258 then !(isDefined(tryGetCosmeticItem(artefactName)))
259259 else false)
260260 then throw("WRITD: Unsupported wearable")
261261 else {
262262 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
263263 let boostDuck = if ((artefactName == "ART-XSCARF"))
264264 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
265265 else nil
266266 if ((boostDuck == boostDuck))
267267 then if ((artefactId == ""))
268268 then throw(("Duck not wearing a " + artefactName))
269269 else {
270270 let type = tryGetType(artefactName)
271271 let typeResult = if ((type != ""))
272272 then [DeleteEntry(keyTypesDuck(duckId, type))]
273273 else nil
274274 let burn = if (burnItem)
275275 then [Burn(fromBase58String(artefactId), 1)]
276276 else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
277277 ((([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment) ++ typeResult)
278278 }
279279 else throw("Strict value is not equal to itself.")
280280 }
281281 else throw("Strict value is not equal to itself.")
282282 }
283283 else throw("Strict value is not equal to itself.")
284284 }
285285 }
286286
287287
288288
289289 @Callable(i)
290290 func wearXItemsToDuck () = {
291291 let validPayment = checkAdditionalPayment(i.payments[1], 0)
292292 if ((3 > size(i.payments)))
293293 then throw("WWXITD: Please attach at least 1 item and 1 duck!")
294294 else if ((size(i.payments) > 7))
295295 then throw("WWXITD: You can only attach 5 items and one duck!")
296296 else {
297297 func handleItem (acc,payment) = {
298298 let index = indexOf(i.payments, payment)
299299 if ((index == 0))
300300 then {
301301 let duckId = toBase58String(value(payment.assetId))
302302 if ((payment.amount != 1))
303303 then throw("WRITD: Duck is not attached")
304304 else {
305305 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
306306 if ((children == children))
307307 then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
308308 else throw("Strict value is not equal to itself.")
309309 }
310310 }
311311 else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId)), true))
312312 }
313313
314314 ({
315315 let $l = i.payments
316316 let $s = size($l)
317317 let $acc0 = nil
318318 func $f0_1 ($a,$i) = if (($i >= $s))
319319 then $a
320320 else handleItem($a, $l[$i])
321321
322322 func $f0_2 ($a,$i) = if (($i >= $s))
323323 then $a
324324 else throw("List size exceeds 6")
325325
326326 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
327327 } ++ validPayment)
328328 }
329329 }
330330
331331
332+
333+@Callable(i)
334+func calculateWearblesBoost (duckId) = {
335+ let back = tryGetString(keyTypesDuck(duckId, "BACK"))
336+ let head = tryGetString(keyTypesDuck(duckId, "HEAD"))
337+ let left_wing = tryGetString(keyTypesDuck(duckId, "LEFT_WING"))
338+ let right_wing = tryGetString(keyTypesDuck(duckId, "RIGHT_WING"))
339+ let top = tryGetString(keyTypesDuck(duckId, "TOP"))
340+ let pet = tryGetString(keyTypesDuck(duckId, "PET"))
341+ let tail = tryGetString(keyTypesDuck(duckId, "TAIL"))
342+ let accessory = tryGetString(keyTypesDuck(duckId, "ACCESSORY"))
343+ let assetIdArray = [back, head, left_wing, right_wing, top, pet, tail, accessory]
344+ func countTotalBoost (acc,assetId) = if ((assetId != ""))
345+ then {
346+ let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetId], nil))
347+ if ((artefactName == artefactName))
348+ then {
349+ let boost = valueOrErrorMessage(getInteger(("boost_" + artefactName)), ("No boost found for " + artefactName))
350+ (acc + boost)
351+ }
352+ else throw("Strict value is not equal to itself.")
353+ }
354+ else acc
355+
356+ let totalBoost = {
357+ let $l = assetIdArray
358+ let $s = size($l)
359+ let $acc0 = 0
360+ func $f0_1 ($a,$i) = if (($i >= $s))
361+ then $a
362+ else countTotalBoost($a, $l[$i])
363+
364+ func $f0_2 ($a,$i) = if (($i >= $s))
365+ then $a
366+ else throw("List size exceeds 8")
367+
368+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
369+ }
370+ $Tuple2([IntegerEntry("totalBoost", totalBoost)], totalBoost)
371+ }
372+
373+
332374 @Verifier(tx)
333375 func verify () = if (isTestEnv())
334376 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
335377 else {
336378 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
337379 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
338380 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
339381 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
340382 then 1
341383 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
342384 then 1
343385 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
344386 then 1
345387 else 0
346388 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
347389 then 1
348390 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
349391 then 1
350392 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
351393 then 1
352394 else 0
353395 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
354396 then 1
355397 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
356398 then 1
357399 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
358400 then 1
359401 else 0
360402 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
361403 match tx {
362404 case _ =>
363405 (signaturesCount >= 2)
364406 }
365407 }
366408

github/deemru/w8io/169f3d6 
41.01 ms