tx · 9ZuGYzAhsFYbt9KpzkWJKto5CyMNfaMJdKTrZiEchsMV

3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X:  -0.00800000 Waves

2022.11.10 12:15 [2310859] smart account 3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X > SELF 0.00000000 Waves

{ "type": 13, "id": "9ZuGYzAhsFYbt9KpzkWJKto5CyMNfaMJdKTrZiEchsMV", "fee": 800000, "feeAssetId": null, "timestamp": 1668071775153, "version": 2, "chainId": 84, "sender": "3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X", "senderPublicKey": "SrcQexq2T9cnMXmLqfJtc8AnQ91ZjeaJtXoi1HwDsx9", "proofs": [ "58yjEinEA3u8oqzEuSXZ7Thmdm3XTJZP2zRH6xx6bGVCFiJT1T39UwYJs6PCUUQghDbkVZBibuAjKAkRxuGYYx68" ], "script": "base64:BgIhCAISBAoCCAESAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEQEIcHJpY2VLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgZfcHJpY2UBCG93bmVyS2V5AQVhc3NldAkArAICBQVhc3NldAIGX293bmVyAQlpc3N1ZXJLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgdfaXNzdWVyAQduYW1lS2V5AQVhc3NldAkArAICBQVhc3NldAIFX25hbWUBDmRlc2NyaXB0aW9uS2V5AQVhc3NldAkArAICBQVhc3NldAIMX2Rlc2NyaXB0aW9uAQthc3NldEFjY2VzcwEFYXNzZXQJAKwCAgUFYXNzZXQCCV9hc3NldEJ1eQEKYXNzZXRPZmZlcgEFYXNzZXQJAKwCAgUFYXNzZXQCBl9vZmZlcgEOYXNzZXRPZmZlclN3YXABBWFzc2V0CQCsAgIFBWFzc2V0AgZfb2ZmZXIBDXRyeUdldEludGVnZXIBA2tleQQDdmFsBAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAUDdmFsAQx0cnlHZXRTdHJpbmcBA2tleQQDdmFsBAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAUDdmFsAQp0cnlHZXRCb29sAQNrZXkEA3ZhbAQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcFA3ZhbAELaXNQYXltZW50T2sDAWkRYWNjZXB0YWJsZUFzc2V0SWQFcHJpY2UDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUUGF5bWVudCBub3QgYXR0YWNoZWQEAXAJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQDdmFsBAckbWF0Y2gwCAUBcAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDADCQAAAgkA2AQBBQdhc3NldElkBRFhY2NlcHRhYmxlQXNzZXRJZAkAZwIIBQFwBmFtb3VudAUFcHJpY2UHAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCQBnAggFAXAGYW1vdW50BQVwcmljZQkAAgECC01hdGNoIGVycm9yBQN2YWwBD2lzQWNjZXB0YWJsZU5mdAIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2lkQXNzZXQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWIFByRtYXRjaDAJANgEAQgIBQFiBmlzc3VlcgVieXRlcwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgMJAQp0cnlHZXRCb29sAQUFYXNzZXQFBnN0YXR1cwcBCmdldEFzc2V0SWQCBnN0YXR1cwlhc3NldFNhbGUEB2lkQXNzZXQEByRtYXRjaDAIBQlhc3NldFNhbGUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUHaWRBc3NldAENZ2V0QXNzZXRQcmljZQIGc3RhdHVzCWFzc2V0U2FsZQQFcHJpY2UJAKQDAQgFCWFzc2V0U2FsZQZhbW91bnQJAKwCAgkArAICBQZzdGF0dXMCAV8FBXByaWNlAQ5nZXRBc3NldElzc3VlcgIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBmlzc3VlcgQHJG1hdGNoMAkA7AcBBQdpZEFzc2V0AwkAAQIFByRtYXRjaDACBUFzc2V0BAFiBQckbWF0Y2gwCQDYBAEICAUBYgZpc3N1ZXIFYnl0ZXMDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUGaXNzdWVyARBnZXRUcmFuc2ZlckFzc2V0AgZzdGF0dXMEZGF0YQQPdHJhbnNmZXJBZGRyZXNzBAckbWF0Y2gwCQCmCAEIBQRkYXRhAl8xAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAUEdGhpcwkAAgECC01hdGNoIGVycm9yAwkBAiE9AggFBGRhdGECXzMCBVdBVkVTCQDNCAIFBnN0YXR1cwkBDlNjcmlwdFRyYW5zZmVyAwUPdHJhbnNmZXJBZGRyZXNzCAUEZGF0YQJfMgkA2QQBCAUEZGF0YQJfMwkAzQgCBQZzdGF0dXMJAQ5TY3JpcHRUcmFuc2ZlcgMFD3RyYW5zZmVyQWRkcmVzcwgFBGRhdGECXzIFBHVuaXQGAWkBDG9mZmVyRm9yU2FsZQIMYXNzZXRJZFByaWNlBXByaWNlAwkBASEBAwkBCnRyeUdldEJvb2wBCQELYXNzZXRBY2Nlc3MBBQxhc3NldElkUHJpY2UJAGYCBQVwcmljZQAABwkAAgECFFNhbGUgQXNzZXQgaW5jb3JyZWN0BAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAQHJG1hdGNoMAgFDGZpcnN0UGF5bWVudAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAF3BQckbWF0Y2gwCQACAQIQQXNzZXQgaXMgbm90IE5GVAkAAgECC01hdGNoIGVycm9yBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAFAWEJAAIBAiVFcnJvciBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGFzc2V0AwMDCQECIT0CCAUFYXNzZXQIcXVhbnRpdHkAAQkBAiE9AggFBWFzc2V0CGRlY2ltYWxzAAAHCAUFYXNzZXQKcmVpc3N1YWJsZQcJAAIBAhBBc3NldCBpcyBub3QgTkZUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEIcHJpY2VLZXkBBQphc3NldElkU3RyBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEIb3duZXJLZXkBBQphc3NldElkU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWlzc3VlcktleQEFCmFzc2V0SWRTdHIJANgEAQgIBQVhc3NldAZpc3N1ZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB25hbWVLZXkBBQphc3NldElkU3RyCAUFYXNzZXQEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEOZGVzY3JpcHRpb25LZXkBBQphc3NldElkU3RyCAUFYXNzZXQLZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmFzc2V0T2ZmZXIBBQphc3NldElkU3RyBQxhc3NldElkUHJpY2UFA25pbAFpAQxvZmZlckZvclN3YXABDGFzc2V0SWRQcmljZQQIY291bnRQYXkJAJADAQgFAWkIcGF5bWVudHMEBnN0YXR1cwoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAGCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9pc0FjY2VwdGFibGVOZnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAwkBASEBBQZzdGF0dXMJAAIBAhJQYXltZW50cyBpbmNvcnJlY3QDCQBmAgkBDXRyeUdldEludGVnZXIBAgpjb21taXNzaW9uCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAkAAgECFU5vIG1pbmltdW0gY29tbWlzc2lvbgQKcGF5bWVudEFsbAoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZ2V0QXNzZXRJZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIEBmlzc3VlcgoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEOZ2V0QXNzZXRJc3N1ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACBAVwcmljZQoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmM18xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENZ2V0QXNzZXRQcmljZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmM18yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmM18yAgkBBSRmM18xAgkBBSRmM18xAgUFJGFjYzAAAAABAAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEIcHJpY2VLZXkBBQpwYXltZW50QWxsAgRTd2FwBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQhvd25lcktleQEFCnBheW1lbnRBbGwCBFN3YXAJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQlpc3N1ZXJLZXkBBQpwYXltZW50QWxsAgRTd2FwBQZpc3N1ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEKYXNzZXRPZmZlcgEFCnBheW1lbnRBbGwCBFN3YXAFDGFzc2V0SWRQcmljZQUDbmlsAWkBA2J1eQEIYXNzZXRTdHIEBXByaWNlCQENdHJ5R2V0SW50ZWdlcgEJAQhwcmljZUtleQEFCGFzc2V0U3RyBBFhY2NlcHRhYmxlQXNzZXRJZAkBDHRyeUdldFN0cmluZwEJAQphc3NldE9mZmVyAQUIYXNzZXRTdHIECG93bmVyU3RyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUIYXNzZXRTdHIEBW93bmVyBAckbWF0Y2gwCQCmCAEFCG93bmVyU3RyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAFAWEJAAIBAhVBZGRyZXNzIHBhcnNpbmcgZXJyb3IDCQEBIQEJAQtpc1BheW1lbnRPawMFAWkFEWFjY2VwdGFibGVBc3NldElkBQVwcmljZQkAAgECHVdyb25nIHBheW1lbnQgYW1vdW50IG9yIGFzc2V0AwkAAAIFCG93bmVyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAAIBAhhPd25lciBjYW5ub3QgYnV5IGhpcyBOVEYDCQAAAgUFcHJpY2UAAAkAAgECGFRoaXMgTkZUIGlzIG5vdCBmb3Igc2FsZQQDZmVlCQBoAgkAaQIFBXByaWNlAGQABQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQhhc3NldFN0cgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVvd25lcgkAZQIFBXByaWNlBQNmZWUFBHVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCG93bmVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEFCGFzc2V0U3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQduYW1lS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmRlc2NyaXB0aW9uS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmFzc2V0T2ZmZXIBBQhhc3NldFN0cgUDbmlsAWkBCHN3YXBEb25lAQdvZmZlcklkBAVwcmljZQkBDHRyeUdldFN0cmluZwEJAQhwcmljZUtleQEFB29mZmVySWQEBW9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkBCmFzc2V0T2ZmZXIBBQdvZmZlcklkBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUHb2ZmZXJJZAQIb3duZXJOZnQJAQx0cnlHZXRTdHJpbmcBCQEIb3duZXJLZXkBBQdvZmZlcklkAwkBAiE9AgUIb3duZXJOZnQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAAgECNVRoZSBjYWxsaW5nIGFkZHJlc3MgaXMgbm90IHRoZSBvd25lciBvZiB0aGUgTkZUIHRva2VuAwkAAAIFBXByaWNlAgAJAAIBAhhUaGlzIE5GVCBpcyBub3QgZm9yIHNhbGUEA2ZlZQkBDXRyeUdldEludGVnZXIBAgpjb21taXNzaW9uBAlsaXN0QXNzZXQJALUJAgUHb2ZmZXJJZAIBXwQJbGlzdFByaWNlCQC1CQIFBXByaWNlAgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG93bmVyTmZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJbGlzdFByaWNlAAAJANkEAQkAkQMCBQlsaXN0QXNzZXQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQhvd25lck5mdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlsaXN0UHJpY2UAAQUDZmVlBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCm93bmVyT2ZmZXIAAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQUHb2ZmZXJJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIcHJpY2VLZXkBCQCRAwIFCWxpc3RBc3NldAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQhvd25lcktleQEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB25hbWVLZXkBCQCRAwIFCWxpc3RBc3NldAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5kZXNjcmlwdGlvbktleQEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUHb2ZmZXJJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIb3duZXJLZXkBBQdvZmZlcklkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlpc3N1ZXJLZXkBBQdvZmZlcklkBQNuaWwBaQENY2FuY2VsU2VsbGluZwEIYXNzZXRTdHIECG93bmVyU3RyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUIYXNzZXRTdHIEBW93bmVyBAckbWF0Y2gwCQCmCAEFCG93bmVyU3RyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAFAWEJAAIBAhVBZGRyZXNzIHBhcnNpbmcgZXJyb3IDCQECIT0CBQhvd25lclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQI1VGhlIGNhbGxpbmcgYWRkcmVzcyBpcyBub3QgdGhlIG93bmVyIG9mIHRoZSBORlQgdG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCG93bmVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWlzc3VlcktleQEFCGFzc2V0U3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQduYW1lS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmRlc2NyaXB0aW9uS2V5AQUIYXNzZXRTdHIFA25pbAFpAQpzd2FwQ2FuY2VsAQdvZmZlcklkBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkBCG93bmVyS2V5AQUHb2ZmZXJJZAQFcHJpY2UJAQx0cnlHZXRTdHJpbmcBCQEIcHJpY2VLZXkBBQdvZmZlcklkAwkBAiE9AgUKb3duZXJPZmZlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQI1VGhlIGNhbGxpbmcgYWRkcmVzcyBpcyBub3QgdGhlIG93bmVyIG9mIHRoZSBORlQgdG9rZW4ECWxpc3RBc3NldAkAtQkCBQdvZmZlcklkAgFfBAlsaXN0UHJpY2UJALUJAgUFcHJpY2UCAV8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKb3duZXJPZmZlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWxpc3RQcmljZQAACQDZBAEJAJEDAgUJbGlzdEFzc2V0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKb3duZXJPZmZlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWxpc3RQcmljZQABBQR1bml0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCHByaWNlS2V5AQUHb2ZmZXJJZAIEU3dhcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQhvd25lcktleQEFB29mZmVySWQCBFN3YXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEJaXNzdWVyS2V5AQUHb2ZmZXJJZAIEU3dhcAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlefGC/OQ=", "height": 2310859, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FNriYGb4pRehpjCUDKqf44gCWpGx6FcfUfU39ZL6KoAR Next: ENBy7Jsp7aU3nrrqEjVnSuaFoxbYNwWUqvPTxZzAGkgf Diff:
OldNewDifferences
2020
2121
2222 func assetOffer (asset) = (asset + "_offer")
23+
24+
25+func assetOfferSwap (asset) = (asset + "_offer")
2326
2427
2528 func tryGetInteger (key) = {
248251
249252 $f3_2($f3_1($f3_1($acc0, 0), 1), 2)
250253 }
251-[StringEntry(priceKey(paymentAll), price), StringEntry(ownerKey(paymentAll), toBase58String(i.caller.bytes)), StringEntry(issuerKey(paymentAll), issuer), StringEntry(assetOffer(paymentAll), assetIdPrice)]
254+[StringEntry((priceKey(paymentAll) + "Swap"), price), StringEntry((ownerKey(paymentAll) + "Swap"), toBase58String(i.caller.bytes)), StringEntry((issuerKey(paymentAll) + "Swap"), issuer), StringEntry((assetOffer(paymentAll) + "Swap"), assetIdPrice)]
252255 }
253256 }
254257
324327 else {
325328 let listAsset = split(offerId, "_")
326329 let listPrice = split(price, "_")
327-[ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[0]), fromBase58String(listAsset[0])), ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[1]), unit), DeleteEntry(priceKey(offerId)), DeleteEntry(ownerKey(offerId)), DeleteEntry(issuerKey(offerId))]
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"))]
328331 }
329332 }
330333
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")
23+
24+
25+func assetOfferSwap (asset) = (asset + "_offer")
2326
2427
2528 func tryGetInteger (key) = {
2629 let val = match getInteger(this, key) {
2730 case b: Int =>
2831 b
2932 case _ =>
3033 0
3134 }
3235 val
3336 }
3437
3538
3639 func tryGetString (key) = {
3740 let val = match getString(this, key) {
3841 case b: String =>
3942 b
4043 case _ =>
4144 ""
4245 }
4346 val
4447 }
4548
4649
4750 func tryGetBool (key) = {
4851 let val = match getBoolean(this, key) {
4952 case b: Boolean =>
5053 b
5154 case _ =>
5255 false
5356 }
5457 val
5558 }
5659
5760
5861 func isPaymentOk (i,acceptableAssetId,price) = if ((size(i.payments) == 0))
5962 then throw("Payment not attached")
6063 else {
6164 let p = value(i.payments[0])
6265 let val = match p.assetId {
6366 case assetId: ByteVector =>
6467 if ((toBase58String(assetId) == acceptableAssetId))
6568 then (p.amount >= price)
6669 else false
6770 case waves: Unit =>
6871 (p.amount >= price)
6972 case _ =>
7073 throw("Match error")
7174 }
7275 val
7376 }
7477
7578
7679 func isAcceptableNft (status,assetSale) = {
7780 let idAsset = match assetSale.assetId {
7881 case b: ByteVector =>
7982 b
8083 case b: Unit =>
8184 base58'2CsAf'
8285 case _ =>
8386 throw("Match error")
8487 }
8588 let asset = match assetInfo(idAsset) {
8689 case b: Asset =>
8790 toBase58String(b.issuer.bytes)
8891 case waves: Unit =>
8992 "WAVES"
9093 case _ =>
9194 throw("Match error")
9295 }
9396 if (tryGetBool(asset))
9497 then status
9598 else false
9699 }
97100
98101
99102 func getAssetId (status,assetSale) = {
100103 let idAsset = match assetSale.assetId {
101104 case b: ByteVector =>
102105 toBase58String(b)
103106 case b: Unit =>
104107 "WAVES"
105108 case _ =>
106109 throw("Match error")
107110 }
108111 ((status + "_") + idAsset)
109112 }
110113
111114
112115 func getAssetPrice (status,assetSale) = {
113116 let price = toString(assetSale.amount)
114117 ((status + "_") + price)
115118 }
116119
117120
118121 func getAssetIssuer (status,assetSale) = {
119122 let idAsset = match assetSale.assetId {
120123 case b: ByteVector =>
121124 b
122125 case b: Unit =>
123126 base58'2CsAf'
124127 case _ =>
125128 throw("Match error")
126129 }
127130 let issuer = match assetInfo(idAsset) {
128131 case b: Asset =>
129132 toBase58String(b.issuer.bytes)
130133 case b: Unit =>
131134 "WAVES"
132135 case _ =>
133136 throw("Match error")
134137 }
135138 ((status + "_") + issuer)
136139 }
137140
138141
139142 func getTransferAsset (status,data) = {
140143 let transferAddress = match addressFromString(data._1) {
141144 case b: Address =>
142145 b
143146 case b: Unit =>
144147 this
145148 case _ =>
146149 throw("Match error")
147150 }
148151 if ((data._3 != "WAVES"))
149152 then (status :+ ScriptTransfer(transferAddress, data._2, fromBase58String(data._3)))
150153 else (status :+ ScriptTransfer(transferAddress, data._2, unit))
151154 }
152155
153156
154157 @Callable(i)
155158 func offerForSale (assetIdPrice,price) = if (!(if (tryGetBool(assetAccess(assetIdPrice)))
156159 then (price > 0)
157160 else false))
158161 then throw("Sale Asset incorrect")
159162 else {
160163 let firstPayment = value(i.payments[0])
161164 let assetId = match firstPayment.assetId {
162165 case id: ByteVector =>
163166 id
164167 case w: Unit =>
165168 throw("Asset is not NFT")
166169 case _ =>
167170 throw("Match error")
168171 }
169172 let assetIdStr = toBase58String(assetId)
170173 let asset = match assetInfo(assetId) {
171174 case a: Asset =>
172175 a
173176 case _ =>
174177 throw("Error getting information about asset")
175178 }
176179 if (if (if ((asset.quantity != 1))
177180 then (asset.decimals != 0)
178181 else false)
179182 then asset.reissuable
180183 else false)
181184 then throw("Asset is not NFT")
182185 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)]
183186 }
184187
185188
186189
187190 @Callable(i)
188191 func offerForSwap (assetIdPrice) = {
189192 let countPay = size(i.payments)
190193 let status = {
191194 let $l = i.payments
192195 let $s = size($l)
193196 let $acc0 = true
194197 func $f0_1 ($a,$i) = if (($i >= $s))
195198 then $a
196199 else isAcceptableNft($a, $l[$i])
197200
198201 func $f0_2 ($a,$i) = if (($i >= $s))
199202 then $a
200203 else throw("List size exceeds 2")
201204
202205 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
203206 }
204207 if (!(status))
205208 then throw("Payments incorrect")
206209 else if ((tryGetInteger("commission") > i.payments[1].amount))
207210 then throw("No minimum commission")
208211 else {
209212 let paymentAll = {
210213 let $l = i.payments
211214 let $s = size($l)
212215 let $acc0 = ""
213216 func $f1_1 ($a,$i) = if (($i >= $s))
214217 then $a
215218 else getAssetId($a, $l[$i])
216219
217220 func $f1_2 ($a,$i) = if (($i >= $s))
218221 then $a
219222 else throw("List size exceeds 2")
220223
221224 $f1_2($f1_1($f1_1($acc0, 0), 1), 2)
222225 }
223226 let issuer = {
224227 let $l = i.payments
225228 let $s = size($l)
226229 let $acc0 = ""
227230 func $f2_1 ($a,$i) = if (($i >= $s))
228231 then $a
229232 else getAssetIssuer($a, $l[$i])
230233
231234 func $f2_2 ($a,$i) = if (($i >= $s))
232235 then $a
233236 else throw("List size exceeds 2")
234237
235238 $f2_2($f2_1($f2_1($acc0, 0), 1), 2)
236239 }
237240 let price = {
238241 let $l = i.payments
239242 let $s = size($l)
240243 let $acc0 = ""
241244 func $f3_1 ($a,$i) = if (($i >= $s))
242245 then $a
243246 else getAssetPrice($a, $l[$i])
244247
245248 func $f3_2 ($a,$i) = if (($i >= $s))
246249 then $a
247250 else throw("List size exceeds 2")
248251
249252 $f3_2($f3_1($f3_1($acc0, 0), 1), 2)
250253 }
251-[StringEntry(priceKey(paymentAll), price), StringEntry(ownerKey(paymentAll), toBase58String(i.caller.bytes)), StringEntry(issuerKey(paymentAll), issuer), StringEntry(assetOffer(paymentAll), assetIdPrice)]
254+[StringEntry((priceKey(paymentAll) + "Swap"), price), StringEntry((ownerKey(paymentAll) + "Swap"), toBase58String(i.caller.bytes)), StringEntry((issuerKey(paymentAll) + "Swap"), issuer), StringEntry((assetOffer(paymentAll) + "Swap"), assetIdPrice)]
252255 }
253256 }
254257
255258
256259
257260 @Callable(i)
258261 func buy (assetStr) = {
259262 let price = tryGetInteger(priceKey(assetStr))
260263 let acceptableAssetId = tryGetString(assetOffer(assetStr))
261264 let ownerStr = tryGetString(ownerKey(assetStr))
262265 let owner = match addressFromString(ownerStr) {
263266 case a: Address =>
264267 a
265268 case _ =>
266269 throw("Address parsing error")
267270 }
268271 if (!(isPaymentOk(i, acceptableAssetId, price)))
269272 then throw("Wrong payment amount or asset")
270273 else if ((ownerStr == toBase58String(i.caller.bytes)))
271274 then throw("Owner cannot buy his NTF")
272275 else if ((price == 0))
273276 then throw("This NFT is not for sale")
274277 else {
275278 let fee = ((price / 100) * 5)
276279 [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))]
277280 }
278281 }
279282
280283
281284
282285 @Callable(i)
283286 func swapDone (offerId) = {
284287 let price = tryGetString(priceKey(offerId))
285288 let offer = tryGetString(assetOffer(offerId))
286289 let ownerOffer = tryGetString(ownerKey(offerId))
287290 let ownerNft = tryGetString(ownerKey(offerId))
288291 if ((ownerNft != toBase58String(i.caller.bytes)))
289292 then throw("The calling address is not the owner of the NFT token")
290293 else if ((price == ""))
291294 then throw("This NFT is not for sale")
292295 else {
293296 let fee = tryGetInteger("commission")
294297 let listAsset = split(offerId, "_")
295298 let listPrice = split(price, "_")
296299 [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))]
297300 }
298301 }
299302
300303
301304
302305 @Callable(i)
303306 func cancelSelling (assetStr) = {
304307 let ownerStr = tryGetString(ownerKey(assetStr))
305308 let owner = match addressFromString(ownerStr) {
306309 case a: Address =>
307310 a
308311 case _ =>
309312 throw("Address parsing error")
310313 }
311314 if ((ownerStr != toBase58String(i.caller.bytes)))
312315 then throw("The calling address is not the owner of the NFT token")
313316 else [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr)), DeleteEntry(issuerKey(assetStr)), DeleteEntry(nameKey(assetStr)), DeleteEntry(descriptionKey(assetStr))]
314317 }
315318
316319
317320
318321 @Callable(i)
319322 func swapCancel (offerId) = {
320323 let ownerOffer = tryGetString(ownerKey(offerId))
321324 let price = tryGetString(priceKey(offerId))
322325 if ((ownerOffer != toBase58String(i.caller.bytes)))
323326 then throw("The calling address is not the owner of the NFT token")
324327 else {
325328 let listAsset = split(offerId, "_")
326329 let listPrice = split(price, "_")
327-[ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[0]), fromBase58String(listAsset[0])), ScriptTransfer(addressFromStringValue(ownerOffer), parseIntValue(listPrice[1]), unit), DeleteEntry(priceKey(offerId)), DeleteEntry(ownerKey(offerId)), DeleteEntry(issuerKey(offerId))]
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"))]
328331 }
329332 }
330333
331334
332335 @Verifier(tx)
333336 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
334337

github/deemru/w8io/873ac7e 
49.41 ms