tx · GcfYNFwa8wzERYTomDtNgdyEtAhTjfH3T5qHYn36Lcjz

3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe:  -0.01300000 Waves

2024.10.18 21:20 [3332593] smart account 3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe > SELF 0.00000000 Waves

{ "type": 13, "id": "GcfYNFwa8wzERYTomDtNgdyEtAhTjfH3T5qHYn36Lcjz", "fee": 1300000, "feeAssetId": null, "timestamp": 1729275638246, "version": 2, "chainId": 84, "sender": "3N1oZwpYE3p4x63jWiKpszmfLU3Lk3KtSWe", "senderPublicKey": "CqqNd9FdJdY64okp1oAAQ8z3kyrEcd6UKxtboqZgrSaP", "proofs": [ "4sSPXx3Ux8PE7hJi4T9obZxnUnZaQRUMsB1Aux6owCc1t2RP5xFEgeUPNFFvSXirzLB4xGGpooRwFssK4MR9H2sN" ], "script": "base64:BgIRCAISAwoBCBIAEgQKAgQIEgAhAQdnZXRCb29sAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQlpc1Rlc3RFbnYACQEHZ2V0Qm9vbAECB1RFU1RFTlYBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBGHN0YXRpY0tleV9icmVlZGVyQWRkcmVzcwACFXN0YXRpY19icmVlZGVyQWRkcmVzcwEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwACE3N0YXRpY19pdGVtc0FkZHJlc3MBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEYc3RhdGljS2V5X2V4dHJhRmVlUmVtb3ZlAAIVc3RhdGljX2V4dHJhRmVlUmVtb3ZlARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yAAl3ZWFyYWJsZXMJAMwIAgIIQVJULUNBUEUJAMwIAgIHQVJULUhBVAkAzAgCAgpBUlQtWFNDQVJGCQDMCAICDEFSVC1YU1dFQVRFUgUDbmlsAQ9rZXlBcnRlZmFjdER1Y2sCBmR1Y2tJZAh3ZWFyYWJsZQkArAICCQCsAgIFBmR1Y2tJZAIBXwUId2VhcmFibGUBDGtleVR5cGVzRHVjawIGZHVja0lkBHR5cGUJAKwCAgkArAICBQZkdWNrSWQCAV8FBHR5cGUBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAFBnN0cmluZwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAQ9nZXRJdGVtc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAEQZ2V0RmVlQWdncmVnYXRvcgAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIdc3RhdGljX3R1cnRsZUluY3ViYXRvckFkZHJlc3MBF2dldFR1cnRsZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhtzdGF0aWNfdHVydGxlQnJlZWRlckFkZHJlc3MBE2dldEluY3ViYXRvckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzARlnZXRDYW5pbmVJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAh1zdGF0aWNfY2FuaW5lSW5jdWJhdG9yQWRkcmVzcwEXZ2V0Q2FuaW5lQnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQACG3N0YXRpY19jYW5pbmVCcmVlZGVyQWRkcmVzcwEZZ2V0RmVsaW5lSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAIdc3RhdGljX2ZlbGluZUluY3ViYXRvckFkZHJlc3MBF2dldEZlbGluZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhtzdGF0aWNfZmVsaW5lQnJlZWRlckFkZHJlc3MBF2dldE11dGFudEJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAh1zdGF0aWNfbXV0YW50SW5jdWJhdG9yQWRkcmVzcwEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAIHcGF5bWVudA5hbW91bnRPdmVycmlkZQMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIZV0NBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQJZmVlQW1vdW50AwkBAiE9AgUOYW1vdW50T3ZlcnJpZGUAAAUOYW1vdW50T3ZlcnJpZGUJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFdDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBEnRyeUdldENvc21ldGljSXRlbQEEaXRlbQQDa2V5CQCsAgICEGRpcmVjdF9jb3NtZXRpY18FBGl0ZW0EByRtYXRjaDAJAJoIAgkBD2dldEl0ZW1zQWRkcmVzcwAFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEFBHVuaXQBCnRyeUdldFR5cGUBCHdlYXJhYmxlCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEPZ2V0SXRlbXNBZGRyZXNzAAkArAICAg50eXBlX2Nvc21ldGljXwUId2VhcmFibGUBCHdlYXJJdGVtAw9hc3NldElkV2VhckFibGUGZHVja0lkCGFsbFR5cGVzBAxhcnRlZmFjdE5hbWUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIFD2Fzc2V0SWRXZWFyQWJsZQUDbmlsBQNuaWwDCQAAAgUMYXJ0ZWZhY3ROYW1lBQxhcnRlZmFjdE5hbWUDAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUJd2VhcmFibGVzBQxhcnRlZmFjdE5hbWUJAQEhAQkBCWlzRGVmaW5lZAEJARJ0cnlHZXRDb3NtZXRpY0l0ZW0BBQxhcnRlZmFjdE5hbWUHCQACAQIbV1JJVEQ6IFVuc3VwcG9ydGVkIHdlYXJhYmxlBAphcnRlZmFjdElkCQEMdHJ5R2V0U3RyaW5nAQkBD2tleUFydGVmYWN0RHVjawIFBmR1Y2tJZAUMYXJ0ZWZhY3ROYW1lBAlib29zdER1Y2sDCQAAAgUMYXJ0ZWZhY3ROYW1lAgpBUlQtWFNDQVJGCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAg9tYW5pcHVsYXRlQm9vc3QJAMwIAgBFCQDMCAIFBmR1Y2tJZAUDbmlsBQNuaWwFA25pbAMJAAACBQlib29zdER1Y2sFCWJvb3N0RHVjawMJAQIhPQIFCmFydGVmYWN0SWQCAAkAAgEJAKwCAgIaRHVjayBpcyBhbHJlYWR5IHdlYXJpbmcgYSAFDGFydGVmYWN0TmFtZQQEdHlwZQkBCnRyeUdldFR5cGUBBQxhcnRlZmFjdE5hbWUDAwkBASEBBQhhbGxUeXBlcwkBAiE9AgUEdHlwZQIDUEVUBwkAAgECMllvdSBjYW4ndCBhdHRhY2ggdGhpcyBpdGVtIHRvIHlvdXIgTkZUISBQZXRzIG9ubHkhBAp0eXBlT25EdWNrAwkBAiE9AgUEdHlwZQIACQECIT0CCQEMdHJ5R2V0U3RyaW5nAQkBDGtleVR5cGVzRHVjawIFBmR1Y2tJZAUEdHlwZQIACQACAQkArAICAiZUeXBlIHVuZGVmaW5lZCwgcGxlYXNlIGNvbnRhY3QgYWRtaW5zIAUMYXJ0ZWZhY3ROYW1lAwUKdHlwZU9uRHVjawkAAgECMllvdSBjYW4gb25seSBhdHRhY2ggMSBmcm9tIGVhY2ggdHlwZSB0byB5b3VyIGR1Y2shBAp0eXBlUmVzdWx0AwkBAiE9AgUEdHlwZQIACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlUeXBlc0R1Y2sCBQZkdWNrSWQFBHR5cGUFD2Fzc2V0SWRXZWFyQWJsZQUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUFD2Fzc2V0SWRXZWFyQWJsZQUDbmlsBQp0eXBlUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARV0cnlHZXRCb29sZWFuRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCbCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEUZ2V0SWZBbGxUeXBlc0FsbG93ZWQBB2Fzc2V0SWQEBmlzc3VlcggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIEC2JsYWNrbGlzdGVkCQEVdHJ5R2V0Qm9vbGVhbkV4dGVybmFsAgUGaXNzdWVyCQCsAgIJANgEAQUHYXNzZXRJZAIMX2JsYWNrbGlzdGVkAwULYmxhY2tsaXN0ZWQJAAIBAhBHTyBGVUNLIFlPVVJTRUxGBARuYW1lCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUDAwkAAAIFBmlzc3VlcgkBE2dldEluY3ViYXRvckFkZHJlc3MABgkAAAIFBmlzc3VlcgkBEWdldEJyZWVkZXJBZGRyZXNzAAYDAwkAAAIFBmlzc3VlcgkBGWdldFR1cnRsZUluY3ViYXRvckFkZHJlc3MABgkAAAIFBmlzc3VlcgkBF2dldFR1cnRsZUJyZWVkZXJBZGRyZXNzAAcDAwkAAAIFBmlzc3VlcgkBGWdldENhbmluZUluY3ViYXRvckFkZHJlc3MABgkAAAIFBmlzc3VlcgkBF2dldENhbmluZUJyZWVkZXJBZGRyZXNzAAcDAwkAAAIFBmlzc3VlcgkBGWdldEZlbGluZUluY3ViYXRvckFkZHJlc3MABgkAAAIFBmlzc3VlcgkBF2dldEZlbGluZUJyZWVkZXJBZGRyZXNzAAcDCQAAAgUGaXNzdWVyCQEXZ2V0TXV0YW50QnJlZWRlckFkZHJlc3MABwkAAgECG01BRzogQXNzZXQgaXMgbm90IHN1cHBvcnRlZAQBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAFBm9yYWNsZQUDbmlsAWkBDndlYXJJdGVtVG9EdWNrAAQMZmlyc3RQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEDXNlY29uZFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAIJAJEDAggFAWkIcGF5bWVudHMAAgAABAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkBA1zZWNvbmRBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQ1zZWNvbmRQYXltZW50B2Fzc2V0SWQDAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ1zZWNvbmRQYXltZW50BmFtb3VudAABCQACAQIaV1JJVEQ6IE5GVCBpcyBub3QgYXR0YWNoZWQECGFsbFR5cGVzCQEUZ2V0SWZBbGxUeXBlc0FsbG93ZWQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQJAM4IAgkAzggCCQEId2Vhckl0ZW0DBQ1zZWNvbmRBc3NldElkBQZkdWNrSWQFCGFsbFR5cGVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQFA25pbAUMdmFsaWRQYXltZW50AWkBEnJlbW92ZUl0ZW1Gcm9tRHVjawIIYnVybkl0ZW0MYXJ0ZWZhY3ROYW1lBAh3YXZlc0ZlZQMFCGJ1cm5JdGVtAAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2V4dHJhRmVlUmVtb3ZlAAQLZHVja1BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQPcm9ib0R1Y2tQYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEEDHZhbGlkUGF5bWVudAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQCCQCRAwIIBQFpCHBheW1lbnRzAAIFCHdhdmVzRmVlBAZkdWNrSWQJANgEAQkBBXZhbHVlAQgFC2R1Y2tQYXltZW50B2Fzc2V0SWQECnJvYm9EdWNrSWQJANgEAQkBBXZhbHVlAQgFD3JvYm9EdWNrUGF5bWVudAdhc3NldElkAwMJAQIhPQIIBQtkdWNrUGF5bWVudAZhbW91bnQAAQYJAQIhPQIIBQ9yb2JvRHVja1BheW1lbnQGYW1vdW50AAEJAAIBAhpXUklURDogTkZUIGlzIG5vdCBhdHRhY2hlZAQIY2hpbGRyZW4JAQVhc0ludAEJAPwHBAkBEWdldEJyZWVkZXJBZGRyZXNzAAIWdmFsaWRhdGVBbmRHZXRDaGlsZHJlbgkAzAgCBQZkdWNrSWQFA25pbAUDbmlsAwkAAAIFCGNoaWxkcmVuBQhjaGlsZHJlbgQUYXJ0ZWZhY3ROYW1lUm9ib2R1Y2sJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIFCnJvYm9EdWNrSWQFA25pbAUDbmlsAwkAAAIFFGFydGVmYWN0TmFtZVJvYm9kdWNrBRRhcnRlZmFjdE5hbWVSb2JvZHVjawMJAQIhPQIFFGFydGVmYWN0TmFtZVJvYm9kdWNrAgxBUlQtUk9CT0RVQ0sJAAIBAh9Pbmx5IHJvZG9kdWNrIGNhbiByZW1vdmUgaXRlbXMhAwMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFCXdlYXJhYmxlcwUMYXJ0ZWZhY3ROYW1lCQEBIQEJAQlpc0RlZmluZWQBCQESdHJ5R2V0Q29zbWV0aWNJdGVtAQUMYXJ0ZWZhY3ROYW1lBwkAAgECG1dSSVREOiBVbnN1cHBvcnRlZCB3ZWFyYWJsZQQKYXJ0ZWZhY3RJZAkBDHRyeUdldFN0cmluZwEJAQ9rZXlBcnRlZmFjdER1Y2sCBQZkdWNrSWQFDGFydGVmYWN0TmFtZQQJYm9vc3REdWNrAwkAAAIFDGFydGVmYWN0TmFtZQIKQVJULVhTQ0FSRgkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIPbWFuaXB1bGF0ZUJvb3N0CQDMCAIARQkAzAgCBQZkdWNrSWQFA25pbAUDbmlsBQNuaWwDCQAAAgUJYm9vc3REdWNrBQlib29zdER1Y2sDCQAAAgUKYXJ0ZWZhY3RJZAIACQACAQkArAICAhNEdWNrIG5vdCB3ZWFyaW5nIGEgBQxhcnRlZmFjdE5hbWUEBHR5cGUJAQp0cnlHZXRUeXBlAQUMYXJ0ZWZhY3ROYW1lBAp0eXBlUmVzdWx0AwkBAiE9AgUEdHlwZQIACQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlUeXBlc0R1Y2sCBQZkdWNrSWQFBHR5cGUFA25pbAUDbmlsBARidXJuAwUIYnVybkl0ZW0JAMwIAgkBBEJ1cm4CCQDZBAEFCmFydGVmYWN0SWQAAQUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFCmFydGVmYWN0SWQFA25pbAkAzggCCQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5QXJ0ZWZhY3REdWNrAgUGZHVja0lkBQxhcnRlZmFjdE5hbWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQtkdWNrUGF5bWVudAdhc3NldElkCQDMCAIJAQRCdXJuAgkA2QQBBQpyb2JvRHVja0lkAAEFA25pbAUEYnVybgUMdmFsaWRQYXltZW50BQp0eXBlUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEHdlYXJYSXRlbXNUb0R1Y2sABAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AgkAkQMCCAUBaQhwYXltZW50cwABAAADCQBmAgADCQCQAwEIBQFpCHBheW1lbnRzCQACAQIxV1dYSVREOiBQbGVhc2UgYXR0YWNoIGF0IGxlYXN0IDEgaXRlbSBhbmQgMSBkdWNrIQMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAcJAAIBAjFXV1hJVEQ6IFlvdSBjYW4gb25seSBhdHRhY2ggNSBpdGVtcyBhbmQgb25lIGR1Y2shCgEKaGFuZGxlSXRlbQIDYWNjB3BheW1lbnQEBWluZGV4CQDPCAIIBQFpCHBheW1lbnRzBQdwYXltZW50AwkAAAIFBWluZGV4AAAEBmR1Y2tJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkBAiE9AggFB3BheW1lbnQGYW1vdW50AAEJAAIBAhtXUklURDogRHVjayBpcyBub3QgYXR0YWNoZWQECGNoaWxkcmVuCQEFYXNJbnQBCQD8BwQJARFnZXRCcmVlZGVyQWRkcmVzcwACFnZhbGlkYXRlQW5kR2V0Q2hpbGRyZW4JAMwIAgUGZHVja0lkBQNuaWwFA25pbAMJAAACBQhjaGlsZHJlbgUIY2hpbGRyZW4JAM4IAgUDYWNjCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUHcGF5bWVudAdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUDYWNjCQEId2Vhckl0ZW0DCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBgkAzggCCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpoYW5kbGVJdGVtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQx2YWxpZFBheW1lbnQBAnR4AQZ2ZXJpZnkAAwkBCWlzVGVzdEVudgAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECWZpcnN0VXNlcgEgURzk/Wb/EmnS8VoUnzuy4vQ7f8HLaCeiNF5sONdX3W0ECnNlY29uZFVzZXIBIFxyDkuu8SFPZuYZRfpqorHtsTYpWV8ZzMyw4U1BiGp9BAl0aGlyZFVzZXIBIKCvkeUteUNhYTISrY65+hhZUZ0tU0k2w9Cj96hgGTtOBA9maXJzdFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJZmlyc3RVc2VyAAEAAAQQc2Vjb25kVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCnNlY29uZFVzZXIAAQAABA90aGlyZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJdGhpcmRVc2VyAAEAAAQPc2lnbmF0dXJlc0NvdW50CQBkAgkAZAIFD2ZpcnN0VXNlclNpZ25lZAUQc2Vjb25kVXNlclNpZ25lZAUPdGhpcmRVc2VyU2lnbmVkBAckbWF0Y2gwBQJ0eAkAZwIFD3NpZ25hdHVyZXNDb3VudAACKsHjUg==", "height": 3332593, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J1dfTGD5c2L46L9o891ki6iC66cKaeUQu7W9v9EBhYag Next: A58P45XBxWJVReZM3jtpcTPjNFDBCPrSiJXboKL9HHWK Diff:
OldNewDifferences
7777 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
7878
7979
80+func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleIncubatorAddress")))
81+
82+
83+func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleBreederAddress")))
84+
85+
86+func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
87+
88+
89+func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineIncubatorAddress")))
90+
91+
92+func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineBreederAddress")))
93+
94+
95+func getFelineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineIncubatorAddress")))
96+
97+
98+func getFelineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineBreederAddress")))
99+
100+
101+func getMutantBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_mutantIncubatorAddress")))
102+
103+
80104 func checkAdditionalPayment (payment,amountOverride) = if (isDefined(payment.assetId))
81105 then throw("WCAP: Please attach waves")
82106 else {
103127 func tryGetType (wearable) = tryGetStringExternal(getItemsAddress(), ("type_cosmetic_" + wearable))
104128
105129
106-func wearItem (assetIdWearAble,duckId) = {
130+func wearItem (assetIdWearAble,duckId,allTypes) = {
107131 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
108132 if ((artefactName == artefactName))
109133 then if (if (!(containsElement(wearables, artefactName)))
120144 then throw(("Duck is already wearing a " + artefactName))
121145 else {
122146 let type = tryGetType(artefactName)
123- let typeOnDuck = if ((type != ""))
124- then (tryGetString(keyTypesDuck(duckId, type)) != "")
125- else throw(("Type undefined, please contact admins " + artefactName))
126- if (typeOnDuck)
127- then throw("You can only attach 1 from each type to your duck!")
147+ if (if (!(allTypes))
148+ then (type != "PET")
149+ else false)
150+ then throw("You can't attach this item to your NFT! Pets only!")
128151 else {
129- let typeResult = if ((type != ""))
130- then [StringEntry(keyTypesDuck(duckId, type), assetIdWearAble)]
131- else nil
132- ([StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)] ++ typeResult)
152+ let typeOnDuck = if ((type != ""))
153+ then (tryGetString(keyTypesDuck(duckId, type)) != "")
154+ else throw(("Type undefined, please contact admins " + artefactName))
155+ if (typeOnDuck)
156+ then throw("You can only attach 1 from each type to your duck!")
157+ else {
158+ let typeResult = if ((type != ""))
159+ then [StringEntry(keyTypesDuck(duckId, type), assetIdWearAble)]
160+ else nil
161+ ([StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)] ++ typeResult)
162+ }
133163 }
134164 }
135165 else throw("Strict value is not equal to itself.")
136166 }
137167 else throw("Strict value is not equal to itself.")
168+ }
169+
170+
171+func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
172+ case b: Boolean =>
173+ b
174+ case _ =>
175+ false
176+}
177+
178+
179+func getIfAllTypesAllowed (assetId) = {
180+ let issuer = value(assetInfo(assetId)).issuer
181+ let blacklisted = tryGetBooleanExternal(issuer, (toBase58String(assetId) + "_blacklisted"))
182+ if (blacklisted)
183+ then throw("GO FUCK YOURSELF")
184+ else {
185+ let name = value(assetInfo(assetId)).name
186+ if (if ((issuer == getIncubatorAddress()))
187+ then true
188+ else (issuer == getBreederAddress()))
189+ then true
190+ else if (if ((issuer == getTurtleIncubatorAddress()))
191+ then true
192+ else (issuer == getTurtleBreederAddress()))
193+ then false
194+ else if (if ((issuer == getCanineIncubatorAddress()))
195+ then true
196+ else (issuer == getCanineBreederAddress()))
197+ then false
198+ else if (if ((issuer == getFelineIncubatorAddress()))
199+ then true
200+ else (issuer == getFelineBreederAddress()))
201+ then false
202+ else if ((issuer == getMutantBreederAddress()))
203+ then false
204+ else throw("MAG: Asset is not supported")
205+ }
138206 }
139207
140208
157225 else (secondPayment.amount != 1))
158226 then throw("WRITD: NFT is not attached")
159227 else {
160- let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
161- if ((children == children))
162- then ((wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
163- else throw("Strict value is not equal to itself.")
228+ let allTypes = getIfAllTypesAllowed(value(firstPayment.assetId))
229+ ((wearItem(secondAssetId, duckId, allTypes) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
164230 }
165231 }
166232
242308 else throw("Strict value is not equal to itself.")
243309 }
244310 }
245- else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId))))
311+ else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId)), true))
246312 }
247313
248314 ({
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
80+func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleIncubatorAddress")))
81+
82+
83+func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleBreederAddress")))
84+
85+
86+func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
87+
88+
89+func getCanineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineIncubatorAddress")))
90+
91+
92+func getCanineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_canineBreederAddress")))
93+
94+
95+func getFelineIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineIncubatorAddress")))
96+
97+
98+func getFelineBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_felineBreederAddress")))
99+
100+
101+func getMutantBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_mutantIncubatorAddress")))
102+
103+
80104 func checkAdditionalPayment (payment,amountOverride) = if (isDefined(payment.assetId))
81105 then throw("WCAP: Please attach waves")
82106 else {
83107 let feeAmount = if ((amountOverride != 0))
84108 then amountOverride
85109 else getIntegerValue(getOracle(), staticKey_extraFee())
86110 if ((payment.amount != feeAmount))
87111 then throw((("WCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
88112 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
89113 }
90114
91115
92116 func tryGetCosmeticItem (item) = {
93117 let key = ("direct_cosmetic_" + item)
94118 match getInteger(getItemsAddress(), key) {
95119 case a: Int =>
96120 a
97121 case _ =>
98122 unit
99123 }
100124 }
101125
102126
103127 func tryGetType (wearable) = tryGetStringExternal(getItemsAddress(), ("type_cosmetic_" + wearable))
104128
105129
106-func wearItem (assetIdWearAble,duckId) = {
130+func wearItem (assetIdWearAble,duckId,allTypes) = {
107131 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [assetIdWearAble], nil))
108132 if ((artefactName == artefactName))
109133 then if (if (!(containsElement(wearables, artefactName)))
110134 then !(isDefined(tryGetCosmeticItem(artefactName)))
111135 else false)
112136 then throw("WRITD: Unsupported wearable")
113137 else {
114138 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
115139 let boostDuck = if ((artefactName == "ART-XSCARF"))
116140 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
117141 else nil
118142 if ((boostDuck == boostDuck))
119143 then if ((artefactId != ""))
120144 then throw(("Duck is already wearing a " + artefactName))
121145 else {
122146 let type = tryGetType(artefactName)
123- let typeOnDuck = if ((type != ""))
124- then (tryGetString(keyTypesDuck(duckId, type)) != "")
125- else throw(("Type undefined, please contact admins " + artefactName))
126- if (typeOnDuck)
127- then throw("You can only attach 1 from each type to your duck!")
147+ if (if (!(allTypes))
148+ then (type != "PET")
149+ else false)
150+ then throw("You can't attach this item to your NFT! Pets only!")
128151 else {
129- let typeResult = if ((type != ""))
130- then [StringEntry(keyTypesDuck(duckId, type), assetIdWearAble)]
131- else nil
132- ([StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)] ++ typeResult)
152+ let typeOnDuck = if ((type != ""))
153+ then (tryGetString(keyTypesDuck(duckId, type)) != "")
154+ else throw(("Type undefined, please contact admins " + artefactName))
155+ if (typeOnDuck)
156+ then throw("You can only attach 1 from each type to your duck!")
157+ else {
158+ let typeResult = if ((type != ""))
159+ then [StringEntry(keyTypesDuck(duckId, type), assetIdWearAble)]
160+ else nil
161+ ([StringEntry(keyArtefactDuck(duckId, artefactName), assetIdWearAble)] ++ typeResult)
162+ }
133163 }
134164 }
135165 else throw("Strict value is not equal to itself.")
136166 }
137167 else throw("Strict value is not equal to itself.")
168+ }
169+
170+
171+func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
172+ case b: Boolean =>
173+ b
174+ case _ =>
175+ false
176+}
177+
178+
179+func getIfAllTypesAllowed (assetId) = {
180+ let issuer = value(assetInfo(assetId)).issuer
181+ let blacklisted = tryGetBooleanExternal(issuer, (toBase58String(assetId) + "_blacklisted"))
182+ if (blacklisted)
183+ then throw("GO FUCK YOURSELF")
184+ else {
185+ let name = value(assetInfo(assetId)).name
186+ if (if ((issuer == getIncubatorAddress()))
187+ then true
188+ else (issuer == getBreederAddress()))
189+ then true
190+ else if (if ((issuer == getTurtleIncubatorAddress()))
191+ then true
192+ else (issuer == getTurtleBreederAddress()))
193+ then false
194+ else if (if ((issuer == getCanineIncubatorAddress()))
195+ then true
196+ else (issuer == getCanineBreederAddress()))
197+ then false
198+ else if (if ((issuer == getFelineIncubatorAddress()))
199+ then true
200+ else (issuer == getFelineBreederAddress()))
201+ then false
202+ else if ((issuer == getMutantBreederAddress()))
203+ then false
204+ else throw("MAG: Asset is not supported")
205+ }
138206 }
139207
140208
141209 @Callable(i)
142210 func configureOracle (oracle) = if ((i.caller != this))
143211 then throw("admin only")
144212 else [StringEntry(staticKey_oracleAddress(), oracle)]
145213
146214
147215
148216 @Callable(i)
149217 func wearItemToDuck () = {
150218 let firstPayment = value(i.payments[0])
151219 let secondPayment = value(i.payments[1])
152220 let validPayment = checkAdditionalPayment(i.payments[2], 0)
153221 let duckId = toBase58String(value(firstPayment.assetId))
154222 let secondAssetId = toBase58String(value(secondPayment.assetId))
155223 if (if ((firstPayment.amount != 1))
156224 then true
157225 else (secondPayment.amount != 1))
158226 then throw("WRITD: NFT is not attached")
159227 else {
160- let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
161- if ((children == children))
162- then ((wearItem(secondAssetId, duckId) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
163- else throw("Strict value is not equal to itself.")
228+ let allTypes = getIfAllTypesAllowed(value(firstPayment.assetId))
229+ ((wearItem(secondAssetId, duckId, allTypes) ++ [ScriptTransfer(i.caller, 1, firstPayment.assetId)]) ++ validPayment)
164230 }
165231 }
166232
167233
168234
169235 @Callable(i)
170236 func removeItemFromDuck (burnItem,artefactName) = {
171237 let wavesFee = if (burnItem)
172238 then 0
173239 else getIntegerValue(getOracle(), staticKey_extraFeeRemove())
174240 let duckPayment = value(i.payments[0])
175241 let roboDuckPayment = value(i.payments[1])
176242 let validPayment = checkAdditionalPayment(i.payments[2], wavesFee)
177243 let duckId = toBase58String(value(duckPayment.assetId))
178244 let roboDuckId = toBase58String(value(roboDuckPayment.assetId))
179245 if (if ((duckPayment.amount != 1))
180246 then true
181247 else (roboDuckPayment.amount != 1))
182248 then throw("WRITD: NFT is not attached")
183249 else {
184250 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
185251 if ((children == children))
186252 then {
187253 let artefactNameRoboduck = asString(invoke(getItemsAddress(), "checkArtefactDetails", [roboDuckId], nil))
188254 if ((artefactNameRoboduck == artefactNameRoboduck))
189255 then if ((artefactNameRoboduck != "ART-ROBODUCK"))
190256 then throw("Only rododuck can remove items!")
191257 else if (if (!(containsElement(wearables, artefactName)))
192258 then !(isDefined(tryGetCosmeticItem(artefactName)))
193259 else false)
194260 then throw("WRITD: Unsupported wearable")
195261 else {
196262 let artefactId = tryGetString(keyArtefactDuck(duckId, artefactName))
197263 let boostDuck = if ((artefactName == "ART-XSCARF"))
198264 then invoke(getItemsAddress(), "manipulateBoost", [69, duckId], nil)
199265 else nil
200266 if ((boostDuck == boostDuck))
201267 then if ((artefactId == ""))
202268 then throw(("Duck not wearing a " + artefactName))
203269 else {
204270 let type = tryGetType(artefactName)
205271 let typeResult = if ((type != ""))
206272 then [DeleteEntry(keyTypesDuck(duckId, type))]
207273 else nil
208274 let burn = if (burnItem)
209275 then [Burn(fromBase58String(artefactId), 1)]
210276 else [ScriptTransfer(i.caller, 1, fromBase58String(artefactId))]
211277 ((([DeleteEntry(keyArtefactDuck(duckId, artefactName)), ScriptTransfer(i.caller, 1, duckPayment.assetId), Burn(fromBase58String(roboDuckId), 1)] ++ burn) ++ validPayment) ++ typeResult)
212278 }
213279 else throw("Strict value is not equal to itself.")
214280 }
215281 else throw("Strict value is not equal to itself.")
216282 }
217283 else throw("Strict value is not equal to itself.")
218284 }
219285 }
220286
221287
222288
223289 @Callable(i)
224290 func wearXItemsToDuck () = {
225291 let validPayment = checkAdditionalPayment(i.payments[1], 0)
226292 if ((3 > size(i.payments)))
227293 then throw("WWXITD: Please attach at least 1 item and 1 duck!")
228294 else if ((size(i.payments) > 7))
229295 then throw("WWXITD: You can only attach 5 items and one duck!")
230296 else {
231297 func handleItem (acc,payment) = {
232298 let index = indexOf(i.payments, payment)
233299 if ((index == 0))
234300 then {
235301 let duckId = toBase58String(value(payment.assetId))
236302 if ((payment.amount != 1))
237303 then throw("WRITD: Duck is not attached")
238304 else {
239305 let children = asInt(invoke(getBreederAddress(), "validateAndGetChildren", [duckId], nil))
240306 if ((children == children))
241307 then (acc ++ [ScriptTransfer(i.caller, 1, payment.assetId)])
242308 else throw("Strict value is not equal to itself.")
243309 }
244310 }
245- else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId))))
311+ else (acc ++ wearItem(toBase58String(value(payment.assetId)), toBase58String(value(i.payments[1].assetId)), true))
246312 }
247313
248314 ({
249315 let $l = i.payments
250316 let $s = size($l)
251317 let $acc0 = nil
252318 func $f0_1 ($a,$i) = if (($i >= $s))
253319 then $a
254320 else handleItem($a, $l[$i])
255321
256322 func $f0_2 ($a,$i) = if (($i >= $s))
257323 then $a
258324 else throw("List size exceeds 6")
259325
260326 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
261327 } ++ validPayment)
262328 }
263329 }
264330
265331
266332 @Verifier(tx)
267333 func verify () = if (isTestEnv())
268334 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
269335 else {
270336 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
271337 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
272338 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
273339 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
274340 then 1
275341 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
276342 then 1
277343 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
278344 then 1
279345 else 0
280346 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
281347 then 1
282348 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
283349 then 1
284350 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
285351 then 1
286352 else 0
287353 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
288354 then 1
289355 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
290356 then 1
291357 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
292358 then 1
293359 else 0
294360 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
295361 match tx {
296362 case _ =>
297363 (signaturesCount >= 2)
298364 }
299365 }
300366

github/deemru/w8io/169f3d6 
35.73 ms