tx · DAzxxT7y6e3FHgfsW4KwhQai7mtuSCg2yzsDaT3mGhS9

3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X:  -0.00800000 Waves

2022.11.11 16:29 [2312549] smart account 3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X > SELF 0.00000000 Waves

{ "type": 13, "id": "DAzxxT7y6e3FHgfsW4KwhQai7mtuSCg2yzsDaT3mGhS9", "fee": 800000, "feeAssetId": null, "timestamp": 1668173341604, "version": 2, "chainId": 84, "sender": "3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X", "senderPublicKey": "SrcQexq2T9cnMXmLqfJtc8AnQ91ZjeaJtXoi1HwDsx9", "proofs": [ "fyEpmtvKhVNYyyzvS9tZKHJTjd9pK2wuZc9mWDVhACJiEhtv9FvVyrsueoiH5tsSxgweP5k8KrsXEbEGB6u1xBd" ], "script": "base64:BgIhCAISBAoCCAESAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEQEIcHJpY2VLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgZfcHJpY2UBCG93bmVyS2V5AQVhc3NldAkArAICBQVhc3NldAIGX293bmVyAQlpc3N1ZXJLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgdfaXNzdWVyAQduYW1lS2V5AQVhc3NldAkArAICBQVhc3NldAIFX25hbWUBDmRlc2NyaXB0aW9uS2V5AQVhc3NldAkArAICBQVhc3NldAIMX2Rlc2NyaXB0aW9uAQthc3NldEFjY2VzcwEFYXNzZXQJAKwCAgUFYXNzZXQCCV9hc3NldEJ1eQEKYXNzZXRPZmZlcgEFYXNzZXQJAKwCAgUFYXNzZXQCBl9vZmZlcgEOYXNzZXRPZmZlclN3YXABBWFzc2V0CQCsAgIFBWFzc2V0AgZfb2ZmZXIBDXRyeUdldEludGVnZXIBA2tleQQDdmFsBAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAUDdmFsAQx0cnlHZXRTdHJpbmcBA2tleQQDdmFsBAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAUDdmFsAQp0cnlHZXRCb29sAQNrZXkEA3ZhbAQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcFA3ZhbAELaXNQYXltZW50T2sDAWkRYWNjZXB0YWJsZUFzc2V0SWQFcHJpY2UDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUUGF5bWVudCBub3QgYXR0YWNoZWQEAXAJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQDdmFsBAckbWF0Y2gwCAUBcAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDADCQAAAgkA2AQBBQdhc3NldElkBRFhY2NlcHRhYmxlQXNzZXRJZAkAZwIIBQFwBmFtb3VudAUFcHJpY2UHAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCQBnAggFAXAGYW1vdW50BQVwcmljZQkAAgECC01hdGNoIGVycm9yBQN2YWwBD2lzQWNjZXB0YWJsZU5mdAIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2lkQXNzZXQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWIFByRtYXRjaDAJANgEAQgIBQFiBmlzc3VlcgVieXRlcwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgMJAQp0cnlHZXRCb29sAQUFYXNzZXQFBnN0YXR1cwcBCmdldEFzc2V0SWQCBnN0YXR1cwlhc3NldFNhbGUEB2lkQXNzZXQEByRtYXRjaDAIBQlhc3NldFNhbGUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUHaWRBc3NldAENZ2V0QXNzZXRQcmljZQIGc3RhdHVzCWFzc2V0U2FsZQQFcHJpY2UJAKQDAQgFCWFzc2V0U2FsZQZhbW91bnQJAKwCAgkArAICBQZzdGF0dXMCAV8FBXByaWNlAQ5nZXRBc3NldElzc3VlcgIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBmlzc3VlcgQHJG1hdGNoMAkA7AcBBQdpZEFzc2V0AwkAAQIFByRtYXRjaDACBUFzc2V0BAFiBQckbWF0Y2gwCQDYBAEICAUBYgZpc3N1ZXIFYnl0ZXMDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUGaXNzdWVyARBnZXRUcmFuc2ZlckFzc2V0AgZzdGF0dXMEZGF0YQQPdHJhbnNmZXJBZGRyZXNzBAckbWF0Y2gwCQCmCAEIBQRkYXRhAl8xAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAUEdGhpcwkAAgECC01hdGNoIGVycm9yAwkBAiE9AggFBGRhdGECXzMCBVdBVkVTCQDNCAIFBnN0YXR1cwkBDlNjcmlwdFRyYW5zZmVyAwUPdHJhbnNmZXJBZGRyZXNzCAUEZGF0YQJfMgkA2QQBCAUEZGF0YQJfMwkAzQgCBQZzdGF0dXMJAQ5TY3JpcHRUcmFuc2ZlcgMFD3RyYW5zZmVyQWRkcmVzcwgFBGRhdGECXzIFBHVuaXQGAWkBDG9mZmVyRm9yU2FsZQIMYXNzZXRJZFByaWNlBXByaWNlAwkBASEBAwkBCnRyeUdldEJvb2wBCQELYXNzZXRBY2Nlc3MBBQxhc3NldElkUHJpY2UJAGYCBQVwcmljZQAABwkAAgECFFNhbGUgQXNzZXQgaW5jb3JyZWN0BAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAQHJG1hdGNoMAgFDGZpcnN0UGF5bWVudAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAF3BQckbWF0Y2gwCQACAQIQQXNzZXQgaXMgbm90IE5GVAkAAgECC01hdGNoIGVycm9yBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAFAWEJAAIBAiVFcnJvciBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGFzc2V0AwMDCQECIT0CCAUFYXNzZXQIcXVhbnRpdHkAAQkBAiE9AggFBWFzc2V0CGRlY2ltYWxzAAAHCAUFYXNzZXQKcmVpc3N1YWJsZQcJAAIBAhBBc3NldCBpcyBub3QgTkZUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEIcHJpY2VLZXkBBQphc3NldElkU3RyBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEIb3duZXJLZXkBBQphc3NldElkU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWlzc3VlcktleQEFCmFzc2V0SWRTdHIJANgEAQgIBQVhc3NldAZpc3N1ZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB25hbWVLZXkBBQphc3NldElkU3RyCAUFYXNzZXQEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEOZGVzY3JpcHRpb25LZXkBBQphc3NldElkU3RyCAUFYXNzZXQLZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmFzc2V0T2ZmZXIBBQphc3NldElkU3RyBQxhc3NldElkUHJpY2UFA25pbAFpAQxvZmZlckZvclN3YXABDGFzc2V0SWRQcmljZQQGc3RhdHVzCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAYKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2lzQWNjZXB0YWJsZU5mdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIDCQEBIQEFBnN0YXR1cwkAAgECElBheW1lbnRzIGluY29ycmVjdAMJAGYCCQENdHJ5R2V0SW50ZWdlcgECCmNvbW1pc3Npb24ICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50CQACAQIVTm8gbWluaW11bSBjb21taXNzaW9uBApwYXltZW50QWxsCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAIEU3dhcAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZ2V0QXNzZXRJZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIEBmlzc3VlcgoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACBFN3YXAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDmdldEFzc2V0SXNzdWVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAyCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgQFcHJpY2UKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgRTd2FwCgEFJGYzXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1nZXRBc3NldFByaWNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYzXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAyCQEFJGYzXzICCQEFJGYzXzECCQEFJGYzXzECBQUkYWNjMAAAAAEAAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQhwcmljZUtleQEFCnBheW1lbnRBbGwCBFN3YXAFBXByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCG93bmVyS2V5AQUKcGF5bWVudEFsbAIEU3dhcAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCWlzc3VlcktleQEFCnBheW1lbnRBbGwCBFN3YXAFBmlzc3VlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQphc3NldE9mZmVyAQUKcGF5bWVudEFsbAIEU3dhcAUMYXNzZXRJZFByaWNlBQNuaWwBaQEDYnV5AQhhc3NldFN0cgQFcHJpY2UJAQ10cnlHZXRJbnRlZ2VyAQkBCHByaWNlS2V5AQUIYXNzZXRTdHIEEWFjY2VwdGFibGVBc3NldElkCQEMdHJ5R2V0U3RyaW5nAQkBCmFzc2V0T2ZmZXIBBQhhc3NldFN0cgQIb3duZXJTdHIJAQx0cnlHZXRTdHJpbmcBCQEIb3duZXJLZXkBBQhhc3NldFN0cgQFb3duZXIEByRtYXRjaDAJAKYIAQUIb3duZXJTdHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAUBYQkAAgECFUFkZHJlc3MgcGFyc2luZyBlcnJvcgMJAQEhAQkBC2lzUGF5bWVudE9rAwUBaQURYWNjZXB0YWJsZUFzc2V0SWQFBXByaWNlCQACAQIdV3JvbmcgcGF5bWVudCBhbW91bnQgb3IgYXNzZXQDCQAAAgUIb3duZXJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAAgECGE93bmVyIGNhbm5vdCBidXkgaGlzIE5URgMJAAACBQVwcmljZQAACQACAQIYVGhpcyBORlQgaXMgbm90IGZvciBzYWxlBANmZWUJAGgCCQBpAgUFcHJpY2UAZAAFCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFCGFzc2V0U3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBW93bmVyCQBlAgUFcHJpY2UFA2ZlZQUEdW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQEIcHJpY2VLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEIb3duZXJLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEJaXNzdWVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB25hbWVLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEOZGVzY3JpcHRpb25LZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEKYXNzZXRPZmZlcgEFCGFzc2V0U3RyBQNuaWwBaQEIc3dhcERvbmUBB29mZmVySWQEBXByaWNlCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIcHJpY2VLZXkBBQdvZmZlcklkAgRTd2FwBAVvZmZlcgkBDHRyeUdldFN0cmluZwEJAKwCAgkBCmFzc2V0T2ZmZXIBBQdvZmZlcklkAgRTd2FwBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIb3duZXJLZXkBBQdvZmZlcklkAgRTd2FwBAhvd25lck5mdAkBDHRyeUdldFN0cmluZwEJAQhvd25lcktleQEFBW9mZmVyBAxvZmZlck9uQXNzZXQJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAQphc3NldE9mZmVyAQUHb2ZmZXJJZAIEU3dhcAMJAAACBQhvd25lck5mdAIACQACAQIYVGhpcyBORlQgaXMgbm90IGZvciBzYWxlAwkBAiE9AgUIb3duZXJOZnQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAAgECNVRoZSBjYWxsaW5nIGFkZHJlc3MgaXMgbm90IHRoZSBvd25lciBvZiB0aGUgTkZUIHRva2VuBANmZWUJAQ10cnlHZXRJbnRlZ2VyAQIKY29tbWlzc2lvbgQJbGlzdEFzc2V0CQC1CQIFB29mZmVySWQCAV8ECWxpc3RQcmljZQkAtQkCBQVwcmljZQIBXwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQhvd25lck5mdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWxpc3RQcmljZQABCQDZBAEJAJEDAgUJbGlzdEFzc2V0AAEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUIb3duZXJOZnQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJbGlzdFByaWNlAAIFA2ZlZQUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpvd25lck9mZmVyAAEJANkEAQUMb2ZmZXJPbkFzc2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQhwcmljZUtleQEFDG9mZmVyT25Bc3NldAkAzAgCCQELRGVsZXRlRW50cnkBCQEIb3duZXJLZXkBBQxvZmZlck9uQXNzZXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEFDG9mZmVyT25Bc3NldAkAzAgCCQELRGVsZXRlRW50cnkBCQEHbmFtZUtleQEFDG9mZmVyT25Bc3NldAkAzAgCCQELRGVsZXRlRW50cnkBCQEKYXNzZXRPZmZlcgEFDG9mZmVyT25Bc3NldAkAzAgCCQELRGVsZXRlRW50cnkBCQEOZGVzY3JpcHRpb25LZXkBBQxvZmZlck9uQXNzZXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEIcHJpY2VLZXkBBQdvZmZlcklkAgRTd2FwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCG93bmVyS2V5AQUHb2ZmZXJJZAIEU3dhcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQlpc3N1ZXJLZXkBBQdvZmZlcklkAgRTd2FwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCmFzc2V0T2ZmZXIBBQdvZmZlcklkAgRTd2FwBQNuaWwBaQENY2FuY2VsU2VsbGluZwEIYXNzZXRTdHIECG93bmVyU3RyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUIYXNzZXRTdHIEBW93bmVyBAckbWF0Y2gwCQCmCAEFCG93bmVyU3RyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAFAWEJAAIBAhVBZGRyZXNzIHBhcnNpbmcgZXJyb3IDCQECIT0CBQhvd25lclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQI1VGhlIGNhbGxpbmcgYWRkcmVzcyBpcyBub3QgdGhlIG93bmVyIG9mIHRoZSBORlQgdG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCG93bmVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEFCGFzc2V0U3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQduYW1lS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmRlc2NyaXB0aW9uS2V5AQUIYXNzZXRTdHIFA25pbAFpAQpzd2FwQ2FuY2VsAQdvZmZlcklkBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIb3duZXJLZXkBBQdvZmZlcklkAgRTd2FwBAVwcmljZQkBDHRyeUdldFN0cmluZwEJAKwCAgkBCHByaWNlS2V5AQUHb2ZmZXJJZAIEU3dhcAMJAQIhPQIFCm93bmVyT2ZmZXIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAAgECNVRoZSBjYWxsaW5nIGFkZHJlc3MgaXMgbm90IHRoZSBvd25lciBvZiB0aGUgTkZUIHRva2VuBAlsaXN0QXNzZXQJALUJAgUHb2ZmZXJJZAIBXwQJbGlzdFByaWNlCQC1CQIFBXByaWNlAgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCm93bmVyT2ZmZXIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlsaXN0UHJpY2UAAQkA2QQBCQCRAwIFCWxpc3RBc3NldAABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCm93bmVyT2ZmZXIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlsaXN0UHJpY2UAAgUEdW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQhwcmljZUtleQEFB29mZmVySWQCBFN3YXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEIb3duZXJLZXkBBQdvZmZlcklkAgRTd2FwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCWlzc3VlcktleQEFB29mZmVySWQCBFN3YXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEKYXNzZXRPZmZlcgEFB29mZmVySWQCBFN3YXAFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmkvTfX", "height": 2312549, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6PaV3oCQCt4Tgh2BoysEtraes3fFmaD4dxYnhCwGyeGt Next: none Diff:
OldNewDifferences
287287 let offer = tryGetString((assetOffer(offerId) + "Swap"))
288288 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
289289 let ownerNft = tryGetString(ownerKey(offer))
290- let errorAddress = match addressFromString(ownerNft) {
291- case a: Address =>
292- a
293- case _ =>
294- throw("This NFT is not for sale")
295- }
296290 let offerOnAsset = tryGetString((assetOffer(offerId) + "Swap"))
297- if ((ownerNft != toBase58String(i.caller.bytes)))
298- then throw("The calling address is not the owner of the NFT token")
299- else {
300- let fee = tryGetInteger("commission")
301- let listAsset = split(offerId, "_")
302- let listPrice = split(price, "_")
291+ if ((ownerNft == ""))
292+ then throw("This NFT is not for sale")
293+ else if ((ownerNft != toBase58String(i.caller.bytes)))
294+ then throw("The calling address is not the owner of the NFT token")
295+ else {
296+ let fee = tryGetInteger("commission")
297+ let listAsset = split(offerId, "_")
298+ let listPrice = split(price, "_")
303299 [ScriptTransfer(addressFromStringValue(ownerNft), parseIntValue(listPrice[1]), fromBase58String(listAsset[1])), ScriptTransfer(addressFromStringValue(ownerNft), (parseIntValue(listPrice[2]) - fee), unit), ScriptTransfer(addressFromStringValue(ownerOffer), 1, fromBase58String(offerOnAsset)), DeleteEntry(priceKey(offerOnAsset)), DeleteEntry(ownerKey(offerOnAsset)), DeleteEntry(issuerKey(offerOnAsset)), DeleteEntry(nameKey(offerOnAsset)), DeleteEntry(assetOffer(offerOnAsset)), DeleteEntry(descriptionKey(offerOnAsset)), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap")), DeleteEntry((assetOffer(offerId) + "Swap"))]
304- }
300+ }
305301 }
306302
307303
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func priceKey (asset) = (asset + "_price")
55
66
77 func ownerKey (asset) = (asset + "_owner")
88
99
1010 func issuerKey (asset) = (asset + "_issuer")
1111
1212
1313 func nameKey (asset) = (asset + "_name")
1414
1515
1616 func descriptionKey (asset) = (asset + "_description")
1717
1818
1919 func assetAccess (asset) = (asset + "_assetBuy")
2020
2121
2222 func assetOffer (asset) = (asset + "_offer")
2323
2424
2525 func assetOfferSwap (asset) = (asset + "_offer")
2626
2727
2828 func tryGetInteger (key) = {
2929 let val = match getInteger(this, key) {
3030 case b: Int =>
3131 b
3232 case _ =>
3333 0
3434 }
3535 val
3636 }
3737
3838
3939 func tryGetString (key) = {
4040 let val = match getString(this, key) {
4141 case b: String =>
4242 b
4343 case _ =>
4444 ""
4545 }
4646 val
4747 }
4848
4949
5050 func tryGetBool (key) = {
5151 let val = match getBoolean(this, key) {
5252 case b: Boolean =>
5353 b
5454 case _ =>
5555 false
5656 }
5757 val
5858 }
5959
6060
6161 func isPaymentOk (i,acceptableAssetId,price) = if ((size(i.payments) == 0))
6262 then throw("Payment not attached")
6363 else {
6464 let p = value(i.payments[0])
6565 let val = match p.assetId {
6666 case assetId: ByteVector =>
6767 if ((toBase58String(assetId) == acceptableAssetId))
6868 then (p.amount >= price)
6969 else false
7070 case waves: Unit =>
7171 (p.amount >= price)
7272 case _ =>
7373 throw("Match error")
7474 }
7575 val
7676 }
7777
7878
7979 func isAcceptableNft (status,assetSale) = {
8080 let idAsset = match assetSale.assetId {
8181 case b: ByteVector =>
8282 b
8383 case b: Unit =>
8484 base58'2CsAf'
8585 case _ =>
8686 throw("Match error")
8787 }
8888 let asset = match assetInfo(idAsset) {
8989 case b: Asset =>
9090 toBase58String(b.issuer.bytes)
9191 case waves: Unit =>
9292 "WAVES"
9393 case _ =>
9494 throw("Match error")
9595 }
9696 if (tryGetBool(asset))
9797 then status
9898 else false
9999 }
100100
101101
102102 func getAssetId (status,assetSale) = {
103103 let idAsset = match assetSale.assetId {
104104 case b: ByteVector =>
105105 toBase58String(b)
106106 case b: Unit =>
107107 "WAVES"
108108 case _ =>
109109 throw("Match error")
110110 }
111111 ((status + "_") + idAsset)
112112 }
113113
114114
115115 func getAssetPrice (status,assetSale) = {
116116 let price = toString(assetSale.amount)
117117 ((status + "_") + price)
118118 }
119119
120120
121121 func getAssetIssuer (status,assetSale) = {
122122 let idAsset = match assetSale.assetId {
123123 case b: ByteVector =>
124124 b
125125 case b: Unit =>
126126 base58'2CsAf'
127127 case _ =>
128128 throw("Match error")
129129 }
130130 let issuer = match assetInfo(idAsset) {
131131 case b: Asset =>
132132 toBase58String(b.issuer.bytes)
133133 case b: Unit =>
134134 "WAVES"
135135 case _ =>
136136 throw("Match error")
137137 }
138138 ((status + "_") + issuer)
139139 }
140140
141141
142142 func getTransferAsset (status,data) = {
143143 let transferAddress = match addressFromString(data._1) {
144144 case b: Address =>
145145 b
146146 case b: Unit =>
147147 this
148148 case _ =>
149149 throw("Match error")
150150 }
151151 if ((data._3 != "WAVES"))
152152 then (status :+ ScriptTransfer(transferAddress, data._2, fromBase58String(data._3)))
153153 else (status :+ ScriptTransfer(transferAddress, data._2, unit))
154154 }
155155
156156
157157 @Callable(i)
158158 func offerForSale (assetIdPrice,price) = if (!(if (tryGetBool(assetAccess(assetIdPrice)))
159159 then (price > 0)
160160 else false))
161161 then throw("Sale Asset incorrect")
162162 else {
163163 let firstPayment = value(i.payments[0])
164164 let assetId = match firstPayment.assetId {
165165 case id: ByteVector =>
166166 id
167167 case w: Unit =>
168168 throw("Asset is not NFT")
169169 case _ =>
170170 throw("Match error")
171171 }
172172 let assetIdStr = toBase58String(assetId)
173173 let asset = match assetInfo(assetId) {
174174 case a: Asset =>
175175 a
176176 case _ =>
177177 throw("Error getting information about asset")
178178 }
179179 if (if (if ((asset.quantity != 1))
180180 then (asset.decimals != 0)
181181 else false)
182182 then asset.reissuable
183183 else false)
184184 then throw("Asset is not NFT")
185185 else [IntegerEntry(priceKey(assetIdStr), price), StringEntry(ownerKey(assetIdStr), toBase58String(i.caller.bytes)), StringEntry(issuerKey(assetIdStr), toBase58String(asset.issuer.bytes)), StringEntry(nameKey(assetIdStr), asset.name), StringEntry(descriptionKey(assetIdStr), asset.description), StringEntry(assetOffer(assetIdStr), assetIdPrice)]
186186 }
187187
188188
189189
190190 @Callable(i)
191191 func offerForSwap (assetIdPrice) = {
192192 let status = {
193193 let $l = i.payments
194194 let $s = size($l)
195195 let $acc0 = true
196196 func $f0_1 ($a,$i) = if (($i >= $s))
197197 then $a
198198 else isAcceptableNft($a, $l[$i])
199199
200200 func $f0_2 ($a,$i) = if (($i >= $s))
201201 then $a
202202 else throw("List size exceeds 2")
203203
204204 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
205205 }
206206 if (!(status))
207207 then throw("Payments incorrect")
208208 else if ((tryGetInteger("commission") > i.payments[1].amount))
209209 then throw("No minimum commission")
210210 else {
211211 let paymentAll = {
212212 let $l = i.payments
213213 let $s = size($l)
214214 let $acc0 = "Swap"
215215 func $f1_1 ($a,$i) = if (($i >= $s))
216216 then $a
217217 else getAssetId($a, $l[$i])
218218
219219 func $f1_2 ($a,$i) = if (($i >= $s))
220220 then $a
221221 else throw("List size exceeds 2")
222222
223223 $f1_2($f1_1($f1_1($acc0, 0), 1), 2)
224224 }
225225 let issuer = {
226226 let $l = i.payments
227227 let $s = size($l)
228228 let $acc0 = "Swap"
229229 func $f2_1 ($a,$i) = if (($i >= $s))
230230 then $a
231231 else getAssetIssuer($a, $l[$i])
232232
233233 func $f2_2 ($a,$i) = if (($i >= $s))
234234 then $a
235235 else throw("List size exceeds 2")
236236
237237 $f2_2($f2_1($f2_1($acc0, 0), 1), 2)
238238 }
239239 let price = {
240240 let $l = i.payments
241241 let $s = size($l)
242242 let $acc0 = "Swap"
243243 func $f3_1 ($a,$i) = if (($i >= $s))
244244 then $a
245245 else getAssetPrice($a, $l[$i])
246246
247247 func $f3_2 ($a,$i) = if (($i >= $s))
248248 then $a
249249 else throw("List size exceeds 2")
250250
251251 $f3_2($f3_1($f3_1($acc0, 0), 1), 2)
252252 }
253253 [StringEntry((priceKey(paymentAll) + "Swap"), price), StringEntry((ownerKey(paymentAll) + "Swap"), toBase58String(i.caller.bytes)), StringEntry((issuerKey(paymentAll) + "Swap"), issuer), StringEntry((assetOffer(paymentAll) + "Swap"), assetIdPrice)]
254254 }
255255 }
256256
257257
258258
259259 @Callable(i)
260260 func buy (assetStr) = {
261261 let price = tryGetInteger(priceKey(assetStr))
262262 let acceptableAssetId = tryGetString(assetOffer(assetStr))
263263 let ownerStr = tryGetString(ownerKey(assetStr))
264264 let owner = match addressFromString(ownerStr) {
265265 case a: Address =>
266266 a
267267 case _ =>
268268 throw("Address parsing error")
269269 }
270270 if (!(isPaymentOk(i, acceptableAssetId, price)))
271271 then throw("Wrong payment amount or asset")
272272 else if ((ownerStr == toBase58String(i.caller.bytes)))
273273 then throw("Owner cannot buy his NTF")
274274 else if ((price == 0))
275275 then throw("This NFT is not for sale")
276276 else {
277277 let fee = ((price / 100) * 5)
278278 [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), ScriptTransfer(owner, (price - fee), unit), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr)), DeleteEntry(issuerKey(assetStr)), DeleteEntry(nameKey(assetStr)), DeleteEntry(descriptionKey(assetStr)), DeleteEntry(assetOffer(assetStr))]
279279 }
280280 }
281281
282282
283283
284284 @Callable(i)
285285 func swapDone (offerId) = {
286286 let price = tryGetString((priceKey(offerId) + "Swap"))
287287 let offer = tryGetString((assetOffer(offerId) + "Swap"))
288288 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
289289 let ownerNft = tryGetString(ownerKey(offer))
290- let errorAddress = match addressFromString(ownerNft) {
291- case a: Address =>
292- a
293- case _ =>
294- throw("This NFT is not for sale")
295- }
296290 let offerOnAsset = tryGetString((assetOffer(offerId) + "Swap"))
297- if ((ownerNft != toBase58String(i.caller.bytes)))
298- then throw("The calling address is not the owner of the NFT token")
299- else {
300- let fee = tryGetInteger("commission")
301- let listAsset = split(offerId, "_")
302- let listPrice = split(price, "_")
291+ if ((ownerNft == ""))
292+ then throw("This NFT is not for sale")
293+ else if ((ownerNft != toBase58String(i.caller.bytes)))
294+ then throw("The calling address is not the owner of the NFT token")
295+ else {
296+ let fee = tryGetInteger("commission")
297+ let listAsset = split(offerId, "_")
298+ let listPrice = split(price, "_")
303299 [ScriptTransfer(addressFromStringValue(ownerNft), parseIntValue(listPrice[1]), fromBase58String(listAsset[1])), ScriptTransfer(addressFromStringValue(ownerNft), (parseIntValue(listPrice[2]) - fee), unit), ScriptTransfer(addressFromStringValue(ownerOffer), 1, fromBase58String(offerOnAsset)), DeleteEntry(priceKey(offerOnAsset)), DeleteEntry(ownerKey(offerOnAsset)), DeleteEntry(issuerKey(offerOnAsset)), DeleteEntry(nameKey(offerOnAsset)), DeleteEntry(assetOffer(offerOnAsset)), DeleteEntry(descriptionKey(offerOnAsset)), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap")), DeleteEntry((assetOffer(offerId) + "Swap"))]
304- }
300+ }
305301 }
306302
307303
308304
309305 @Callable(i)
310306 func cancelSelling (assetStr) = {
311307 let ownerStr = tryGetString(ownerKey(assetStr))
312308 let owner = match addressFromString(ownerStr) {
313309 case a: Address =>
314310 a
315311 case _ =>
316312 throw("Address parsing error")
317313 }
318314 if ((ownerStr != toBase58String(i.caller.bytes)))
319315 then throw("The calling address is not the owner of the NFT token")
320316 else [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr)), DeleteEntry(issuerKey(assetStr)), DeleteEntry(nameKey(assetStr)), DeleteEntry(descriptionKey(assetStr))]
321317 }
322318
323319
324320
325321 @Callable(i)
326322 func swapCancel (offerId) = {
327323 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
328324 let price = tryGetString((priceKey(offerId) + "Swap"))
329325 if ((ownerOffer != toBase58String(i.caller.bytes)))
330326 then throw("The calling address is not the owner of the NFT token")
331327 else {
332328 let listAsset = split(offerId, "_")
333329 let listPrice = split(price, "_")
334330 [ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[1]), fromBase58String(listAsset[1])), ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[2]), unit), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap")), DeleteEntry((assetOffer(offerId) + "Swap"))]
335331 }
336332 }
337333
338334
339335 @Verifier(tx)
340336 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
341337

github/deemru/w8io/169f3d6 
42.12 ms