tx · EnKXPiVbchaW82oGzZ23AuJYdyGQmfLVwfgFniQj4G8C

3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe:  -0.01200000 Waves

2024.10.18 21:00 [3332570] smart account 3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe > SELF 0.00000000 Waves

{ "type": 13, "id": "EnKXPiVbchaW82oGzZ23AuJYdyGQmfLVwfgFniQj4G8C", "fee": 1200000, "feeAssetId": null, "timestamp": 1729274510412, "version": 2, "chainId": 84, "sender": "3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe", "senderPublicKey": "CqqNd9FdJdY64okp1oAAQ8z3kyrEcd6UKxtboqZgrSaP", "proofs": [ "Q4hAEbpyvcsFaPntAcTaCvMNA3iWJ4CGrsCkTnLzZAopPFgiax7TyMkCApZWq2p4eQjcAwbNwJWbmrftx65QThU" ], "script": "base64:BgIRCAISAwoBCBIAEgQKAgQIEgAXAQdnZXRCb29sAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQlpc1Rlc3RFbnYACQEHZ2V0Qm9vbAECB1RFU1RFTlYBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwACE3N0YXRpY19pdGVtc0FkZHJlc3MBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEYc3RhdGljS2V5X2V4dHJhRmVlUmVtb3ZlAAIVc3RhdGljX2V4dHJhRmVlUmVtb3ZlARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yAAl3ZWFyYWJsZXMJAMwIAgIIQVJULUNBUEUJAMwIAgIHQVJULUhBVAkAzAgCAgpBUlQtWFNDQVJGCQDMCAICDEFSVC1YU1dFQVRFUgUDbmlsAQ9rZXlBcnRlZmFjdER1Y2sCBmR1Y2tJZAh3ZWFyYWJsZQkArAICCQCsAgIFBmR1Y2tJZAIBXwUId2VhcmFibGUBDGtleVR5cGVzRHVjawIGZHVja0lkBHR5cGUJAKwCAgkArAICBQZkdWNrSWQCAV8FBHR5cGUBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAFBnN0cmluZwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAQ9nZXRJdGVtc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAIHcGF5bWVudA5hbW91bnRPdmVycmlkZQMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIZV0NBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQJZmVlQW1vdW50AwkBAiE9AgUOYW1vdW50T3ZlcnJpZGUAAAUOYW1vdW50T3ZlcnJpZGUJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFdDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBEnRyeUdldENvc21ldGljSXRlbQEEaXRlbQQDa2V5CQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0EByRtYXRjaDAJAJoIAgkBD2dldEl0ZW1zQWRkcmVzcwAFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEFBHVuaXQBCnRyeUdldFR5cGUBCHdlYXJhYmxlCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEPZ2V0SXRlbXNBZGRyZXNzAAkArAICAg50eXBlX2Nvc21ldGljXwUId2VhcmFibGUBCHdlYXJJdGVtAg9hc3NldElkV2VhckFibGUGZHVja0lkBAxhcnRlZmFjdE5hbWUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIFD2Fzc2V0SWRXZWFyQWJsZQUDbmlsBQNuaWwDCQAAAgUMYXJ0ZWZhY3ROYW1lBQxhcnRlZmFjdE5hbWUDAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUJd2VhcmFibGVzBQxhcnRlZmFjdE5hbWUJAQEhAQkBCWlzRGVmaW5lZAEJARJ0cnlHZXRDb3NtZXRpY0l0ZW0BBQxhcnRlZmFjdE5hbWUHCQACAQIbV1JJVEQ6IFVuc3VwcG9ydGVkIHdlYXJhYmxlBAphcnRlZmFjdElkCQEMdHJ5R2V0U3RyaW5nAQkBD2tleUFydGVmYWN0RHVjawIFBmR1Y2tJZAUMYXJ0ZWZhY3ROYW1lBAlib29zdER1Y2sDCQAAAgUMYXJ0ZWZhY3ROYW1lAgpBUlQtWFNDQVJGCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAg9tYW5pcHVsYXRlQm9vc3QJAMwIAgBFCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwFA25pbAMJAAACBQlib29zdER1Y2sFCWJvb3N0RHVjawMJAQIhPQIFCmFydGVmYWN0SWQCAAkAAgEJAKwCAgIaRHVjayBpcyBhbHJlYWR5IHdlYXJpbmcgYSAFDGFydGVmYWN0TmFtZQQEdHlwZQkBCnRyeUdldFR5cGUBBQxhcnRlZmFjdE5hbWUECnR5cGVPbkR1Y2sDCQECIT0CBQR0eXBlAgAJAQIhPQIJAQx0cnlHZXRTdHJpbmcBCQEMa2V5VHlwZXNEdWNrAgUGZHVja0lkBQR0eXBlAgAJAAIBCQCsAgICJlR5cGUgdW5kZWZpbmVkLCBwbGVhc2UgY29udGFjdCBhZG1pbnMgBQxhcnRlZmFjdE5hbWUDBQp0eXBlT25EdWNrCQACAQIyWW91IGNhbiBvbmx5IGF0dGFjaCAxIGZyb20gZWFjaCB0eXBlIHRvIHlvdXIgZHVjayEECnR5cGVSZXN1bHQDCQECIT0CBQR0eXBlAgAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAUEdHlwZQUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQUPYXNzZXRJZFdlYXJBYmxlBQNuaWwFCnR5cGVSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MABQZvcmFjbGUFA25pbAFpAQ53ZWFySXRlbVRvRHVjawAEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABA1zZWNvbmRQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCCQCRAwIIBQFpCHBheW1lbnRzAAIAAAQGZHVja0lkCQDYBAEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAQNc2Vjb25kQXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUNc2Vjb25kUGF5bWVudAdhc3NldElkAwMJAQIhPQIIBQxmaXJzdFBheW1lbnQGYW1vdW50AAEGCQECIT0CCAUNc2Vjb25kUGF5bWVudAZhbW91bnQAAQkAAgECGldSSVREOiBORlQgaXMgbm90IGF0dGFjaGVkBAhjaGlsZHJlbgkBBWFzSW50AQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwDCQAAAgUIY2hpbGRyZW4FCGNoaWxkcmVuCQDOCAIJAM4IAgkBCHdlYXJJdGVtAgUNc2Vjb25kQXNzZXRJZAUGZHVja0lkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQFA25pbAUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnJlbW92ZUl0ZW1Gcm9tRHVjawIIYnVybkl0ZW0MYXJ0ZWZhY3ROYW1lBAh3YXZlc0ZlZQMFCGJ1cm5JdGVtAAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2V4dHJhRmVlUmVtb3ZlAAQLZHVja1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQPcm9ib0R1Y2tQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCCQCRAwIIBQFpCHBheW1lbnRzAAIFCHdhdmVzRmVlBAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFC2R1Y2tQYXltZW50B2Fzc2V0SWQECnJvYm9EdWNrSWQJANgEAQkBBXZhbHVlAQgFD3JvYm9EdWNrUGF5bWVudAdhc3NldElkAwMJAQIhPQIIBQtkdWNrUGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ9yb2JvRHVja1BheW1lbnQGYW1vdW50AAEJAAIBAhpXUklURDogTkZUIGlzIG5vdCBhdHRhY2hlZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQZkdWNrSWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgQUYXJ0ZWZhY3ROYW1lUm9ib2R1Y2sJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIFCnJvYm9EdWNrSWQFA25pbAUDbmlsAwkAAAIFFGFydGVmYWN0TmFtZVJvYm9kdWNrBRRhcnRlZmFjdE5hbWVSb2JvZHVjawMJAQIhPQIFFGFydGVmYWN0TmFtZVJvYm9kdWNrAgxBUlQtUk9CT0RVQ0sJAAIBAh9Pbmx5IHJvZG9kdWNrIGNhbiByZW1vdmUgaXRlbXMhAwMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFCXdlYXJhYmxlcwUMYXJ0ZWZhY3ROYW1lCQEBIQEJAQlpc0RlZmluZWQBCQESdHJ5R2V0Q29zbWV0aWNJdGVtAQUMYXJ0ZWZhY3ROYW1lBwkAAgECG1dSSVREOiBVbnN1cHBvcnRlZCB3ZWFyYWJsZQQKYXJ0ZWZhY3RJZAkBDHRyeUdldFN0cmluZwEJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQQJYm9vc3REdWNrAwkAAAIFDGFydGVmYWN0TmFtZQIKQVJULVhTQ0FSRgkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIPbWFuaXB1bGF0ZUJvb3N0CQDMCAIARQkAzAgCBQZkdWNrSWQFA25pbAUDbmlsBQNuaWwDCQAAAgUJYm9vc3REdWNrBQlib29zdER1Y2sDCQAAAgUKYXJ0ZWZhY3RJZAIACQACAQkArAICAhNEdWNrIG5vdCB3ZWFyaW5nIGEgBQxhcnRlZmFjdE5hbWUEBHR5cGUJAQp0cnlHZXRUeXBlAQUMYXJ0ZWZhY3ROYW1lBAp0eXBlUmVzdWx0AwkBAiE9AgUEdHlwZQIACQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlUeXBlc0R1Y2sCBQZkdWNrSWQFBHR5cGUFA25pbAUDbmlsBARidXJuAwUIYnVybkl0ZW0JAMwIAgkBBEJ1cm4CCQDZBAEFCmFydGVmYWN0SWQAAQUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFCmFydGVmYWN0SWQFA25pbAkAzggCCQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQtkdWNrUGF5bWVudAdhc3NldElkCQDMCAIJAQRCdXJuAgkA2QQBBQpyb2JvRHVja0lkAAEFA25pbAUEYnVybgUMdmFsaWRQYXltZW50BQp0eXBlUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEHdlYXJYSXRlbXNUb0R1Y2sABAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AgkAkQMCCAUBaQhwYXltZW50cwABAAADCQBmAgADCQCQAwEIBQFpCHBheW1lbnRzCQACAQIxV1dYSVREOiBQbGVhc2UgYXR0YWNoIGF0IGxlYXN0IDEgaXRlbSBhbmQgMSBkdWNrIQMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAcJAAIBAjFXV1hJVEQ6IFlvdSBjYW4gb25seSBhdHRhY2ggNSBpdGVtcyBhbmQgb25lIGR1Y2shCgEKaGFuZGxlSXRlbQIDYWNjB3BheW1lbnQEBWluZGV4CQDPCAIIBQFpCHBheW1lbnRzBQdwYXltZW50AwkAAAIFBWluZGV4AAAEBmR1Y2tJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkBAiE9AggFB3BheW1lbnQGYW1vdW50AAEJAAIBAhtXUklURDogRHVjayBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgUDYWNjCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUHcGF5bWVudAdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUDYWNjCQEId2Vhckl0ZW0CCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkCQDOCAIKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmhhbmRsZUl0ZW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFDHZhbGlkUGF5bWVudAECdHgBBnZlcmlmeQADCQEJaXNUZXN0RW52AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQQJZmlyc3RVc2VyASBRHOT9Zv8SadLxWhSfO7Li9Dt/wctoJ6I0Xmw411fdbQQKc2Vjb25kVXNlcgEgXHIOS67xIU9m5hlF+mqise2xNilZXxnMzLDhTUGIan0ECXRoaXJkVXNlcgEgoK+R5S15Q2FhMhKtjrn6GFlRnS1TSTbD0KP3qGAZO04ED2ZpcnN0VXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQlmaXJzdFVzZXIAAQAABBBzZWNvbmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUKc2Vjb25kVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUKc2Vjb25kVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUKc2Vjb25kVXNlcgABAAAED3RoaXJkVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQl0aGlyZFVzZXIAAQAABA9zaWduYXR1cmVzQ291bnQJAGQCCQBkAgUPZmlyc3RVc2VyU2lnbmVkBRBzZWNvbmRVc2VyU2lnbmVkBQ90aGlyZFVzZXJTaWduZWQEByRtYXRjaDAFAnR4CQBnAgUPc2lnbmF0dXJlc0NvdW50AALeIUoS", "height": 3332570, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4iHebNf6aNwdP6orw8yEaqwdA1a9LTAZeyHbUbxYWudK Next: J1dfTGD5c2L46L9o891ki6iC66cKaeUQu7W9v9EBhYag 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 checkAdditionalPayment (payment,amountOverride) = if (isDefined(payment.assetId))
8181 then throw("WCAP: Please attach waves")
8282 else {
8383 let feeAmount = if ((amountOverride != 0))
8484 then amountOverride
8585 else getIntegerValue(getOracle(), staticKey_extraFee())
8686 if ((payment.amount != feeAmount))
8787 then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
8888 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
8989 }
9090
9191
9292 func tryGetCosmeticItem (item) = {
9393 let key = ("direct_cosmetic_" + item)
9494 match getInteger(getItemsAddress(), key) {
9595 case a: Int =>
9696 a
9797 case _ =>
9898 unit
9999 }
100100 }
101101
102102
103103 func tryGetType (wearable) = tryGetStringExternal(getItemsAddress(), ("type_cosmetic_" + wearable))
104104
105105
106106 func wearItem (assetIdWearAble,duckId) = {
107107 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
108108 if ((artefactName == artefactName))
109109 then if (if (!(containsElement(wearables, artefactName)))
110110 then !(isDefined(tryGetCosmeticItem(artefactName)))
111111 else false)
112112 then throw("WRITD: Unsupported wearable")
113113 else {
114114 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
115115 let boostDuck = if ((artefactName == "ART-XSCARF"))
116116 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
117117 else nil
118118 if ((boostDuck == boostDuck))
119119 then if ((artefactId != ""))
120120 then throw(("Duck is already wearing a " + artefactName))
121121 else {
122122 let type = tryGetType(artefactName)
123123 let typeOnDuck = if ((type != ""))
124124 then (tryGetString(keyTypesDuck(duckId, type)) != "")
125125 else throw(("Type undefined, please contact admins " + artefactName))
126126 if (typeOnDuck)
127127 then throw("You can only attach 1 from each type to your duck!")
128128 else {
129129 let typeResult = if ((type != ""))
130130 then [StringEntry(keyTypesDuck(duckId, type), assetIdWearAble)]
131131 else nil
132132 ([StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)] ++ typeResult)
133133 }
134134 }
135135 else throw("Strict value is not equal to itself.")
136136 }
137137 else throw("Strict value is not equal to itself.")
138138 }
139139
140140
141141 @Callable(i)
142142 func configureOracle (oracle) = if ((i.caller != this))
143143 then throw("admin only")
144144 else [StringEntry(staticKey_oracleAddress(), oracle)]
145145
146146
147147
148148 @Callable(i)
149149 func wearItemToDuck () = {
150150 let firstPayment = value(i.payments[0])
151151 let secondPayment = value(i.payments[1])
152152 let validPayment = checkAdditionalPayment(i.payments[2], 0)
153153 let duckId = toBase58String(value(firstPayment.assetId))
154154 let secondAssetId = toBase58String(value(secondPayment.assetId))
155155 if (if ((firstPayment.amount != 1))
156156 then true
157157 else (secondPayment.amount != 1))
158158 then throw("WRITD: NFT is not attached")
159159 else {
160160 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
161161 if ((children == children))
162162 then ((wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
163163 else throw("Strict value is not equal to itself.")
164164 }
165165 }
166166
167167
168168
169169 @Callable(i)
170170 func removeItemFromDuck (burnItem,artefactName) = {
171171 let wavesFee = if (burnItem)
172172 then 0
173173 else getIntegerValue(getOracle(), staticKey_extraFeeRemove())
174174 let duckPayment = value(i.payments[0])
175175 let roboDuckPayment = value(i.payments[1])
176176 let validPayment = checkAdditionalPayment(i.payments[2], wavesFee)
177177 let duckId = toBase58String(value(duckPayment.assetId))
178178 let roboDuckId = toBase58String(value(roboDuckPayment.assetId))
179179 if (if ((duckPayment.amount != 1))
180180 then true
181181 else (roboDuckPayment.amount != 1))
182182 then throw("WRITD: NFT is not attached")
183183 else {
184184 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
185185 if ((children == children))
186186 then {
187187 let artefactNameRoboduck = asString(invoke(getItemsAddress(), "checkArtefactDetails", [roboDuckId], nil))
188188 if ((artefactNameRoboduck == artefactNameRoboduck))
189189 then if ((artefactNameRoboduck != "ART-ROBODUCK"))
190190 then throw("Only rododuck can remove items!")
191191 else if (if (!(containsElement(wearables, artefactName)))
192192 then !(isDefined(tryGetCosmeticItem(artefactName)))
193193 else false)
194194 then throw("WRITD: Unsupported wearable")
195195 else {
196196 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
197197 let boostDuck = if ((artefactName == "ART-XSCARF"))
198198 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
199199 else nil
200200 if ((boostDuck == boostDuck))
201201 then if ((artefactId == ""))
202202 then throw(("Duck not wearing a " + artefactName))
203203 else {
204204 let type = tryGetType(artefactName)
205205 let typeResult = if ((type != ""))
206206 then [DeleteEntry(keyTypesDuck(duckId, type))]
207207 else nil
208208 let burn = if (burnItem)
209209 then [Burn(fromBase58String(artefactId), 1)]
210210 else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
211211 ((([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment) ++ typeResult)
212212 }
213213 else throw("Strict value is not equal to itself.")
214214 }
215215 else throw("Strict value is not equal to itself.")
216216 }
217217 else throw("Strict value is not equal to itself.")
218218 }
219219 }
220220
221221
222222
223223 @Callable(i)
224224 func wearXItemsToDuck () = {
225225 let validPayment = checkAdditionalPayment(i.payments[1], 0)
226226 if ((3 > size(i.payments)))
227227 then throw("WWXITD: Please attach at least 1 item and 1 duck!")
228228 else if ((size(i.payments) > 7))
229229 then throw("WWXITD: You can only attach 5 items and one duck!")
230230 else {
231231 func handleItem (acc,payment) = {
232232 let index = indexOf(i.payments, payment)
233233 if ((index == 0))
234234 then {
235235 let duckId = toBase58String(value(payment.assetId))
236236 if ((payment.amount != 1))
237237 then throw("WRITD: Duck is not attached")
238238 else {
239239 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
240240 if ((children == children))
241241 then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
242242 else throw("Strict value is not equal to itself.")
243243 }
244244 }
245245 else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId))))
246246 }
247247
248248 ({
249249 let $l = i.payments
250250 let $s = size($l)
251251 let $acc0 = nil
252252 func $f0_1 ($a,$i) = if (($i >= $s))
253253 then $a
254254 else handleItem($a, $l[$i])
255255
256256 func $f0_2 ($a,$i) = if (($i >= $s))
257257 then $a
258258 else throw("List size exceeds 6")
259259
260260 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
261261 } ++ validPayment)
262262 }
263263 }
264264
265265
266266 @Verifier(tx)
267267 func verify () = if (isTestEnv())
268268 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
269269 else {
270270 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
271271 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
272272 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
273273 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
274274 then 1
275275 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
276276 then 1
277277 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
278278 then 1
279279 else 0
280280 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
281281 then 1
282282 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
283283 then 1
284284 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
285285 then 1
286286 else 0
287287 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
288288 then 1
289289 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
290290 then 1
291291 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
292292 then 1
293293 else 0
294294 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
295295 match tx {
296296 case _ =>
297297 (signaturesCount >= 2)
298298 }
299299 }
300300

github/deemru/w8io/c3f4982 
41.93 ms