tx · J2Zgg1HDZU9vvoMKk8ZX3M5HpFy2eV7pcSZ9XxkLXCvz

3N7KPSUwpMgvDEVGw1DYBnKDiixSQUXhn2P:  -0.50000000 Waves

2022.11.29 12:47 [2338226] smart account 3N7KPSUwpMgvDEVGw1DYBnKDiixSQUXhn2P > SELF 0.00000000 Waves

{ "type": 13, "id": "J2Zgg1HDZU9vvoMKk8ZX3M5HpFy2eV7pcSZ9XxkLXCvz", "fee": 50000000, "feeAssetId": null, "timestamp": 1669715086042, "version": 2, "chainId": 84, "sender": "3N7KPSUwpMgvDEVGw1DYBnKDiixSQUXhn2P", "senderPublicKey": "BTvXQMmkgSf57dbcqWxpEvbi3ZYcEeWFkkXDZC6FrneM", "proofs": [ "2rtvS9svjyQCv2jaeGibkSiig1P2VRn65WvGZky4K3tRDVJohw8BkAQwhdEe8mpLW4gwYxff7MxTf45HL6Ef7LrN" ], "script": "base64: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ZXBhcmF0b3IJAAIBAiFNYXggbnVtYmVyIG9mIHBhcmFtZXRlcnMgZXhjZWVkZWQBDnBhcnNlQXNBdWN0aW9uAQdkZXRhaWxzBANyZXMJALUJAgUHZGV0YWlscwUJc2VwYXJhdG9yCQCXCgUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUDcmVzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNyZXMAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA3JlcwACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDcmVzAAMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNyZXMABAELcGFyc2VBc1NlbGwBB2RldGFpbHMEA3JlcwkAtQkCBQdkZXRhaWxzBQlzZXBhcmF0b3IJAJQKAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQNyZXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA3JlcwABAQpqb2luU3RydWN0AQZwYXJhbXMEByRtYXRjaDAFBnBhcmFtcwMJAAECBQckbWF0Y2gwAh4oQWRkcmVzcywgSW50LCBTdHJpbmcsIFN0cmluZykEB2F1Y3Rpb24FByRtYXRjaDAJAQpqb2luU3RyaW5nAQkAzAgCCQClCAEIBQdhdWN0aW9uAl8xCQDMCAIJAKQDAQgFB2F1Y3Rpb24CXzIJAMwIAggFB2F1Y3Rpb24CXzMJAMwIAggFB2F1Y3Rpb24CXzQFA25pbAMJAAECBQckbWF0Y2gwAg4oQWRkcmVzcywgSW50KQQEc2VsbAUHJG1hdGNoMAkBCmpvaW5TdHJpbmcBCQDMCAIJAKUIAQgFBHNlbGwCXzEJAMwIAgkApAMBCAUEc2VsbAJfMgUDbmlsCQACAQITV3JvbmcgcGFyYW1zIHR1cHBsZQEKc2V0QXVjdGlvbgUGc2VsbGVyBW5mdElkCnN0YXJ0UHJpY2UFc3RhcnQDZW5kCQELU3RyaW5nRW50cnkCCQENZ2V0QXVjdGlvbktleQEFBW5mdElkCQEKam9pblN0cnVjdAEJAJYKBAUGc2VsbGVyBQpzdGFydFByaWNlBQVzdGFydAUDZW5kAQdzZXRTZWxsAwVuZnRJZAZjZWxsZXIFcHJpY2UJAQtTdHJpbmdFbnRyeQIJAQpnZXRTZWxsS2V5AQUFbmZ0SWQJAQpqb2luU3RydWN0AQkAlAoCBQZjZWxsZXIFBXByaWNlAQpnZXRBdWN0aW9uAQVuZnRJZAkBBXZhbHVlAQkAnQgCBQR0aGlzCQENZ2V0QXVjdGlvbktleQEFBW5mdElkAQdnZXRTZWxsAQVuZnRJZAkBBXZhbHVlAQkAnQgCBQR0aGlzCQEKZ2V0U2VsbEtleQEFBW5mdElkARhjYWxjUHJpY2VBdEN1cnJlbnRNb21lbnQCB2Fzc2V0SWQGbW9tZW50BAdkZXRhaWxzCQEKZ2V0QXVjdGlvbgEFB2Fzc2V0SWQECyR0MDI3NTUyODU5CQEOcGFyc2VBc0F1Y3Rpb24BBQdkZXRhaWxzBAZzZWxsZXIIBQskdDAyNzU1Mjg1OQJfMQQPc3RhcnRQcmljZVZhbHVlCAULJHQwMjc1NTI4NTkCXzIEDWVuZFByaWNlVmFsdWUIBQskdDAyNzU1Mjg1OQJfMwQQc3RhcnRQZXJpb2RWYWx1ZQgFCyR0MDI3NTUyODU5Al80BA5lbmRQZXJpb2RWYWx1ZQgFCyR0MDI3NTUyODU5Al81AwkAZwIFBm1vbWVudAUOZW5kUGVyaW9kVmFsdWUJAJQKAgUGc2VsbGVyBQ1lbmRQcmljZVZhbHVlBApkZWx0YVByaWNlCQBlAgUPc3RhcnRQcmljZVZhbHVlBQ1lbmRQcmljZVZhbHVlBAZwZXJpb2QJAGUCBQ5lbmRQZXJpb2RWYWx1ZQUQc3RhcnRQZXJpb2RWYWx1ZQQHc3BlbmRlZAkAZQIFBm1vbWVudAUQc3RhcnRQZXJpb2RWYWx1ZQkAlAoCBQZzZWxsZXIJAGUCBQ9zdGFydFByaWNlVmFsdWUJAGsDBQdzcGVuZGVkBQpkZWx0YVByaWNlBQZwZXJpb2QBBWlzTmZ0AQdhc3NldElkBAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBXRva2VuBQckbWF0Y2gwAwMJAAACCAUFdG9rZW4IZGVjaW1hbHMAAAkAAAIIBQV0b2tlbghxdWFudGl0eQABBwkAAAIIBQV0b2tlbgpyZWlzc3VhYmxlBwcHAQxpc1RydXN0ZWROZnQBB2Fzc2V0SWQEBmlzc3VlcggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBDWdldFRydXN0ZWRLZXkBBQZpc3N1ZXIHAQtpc1NlbGxFeGlzdAEHYXNzZXRJZAkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBCmdldFNlbGxLZXkBBQdhc3NldElkAQ5pc0F1Y3Rpb25FeGlzdAEHYXNzZXRJZAkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBDWdldEF1Y3Rpb25LZXkBBQdhc3NldElkARJpc0NvcnJlY3RTZWxsUHJpY2UBBXByaWNlCQBmAgUFcHJpY2UAAAEWaXNDb3JyZWN0QXVjdGlvblByaWNlcwIKc3RhcnRQcmljZQhlbmRQcmljZQkAZgIFCnN0YXJ0UHJpY2UFCGVuZFByaWNlAQdpc0FkbWluAQZjYWxsZXIJAAACBQZjYWxsZXIFBHRoaXMBDWlzVmFsaWRDYWxsZXICBmNhbGxlcgZzZWxsZXIDCQAAAgUGY2FsbGVyBQR0aGlzBgkAAAIFBmNhbGxlcgUGc2VsbGVyAQ5pc0F1Y3Rpb25FbmRlZAIDbm93A2VuZAkAZgIFA25vdwUDZW5kAQ1pc0Vub3VnaEZ1bmRzAgdwYXltZW50EmN1cnJlbnRNb21lbnRQcmljZQkAZwIFB3BheW1lbnQFEmN1cnJlbnRNb21lbnRQcmljZQEHaXNXYXdlcwEHYXNzZXRJZAkAAAIFB2Fzc2V0SWQFBHVuaXQBDGlzQ29ycmVjdE5mdAEFbmZ0SWQDCQEBIQEJAQVpc05mdAEFBW5mdElkCQACAQIQVG9rZW4gaXMgbm90IE5mdAMJAQtpc1NlbGxFeGlzdAEFBW5mdElkCQACAQITU2VsbCBhbHJlYWR5IGV4aXN0cwMJAQ5pc0F1Y3Rpb25FeGlzdAEFBW5mdElkCQACAQIWQXVjdGlvbiBhbHJlYWR5IGV4aXN0cwUEdW5pdAERaXNDb3JyZWN0UGF5bWVudHMDDHBheW1lbnRBc3NldA1wYXltZW50QW1vdW50BXByaWNlAwkBASEBCQEHaXNXYXdlcwEFDHBheW1lbnRBc3NldAkAAgECGFBheW1lbnQgbXVzdCBiZSBhdCBXQVZFUwMJAQEhAQkBDWlzRW5vdWdoRnVuZHMCBQ1wYXltZW50QW1vdW50BQVwcmljZQkAAgECEE5vdCBlbm91Z2ggZnVuZHMFBHVuaXQBB2NhbGNGZWUAAAABDmNhbGNUcnVzdGVkRmVlAAAAARJyZXN1bHRGdW5kc0Ftb3VudHMDCWlzVHJ1c3RlZA1wYXltZW50QW1vdW50C2FjdHVhbFByaWNlAwUJaXNUcnVzdGVkCQCUCgIJAGUCBQthY3R1YWxQcmljZQkBDmNhbGNUcnVzdGVkRmVlAAkAZQIFDXBheW1lbnRBbW91bnQFC2FjdHVhbFByaWNlCQCUCgIJAGUCBQthY3R1YWxQcmljZQkBB2NhbGNGZWUACQBlAgUNcGF5bWVudEFtb3VudAULYWN0dWFsUHJpY2UBB2dldFNsb3QBBW5mdElkAwkBC2lzU2VsbEV4aXN0AQUFbmZ0SWQJAJQKAgUFa1NlbGwJAQdnZXRTZWxsAQUFbmZ0SWQDCQEOaXNBdWN0aW9uRXhpc3QBBQVuZnRJZAkAlAoCBQhrQXVjdGlvbgkBCmdldEF1Y3Rpb24BBQVuZnRJZAkAAgECElNsb3QgZG9lc25gdCBleGlzdAAEa0J1eQIDYnV5CgFpAQljcmVhdGVORlQJCG5mdF9uYW1lCW5mdF9vd25lcg9uZnRfZEFwcEFkZHJlc3MIbmZ0X3R5cGUIbmZ0X3RhZ3MRbmZ0X3NlbGxpbmdfcHJpY2UPbmZ0X2Rlc2NyaXB0aW9uCm5mdF9vblNlbGwIbmZ0X2RhdGEECG5ld1Rva2VuCQDCCAUFCG5mdF9uYW1lBQ9uZnRfZGVzY3JpcHRpb24AAQAABwQHaXNzdWVJZAkAuAgBBQhuZXdUb2tlbgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCBQhuZXdUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHaXNzdWVJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICBU93bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90eXBlBQhuZnRfdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90YWdzBQhuZnRfdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICD25mdF9kQXBwQWRkcmVzcwUPbmZ0X2RBcHBBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICEW5mdF9zZWxsaW5nX3ByaWNlBRFuZnRfc2VsbGluZ19wcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCm5mdF9vblNlbGwFCm5mdF9vblNlbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfZGF0YQUIbmZ0X2RhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUEdHhJZAUJc2VwYXJhdG9yAglpc3N1ZV9uZnQJANgEAQUHaXNzdWVJZAUDbmlsAWkBCGlzc3VlTmZ0AgRuYW1lBG1ldGEECG5ld1Rva2VuCQDCCAUFBG5hbWUFBG1ldGEAAQAABwQHaXNzdWVJZAkAuAgBBQhuZXdUb2tlbgkAzAgCBQhuZXdUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHaXNzdWVJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICBU93bmVyCQClCAEIBQFpBmNhbGxlcgUDbmlsAWkBBmJ1eU5GVAEFbmZ0SUQEB2Fzc2V0SWQJANkEAQUFbmZ0SUQEBmFtb3VudAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEBXByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yBQVuZnRJRAIeVGhlcmUgaXMgbm8gcHJpY2UgZm9yIHRoaXMgTkZUBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgIFT3duZXICCE5vIG93bmVyAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0CQACAQIMUGF5IGluIHdhdmVzAwkAZgIJAQ1wYXJzZUludFZhbHVlAQUFcHJpY2UFBmFtb3VudAkAAgECD0ludmFsaWQgcGF5bWVudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEFdmFsdWUBCQCmCAEFBW93bmVyCQENcGFyc2VJbnRWYWx1ZQEFBXByaWNlBQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQFA25pbAFpAQdzZWxsTkZUAQVwcmljZQQLJHQwNzM0MTc0MjYJAJQKAgkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQGdG9rZW4wCAULJHQwNzM0MTc0MjYCXzEEB2Ftb3VudDAIBQskdDA3MzQxNzQyNgJfMgMJAQEhAQkBBWlzTmZ0AQUGdG9rZW4wCQACAQIQVG9rZW4gaXMgbm90IE5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCkAwEFBXByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQVrU2VsbAkArAICCQCsAgIJANgEAQUGdG9rZW4wBQlzZXBhcmF0b3IJAKQDAQUHYW1vdW50MAUDbmlsAWkBB2FkZFNlbGwBBXByaWNlBAVuZnRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQELdmFsdWVPckVsc2UCCQEMaXNDb3JyZWN0TmZ0AQUFbmZ0SWQDCQEBIQEJARJpc0NvcnJlY3RTZWxsUHJpY2UBBQVwcmljZQkAAgECEVByaWNlIG11c3QgYmUgPiAwCQDMCAIJAQdzZXRTZWxsAwUFbmZ0SWQIBQFpBmNhbGxlcgUFcHJpY2UFA25pbAFpAQphZGRBdWN0aW9uAwpzdGFydFByaWNlBXN0YXJ0A2VuZAQFbmZ0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkBDGlzQ29ycmVjdE5mdAEFBW5mdElkCQDMCAIJAQpzZXRBdWN0aW9uBQgFAWkGY2FsbGVyBQVuZnRJZAUKc3RhcnRQcmljZQUFc3RhcnQFA2VuZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQVuZnRJZAUJc2VwYXJhdG9yAgluZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwBaQELYnV5RnJvbVNsb3QBBW5mdElkBAskdDA4MzQ2ODQzNQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAxwYXltZW50QXNzZXQIBQskdDA4MzQ2ODQzNQJfMQQNcGF5bWVudEFtb3VudAgFCyR0MDgzNDY4NDM1Al8yBAdhc3NldElkCQDZBAEFBW5mdElkBAskdDA4NDc5ODUxNwkBB2dldFNsb3QBBQdhc3NldElkBAR0eXBlCAULJHQwODQ3OTg1MTcCXzEEB2RldGFpbHMIBQskdDA4NDc5ODUxNwJfMgQHYmFzZVJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEKZ2V0U2xvdEtleQIFBHR5cGUFB2Fzc2V0SWQFA25pbAMJAAACBQR0eXBlBQVrU2VsbAQLJHQwODY1OTg3MDYJAQtwYXJzZUFzU2VsbAEFB2RldGFpbHMEBnNlbGxlcggFCyR0MDg2NTk4NzA2Al8xBApwcmljZVZhbHVlCAULJHQwODY1OTg3MDYCXzIJAQt2YWx1ZU9yRWxzZQIJARFpc0NvcnJlY3RQYXltZW50cwMFDHBheW1lbnRBc3NldAUNcGF5bWVudEFtb3VudAUKcHJpY2VWYWx1ZQQLJHQwODc5MTg4OTMJARJyZXN1bHRGdW5kc0Ftb3VudHMDCQEMaXNUcnVzdGVkTmZ0AQUHYXNzZXRJZAUNcGF5bWVudEFtb3VudAUKcHJpY2VWYWx1ZQQMc2VsbGVyQW1vdW50CAULJHQwODc5MTg4OTMCXzEEC2J1eWVyQW1vdW50CAULJHQwODc5MTg4OTMCXzIECnVwZGF0ZWRSZXMJAM4IAgUHYmFzZVJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZzZWxsZXIFDHNlbGxlckFtb3VudAUEdW5pdAUDbmlsAwkAZgIFC2J1eWVyQW1vdW50AAAJAM4IAgUKdXBkYXRlZFJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2J1eWVyQW1vdW50BQR1bml0BQNuaWwFCnVwZGF0ZWRSZXMECyR0MDkxMTA5MTc5CQEYY2FsY1ByaWNlQXRDdXJyZW50TW9tZW50AgUHYXNzZXRJZAUGaGVpZ2h0BAZzZWxsZXIIBQskdDA5MTEwOTE3OQJfMQQLYWN0dWFsUHJpY2UIBQskdDA5MTEwOTE3OQJfMgkBC3ZhbHVlT3JFbHNlAgkBEWlzQ29ycmVjdFBheW1lbnRzAwUMcGF5bWVudEFzc2V0BQ1wYXltZW50QW1vdW50BQthY3R1YWxQcmljZQQLJHQwOTI2NTkzNjgJARJyZXN1bHRGdW5kc0Ftb3VudHMDCQEMaXNUcnVzdGVkTmZ0AQUHYXNzZXRJZAUNcGF5bWVudEFtb3VudAULYWN0dWFsUHJpY2UEDHNlbGxlckFtb3VudAgFCyR0MDkyNjU5MzY4Al8xBAtidXllckFtb3VudAgFCyR0MDkyNjU5MzY4Al8yBAp1cGRhdGVkUmVzCQDOCAIFB2Jhc2VSZXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGc2VsbGVyBQxzZWxsZXJBbW91bnQFBHVuaXQFA25pbAMJAGYCBQtidXllckFtb3VudAAACQDOCAIFCnVwZGF0ZWRSZXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtidXllckFtb3VudAUEdW5pdAUDbmlsBQp1cGRhdGVkUmVzAWkBC2RlY2xpbmVTbG90AQVuZnRJZAQHYXNzZXRJZAkA2QQBBQVuZnRJZAQLJHQwOTY2OTk3MDcJAQdnZXRTbG90AQUHYXNzZXRJZAQEdHlwZQgFCyR0MDk2Njk5NzA3Al8xBAdkZXRhaWxzCAULJHQwOTY2OTk3MDcCXzIEB2Jhc2VSZXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmdldFNsb3RLZXkCBQR0eXBlBQdhc3NldElkBQNuaWwDCQAAAgUEdHlwZQUFa1NlbGwECyR0MDk3OTk5ODQ2CQELcGFyc2VBc1NlbGwBBQdkZXRhaWxzBAZzZWxsZXIIBQskdDA5Nzk5OTg0NgJfMQQKcHJpY2VWYWx1ZQgFCyR0MDk3OTk5ODQ2Al8yAwkBASEBCQENaXNWYWxpZENhbGxlcgIIBQFpBmNhbGxlcgUGc2VsbGVyCQACAQIOSW52YWxpZCBjYWxsZXIJAM4IAgUHYmFzZVJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZzZWxsZXIAAQUHYXNzZXRJZAUDbmlsBAwkdDA5OTkxMTAwOTUJAQ5wYXJzZUFzQXVjdGlvbgEFB2RldGFpbHMEBnNlbGxlcggFDCR0MDk5OTExMDA5NQJfMQQPc3RhcnRQcmljZVZhbHVlCAUMJHQwOTk5MTEwMDk1Al8yBA1lbmRQcmljZVZhbHVlCAUMJHQwOTk5MTEwMDk1Al8zBBBzdGFydFBlcmlvZFZhbHVlCAUMJHQwOTk5MTEwMDk1Al80BA5lbmRQZXJpb2RWYWx1ZQgFDCR0MDk5OTExMDA5NQJfNQMJAQEhAQkBDWlzVmFsaWRDYWxsZXICCAUBaQZjYWxsZXIFBnNlbGxlcgkAAgECDkludmFsaWQgY2FsbGVyAwkBASEBCQEOaXNBdWN0aW9uRW5kZWQCBQZoZWlnaHQFDmVuZFBlcmlvZFZhbHVlCQACAQIXV2FpdCBmb3IgZW5kIG9mIGF1Y3Rpb24JAM4IAgUHYmFzZVJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZzZWxsZXIAAQUHYXNzZXRJZAUDbmlsAWkBEHNldFRydXN0ZWRJc3N1ZXIBC3RydXN0ZWRBZGRyAwkBASEBCQEHaXNBZG1pbgEIBQFpBmNhbGxlcgkAAgECCk9ubHkgYWRtaW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ1nZXRUcnVzdGVkS2V5AQkBEUBleHRyTmF0aXZlKDEwNjIpAQULdHJ1c3RlZEFkZHIGBQNuaWwBaQEXZ2V0UHJpY2VBdEN1cnJlbnRNb21lbnQCBW5mdElkBm1vbWVudAQHYXNzZXRJZAkA2QQBBQVuZnRJZAQNJHQwMTA2MzYxMDY5OQkBGGNhbGNQcmljZUF0Q3VycmVudE1vbWVudAIFB2Fzc2V0SWQFBm1vbWVudAQGc2VsbGVyCAUNJHQwMTA2MzYxMDY5OQJfMQQFcHJpY2UIBQ0kdDAxMDYzNjEwNjk5Al8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELZ2V0UHJpY2VLZXkBBQdhc3NldElkBQVwcmljZQUDbmlsAG3a/hQ=", "height": 2338226, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8ZkooeGEoC3iGNdGZqnxgRkJvqhwwXAzkX17bbyyhAAM Next: BBNt8wqWCwKVh2NsTVKiVUcZzAWhpZRTWERJpfseC44c Full:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let separator = "_"
5+
6+let kAuction = "auction"
7+
8+let kSell = "sell"
9+
10+let kTrusted = "trusted"
11+
12+let kPrice = "price"
13+
14+func getSlotKey (prefix,nftId) = ((prefix + separator) + toBase58String(nftId))
15+
16+
17+func getPriceKey (nftId) = ((kPrice + separator) + toBase58String(nftId))
18+
19+
20+func getSellKey (nftId) = ((kSell + separator) + toBase58String(nftId))
21+
22+
23+func getAuctionKey (nftId) = ((kAuction + separator) + toBase58String(nftId))
24+
25+
26+func getTrustedKey (issuer) = ((kTrusted + separator) + toString(issuer))
27+
28+
29+func addToList (accum,nextValue) = (accum ++ [nextValue])
30+
31+
32+func joinString (params) = {
33+ let length = size(params)
34+ if ((length == 0))
35+ then throw("Empty params")
36+ else if ((length == 1))
37+ then makeString({
38+ let $l = params
39+ let $s = size($l)
40+ let $acc0 = nil
41+ func $f0_1 ($a,$i) = if (($i >= $s))
42+ then $a
43+ else addToList($a, $l[$i])
44+
45+ func $f0_2 ($a,$i) = if (($i >= $s))
46+ then $a
47+ else throw("List size exceeds 1")
48+
49+ $f0_2($f0_1($acc0, 0), 1)
50+ }, separator)
51+ else if ((length == 2))
52+ then makeString({
53+ let $l = params
54+ let $s = size($l)
55+ let $acc0 = nil
56+ func $f0_1 ($a,$i) = if (($i >= $s))
57+ then $a
58+ else addToList($a, $l[$i])
59+
60+ func $f0_2 ($a,$i) = if (($i >= $s))
61+ then $a
62+ else throw("List size exceeds 2")
63+
64+ $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
65+ }, separator)
66+ else if ((length == 3))
67+ then makeString({
68+ let $l = params
69+ let $s = size($l)
70+ let $acc0 = nil
71+ func $f0_1 ($a,$i) = if (($i >= $s))
72+ then $a
73+ else addToList($a, $l[$i])
74+
75+ func $f0_2 ($a,$i) = if (($i >= $s))
76+ then $a
77+ else throw("List size exceeds 3")
78+
79+ $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
80+ }, separator)
81+ else if ((length == 4))
82+ then makeString({
83+ let $l = params
84+ let $s = size($l)
85+ let $acc0 = nil
86+ func $f0_1 ($a,$i) = if (($i >= $s))
87+ then $a
88+ else addToList($a, $l[$i])
89+
90+ func $f0_2 ($a,$i) = if (($i >= $s))
91+ then $a
92+ else throw("List size exceeds 4")
93+
94+ $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
95+ }, separator)
96+ else if ((length == 5))
97+ then makeString({
98+ let $l = params
99+ let $s = size($l)
100+ let $acc0 = nil
101+ func $f0_1 ($a,$i) = if (($i >= $s))
102+ then $a
103+ else addToList($a, $l[$i])
104+
105+ func $f0_2 ($a,$i) = if (($i >= $s))
106+ then $a
107+ else throw("List size exceeds 5")
108+
109+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
110+ }, separator)
111+ else throw("Max number of parameters exceeded")
112+ }
113+
114+
115+func parseAsAuction (details) = {
116+ let res = split(details, separator)
117+ $Tuple5(addressFromStringValue(res[0]), parseIntValue(res[1]), parseIntValue(res[2]), parseIntValue(res[3]), parseIntValue(res[4]))
118+ }
119+
120+
121+func parseAsSell (details) = {
122+ let res = split(details, separator)
123+ $Tuple2(addressFromStringValue(res[0]), parseIntValue(res[1]))
124+ }
125+
126+
127+func joinStruct (params) = match params {
128+ case auction: (Address, Int, String, String) =>
129+ joinString([toString(auction._1), toString(auction._2), auction._3, auction._4])
130+ case sell: (Address, Int) =>
131+ joinString([toString(sell._1), toString(sell._2)])
132+ case _ =>
133+ throw("Wrong params tupple")
134+}
135+
136+
137+func setAuction (seller,nftId,startPrice,start,end) = StringEntry(getAuctionKey(nftId), joinStruct($Tuple4(seller, startPrice, start, end)))
138+
139+
140+func setSell (nftId,celler,price) = StringEntry(getSellKey(nftId), joinStruct($Tuple2(celler, price)))
141+
142+
143+func getAuction (nftId) = value(getString(this, getAuctionKey(nftId)))
144+
145+
146+func getSell (nftId) = value(getString(this, getSellKey(nftId)))
147+
148+
149+func calcPriceAtCurrentMoment (assetId,moment) = {
150+ let details = getAuction(assetId)
151+ let $t027552859 = parseAsAuction(details)
152+ let seller = $t027552859._1
153+ let startPriceValue = $t027552859._2
154+ let endPriceValue = $t027552859._3
155+ let startPeriodValue = $t027552859._4
156+ let endPeriodValue = $t027552859._5
157+ if ((moment >= endPeriodValue))
158+ then $Tuple2(seller, endPriceValue)
159+ else {
160+ let deltaPrice = (startPriceValue - endPriceValue)
161+ let period = (endPeriodValue - startPeriodValue)
162+ let spended = (moment - startPeriodValue)
163+ $Tuple2(seller, (startPriceValue - fraction(spended, deltaPrice, period)))
164+ }
165+ }
166+
167+
168+func isNft (assetId) = match assetInfo(assetId) {
169+ case token: Asset =>
170+ if (if ((token.decimals == 0))
171+ then (token.quantity == 1)
172+ else false)
173+ then (token.reissuable == false)
174+ else false
175+ case _ =>
176+ false
177+}
178+
179+
180+func isTrustedNft (assetId) = {
181+ let issuer = value(assetInfo(assetId)).issuer
182+ valueOrElse(getBoolean(this, getTrustedKey(issuer)), false)
183+ }
184+
185+
186+func isSellExist (assetId) = isDefined(getString(this, getSellKey(assetId)))
187+
188+
189+func isAuctionExist (assetId) = isDefined(getString(this, getAuctionKey(assetId)))
190+
191+
192+func isCorrectSellPrice (price) = (price > 0)
193+
194+
195+func isCorrectAuctionPrices (startPrice,endPrice) = (startPrice > endPrice)
196+
197+
198+func isAdmin (caller) = (caller == this)
199+
200+
201+func isValidCaller (caller,seller) = if ((caller == this))
202+ then true
203+ else (caller == seller)
204+
205+
206+func isAuctionEnded (now,end) = (now > end)
207+
208+
209+func isEnoughFunds (payment,currentMomentPrice) = (payment >= currentMomentPrice)
210+
211+
212+func isWawes (assetId) = (assetId == unit)
213+
214+
215+func isCorrectNft (nftId) = if (!(isNft(nftId)))
216+ then throw("Token is not Nft")
217+ else if (isSellExist(nftId))
218+ then throw("Sell already exists")
219+ else if (isAuctionExist(nftId))
220+ then throw("Auction already exists")
221+ else unit
222+
223+
224+func isCorrectPayments (paymentAsset,paymentAmount,price) = if (!(isWawes(paymentAsset)))
225+ then throw("Payment must be at WAVES")
226+ else if (!(isEnoughFunds(paymentAmount, price)))
227+ then throw("Not enough funds")
228+ else unit
229+
230+
231+func calcFee () = 0
232+
233+
234+func calcTrustedFee () = 0
235+
236+
237+func resultFundsAmounts (isTrusted,paymentAmount,actualPrice) = if (isTrusted)
238+ then $Tuple2((actualPrice - calcTrustedFee()), (paymentAmount - actualPrice))
239+ else $Tuple2((actualPrice - calcFee()), (paymentAmount - actualPrice))
240+
241+
242+func getSlot (nftId) = if (isSellExist(nftId))
243+ then $Tuple2(kSell, getSell(nftId))
244+ else if (isAuctionExist(nftId))
245+ then $Tuple2(kAuction, getAuction(nftId))
246+ else throw("Slot doesn`t exist")
247+
248+
249+let kBuy = "buy"
250+
251+@Callable(i)
252+func createNFT (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
253+ let newToken = Issue(nft_name, nft_description, 1, 0, false)
254+ let issueId = calculateAssetId(newToken)
255+ let txId = i.transactionId
256+[newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller)), StringEntry(((toBase58String(issueId) + separator) + "nft_type"), nft_type), StringEntry(((toBase58String(issueId) + separator) + "nft_tags"), nft_tags), StringEntry(((toBase58String(issueId) + separator) + "nft_dAppAddress"), nft_dAppAddress), IntegerEntry(((toBase58String(issueId) + separator) + "nft_selling_price"), nft_selling_price), StringEntry(((toBase58String(issueId) + separator) + "nft_onSell"), nft_onSell), StringEntry(((toBase58String(issueId) + separator) + "nft_data"), nft_data), StringEntry(((toBase58String(txId) + separator) + "issue_nft"), toBase58String(issueId))]
257+ }
258+
4259
5260
6261 @Callable(i)
7-func sellart (artId,Price,maxMint,assetId,BlockEnd) = {
8- let nftId = toBase58String(i.transactionId)
9- WriteSet([DataEntry((nftId + "_organizer"), toBase58String(i.caller.bytes)), DataEntry((nftId + "_startPrice"), Price), DataEntry((nftId + "_priceAssetId"), assetId), DataEntry((nftId + "_maxMintnft"), maxMint), DataEntry((nftId + "_BlockEnd"), BlockEnd)])
262+func issueNft (name,meta) = {
263+ let newToken = Issue(name, meta, 1, 0, false)
264+ let issueId = calculateAssetId(newToken)
265+[newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller))]
10266 }
11267
12268
13-@Verifier(tx)
14-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
269+
270+@Callable(i)
271+func buyNFT (nftID) = {
272+ let assetId = fromBase58String(nftID)
273+ let amount = value(i.payments[0].amount)
274+ let price = valueOrErrorMessage(getString(((kPrice + separator) + nftID)), "There is no price for this NFT")
275+ let owner = valueOrErrorMessage(getStringValue(((nftID + separator) + "Owner")), "No owner")
276+ if ((i.payments[0].assetId != unit))
277+ then throw("Pay in waves")
278+ else if ((parseIntValue(price) > amount))
279+ then throw("Invalid payment")
280+ else [ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(value(addressFromString(owner)), parseIntValue(price), unit), StringEntry(((toString(i.caller) + separator) + kBuy), ((nftID + separator) + toString(amount)))]
281+ }
282+
283+
284+
285+@Callable(i)
286+func sellNFT (price) = {
287+ let $t073417426 = $Tuple2(value(i.payments[0].assetId), value(i.payments[0].amount))
288+ let token0 = $t073417426._1
289+ let amount0 = $t073417426._2
290+ if (!(isNft(token0)))
291+ then throw("Token is not NFT")
292+ else [StringEntry(((kPrice + separator) + toBase58String(value(i.payments[0].assetId))), toString(price)), StringEntry(((toString(i.caller) + separator) + kSell), ((toBase58String(token0) + separator) + toString(amount0)))]
293+ }
294+
295+
296+
297+@Callable(i)
298+func addSell (price) = {
299+ let nftId = value(i.payments[0].assetId)
300+ valueOrElse(isCorrectNft(nftId), if (!(isCorrectSellPrice(price)))
301+ then throw("Price must be > 0")
302+ else [setSell(nftId, i.caller, price)])
303+ }
304+
305+
306+
307+@Callable(i)
308+func addAuction (startPrice,start,end) = {
309+ let nftId = value(i.payments[0].assetId)
310+ valueOrElse(isCorrectNft(nftId), [setAuction(i.caller, nftId, startPrice, start, end), StringEntry(((toBase58String(nftId) + separator) + "nft_owner"), toString(i.caller))])
311+ }
312+
313+
314+
315+@Callable(i)
316+func buyFromSlot (nftId) = {
317+ let $t083468435 = $Tuple2(i.payments[0].assetId, value(i.payments[0].amount))
318+ let paymentAsset = $t083468435._1
319+ let paymentAmount = $t083468435._2
320+ let assetId = fromBase58String(nftId)
321+ let $t084798517 = getSlot(assetId)
322+ let type = $t084798517._1
323+ let details = $t084798517._2
324+ let baseRes = [ScriptTransfer(i.caller, 1, assetId), DeleteEntry(getSlotKey(type, assetId))]
325+ if ((type == kSell))
326+ then {
327+ let $t086598706 = parseAsSell(details)
328+ let seller = $t086598706._1
329+ let priceValue = $t086598706._2
330+ valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, priceValue), {
331+ let $t087918893 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, priceValue)
332+ let sellerAmount = $t087918893._1
333+ let buyerAmount = $t087918893._2
334+ let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)])
335+ if ((buyerAmount > 0))
336+ then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)])
337+ else updatedRes
338+ })
339+ }
340+ else {
341+ let $t091109179 = calcPriceAtCurrentMoment(assetId, height)
342+ let seller = $t091109179._1
343+ let actualPrice = $t091109179._2
344+ valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, actualPrice), {
345+ let $t092659368 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, actualPrice)
346+ let sellerAmount = $t092659368._1
347+ let buyerAmount = $t092659368._2
348+ let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)])
349+ if ((buyerAmount > 0))
350+ then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)])
351+ else updatedRes
352+ })
353+ }
354+ }
355+
356+
357+
358+@Callable(i)
359+func declineSlot (nftId) = {
360+ let assetId = fromBase58String(nftId)
361+ let $t096699707 = getSlot(assetId)
362+ let type = $t096699707._1
363+ let details = $t096699707._2
364+ let baseRes = [DeleteEntry(getSlotKey(type, assetId))]
365+ if ((type == kSell))
366+ then {
367+ let $t097999846 = parseAsSell(details)
368+ let seller = $t097999846._1
369+ let priceValue = $t097999846._2
370+ if (!(isValidCaller(i.caller, seller)))
371+ then throw("Invalid caller")
372+ else (baseRes ++ [ScriptTransfer(seller, 1, assetId)])
373+ }
374+ else {
375+ let $t0999110095 = parseAsAuction(details)
376+ let seller = $t0999110095._1
377+ let startPriceValue = $t0999110095._2
378+ let endPriceValue = $t0999110095._3
379+ let startPeriodValue = $t0999110095._4
380+ let endPeriodValue = $t0999110095._5
381+ if (!(isValidCaller(i.caller, seller)))
382+ then throw("Invalid caller")
383+ else if (!(isAuctionEnded(height, endPeriodValue)))
384+ then throw("Wait for end of auction")
385+ else (baseRes ++ [ScriptTransfer(seller, 1, assetId)])
386+ }
387+ }
388+
389+
390+
391+@Callable(i)
392+func setTrustedIssuer (trustedAddr) = if (!(isAdmin(i.caller)))
393+ then throw("Only admin")
394+ else [BooleanEntry(getTrustedKey(addressFromStringValue(trustedAddr)), true)]
395+
396+
397+
398+@Callable(i)
399+func getPriceAtCurrentMoment (nftId,moment) = {
400+ let assetId = fromBase58String(nftId)
401+ let $t01063610699 = calcPriceAtCurrentMoment(assetId, moment)
402+ let seller = $t01063610699._1
403+ let price = $t01063610699._2
404+[IntegerEntry(getPriceKey(assetId), price)]
405+ }
406+
15407

github/deemru/w8io/169f3d6 
32.79 ms