tx · D9hhaBDw81Q18gZWXYz6vZLLdYzTsP6XmVjhd8pQY7Dc

3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X:  -0.00800000 Waves

2022.11.10 13:10 [2310918] smart account 3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X > SELF 0.00000000 Waves

{ "type": 13, "id": "D9hhaBDw81Q18gZWXYz6vZLLdYzTsP6XmVjhd8pQY7Dc", "fee": 800000, "feeAssetId": null, "timestamp": 1668075020272, "version": 2, "chainId": 84, "sender": "3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X", "senderPublicKey": "SrcQexq2T9cnMXmLqfJtc8AnQ91ZjeaJtXoi1HwDsx9", "proofs": [ "4TjJvZdjF479oeFuuzQJBQ8S365PkUBsMbCSeZf52NQq9R1LtSEvUej4MC4cri6k4gWrnaJKn3biPGkJgM6NgPsQ" ], "script": "base64:BgIhCAISBAoCCAESAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEQEIcHJpY2VLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgZfcHJpY2UBCG93bmVyS2V5AQVhc3NldAkArAICBQVhc3NldAIGX293bmVyAQlpc3N1ZXJLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgdfaXNzdWVyAQduYW1lS2V5AQVhc3NldAkArAICBQVhc3NldAIFX25hbWUBDmRlc2NyaXB0aW9uS2V5AQVhc3NldAkArAICBQVhc3NldAIMX2Rlc2NyaXB0aW9uAQthc3NldEFjY2VzcwEFYXNzZXQJAKwCAgUFYXNzZXQCCV9hc3NldEJ1eQEKYXNzZXRPZmZlcgEFYXNzZXQJAKwCAgUFYXNzZXQCBl9vZmZlcgEOYXNzZXRPZmZlclN3YXABBWFzc2V0CQCsAgIFBWFzc2V0AgZfb2ZmZXIBDXRyeUdldEludGVnZXIBA2tleQQDdmFsBAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAUDdmFsAQx0cnlHZXRTdHJpbmcBA2tleQQDdmFsBAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAUDdmFsAQp0cnlHZXRCb29sAQNrZXkEA3ZhbAQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcFA3ZhbAELaXNQYXltZW50T2sDAWkRYWNjZXB0YWJsZUFzc2V0SWQFcHJpY2UDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUUGF5bWVudCBub3QgYXR0YWNoZWQEAXAJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQDdmFsBAckbWF0Y2gwCAUBcAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDADCQAAAgkA2AQBBQdhc3NldElkBRFhY2NlcHRhYmxlQXNzZXRJZAkAZwIIBQFwBmFtb3VudAUFcHJpY2UHAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCQBnAggFAXAGYW1vdW50BQVwcmljZQkAAgECC01hdGNoIGVycm9yBQN2YWwBD2lzQWNjZXB0YWJsZU5mdAIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2lkQXNzZXQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWIFByRtYXRjaDAJANgEAQgIBQFiBmlzc3VlcgVieXRlcwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgMJAQp0cnlHZXRCb29sAQUFYXNzZXQFBnN0YXR1cwcBCmdldEFzc2V0SWQCBnN0YXR1cwlhc3NldFNhbGUEB2lkQXNzZXQEByRtYXRjaDAIBQlhc3NldFNhbGUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUHaWRBc3NldAENZ2V0QXNzZXRQcmljZQIGc3RhdHVzCWFzc2V0U2FsZQQFcHJpY2UJAKQDAQgFCWFzc2V0U2FsZQZhbW91bnQJAKwCAgkArAICBQZzdGF0dXMCAV8FBXByaWNlAQ5nZXRBc3NldElzc3VlcgIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBmlzc3VlcgQHJG1hdGNoMAkA7AcBBQdpZEFzc2V0AwkAAQIFByRtYXRjaDACBUFzc2V0BAFiBQckbWF0Y2gwCQDYBAEICAUBYgZpc3N1ZXIFYnl0ZXMDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUGaXNzdWVyARBnZXRUcmFuc2ZlckFzc2V0AgZzdGF0dXMEZGF0YQQPdHJhbnNmZXJBZGRyZXNzBAckbWF0Y2gwCQCmCAEIBQRkYXRhAl8xAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAUEdGhpcwkAAgECC01hdGNoIGVycm9yAwkBAiE9AggFBGRhdGECXzMCBVdBVkVTCQDNCAIFBnN0YXR1cwkBDlNjcmlwdFRyYW5zZmVyAwUPdHJhbnNmZXJBZGRyZXNzCAUEZGF0YQJfMgkA2QQBCAUEZGF0YQJfMwkAzQgCBQZzdGF0dXMJAQ5TY3JpcHRUcmFuc2ZlcgMFD3RyYW5zZmVyQWRkcmVzcwgFBGRhdGECXzIFBHVuaXQGAWkBDG9mZmVyRm9yU2FsZQIMYXNzZXRJZFByaWNlBXByaWNlAwkBASEBAwkBCnRyeUdldEJvb2wBCQELYXNzZXRBY2Nlc3MBBQxhc3NldElkUHJpY2UJAGYCBQVwcmljZQAABwkAAgECFFNhbGUgQXNzZXQgaW5jb3JyZWN0BAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAQHJG1hdGNoMAgFDGZpcnN0UGF5bWVudAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAF3BQckbWF0Y2gwCQACAQIQQXNzZXQgaXMgbm90IE5GVAkAAgECC01hdGNoIGVycm9yBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAFAWEJAAIBAiVFcnJvciBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGFzc2V0AwMDCQECIT0CCAUFYXNzZXQIcXVhbnRpdHkAAQkBAiE9AggFBWFzc2V0CGRlY2ltYWxzAAAHCAUFYXNzZXQKcmVpc3N1YWJsZQcJAAIBAhBBc3NldCBpcyBub3QgTkZUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEIcHJpY2VLZXkBBQphc3NldElkU3RyBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEIb3duZXJLZXkBBQphc3NldElkU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWlzc3VlcktleQEFCmFzc2V0SWRTdHIJANgEAQgIBQVhc3NldAZpc3N1ZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB25hbWVLZXkBBQphc3NldElkU3RyCAUFYXNzZXQEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEOZGVzY3JpcHRpb25LZXkBBQphc3NldElkU3RyCAUFYXNzZXQLZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmFzc2V0T2ZmZXIBBQphc3NldElkU3RyBQxhc3NldElkUHJpY2UFA25pbAFpAQxvZmZlckZvclN3YXABDGFzc2V0SWRQcmljZQQIY291bnRQYXkJAJADAQgFAWkIcGF5bWVudHMEBnN0YXR1cwoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAGCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9pc0FjY2VwdGFibGVOZnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAwkBASEBBQZzdGF0dXMJAAIBAhJQYXltZW50cyBpbmNvcnJlY3QDCQBmAgkBDXRyeUdldEludGVnZXIBAgpjb21taXNzaW9uCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAkAAgECFU5vIG1pbmltdW0gY29tbWlzc2lvbgQKcGF5bWVudEFsbAoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACBFN3YXAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmdldEFzc2V0SWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACBAZpc3N1ZXIKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgRTd2FwCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5nZXRBc3NldElzc3VlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIEBXByaWNlCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAIEU3dhcAoBBSRmM18xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENZ2V0QXNzZXRQcmljZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmM18yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmM18yAgkBBSRmM18xAgkBBSRmM18xAgUFJGFjYzAAAAABAAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEIcHJpY2VLZXkBBQpwYXltZW50QWxsAgRTd2FwBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQhvd25lcktleQEFCnBheW1lbnRBbGwCBFN3YXAJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQlpc3N1ZXJLZXkBBQpwYXltZW50QWxsAgRTd2FwBQZpc3N1ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEKYXNzZXRPZmZlcgEFCnBheW1lbnRBbGwCBFN3YXAFDGFzc2V0SWRQcmljZQUDbmlsAWkBA2J1eQEIYXNzZXRTdHIEBXByaWNlCQENdHJ5R2V0SW50ZWdlcgEJAQhwcmljZUtleQEFCGFzc2V0U3RyBBFhY2NlcHRhYmxlQXNzZXRJZAkBDHRyeUdldFN0cmluZwEJAQphc3NldE9mZmVyAQUIYXNzZXRTdHIECG93bmVyU3RyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUIYXNzZXRTdHIEBW93bmVyBAckbWF0Y2gwCQCmCAEFCG93bmVyU3RyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAFAWEJAAIBAhVBZGRyZXNzIHBhcnNpbmcgZXJyb3IDCQEBIQEJAQtpc1BheW1lbnRPawMFAWkFEWFjY2VwdGFibGVBc3NldElkBQVwcmljZQkAAgECHVdyb25nIHBheW1lbnQgYW1vdW50IG9yIGFzc2V0AwkAAAIFCG93bmVyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAAIBAhhPd25lciBjYW5ub3QgYnV5IGhpcyBOVEYDCQAAAgUFcHJpY2UAAAkAAgECGFRoaXMgTkZUIGlzIG5vdCBmb3Igc2FsZQQDZmVlCQBoAgkAaQIFBXByaWNlAGQABQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQhhc3NldFN0cgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVvd25lcgkAZQIFBXByaWNlBQNmZWUFBHVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCG93bmVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEFCGFzc2V0U3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQduYW1lS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmRlc2NyaXB0aW9uS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmFzc2V0T2ZmZXIBBQhhc3NldFN0cgUDbmlsAWkBCHN3YXBEb25lAQdvZmZlcklkBAVwcmljZQkBDHRyeUdldFN0cmluZwEJAQhwcmljZUtleQEFB29mZmVySWQEBW9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkBCmFzc2V0T2ZmZXIBBQdvZmZlcklkBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUHb2ZmZXJJZAQIb3duZXJOZnQJAQx0cnlHZXRTdHJpbmcBCQEIb3duZXJLZXkBBQdvZmZlcklkAwkBAiE9AgUIb3duZXJOZnQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAAgECNVRoZSBjYWxsaW5nIGFkZHJlc3MgaXMgbm90IHRoZSBvd25lciBvZiB0aGUgTkZUIHRva2VuAwkAAAIFBXByaWNlAgAJAAIBAhhUaGlzIE5GVCBpcyBub3QgZm9yIHNhbGUEA2ZlZQkBDXRyeUdldEludGVnZXIBAgpjb21taXNzaW9uBAlsaXN0QXNzZXQJALUJAgUHb2ZmZXJJZAIBXwQJbGlzdFByaWNlCQC1CQIFBXByaWNlAgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG93bmVyTmZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJbGlzdFByaWNlAAAJANkEAQkAkQMCBQlsaXN0QXNzZXQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQhvd25lck5mdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlsaXN0UHJpY2UAAQUDZmVlBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCm93bmVyT2ZmZXIAAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQUHb2ZmZXJJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIcHJpY2VLZXkBCQCRAwIFCWxpc3RBc3NldAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQhvd25lcktleQEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB25hbWVLZXkBCQCRAwIFCWxpc3RBc3NldAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5kZXNjcmlwdGlvbktleQEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUHb2ZmZXJJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIb3duZXJLZXkBBQdvZmZlcklkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlpc3N1ZXJLZXkBBQdvZmZlcklkBQNuaWwBaQENY2FuY2VsU2VsbGluZwEIYXNzZXRTdHIECG93bmVyU3RyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUIYXNzZXRTdHIEBW93bmVyBAckbWF0Y2gwCQCmCAEFCG93bmVyU3RyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAFAWEJAAIBAhVBZGRyZXNzIHBhcnNpbmcgZXJyb3IDCQECIT0CBQhvd25lclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQI1VGhlIGNhbGxpbmcgYWRkcmVzcyBpcyBub3QgdGhlIG93bmVyIG9mIHRoZSBORlQgdG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCG93bmVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEFCGFzc2V0U3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQduYW1lS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmRlc2NyaXB0aW9uS2V5AQUIYXNzZXRTdHIFA25pbAFpAQpzd2FwQ2FuY2VsAQdvZmZlcklkBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIb3duZXJLZXkBBQdvZmZlcklkAgRTd2FwBAVwcmljZQkBDHRyeUdldFN0cmluZwEJAQhwcmljZUtleQEFB29mZmVySWQDCQECIT0CBQpvd25lck9mZmVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAAIBAjVUaGUgY2FsbGluZyBhZGRyZXNzIGlzIG5vdCB0aGUgb3duZXIgb2YgdGhlIE5GVCB0b2tlbgQJbGlzdEFzc2V0CQC1CQIFB29mZmVySWQCAV8ECWxpc3RQcmljZQkAtQkCBQVwcmljZQIBXwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpvd25lck9mZmVyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJbGlzdFByaWNlAAEJANkEAQkAkQMCBQlsaXN0QXNzZXQAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpvd25lck9mZmVyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJbGlzdFByaWNlAAIFBHVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEIcHJpY2VLZXkBBQdvZmZlcklkAgRTd2FwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCG93bmVyS2V5AQUHb2ZmZXJJZAIEU3dhcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQlpc3N1ZXJLZXkBBQdvZmZlcklkAgRTd2FwBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5U1Th6w==", "height": 2310918, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ENBy7Jsp7aU3nrrqEjVnSuaFoxbYNwWUqvPTxZzAGkgf Next: AvhTPQUPw7NrFkpBBsufkENh4fni7GvsPgNZMjfv6ucN Diff:
OldNewDifferences
327327 else {
328328 let listAsset = split(offerId, "_")
329329 let listPrice = split(price, "_")
330-[ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[0]), fromBase58String(listAsset[0])), ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[1]), unit), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap"))]
330+[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"))]
331331 }
332332 }
333333
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 countPay = size(i.payments)
193193 let status = {
194194 let $l = i.payments
195195 let $s = size($l)
196196 let $acc0 = true
197197 func $f0_1 ($a,$i) = if (($i >= $s))
198198 then $a
199199 else isAcceptableNft($a, $l[$i])
200200
201201 func $f0_2 ($a,$i) = if (($i >= $s))
202202 then $a
203203 else throw("List size exceeds 2")
204204
205205 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
206206 }
207207 if (!(status))
208208 then throw("Payments incorrect")
209209 else if ((tryGetInteger("commission") > i.payments[1].amount))
210210 then throw("No minimum commission")
211211 else {
212212 let paymentAll = {
213213 let $l = i.payments
214214 let $s = size($l)
215215 let $acc0 = "Swap"
216216 func $f1_1 ($a,$i) = if (($i >= $s))
217217 then $a
218218 else getAssetId($a, $l[$i])
219219
220220 func $f1_2 ($a,$i) = if (($i >= $s))
221221 then $a
222222 else throw("List size exceeds 2")
223223
224224 $f1_2($f1_1($f1_1($acc0, 0), 1), 2)
225225 }
226226 let issuer = {
227227 let $l = i.payments
228228 let $s = size($l)
229229 let $acc0 = "Swap"
230230 func $f2_1 ($a,$i) = if (($i >= $s))
231231 then $a
232232 else getAssetIssuer($a, $l[$i])
233233
234234 func $f2_2 ($a,$i) = if (($i >= $s))
235235 then $a
236236 else throw("List size exceeds 2")
237237
238238 $f2_2($f2_1($f2_1($acc0, 0), 1), 2)
239239 }
240240 let price = {
241241 let $l = i.payments
242242 let $s = size($l)
243243 let $acc0 = "Swap"
244244 func $f3_1 ($a,$i) = if (($i >= $s))
245245 then $a
246246 else getAssetPrice($a, $l[$i])
247247
248248 func $f3_2 ($a,$i) = if (($i >= $s))
249249 then $a
250250 else throw("List size exceeds 2")
251251
252252 $f3_2($f3_1($f3_1($acc0, 0), 1), 2)
253253 }
254254 [StringEntry((priceKey(paymentAll) + "Swap"), price), StringEntry((ownerKey(paymentAll) + "Swap"), toBase58String(i.caller.bytes)), StringEntry((issuerKey(paymentAll) + "Swap"), issuer), StringEntry((assetOffer(paymentAll) + "Swap"), assetIdPrice)]
255255 }
256256 }
257257
258258
259259
260260 @Callable(i)
261261 func buy (assetStr) = {
262262 let price = tryGetInteger(priceKey(assetStr))
263263 let acceptableAssetId = tryGetString(assetOffer(assetStr))
264264 let ownerStr = tryGetString(ownerKey(assetStr))
265265 let owner = match addressFromString(ownerStr) {
266266 case a: Address =>
267267 a
268268 case _ =>
269269 throw("Address parsing error")
270270 }
271271 if (!(isPaymentOk(i, acceptableAssetId, price)))
272272 then throw("Wrong payment amount or asset")
273273 else if ((ownerStr == toBase58String(i.caller.bytes)))
274274 then throw("Owner cannot buy his NTF")
275275 else if ((price == 0))
276276 then throw("This NFT is not for sale")
277277 else {
278278 let fee = ((price / 100) * 5)
279279 [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))]
280280 }
281281 }
282282
283283
284284
285285 @Callable(i)
286286 func swapDone (offerId) = {
287287 let price = tryGetString(priceKey(offerId))
288288 let offer = tryGetString(assetOffer(offerId))
289289 let ownerOffer = tryGetString(ownerKey(offerId))
290290 let ownerNft = tryGetString(ownerKey(offerId))
291291 if ((ownerNft != toBase58String(i.caller.bytes)))
292292 then throw("The calling address is not the owner of the NFT token")
293293 else if ((price == ""))
294294 then throw("This NFT is not for sale")
295295 else {
296296 let fee = tryGetInteger("commission")
297297 let listAsset = split(offerId, "_")
298298 let listPrice = split(price, "_")
299299 [ScriptTransfer(addressFromStringValue(ownerNft), parseIntValue(listPrice[0]), fromBase58String(listAsset[0])), ScriptTransfer(addressFromStringValue(ownerNft), (parseIntValue(listPrice[1]) - fee), unit), ScriptTransfer(addressFromStringValue(ownerOffer), 1, fromBase58String(tryGetString(offerId))), DeleteEntry(priceKey(listAsset[0])), DeleteEntry(ownerKey(listAsset[0])), DeleteEntry(issuerKey(listAsset[0])), DeleteEntry(nameKey(listAsset[0])), DeleteEntry(descriptionKey(listAsset[0])), DeleteEntry(priceKey(offerId)), DeleteEntry(ownerKey(offerId)), DeleteEntry(issuerKey(offerId))]
300300 }
301301 }
302302
303303
304304
305305 @Callable(i)
306306 func cancelSelling (assetStr) = {
307307 let ownerStr = tryGetString(ownerKey(assetStr))
308308 let owner = match addressFromString(ownerStr) {
309309 case a: Address =>
310310 a
311311 case _ =>
312312 throw("Address parsing error")
313313 }
314314 if ((ownerStr != toBase58String(i.caller.bytes)))
315315 then throw("The calling address is not the owner of the NFT token")
316316 else [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr)), DeleteEntry(issuerKey(assetStr)), DeleteEntry(nameKey(assetStr)), DeleteEntry(descriptionKey(assetStr))]
317317 }
318318
319319
320320
321321 @Callable(i)
322322 func swapCancel (offerId) = {
323323 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
324324 let price = tryGetString(priceKey(offerId))
325325 if ((ownerOffer != toBase58String(i.caller.bytes)))
326326 then throw("The calling address is not the owner of the NFT token")
327327 else {
328328 let listAsset = split(offerId, "_")
329329 let listPrice = split(price, "_")
330-[ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[0]), fromBase58String(listAsset[0])), ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[1]), unit), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap"))]
330+[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"))]
331331 }
332332 }
333333
334334
335335 @Verifier(tx)
336336 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
337337

github/deemru/w8io/026f985 
38.04 ms