tx · 6PaV3oCQCt4Tgh2BoysEtraes3fFmaD4dxYnhCwGyeGt

3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X:  -0.00800000 Waves

2022.11.11 16:25 [2312546] smart account 3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X > SELF 0.00000000 Waves

{ "type": 13, "id": "6PaV3oCQCt4Tgh2BoysEtraes3fFmaD4dxYnhCwGyeGt", "fee": 800000, "feeAssetId": null, "timestamp": 1668173198810, "version": 2, "chainId": 84, "sender": "3N8VMRDjjw6kAuCviYwFq4yDWyctRuHPN7X", "senderPublicKey": "SrcQexq2T9cnMXmLqfJtc8AnQ91ZjeaJtXoi1HwDsx9", "proofs": [ "637rvUftATgUhTSbE3pT2pGUrZ8WhEW1ADbDpEWwy3btVceWwuNbxxTQCEtXnAXktBeUrSmkrhQcGLaix5WykAsV" ], "script": "base64:BgIhCAISBAoCCAESAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEQEIcHJpY2VLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgZfcHJpY2UBCG93bmVyS2V5AQVhc3NldAkArAICBQVhc3NldAIGX293bmVyAQlpc3N1ZXJLZXkBBWFzc2V0CQCsAgIFBWFzc2V0AgdfaXNzdWVyAQduYW1lS2V5AQVhc3NldAkArAICBQVhc3NldAIFX25hbWUBDmRlc2NyaXB0aW9uS2V5AQVhc3NldAkArAICBQVhc3NldAIMX2Rlc2NyaXB0aW9uAQthc3NldEFjY2VzcwEFYXNzZXQJAKwCAgUFYXNzZXQCCV9hc3NldEJ1eQEKYXNzZXRPZmZlcgEFYXNzZXQJAKwCAgUFYXNzZXQCBl9vZmZlcgEOYXNzZXRPZmZlclN3YXABBWFzc2V0CQCsAgIFBWFzc2V0AgZfb2ZmZXIBDXRyeUdldEludGVnZXIBA2tleQQDdmFsBAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAUDdmFsAQx0cnlHZXRTdHJpbmcBA2tleQQDdmFsBAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAUDdmFsAQp0cnlHZXRCb29sAQNrZXkEA3ZhbAQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcFA3ZhbAELaXNQYXltZW50T2sDAWkRYWNjZXB0YWJsZUFzc2V0SWQFcHJpY2UDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUUGF5bWVudCBub3QgYXR0YWNoZWQEAXAJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQDdmFsBAckbWF0Y2gwCAUBcAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDADCQAAAgkA2AQBBQdhc3NldElkBRFhY2NlcHRhYmxlQXNzZXRJZAkAZwIIBQFwBmFtb3VudAUFcHJpY2UHAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCQBnAggFAXAGYW1vdW50BQVwcmljZQkAAgECC01hdGNoIGVycm9yBQN2YWwBD2lzQWNjZXB0YWJsZU5mdAIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2lkQXNzZXQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWIFByRtYXRjaDAJANgEAQgIBQFiBmlzc3VlcgVieXRlcwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgMJAQp0cnlHZXRCb29sAQUFYXNzZXQFBnN0YXR1cwcBCmdldEFzc2V0SWQCBnN0YXR1cwlhc3NldFNhbGUEB2lkQXNzZXQEByRtYXRjaDAIBQlhc3NldFNhbGUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUHaWRBc3NldAENZ2V0QXNzZXRQcmljZQIGc3RhdHVzCWFzc2V0U2FsZQQFcHJpY2UJAKQDAQgFCWFzc2V0U2FsZQZhbW91bnQJAKwCAgkArAICBQZzdGF0dXMCAV8FBXByaWNlAQ5nZXRBc3NldElzc3VlcgIGc3RhdHVzCWFzc2V0U2FsZQQHaWRBc3NldAQHJG1hdGNoMAgFCWFzc2V0U2FsZQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAED0AAACQACAQILTWF0Y2ggZXJyb3IEBmlzc3VlcgQHJG1hdGNoMAkA7AcBBQdpZEFzc2V0AwkAAQIFByRtYXRjaDACBUFzc2V0BAFiBQckbWF0Y2gwCQDYBAEICAUBYgZpc3N1ZXIFYnl0ZXMDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgkArAICCQCsAgIFBnN0YXR1cwIBXwUGaXNzdWVyARBnZXRUcmFuc2ZlckFzc2V0AgZzdGF0dXMEZGF0YQQPdHJhbnNmZXJBZGRyZXNzBAckbWF0Y2gwCQCmCAEIBQRkYXRhAl8xAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWIFByRtYXRjaDAFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAUEdGhpcwkAAgECC01hdGNoIGVycm9yAwkBAiE9AggFBGRhdGECXzMCBVdBVkVTCQDNCAIFBnN0YXR1cwkBDlNjcmlwdFRyYW5zZmVyAwUPdHJhbnNmZXJBZGRyZXNzCAUEZGF0YQJfMgkA2QQBCAUEZGF0YQJfMwkAzQgCBQZzdGF0dXMJAQ5TY3JpcHRUcmFuc2ZlcgMFD3RyYW5zZmVyQWRkcmVzcwgFBGRhdGECXzIFBHVuaXQGAWkBDG9mZmVyRm9yU2FsZQIMYXNzZXRJZFByaWNlBXByaWNlAwkBASEBAwkBCnRyeUdldEJvb2wBCQELYXNzZXRBY2Nlc3MBBQxhc3NldElkUHJpY2UJAGYCBQVwcmljZQAABwkAAgECFFNhbGUgQXNzZXQgaW5jb3JyZWN0BAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAQHJG1hdGNoMAgFDGZpcnN0UGF5bWVudAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAF3BQckbWF0Y2gwCQACAQIQQXNzZXQgaXMgbm90IE5GVAkAAgECC01hdGNoIGVycm9yBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEBWFzc2V0BAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAFAWEJAAIBAiVFcnJvciBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGFzc2V0AwMDCQECIT0CCAUFYXNzZXQIcXVhbnRpdHkAAQkBAiE9AggFBWFzc2V0CGRlY2ltYWxzAAAHCAUFYXNzZXQKcmVpc3N1YWJsZQcJAAIBAhBBc3NldCBpcyBub3QgTkZUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEIcHJpY2VLZXkBBQphc3NldElkU3RyBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEIb3duZXJLZXkBBQphc3NldElkU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWlzc3VlcktleQEFCmFzc2V0SWRTdHIJANgEAQgIBQVhc3NldAZpc3N1ZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB25hbWVLZXkBBQphc3NldElkU3RyCAUFYXNzZXQEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEOZGVzY3JpcHRpb25LZXkBBQphc3NldElkU3RyCAUFYXNzZXQLZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmFzc2V0T2ZmZXIBBQphc3NldElkU3RyBQxhc3NldElkUHJpY2UFA25pbAFpAQxvZmZlckZvclN3YXABDGFzc2V0SWRQcmljZQQGc3RhdHVzCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAYKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2lzQWNjZXB0YWJsZU5mdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIDCQEBIQEFBnN0YXR1cwkAAgECElBheW1lbnRzIGluY29ycmVjdAMJAGYCCQENdHJ5R2V0SW50ZWdlcgECCmNvbW1pc3Npb24ICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50CQACAQIVTm8gbWluaW11bSBjb21taXNzaW9uBApwYXltZW50QWxsCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAIEU3dhcAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZ2V0QXNzZXRJZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIEBmlzc3VlcgoAAiRsCAUBaQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACBFN3YXAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDmdldEFzc2V0SXNzdWVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAyCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgQFcHJpY2UKAAIkbAgFAWkIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgRTd2FwCgEFJGYzXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1nZXRBc3NldFByaWNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYzXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAyCQEFJGYzXzICCQEFJGYzXzECCQEFJGYzXzECBQUkYWNjMAAAAAEAAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQhwcmljZUtleQEFCnBheW1lbnRBbGwCBFN3YXAFBXByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCG93bmVyS2V5AQUKcGF5bWVudEFsbAIEU3dhcAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkBCWlzc3VlcktleQEFCnBheW1lbnRBbGwCBFN3YXAFBmlzc3VlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQphc3NldE9mZmVyAQUKcGF5bWVudEFsbAIEU3dhcAUMYXNzZXRJZFByaWNlBQNuaWwBaQEDYnV5AQhhc3NldFN0cgQFcHJpY2UJAQ10cnlHZXRJbnRlZ2VyAQkBCHByaWNlS2V5AQUIYXNzZXRTdHIEEWFjY2VwdGFibGVBc3NldElkCQEMdHJ5R2V0U3RyaW5nAQkBCmFzc2V0T2ZmZXIBBQhhc3NldFN0cgQIb3duZXJTdHIJAQx0cnlHZXRTdHJpbmcBCQEIb3duZXJLZXkBBQhhc3NldFN0cgQFb3duZXIEByRtYXRjaDAJAKYIAQUIb3duZXJTdHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAUBYQkAAgECFUFkZHJlc3MgcGFyc2luZyBlcnJvcgMJAQEhAQkBC2lzUGF5bWVudE9rAwUBaQURYWNjZXB0YWJsZUFzc2V0SWQFBXByaWNlCQACAQIdV3JvbmcgcGF5bWVudCBhbW91bnQgb3IgYXNzZXQDCQAAAgUIb3duZXJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAAgECGE93bmVyIGNhbm5vdCBidXkgaGlzIE5URgMJAAACBQVwcmljZQAACQACAQIYVGhpcyBORlQgaXMgbm90IGZvciBzYWxlBANmZWUJAGgCCQBpAgUFcHJpY2UAZAAFCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFCGFzc2V0U3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBW93bmVyCQBlAgUFcHJpY2UFA2ZlZQUEdW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQEIcHJpY2VLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEIb3duZXJLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEJaXNzdWVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB25hbWVLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEOZGVzY3JpcHRpb25LZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEKYXNzZXRPZmZlcgEFCGFzc2V0U3RyBQNuaWwBaQEIc3dhcERvbmUBB29mZmVySWQEBXByaWNlCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIcHJpY2VLZXkBBQdvZmZlcklkAgRTd2FwBAVvZmZlcgkBDHRyeUdldFN0cmluZwEJAKwCAgkBCmFzc2V0T2ZmZXIBBQdvZmZlcklkAgRTd2FwBApvd25lck9mZmVyCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIb3duZXJLZXkBBQdvZmZlcklkAgRTd2FwBAhvd25lck5mdAkBDHRyeUdldFN0cmluZwEJAQhvd25lcktleQEFBW9mZmVyBAxlcnJvckFkZHJlc3MEByRtYXRjaDAJAKYIAQUIb3duZXJOZnQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAUBYQkAAgECGFRoaXMgTkZUIGlzIG5vdCBmb3Igc2FsZQQMb2ZmZXJPbkFzc2V0CQEMdHJ5R2V0U3RyaW5nAQkArAICCQEKYXNzZXRPZmZlcgEFB29mZmVySWQCBFN3YXADCQECIT0CBQhvd25lck5mdAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQI1VGhlIGNhbGxpbmcgYWRkcmVzcyBpcyBub3QgdGhlIG93bmVyIG9mIHRoZSBORlQgdG9rZW4EA2ZlZQkBDXRyeUdldEludGVnZXIBAgpjb21taXNzaW9uBAlsaXN0QXNzZXQJALUJAgUHb2ZmZXJJZAIBXwQJbGlzdFByaWNlCQC1CQIFBXByaWNlAgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG93bmVyTmZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJbGlzdFByaWNlAAEJANkEAQkAkQMCBQlsaXN0QXNzZXQAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQhvd25lck5mdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlsaXN0UHJpY2UAAgUDZmVlBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCm93bmVyT2ZmZXIAAQkA2QQBBQxvZmZlck9uQXNzZXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCHByaWNlS2V5AQUMb2ZmZXJPbkFzc2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQhvd25lcktleQEFDG9mZmVyT25Bc3NldAkAzAgCCQELRGVsZXRlRW50cnkBCQEJaXNzdWVyS2V5AQUMb2ZmZXJPbkFzc2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQduYW1lS2V5AQUMb2ZmZXJPbkFzc2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQphc3NldE9mZmVyAQUMb2ZmZXJPbkFzc2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5kZXNjcmlwdGlvbktleQEFDG9mZmVyT25Bc3NldAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQhwcmljZUtleQEFB29mZmVySWQCBFN3YXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEIb3duZXJLZXkBBQdvZmZlcklkAgRTd2FwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCWlzc3VlcktleQEFB29mZmVySWQCBFN3YXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEKYXNzZXRPZmZlcgEFB29mZmVySWQCBFN3YXAFA25pbAFpAQ1jYW5jZWxTZWxsaW5nAQhhc3NldFN0cgQIb3duZXJTdHIJAQx0cnlHZXRTdHJpbmcBCQEIb3duZXJLZXkBBQhhc3NldFN0cgQFb3duZXIEByRtYXRjaDAJAKYIAQUIb3duZXJTdHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAUBYQkAAgECFUFkZHJlc3MgcGFyc2luZyBlcnJvcgMJAQIhPQIFCG93bmVyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAAIBAjVUaGUgY2FsbGluZyBhZGRyZXNzIGlzIG5vdCB0aGUgb3duZXIgb2YgdGhlIE5GVCB0b2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEIcHJpY2VLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEIb3duZXJLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEJaXNzdWVyS2V5AQUIYXNzZXRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB25hbWVLZXkBBQhhc3NldFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEOZGVzY3JpcHRpb25LZXkBBQhhc3NldFN0cgUDbmlsAWkBCnN3YXBDYW5jZWwBB29mZmVySWQECm93bmVyT2ZmZXIJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAQhvd25lcktleQEFB29mZmVySWQCBFN3YXAEBXByaWNlCQEMdHJ5R2V0U3RyaW5nAQkArAICCQEIcHJpY2VLZXkBBQdvZmZlcklkAgRTd2FwAwkBAiE9AgUKb3duZXJPZmZlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQI1VGhlIGNhbGxpbmcgYWRkcmVzcyBpcyBub3QgdGhlIG93bmVyIG9mIHRoZSBORlQgdG9rZW4ECWxpc3RBc3NldAkAtQkCBQdvZmZlcklkAgFfBAlsaXN0UHJpY2UJALUJAgUFcHJpY2UCAV8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKb3duZXJPZmZlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWxpc3RQcmljZQABCQDZBAEJAJEDAgUJbGlzdEFzc2V0AAEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKb3duZXJPZmZlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWxpc3RQcmljZQACBQR1bml0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkBCHByaWNlS2V5AQUHb2ZmZXJJZAIEU3dhcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQhvd25lcktleQEFB29mZmVySWQCBFN3YXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQEJaXNzdWVyS2V5AQUHb2ZmZXJJZAIEU3dhcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAQphc3NldE9mZmVyAQUHb2ZmZXJJZAIEU3dhcAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlefyuyts=", "height": 2312546, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EN7aMR9m1tb7xZf67xxJUv5nKUnzEJ9oYuQW31FF1hEs Next: DAzxxT7y6e3FHgfsW4KwhQai7mtuSCg2yzsDaT3mGhS9 Diff:
OldNewDifferences
189189
190190 @Callable(i)
191191 func offerForSwap (assetIdPrice) = {
192- let countPay = size(i.payments)
193192 let status = {
194193 let $l = i.payments
195194 let $s = size($l)
288287 let offer = tryGetString((assetOffer(offerId) + "Swap"))
289288 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
290289 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+ }
291296 let offerOnAsset = tryGetString((assetOffer(offerId) + "Swap"))
292297 if ((ownerNft != toBase58String(i.caller.bytes)))
293298 then throw("The calling address is not the owner of the NFT token")
294- else if ((price == ""))
295- then throw("This NFT is not for sale")
296- else {
297- let fee = tryGetInteger("commission")
298- let listAsset = split(offerId, "_")
299- let listPrice = split(price, "_")
300-[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(descriptionKey(offerOnAsset)), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap"))]
301- }
299+ else {
300+ let fee = tryGetInteger("commission")
301+ let listAsset = split(offerId, "_")
302+ let listPrice = split(price, "_")
303+[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+ }
302305 }
303306
304307
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) = {
192- let countPay = size(i.payments)
193192 let status = {
194193 let $l = i.payments
195194 let $s = size($l)
196195 let $acc0 = true
197196 func $f0_1 ($a,$i) = if (($i >= $s))
198197 then $a
199198 else isAcceptableNft($a, $l[$i])
200199
201200 func $f0_2 ($a,$i) = if (($i >= $s))
202201 then $a
203202 else throw("List size exceeds 2")
204203
205204 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
206205 }
207206 if (!(status))
208207 then throw("Payments incorrect")
209208 else if ((tryGetInteger("commission") > i.payments[1].amount))
210209 then throw("No minimum commission")
211210 else {
212211 let paymentAll = {
213212 let $l = i.payments
214213 let $s = size($l)
215214 let $acc0 = "Swap"
216215 func $f1_1 ($a,$i) = if (($i >= $s))
217216 then $a
218217 else getAssetId($a, $l[$i])
219218
220219 func $f1_2 ($a,$i) = if (($i >= $s))
221220 then $a
222221 else throw("List size exceeds 2")
223222
224223 $f1_2($f1_1($f1_1($acc0, 0), 1), 2)
225224 }
226225 let issuer = {
227226 let $l = i.payments
228227 let $s = size($l)
229228 let $acc0 = "Swap"
230229 func $f2_1 ($a,$i) = if (($i >= $s))
231230 then $a
232231 else getAssetIssuer($a, $l[$i])
233232
234233 func $f2_2 ($a,$i) = if (($i >= $s))
235234 then $a
236235 else throw("List size exceeds 2")
237236
238237 $f2_2($f2_1($f2_1($acc0, 0), 1), 2)
239238 }
240239 let price = {
241240 let $l = i.payments
242241 let $s = size($l)
243242 let $acc0 = "Swap"
244243 func $f3_1 ($a,$i) = if (($i >= $s))
245244 then $a
246245 else getAssetPrice($a, $l[$i])
247246
248247 func $f3_2 ($a,$i) = if (($i >= $s))
249248 then $a
250249 else throw("List size exceeds 2")
251250
252251 $f3_2($f3_1($f3_1($acc0, 0), 1), 2)
253252 }
254253 [StringEntry((priceKey(paymentAll) + "Swap"), price), StringEntry((ownerKey(paymentAll) + "Swap"), toBase58String(i.caller.bytes)), StringEntry((issuerKey(paymentAll) + "Swap"), issuer), StringEntry((assetOffer(paymentAll) + "Swap"), assetIdPrice)]
255254 }
256255 }
257256
258257
259258
260259 @Callable(i)
261260 func buy (assetStr) = {
262261 let price = tryGetInteger(priceKey(assetStr))
263262 let acceptableAssetId = tryGetString(assetOffer(assetStr))
264263 let ownerStr = tryGetString(ownerKey(assetStr))
265264 let owner = match addressFromString(ownerStr) {
266265 case a: Address =>
267266 a
268267 case _ =>
269268 throw("Address parsing error")
270269 }
271270 if (!(isPaymentOk(i, acceptableAssetId, price)))
272271 then throw("Wrong payment amount or asset")
273272 else if ((ownerStr == toBase58String(i.caller.bytes)))
274273 then throw("Owner cannot buy his NTF")
275274 else if ((price == 0))
276275 then throw("This NFT is not for sale")
277276 else {
278277 let fee = ((price / 100) * 5)
279278 [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))]
280279 }
281280 }
282281
283282
284283
285284 @Callable(i)
286285 func swapDone (offerId) = {
287286 let price = tryGetString((priceKey(offerId) + "Swap"))
288287 let offer = tryGetString((assetOffer(offerId) + "Swap"))
289288 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
290289 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+ }
291296 let offerOnAsset = tryGetString((assetOffer(offerId) + "Swap"))
292297 if ((ownerNft != toBase58String(i.caller.bytes)))
293298 then throw("The calling address is not the owner of the NFT token")
294- else if ((price == ""))
295- then throw("This NFT is not for sale")
296- else {
297- let fee = tryGetInteger("commission")
298- let listAsset = split(offerId, "_")
299- let listPrice = split(price, "_")
300-[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(descriptionKey(offerOnAsset)), DeleteEntry((priceKey(offerId) + "Swap")), DeleteEntry((ownerKey(offerId) + "Swap")), DeleteEntry((issuerKey(offerId) + "Swap"))]
301- }
299+ else {
300+ let fee = tryGetInteger("commission")
301+ let listAsset = split(offerId, "_")
302+ let listPrice = split(price, "_")
303+[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+ }
302305 }
303306
304307
305308
306309 @Callable(i)
307310 func cancelSelling (assetStr) = {
308311 let ownerStr = tryGetString(ownerKey(assetStr))
309312 let owner = match addressFromString(ownerStr) {
310313 case a: Address =>
311314 a
312315 case _ =>
313316 throw("Address parsing error")
314317 }
315318 if ((ownerStr != toBase58String(i.caller.bytes)))
316319 then throw("The calling address is not the owner of the NFT token")
317320 else [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr)), DeleteEntry(issuerKey(assetStr)), DeleteEntry(nameKey(assetStr)), DeleteEntry(descriptionKey(assetStr))]
318321 }
319322
320323
321324
322325 @Callable(i)
323326 func swapCancel (offerId) = {
324327 let ownerOffer = tryGetString((ownerKey(offerId) + "Swap"))
325328 let price = tryGetString((priceKey(offerId) + "Swap"))
326329 if ((ownerOffer != toBase58String(i.caller.bytes)))
327330 then throw("The calling address is not the owner of the NFT token")
328331 else {
329332 let listAsset = split(offerId, "_")
330333 let listPrice = split(price, "_")
331334 [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"))]
332335 }
333336 }
334337
335338
336339 @Verifier(tx)
337340 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
338341

github/deemru/w8io/169f3d6 
41.39 ms