tx · BBNt8wqWCwKVh2NsTVKiVUcZzAWhpZRTWERJpfseC44c

3N7KPSUwpMgvDEVGw1DYBnKDiixSQUXhn2P:  -0.10000000 Waves

2022.12.06 08:42 [2348075] smart account 3N7KPSUwpMgvDEVGw1DYBnKDiixSQUXhn2P > SELF 0.00000000 Waves

{ "type": 13, "id": "BBNt8wqWCwKVh2NsTVKiVUcZzAWhpZRTWERJpfseC44c", "fee": 10000000, "feeAssetId": null, "timestamp": 1670305396255, "version": 2, "chainId": 84, "sender": "3N7KPSUwpMgvDEVGw1DYBnKDiixSQUXhn2P", "senderPublicKey": "BTvXQMmkgSf57dbcqWxpEvbi3ZYcEeWFkkXDZC6FrneM", "proofs": [ "jzhdVFbPekHK7m8P7cFSMrsiqrZDXi4a18ssK7XLX6npDiKRdL1hmFzef6hueTLUhaSZ6vrFPPGgTFDNwTZ3p4s" ], "script": "base64:BgJACAISCwoJCAgICAgBCAgIEgMKAQESBAoCCAgSBgoECAgICBIGCgQICAgIEgUKAwgICBIDCgEIEgMKAQgSAwoBCCkACXNlcGFyYXRvcgIBXwAIa0F1Y3Rpb24CB2F1Y3Rpb24ABWtTZWxsAgRzZWxsAAhrVHJ1c3RlZAIHdHJ1c3RlZAAGa1ByaWNlAgVwcmljZQEKZ2V0U2xvdEtleQIGcHJlZml4BW5mdElkCQCsAgIJAKwCAgUGcHJlZml4BQlzZXBhcmF0b3IJANgEAQUFbmZ0SWQBC2dldFByaWNlS2V5AQVuZnRJZAkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yCQDYBAEFBW5mdElkAQpnZXRTZWxsS2V5AQVuZnRJZAkArAICCQCsAgIFBWtTZWxsBQlzZXBhcmF0b3IJANgEAQUFbmZ0SWQBDWdldEF1Y3Rpb25LZXkBBW5mdElkCQCsAgIJAKwCAgUIa0F1Y3Rpb24FCXNlcGFyYXRvcgkA2AQBBQVuZnRJZAENZ2V0VHJ1c3RlZEtleQEGaXNzdWVyCQCsAgIJAKwCAgUIa1RydXN0ZWQFCXNlcGFyYXRvcgkApQgBBQZpc3N1ZXIBCWFkZFRvTGlzdAIFYWNjdW0JbmV4dFZhbHVlCQDOCAIFBWFjY3VtCQDMCAIFCW5leHRWYWx1ZQUDbmlsAQpqb2luU3RyaW5nAQZwYXJhbXMEBmxlbmd0aAkAkAMBBQZwYXJhbXMDCQAAAgUGbGVuZ3RoAAAJAAIBAg1FbXB0eSAgcGFyYW1zAwkAAAIFBmxlbmd0aAABCQC5CQIKAAIkbAUGcGFyYW1zCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlhZGRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDEJAQUkZjBfMgIJAQUkZjBfMQIFBSRhY2MwAAAAAQUJc2VwYXJhdG9yAwkAAAIFBmxlbmd0aAACCQC5CQIKAAIkbAUGcGFyYW1zCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlhZGRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACBQlzZXBhcmF0b3IDCQAAAgUGbGVuZ3RoAAMJALkJAgoAAiRsBQZwYXJhbXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWFkZFRvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwUJc2VwYXJhdG9yAwkAAAIFBmxlbmd0aAAECQC5CQIKAAIkbAUGcGFyYW1zCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlhZGRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDQJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAUJc2VwYXJhdG9yAwkAAAIFBmxlbmd0aAAFCQC5CQIKAAIkbAUGcGFyYW1zCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlhZGRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBQlzZXBhcmF0b3IJAAIBAiFNYXggbnVtYmVyIG9mIHBhcmFtZXRlcnMgZXhjZWVkZWQBDnBhcnNlQXNBdWN0aW9uAQdkZXRhaWxzBANyZXMJALUJAgUHZGV0YWlscwUJc2VwYXJhdG9yCQCXCgUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUDcmVzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNyZXMAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA3JlcwACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDcmVzAAMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNyZXMABAELcGFyc2VBc1NlbGwBB2RldGFpbHMEA3JlcwkAtQkCBQdkZXRhaWxzBQlzZXBhcmF0b3IJAJQKAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQNyZXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA3JlcwABAQpqb2luU3RydWN0AQZwYXJhbXMEByRtYXRjaDAFBnBhcmFtcwMJAAECBQckbWF0Y2gwAh4oQWRkcmVzcywgSW50LCBTdHJpbmcsIFN0cmluZykEB2F1Y3Rpb24FByRtYXRjaDAJAQpqb2luU3RyaW5nAQkAzAgCCQClCAEIBQdhdWN0aW9uAl8xCQDMCAIJAKQDAQgFB2F1Y3Rpb24CXzIJAMwIAggFB2F1Y3Rpb24CXzMJAMwIAggFB2F1Y3Rpb24CXzQFA25pbAMJAAECBQckbWF0Y2gwAg4oQWRkcmVzcywgSW50KQQEc2VsbAUHJG1hdGNoMAkBCmpvaW5TdHJpbmcBCQDMCAIJAKUIAQgFBHNlbGwCXzEJAMwIAgkApAMBCAUEc2VsbAJfMgUDbmlsCQACAQITV3JvbmcgcGFyYW1zIHR1cHBsZQEKc2V0QXVjdGlvbgUGc2VsbGVyBW5mdElkCnN0YXJ0UHJpY2UFc3RhcnQDZW5kCQELU3RyaW5nRW50cnkCCQENZ2V0QXVjdGlvbktleQEFBW5mdElkCQEKam9pblN0cnVjdAEJAJYKBAUGc2VsbGVyBQpzdGFydFByaWNlBQVzdGFydAUDZW5kAQdzZXRTZWxsAwVuZnRJZAZjZWxsZXIFcHJpY2UJAQtTdHJpbmdFbnRyeQIJAQpnZXRTZWxsS2V5AQUFbmZ0SWQJAQpqb2luU3RydWN0AQkAlAoCBQZjZWxsZXIFBXByaWNlAQpnZXRBdWN0aW9uAQVuZnRJZAkBBXZhbHVlAQkAnQgCBQR0aGlzCQENZ2V0QXVjdGlvbktleQEFBW5mdElkAQdnZXRTZWxsAQVuZnRJZAkBBXZhbHVlAQkAnQgCBQR0aGlzCQEKZ2V0U2VsbEtleQEFBW5mdElkARhjYWxjUHJpY2VBdEN1cnJlbnRNb21lbnQCB2Fzc2V0SWQGbW9tZW50BAdkZXRhaWxzCQEKZ2V0QXVjdGlvbgEFB2Fzc2V0SWQECyR0MDI3NTUyODU5CQEOcGFyc2VBc0F1Y3Rpb24BBQdkZXRhaWxzBAZzZWxsZXIIBQskdDAyNzU1Mjg1OQJfMQQPc3RhcnRQcmljZVZhbHVlCAULJHQwMjc1NTI4NTkCXzIEDWVuZFByaWNlVmFsdWUIBQskdDAyNzU1Mjg1OQJfMwQQc3RhcnRQZXJpb2RWYWx1ZQgFCyR0MDI3NTUyODU5Al80BA5lbmRQZXJpb2RWYWx1ZQgFCyR0MDI3NTUyODU5Al81AwkAZwIFBm1vbWVudAUOZW5kUGVyaW9kVmFsdWUJAJQKAgUGc2VsbGVyBQ1lbmRQcmljZVZhbHVlBApkZWx0YVByaWNlCQBlAgUPc3RhcnRQcmljZVZhbHVlBQ1lbmRQcmljZVZhbHVlBAZwZXJpb2QJAGUCBQ5lbmRQZXJpb2RWYWx1ZQUQc3RhcnRQZXJpb2RWYWx1ZQQHc3BlbmRlZAkAZQIFBm1vbWVudAUQc3RhcnRQZXJpb2RWYWx1ZQkAlAoCBQZzZWxsZXIJAGUCBQ9zdGFydFByaWNlVmFsdWUJAGsDBQdzcGVuZGVkBQpkZWx0YVByaWNlBQZwZXJpb2QBBWlzTmZ0AQdhc3NldElkBAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBXRva2VuBQckbWF0Y2gwAwMJAAACCAUFdG9rZW4IZGVjaW1hbHMAAAkAAAIIBQV0b2tlbghxdWFudGl0eQABBwkAAAIIBQV0b2tlbgpyZWlzc3VhYmxlBwcHAQxpc1RydXN0ZWROZnQBB2Fzc2V0SWQEBmlzc3VlcggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBDWdldFRydXN0ZWRLZXkBBQZpc3N1ZXIHAQtpc1NlbGxFeGlzdAEHYXNzZXRJZAkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBCmdldFNlbGxLZXkBBQdhc3NldElkAQ5pc0F1Y3Rpb25FeGlzdAEHYXNzZXRJZAkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBDWdldEF1Y3Rpb25LZXkBBQdhc3NldElkARJpc0NvcnJlY3RTZWxsUHJpY2UBBXByaWNlCQBmAgUFcHJpY2UAAAEWaXNDb3JyZWN0QXVjdGlvblByaWNlcwIKc3RhcnRQcmljZQhlbmRQcmljZQkAZgIFCnN0YXJ0UHJpY2UFCGVuZFByaWNlAQdpc0FkbWluAQZjYWxsZXIJAAACBQZjYWxsZXIFBHRoaXMBDWlzVmFsaWRDYWxsZXICBmNhbGxlcgZzZWxsZXIDCQAAAgUGY2FsbGVyBQR0aGlzBgkAAAIFBmNhbGxlcgUGc2VsbGVyAQ5pc0F1Y3Rpb25FbmRlZAIDbm93A2VuZAkAZgIFA25vdwUDZW5kAQ1pc0Vub3VnaEZ1bmRzAgdwYXltZW50EmN1cnJlbnRNb21lbnRQcmljZQkAZwIFB3BheW1lbnQFEmN1cnJlbnRNb21lbnRQcmljZQEHaXNXYXdlcwEHYXNzZXRJZAkAAAIFB2Fzc2V0SWQFBHVuaXQBDGlzQ29ycmVjdE5mdAEFbmZ0SWQDCQEBIQEJAQVpc05mdAEFBW5mdElkCQACAQIQVG9rZW4gaXMgbm90IE5mdAMJAQtpc1NlbGxFeGlzdAEFBW5mdElkCQACAQITU2VsbCBhbHJlYWR5IGV4aXN0cwMJAQ5pc0F1Y3Rpb25FeGlzdAEFBW5mdElkCQACAQIWQXVjdGlvbiBhbHJlYWR5IGV4aXN0cwUEdW5pdAERaXNDb3JyZWN0UGF5bWVudHMDDHBheW1lbnRBc3NldA1wYXltZW50QW1vdW50BXByaWNlAwkBASEBCQEHaXNXYXdlcwEFDHBheW1lbnRBc3NldAkAAgECGFBheW1lbnQgbXVzdCBiZSBhdCBXQVZFUwMJAQEhAQkBDWlzRW5vdWdoRnVuZHMCBQ1wYXltZW50QW1vdW50BQVwcmljZQkAAgECEE5vdCBlbm91Z2ggZnVuZHMFBHVuaXQBB2NhbGNGZWUAAAABDmNhbGNUcnVzdGVkRmVlAAAAARJyZXN1bHRGdW5kc0Ftb3VudHMDCWlzVHJ1c3RlZA1wYXltZW50QW1vdW50C2FjdHVhbFByaWNlAwUJaXNUcnVzdGVkCQCUCgIJAGUCBQthY3R1YWxQcmljZQkBDmNhbGNUcnVzdGVkRmVlAAkAZQIFDXBheW1lbnRBbW91bnQFC2FjdHVhbFByaWNlCQCUCgIJAGUCBQthY3R1YWxQcmljZQkBB2NhbGNGZWUACQBlAgUNcGF5bWVudEFtb3VudAULYWN0dWFsUHJpY2UBB2dldFNsb3QBBW5mdElkAwkBC2lzU2VsbEV4aXN0AQUFbmZ0SWQJAJQKAgUFa1NlbGwJAQdnZXRTZWxsAQUFbmZ0SWQDCQEOaXNBdWN0aW9uRXhpc3QBBQVuZnRJZAkAlAoCBQhrQXVjdGlvbgkBCmdldEF1Y3Rpb24BBQVuZnRJZAkAAgECElNsb3QgZG9lc25gdCBleGlzdAAEa0J1eQIDYnV5AARrQmlkAgNiaWQADHN0YXR1c0Zvck5GVAkAlgoEAgRPUEVOAgZDTE9TRUQCCFJFV0FSREVEAghDQU5DRUxFRAALZEFwcEFkZHJlc3MBGgFUSrhPbN7C2pPt9I7pSjb41U9/ldVVW12gCQFpAQljcmVhdGVOZnQJCG5mdF9uYW1lCW5mdF9vd25lcg9uZnRfZEFwcEFkZHJlc3MIbmZ0X3R5cGUIbmZ0X3RhZ3MRbmZ0X3NlbGxpbmdfcHJpY2UPbmZ0X2Rlc2NyaXB0aW9uCm5mdF9vblNlbGwIbmZ0X2RhdGEECG5ld1Rva2VuCQDCCAUFCG5mdF9uYW1lBQ9uZnRfZGVzY3JpcHRpb24AAQAABwQHaXNzdWVJZAkAuAgBBQhuZXdUb2tlbgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCBQhuZXdUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHaXNzdWVJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICBU93bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90eXBlBQhuZnRfdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90YWdzBQhuZnRfdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICD25mdF9kQXBwQWRkcmVzcwUPbmZ0X2RBcHBBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICEW5mdF9zZWxsaW5nX3ByaWNlBRFuZnRfc2VsbGluZ19wcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCm5mdF9vblNlbGwFCm5mdF9vblNlbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfZGF0YQUIbmZ0X2RhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUEdHhJZAUJc2VwYXJhdG9yAglpc3N1ZV9uZnQJANgEAQUHaXNzdWVJZAUDbmlsAWkBB3NlbGxORlQBBXByaWNlBAR0eElkCAUBaQ10cmFuc2FjdGlvbklkBAZzZWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMECyR0MDY2MDU2NjkwCQCUCgIJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEBnRva2VuMAgFCyR0MDY2MDU2NjkwAl8xBAdhbW91bnQwCAULJHQwNjYwNTY2OTACXzIDCQEBIQEJAQVpc05mdAEFBnRva2VuMAkAAgECEFRva2VuIGlzIG5vdCBORlQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yCQDYBAEJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkApAMBBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXIFCXNlcGFyYXRvcgUFa1NlbGwJAKwCAgkArAICCQDYBAEFBnRva2VuMAUJc2VwYXJhdG9yCQCkAwEFB2Ftb3VudDAFA25pbAFpAQZidXlORlQCBW5mdElEEWN1cnJlbnRfbmZ0X293bmVyBAdhc3NldElkCQDZBAEFBW5mdElEBAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBBjaGVja093bmVySXNTYW1lBAckbWF0Y2gwCQCdCAIFBHRoaXMJAKwCAgkArAICAgRuZnRfBRFjdXJyZW50X25mdF9vd25lcgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQcEBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgkArAICCQCsAgIFBmtQcmljZQUJc2VwYXJhdG9yBQVuZnRJRAIBXwURY3VycmVudF9uZnRfb3duZXIEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgVPd25lcgIITm8gb3duZXIDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAAIBAgxQYXkgaW4gd2F2ZXMDCQAAAgUQY2hlY2tPd25lcklzU2FtZQkApQgBCAUBaQZjYWxsZXIJAAIBAiFPd25lciBvZiBORlQgbm90IGFibGUgdG8gcHVyY2hhc2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBW93bmVyBQZhbW91bnQFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBGtCdXkJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yCQCkAwEFBmFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgUDbmlsAWkBCmFkZEF1Y3Rpb24EBXN0YXJ0A2VuZApzdGFydFByaWNlCGR1cmF0aW9uBAR0eElkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEBW5mdElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEBXByaWNlCQEFdmFsdWUBBQpzdGFydFByaWNlBAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEEWNoZWNrTmZ0QXVjdGlvbmVkBAckbWF0Y2gwCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJANgEAQUFbmZ0SWQFCXNlcGFyYXRvcgILbmZ0X3N0YXR1c18JANgEAQUGY2FsbGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAYHAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAAgECEE5GVCBub3QgYXR0YWNoZWQDCQAAAgURY2hlY2tOZnRBdWN0aW9uZWQGCQACAQIXQWxyZWFkeSBpbiBhdWN0aW9uIGxpc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQCGF9uZnRfc3RhcnRfYXVjdGlvbl9kYXRlXwkA2AQBBQZjYWxsZXIFBXN0YXJ0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQR0eElkAhZfbmZ0X2VuZF9hdWN0aW9uX2RhdGVfCQDYBAEFBmNhbGxlcgUDZW5kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX25mdF9zdGFydF9wcmljZQUKc3RhcnRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCE2R1cmF0aW9uX29mX2F1Y3Rpb24FCGR1cmF0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIKX25mdF9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAg9fbmZ0X29uX2F1Y3Rpb24JANgEAQUFbmZ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhBfcHJldmlvdXNfYmlkZGVyAgRub25lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIMX2hpZ2hlc3RfYmlkAgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIOX3dpbm5lcl9vZl9uZnQCATAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAg1fYmlkZGVyX2NvdW50AgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAILX25mdF9zdGF0dXMCBE9QRU4FA25pbAFpAQhwbGFjZUJpZAQJYXVjdGlvbklkBW5mdElkCW5mdF9vd25lcgliaWRfcHJpY2UEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdhc3NldElkCQDZBAEFBW5mdElkBA9jdXJyZW50QmlkUHJpY2UICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBVnZXRMYXN0V2lubmVyQmlkUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQEGGdldFByZXZpb3VzQmlkZGVyQWRkcmVzcwkAnQgCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIQX3ByZXZpb3VzX2JpZGRlcgQPY3VycmVudEJpZENvdW50CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAINX2JpZGRlcl9jb3VudAQUZ2V0TGFzdFdpbm5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAQRY2hlY2tOZnRBdWN0aW9uZWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAAgECDFBheSBpbiB3YXZlcwMJAQIhPQIFEWNoZWNrTmZ0QXVjdGlvbmVkAgRPUEVOCQACAQIUTm90IG9wZW4gZm9yIGF1Y3Rpb24DCQBnAgkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFD2N1cnJlbnRCaWRQcmljZQkAAgECJUJpZCBpcyBsZXNzIHRoZW4gc3RhcnRpbmcvaGlnaGVzdCBCaWQDCQAAAgUVZ2V0TGFzdFdpbm5lckJpZFByaWNlAgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQJAKQDAQUPY3VycmVudEJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgdfbmZ0X2lkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIFCW5mdF9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAkApAMBBQ9jdXJyZW50QmlkUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgdfd2lubmVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIHX25mdF9pZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIKX25mdF9vd25lcgUJbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIPX2JpZF9mb3JfbmZ0X2J5CQDYBAEFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9iaWRfcHJpY2VfcGxhY2UFCWJpZF9wcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCJl9wcmV2aW91c19iaWRfYW1vdW50X3JlZnVuZF90b19hZGRyZXNzBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCG19wcmV2b2l1c19iaWRfYW1vdW50X3JlZnVuZAUVZ2V0TGFzdFdpbm5lckJpZFByaWNlBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAkApAMBBQ9jdXJyZW50QmlkUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCDl93aW5uZXJfb2ZfbmZ0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCDV9iaWRkZXJfY291bnQJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQUPY3VycmVudEJpZENvdW50AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCB19uZnRfaWQJANgEAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIKX25mdF9vd25lcgUJbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkCQCkAwEFD2N1cnJlbnRCaWRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCB193aW5uZXIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCDV9iaWRkZXJfY291bnQJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQUPY3VycmVudEJpZENvdW50AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgdfbmZ0X2lkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgpfbmZ0X293bmVyBQluZnRfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAg9fYmlkX2Zvcl9uZnRfYnkJANgEAQUGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX2JpZF9wcmljZV9wbGFjZQUJYmlkX3ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAImX3ByZXZpb3VzX2JpZF9hbW91bnRfcmVmdW5kX3RvX2FkZHJlc3MFFGdldExhc3RXaW5uZXJBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIbX3ByZXZvaXVzX2JpZF9hbW91bnRfcmVmdW5kBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFFGdldExhc3RXaW5uZXJBZGRyZXNzCQENcGFyc2VJbnRWYWx1ZQEFFWdldExhc3RXaW5uZXJCaWRQcmljZQUEdW5pdAUDbmlsAWkBDmFjY2VwdEJpZE9mZmVyAwlhdWN0aW9uSWQFbmZ0SWQUYmlkX2Ftb3VudF9mcm9tX3VzZXIEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdhc3NldElkCQDZBAEFBW5mdElkBBJnZXROZnRXaW5uaW5nUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQEEGdldEF1Y3Rpb25XaW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBBRJnZXROZnRXaW5uaW5nUHJpY2UFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFEGdldEF1Y3Rpb25XaW5uZXIAAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9uZnRfdHJhbnNmZXJfdG8FEGdldEF1Y3Rpb25XaW5uZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCFV9hbW91bnRfcGFpZF90b19vd25lcgUSZ2V0TmZ0V2lubmluZ1ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAhBfbmZ0X3RyYW5zZmVyX3RvBRBnZXRBdWN0aW9uV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQFA25pbAFpAQ1jYW5jZWxBdWN0aW9uAQlhdWN0aW9uSWQEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBA1hdWN0aW9uU3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAILX25mdF9zdGF0dXMEDWJpZGRpbmdXaW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAQIbmZ0T3duZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgpfbmZ0X293bmVyBAVuZnRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCD19uZnRfb25fYXVjdGlvbgQMYmlkZGluZ1ByaWNlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCJl9wcmV2aW91c19iaWRfYW1vdW50X3JlZnVuZF90b19hZGRyZXNzBQ1iaWRkaW5nV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAhtfcHJldm9pdXNfYmlkX2Ftb3VudF9yZWZ1bmQFDGJpZGRpbmdQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCC19uZnRfc3RhdHVzAghDQU5DRUxFRAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCJl9wcmV2aW91c19iaWRfYW1vdW50X3JlZnVuZF90b19hZGRyZXNzBQ1iaWRkaW5nV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIbX3ByZXZvaXVzX2JpZF9hbW91bnRfcmVmdW5kBQxiaWRkaW5nUHJpY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFDWJpZGRpbmdXaW5uZXIJAQ1wYXJzZUludFZhbHVlAQUMYmlkZGluZ1ByaWNlBQR1bml0BQNuaWwBaQELd2l0aGRyYXdCaWQBB2JpZFR4SWQEBmNhbGxlcggIBQFpBmNhbGxlcgVieXRlcwQIYmlkUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUHYmlkVHhJZAIMX2hpZ2hlc3RfYmlkBAhhc0JpZGRlcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQdiaWRUeElkAgdfd2lubmVyBAliaWRGb3JORlQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUHYmlkVHhJZAIHX25mdF9pZAMJAQIhPQIJANgEAQUGY2FsbGVyBQhhc0JpZGRlcgkAAgECBk5vIGJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCCF9uZnRfYmlkAghXSVRIRFJBVwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCB19uZnRfaWQFCWJpZEZvck5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCHF9iaWRkaW5nX3ByaWNlX3JlZnVuZF9hbW91bnQFCGJpZFByaWNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBBQhiaWRQcmljZQUEdW5pdAUDbmlsAWkBB3Rlc3RCaWQBBGRhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgI4RThra0ZCWUN5NDRKSmFxNnBBWjZLaXpzdVJlc2k1VUtOaGJEMVdOWndoaFlfaGlnaGVzdF9iaWQCATAFA25pbABYMmiY", "height": 2348075, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J2Zgg1HDZU9vvoMKk8ZX3M5HpFy2eV7pcSZ9XxkLXCvz Next: sP8EEFbPQ4cTPbYKV36gbwSboHsXs29M2TgsxLrgk1o Diff:
OldNewDifferences
257257
258258 let aE = "buy"
259259
260-@Callable(aF)
261-func createNFT (aG,aH,aI,aJ,aK,aL,aM,aN,aO) = {
262- let aP = Issue(aG, aM, 1, 0, false)
263- let aQ = calculateAssetId(aP)
264- let aR = aF.transactionId
265-[aP, ScriptTransfer(aF.caller, 1, aQ), StringEntry(((toBase58String(aQ) + a) + "Owner"), toString(aF.caller)), StringEntry(((toBase58String(aQ) + a) + "nft_type"), aJ), StringEntry(((toBase58String(aQ) + a) + "nft_tags"), aK), StringEntry(((toBase58String(aQ) + a) + "nft_dAppAddress"), aI), IntegerEntry(((toBase58String(aQ) + a) + "nft_selling_price"), aL), StringEntry(((toBase58String(aQ) + a) + "nft_onSell"), aN), StringEntry(((toBase58String(aQ) + a) + "nft_data"), aO), StringEntry(((toBase58String(aR) + a) + "issue_nft"), toBase58String(aQ))]
260+let aF = "bid"
261+
262+let aG = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
263+
264+let aH = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
265+
266+@Callable(aI)
267+func createNft (aJ,aK,aL,aM,aN,aO,aP,aQ,aR) = {
268+ let aS = Issue(aJ, aP, 1, 0, false)
269+ let aT = calculateAssetId(aS)
270+ let aU = aI.transactionId
271+[aS, ScriptTransfer(aI.caller, 1, aT), StringEntry(((toBase58String(aT) + a) + "Owner"), toString(aI.caller)), StringEntry(((toBase58String(aT) + a) + "nft_type"), aM), StringEntry(((toBase58String(aT) + a) + "nft_tags"), aN), StringEntry(((toBase58String(aT) + a) + "nft_dAppAddress"), aL), IntegerEntry(((toBase58String(aT) + a) + "nft_selling_price"), aO), StringEntry(((toBase58String(aT) + a) + "nft_onSell"), aQ), StringEntry(((toBase58String(aT) + a) + "nft_data"), aR), StringEntry(((toBase58String(aU) + a) + "issue_nft"), toBase58String(aT))]
266272 }
267273
268274
269275
270-@Callable(aF)
271-func issueNft (aS,aT) = {
272- let aP = Issue(aS, aT, 1, 0, false)
273- let aQ = calculateAssetId(aP)
274-[aP, ScriptTransfer(aF.caller, 1, aQ), StringEntry(((toBase58String(aQ) + a) + "Owner"), toString(aF.caller))]
276+@Callable(aI)
277+func sellNFT (P) = {
278+ let aU = aI.transactionId
279+ let J = aI.caller.bytes
280+ let aV = $Tuple2(value(aI.payments[0].assetId), value(aI.payments[0].amount))
281+ let aW = aV._1
282+ let aX = aV._2
283+ if (!(ad(aW)))
284+ then throw("Token is not NFT")
285+ else [StringEntry(((e + a) + toBase58String(value(aI.payments[0].assetId))), toString(P)), StringEntry(((toString(aI.caller) + a) + c), ((toBase58String(aW) + a) + toString(aX)))]
275286 }
276287
277288
278289
279-@Callable(aF)
280-func buyNFT (aU) = {
281- let T = fromBase58String(aU)
282- let aV = value(aF.payments[0].amount)
283- let P = valueOrErrorMessage(getString(((e + a) + aU)), "There is no price for this NFT")
284- let aW = valueOrErrorMessage(getStringValue(((aU + a) + "Owner")), "No owner")
285- if ((aF.payments[0].assetId != unit))
290+@Callable(aI)
291+func buyNFT (aY,aZ) = {
292+ let T = fromBase58String(aY)
293+ let ba = value(aI.payments[0].amount)
294+ let bb = {
295+ let F = getString(this, (("nft_" + aZ) + "_owner"))
296+ if ($isInstanceOf(F, "String"))
297+ then {
298+ let bc = F
299+ bc
300+ }
301+ else false
302+ }
303+ let P = getStringValue(((((e + a) + aY) + "_") + aZ))
304+ let bd = valueOrErrorMessage(getStringValue(((aY + a) + "Owner")), "No owner")
305+ if ((aI.payments[0].assetId != unit))
286306 then throw("Pay in waves")
287- else if ((parseIntValue(P) > aV))
288- then throw("Invalid payment")
289- else [ScriptTransfer(aF.caller, 1, T), ScriptTransfer(value(addressFromString(aW)), parseIntValue(P), unit), StringEntry(((toString(aF.caller) + a) + aE), ((aU + a) + toString(aV)))]
307+ else if ((bb == toString(aI.caller)))
308+ then throw("Owner of NFT not able to purchase")
309+ else [ScriptTransfer(aI.caller, 1, T), ScriptTransfer(Address(fromBase58String(bd)), ba, unit), StringEntry(((toString(aI.caller) + a) + aE), ((aY + a) + toString(ba))), DeleteEntry((("nft_" + aZ) + "_owner"))]
290310 }
291311
292312
293313
294-@Callable(aF)
295-func sellNFT (P) = {
296- let aX = $Tuple2(value(aF.payments[0].assetId), value(aF.payments[0].amount))
297- let aY = aX._1
298- let aZ = aX._2
299- if (!(ad(aY)))
300- then throw("Token is not NFT")
301- else [StringEntry(((e + a) + toBase58String(value(aF.payments[0].assetId))), toString(P)), StringEntry(((toString(aF.caller) + a) + c), ((toBase58String(aY) + a) + toString(aZ)))]
314+@Callable(aI)
315+func addAuction (L,M,K,be) = {
316+ let aU = toBase58String(aI.transactionId)
317+ let h = value(aI.payments[0].assetId)
318+ let P = value(K)
319+ let am = aI.caller.bytes
320+ let bf = {
321+ let F = getString(this, (((toBase58String(h) + a) + "nft_status_") + toBase58String(am)))
322+ if ($isInstanceOf(F, "String"))
323+ then {
324+ let bc = F
325+ true
326+ }
327+ else false
328+ }
329+ if ((aI.payments[0].assetId == unit))
330+ then throw("NFT not attached")
331+ else if ((bf == true))
332+ then throw("Already in auction list")
333+ else [StringEntry(((aU + "_nft_start_auction_date_") + toBase58String(am)), L), StringEntry(((aU + "_nft_end_auction_date_") + toBase58String(am)), M), StringEntry((aU + "_nft_start_price"), K), StringEntry((aU + "duration_of_auction"), be), StringEntry((aU + "_nft_owner"), toString(aI.caller)), StringEntry((aU + "_nft_on_auction"), toBase58String(h)), StringEntry((aU + "_previous_bidder"), "none"), StringEntry((aU + "_highest_bid"), "0"), StringEntry((aU + "_winner_of_nft"), "0"), StringEntry((aU + "_bidder_count"), "0"), StringEntry((aU + "_nft_status"), "OPEN")]
302334 }
303335
304336
305337
306-@Callable(aF)
307-func addSell (P) = {
308- let h = value(aF.payments[0].assetId)
309- valueOrElse(au(h), if (!(ai(P)))
310- then throw("Price must be > 0")
311- else [N(h, aF.caller, P)])
338+@Callable(aI)
339+func placeBid (bg,h,aK,bh) = {
340+ let aU = toBase58String(aI.transactionId)
341+ let am = aI.caller.bytes
342+ let T = fromBase58String(h)
343+ let bi = aI.payments[0].amount
344+ let bj = getStringValue(this, (bg + "_highest_bid"))
345+ let bk = getString(this, (bg + "_previous_bidder"))
346+ let bl = getStringValue(this, (bg + "_bidder_count"))
347+ let bm = getStringValue(this, (bg + "_winner_of_nft"))
348+ let bf = getStringValue(this, (bg + "_nft_status"))
349+ if ((aI.payments[0].assetId != unit))
350+ then throw("Pay in waves")
351+ else if ((bf != "OPEN"))
352+ then throw("Not open for auction")
353+ else if ((parseIntValue(bj) >= bi))
354+ then throw("Bid is less then starting/highest Bid")
355+ else if ((bj == "0"))
356+ then [StringEntry((bg + "_highest_bid"), toString(bi)), StringEntry((bg + "_winner_of_nft"), toBase58String(aI.caller.bytes)), StringEntry((bg + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((bg + "_nft_id"), toBase58String(T)), StringEntry((bg + "_nft_owner"), aK), StringEntry((((aU + "_") + bg) + "_highest_bid"), toString(bi)), StringEntry((((aU + "_") + bg) + "_winner"), toBase58String(aI.caller.bytes)), StringEntry((((aU + "_") + bg) + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((((aU + "_") + bg) + "_nft_id"), toBase58String(T)), StringEntry((((aU + "_") + bg) + "_nft_owner"), aK), StringEntry((aU + "_bid_for_nft_by"), toBase58String(am)), StringEntry((aU + "_bid_price_place"), bh), StringEntry((aU + "_previous_bid_amount_refund_to_address"), bm), StringEntry((aU + "_prevoius_bid_amount_refund"), bj)]
357+ else [StringEntry((bg + "_highest_bid"), toString(bi)), StringEntry((bg + "_winner_of_nft"), toBase58String(aI.caller.bytes)), StringEntry((bg + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((bg + "_nft_id"), toBase58String(T)), StringEntry((bg + "_nft_owner"), aK), StringEntry((((aU + "_") + bg) + "_highest_bid"), toString(bi)), StringEntry((((aU + "_") + bg) + "_winner"), toBase58String(aI.caller.bytes)), StringEntry((((aU + "_") + bg) + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((((aU + "_") + bg) + "_nft_id"), toBase58String(T)), StringEntry((((aU + "_") + bg) + "_nft_owner"), aK), StringEntry((aU + "_bid_for_nft_by"), toBase58String(am)), StringEntry((aU + "_bid_price_place"), bh), StringEntry((aU + "_previous_bid_amount_refund_to_address"), bm), StringEntry((aU + "_prevoius_bid_amount_refund"), bj), ScriptTransfer(Address(fromBase58String(bm)), parseIntValue(bj), unit)]
312358 }
313359
314360
315361
316-@Callable(aF)
317-func addAuction (K,L,M) = {
318- let h = value(aF.payments[0].assetId)
319- valueOrElse(au(h), [I(aF.caller, h, K, L, M), StringEntry(((toBase58String(h) + a) + "nft_owner"), toString(aF.caller))])
362+@Callable(aI)
363+func acceptBidOffer (bg,h,bn) = {
364+ let aU = toBase58String(aI.transactionId)
365+ let am = aI.caller.bytes
366+ let T = fromBase58String(h)
367+ let bo = getStringValue(this, (bg + "_highest_bid"))
368+ let bp = getStringValue(this, (bg + "_winner_of_nft"))
369+[ScriptTransfer(Address(am), parseIntValue(bo), unit), ScriptTransfer(Address(fromBase58String(bp)), 1, T), StringEntry((aU + "_nft_transfer_to"), bp), StringEntry((aU + "_nft_status"), "REWARDED"), StringEntry((bg + "_amount_paid_to_owner"), bo), StringEntry((bg + "_nft_transfer_to"), bp), StringEntry((bg + "_nft_status"), "REWARDED")]
320370 }
321371
322372
323373
324-@Callable(aF)
325-func buyFromSlot (h) = {
326- let ba = $Tuple2(aF.payments[0].assetId, value(aF.payments[0].amount))
327- let aw = ba._1
328- let ax = ba._2
329- let T = fromBase58String(h)
330- let bb = aD(T)
331- let bc = bb._1
332- let B = bb._2
333- let bd = [ScriptTransfer(aF.caller, 1, T), DeleteEntry(f(bc, T))]
334- if ((bc == c))
335- then {
336- let be = D(B)
337- let J = be._1
338- let bf = be._2
339- valueOrElse(av(aw, ax, bf), {
340- let bg = aA(af(T), ax, bf)
341- let bh = bg._1
342- let bi = bg._2
343- let bj = (bd ++ [ScriptTransfer(J, bh, unit)])
344- if ((bi > 0))
345- then (bj ++ [ScriptTransfer(aF.caller, bi, unit)])
346- else bj
347- })
348- }
349- else {
350- let bk = S(T, height)
351- let J = bk._1
352- let aC = bk._2
353- valueOrElse(av(aw, ax, aC), {
354- let bl = aA(af(T), ax, aC)
355- let bh = bl._1
356- let bi = bl._2
357- let bj = (bd ++ [ScriptTransfer(J, bh, unit)])
358- if ((bi > 0))
359- then (bj ++ [ScriptTransfer(aF.caller, bi, unit)])
360- else bj
361- })
362- }
374+@Callable(aI)
375+func cancelAuction (bg) = {
376+ let aU = toBase58String(aI.transactionId)
377+ let am = aI.caller.bytes
378+ let bq = getStringValue(this, (bg + "_nft_status"))
379+ let br = getStringValue(this, (bg + "_winner_of_nft"))
380+ let bs = getStringValue(this, (bg + "_nft_owner"))
381+ let h = getStringValue(this, (bg + "_nft_on_auction"))
382+ let bt = getStringValue(this, (bg + "_highest_bid"))
383+[StringEntry((bg + "_nft_status"), "CANCELED"), StringEntry((bg + "_previous_bid_amount_refund_to_address"), br), StringEntry((bg + "_prevoius_bid_amount_refund"), bt), StringEntry((aU + "_nft_status"), "CANCELED"), StringEntry((aU + "_previous_bid_amount_refund_to_address"), br), StringEntry((aU + "_prevoius_bid_amount_refund"), bt), ScriptTransfer(Address(fromBase58String(bs)), 1, fromBase58String(h)), ScriptTransfer(Address(fromBase58String(br)), parseIntValue(bt), unit)]
363384 }
364385
365386
366387
367-@Callable(aF)
368-func declineSlot (h) = {
369- let T = fromBase58String(h)
370- let bm = aD(T)
371- let bc = bm._1
372- let B = bm._2
373- let bd = [DeleteEntry(f(bc, T))]
374- if ((bc == c))
375- then {
376- let bn = D(B)
377- let J = bn._1
378- let bf = bn._2
379- if (!(an(aF.caller, J)))
380- then throw("Invalid caller")
381- else (bd ++ [ScriptTransfer(J, 1, T)])
382- }
383- else {
384- let bo = A(B)
385- let J = bo._1
386- let W = bo._2
387- let X = bo._3
388- let Y = bo._4
389- let Z = bo._5
390- if (!(an(aF.caller, J)))
391- then throw("Invalid caller")
392- else if (!(ao(height, Z)))
393- then throw("Wait for end of auction")
394- else (bd ++ [ScriptTransfer(J, 1, T)])
395- }
388+@Callable(aI)
389+func withdrawBid (bu) = {
390+ let am = aI.caller.bytes
391+ let bv = getStringValue(this, (bu + "_highest_bid"))
392+ let bw = getStringValue(this, (bu + "_winner"))
393+ let bx = getStringValue(this, (bu + "_nft_id"))
394+ if ((toBase58String(am) != bw))
395+ then throw("No bid")
396+ else [StringEntry((bu + "_nft_bid"), "WITHDRAW"), StringEntry((bu + "_nft_id"), bx), StringEntry((bu + "_bidding_price_refund_amount"), bv), ScriptTransfer(aI.caller, parseIntValue(bv), unit)]
396397 }
397398
398399
399400
400-@Callable(aF)
401-func setTrustedIssuer (bp) = if (!(al(aF.caller)))
402- then throw("Only admin")
403- else [BooleanEntry(l(addressFromStringValue(bp)), true)]
404-
405-
406-
407-@Callable(aF)
408-func getPriceAtCurrentMoment (h,U) = {
409- let T = fromBase58String(h)
410- let bq = S(T, U)
411- let J = bq._1
412- let P = bq._2
413-[IntegerEntry(i(T), P)]
414- }
401+@Callable(aI)
402+func testBid (by) = [StringEntry("E8kkFBYCy44JJaq6pAZ6KizsuResi5UKNhbD1WNZwhhY_highest_bid", "0")]
415403
416404
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "_"
55
66 let b = "auction"
77
88 let c = "sell"
99
1010 let d = "trusted"
1111
1212 let e = "price"
1313
1414 func f (g,h) = ((g + a) + toBase58String(h))
1515
1616
1717 func i (h) = ((e + a) + toBase58String(h))
1818
1919
2020 func j (h) = ((c + a) + toBase58String(h))
2121
2222
2323 func k (h) = ((b + a) + toBase58String(h))
2424
2525
2626 func l (m) = ((d + a) + toString(m))
2727
2828
2929 func n (o,p) = (o ++ [p])
3030
3131
3232 func q (r) = {
3333 let s = size(r)
3434 if ((s == 0))
3535 then throw("Empty params")
3636 else if ((s == 1))
3737 then makeString({
3838 let t = r
3939 let u = size(t)
4040 let v = nil
4141 func w (x,y) = if ((y >= u))
4242 then x
4343 else n(x, t[y])
4444
4545 func z (x,y) = if ((y >= u))
4646 then x
4747 else throw("List size exceeds 1")
4848
4949 z(w(v, 0), 1)
5050 }, a)
5151 else if ((s == 2))
5252 then makeString({
5353 let t = r
5454 let u = size(t)
5555 let v = nil
5656 func w (x,y) = if ((y >= u))
5757 then x
5858 else n(x, t[y])
5959
6060 func z (x,y) = if ((y >= u))
6161 then x
6262 else throw("List size exceeds 2")
6363
6464 z(w(w(v, 0), 1), 2)
6565 }, a)
6666 else if ((s == 3))
6767 then makeString({
6868 let t = r
6969 let u = size(t)
7070 let v = nil
7171 func w (x,y) = if ((y >= u))
7272 then x
7373 else n(x, t[y])
7474
7575 func z (x,y) = if ((y >= u))
7676 then x
7777 else throw("List size exceeds 3")
7878
7979 z(w(w(w(v, 0), 1), 2), 3)
8080 }, a)
8181 else if ((s == 4))
8282 then makeString({
8383 let t = r
8484 let u = size(t)
8585 let v = nil
8686 func w (x,y) = if ((y >= u))
8787 then x
8888 else n(x, t[y])
8989
9090 func z (x,y) = if ((y >= u))
9191 then x
9292 else throw("List size exceeds 4")
9393
9494 z(w(w(w(w(v, 0), 1), 2), 3), 4)
9595 }, a)
9696 else if ((s == 5))
9797 then makeString({
9898 let t = r
9999 let u = size(t)
100100 let v = nil
101101 func w (x,y) = if ((y >= u))
102102 then x
103103 else n(x, t[y])
104104
105105 func z (x,y) = if ((y >= u))
106106 then x
107107 else throw("List size exceeds 5")
108108
109109 z(w(w(w(w(w(v, 0), 1), 2), 3), 4), 5)
110110 }, a)
111111 else throw("Max number of parameters exceeded")
112112 }
113113
114114
115115 func A (B) = {
116116 let C = split(B, a)
117117 $Tuple5(addressFromStringValue(C[0]), parseIntValue(C[1]), parseIntValue(C[2]), parseIntValue(C[3]), parseIntValue(C[4]))
118118 }
119119
120120
121121 func D (B) = {
122122 let C = split(B, a)
123123 $Tuple2(addressFromStringValue(C[0]), parseIntValue(C[1]))
124124 }
125125
126126
127127 func E (r) = {
128128 let F = r
129129 if ($isInstanceOf(F, "(Address, Int, String, String)"))
130130 then {
131131 let G = F
132132 q([toString(G._1), toString(G._2), G._3, G._4])
133133 }
134134 else if ($isInstanceOf(F, "(Address, Int)"))
135135 then {
136136 let H = F
137137 q([toString(H._1), toString(H._2)])
138138 }
139139 else throw("Wrong params tupple")
140140 }
141141
142142
143143 func I (J,h,K,L,M) = StringEntry(k(h), E($Tuple4(J, K, L, M)))
144144
145145
146146 func N (h,O,P) = StringEntry(j(h), E($Tuple2(O, P)))
147147
148148
149149 func Q (h) = value(getString(this, k(h)))
150150
151151
152152 func R (h) = value(getString(this, j(h)))
153153
154154
155155 func S (T,U) = {
156156 let B = Q(T)
157157 let V = A(B)
158158 let J = V._1
159159 let W = V._2
160160 let X = V._3
161161 let Y = V._4
162162 let Z = V._5
163163 if ((U >= Z))
164164 then $Tuple2(J, X)
165165 else {
166166 let aa = (W - X)
167167 let ab = (Z - Y)
168168 let ac = (U - Y)
169169 $Tuple2(J, (W - fraction(ac, aa, ab)))
170170 }
171171 }
172172
173173
174174 func ad (T) = {
175175 let F = assetInfo(T)
176176 if ($isInstanceOf(F, "Asset"))
177177 then {
178178 let ae = F
179179 if (if ((ae.decimals == 0))
180180 then (ae.quantity == 1)
181181 else false)
182182 then (ae.reissuable == false)
183183 else false
184184 }
185185 else false
186186 }
187187
188188
189189 func af (T) = {
190190 let m = value(assetInfo(T)).issuer
191191 valueOrElse(getBoolean(this, l(m)), false)
192192 }
193193
194194
195195 func ag (T) = isDefined(getString(this, j(T)))
196196
197197
198198 func ah (T) = isDefined(getString(this, k(T)))
199199
200200
201201 func ai (P) = (P > 0)
202202
203203
204204 func aj (K,ak) = (K > ak)
205205
206206
207207 func al (am) = (am == this)
208208
209209
210210 func an (am,J) = if ((am == this))
211211 then true
212212 else (am == J)
213213
214214
215215 func ao (ap,M) = (ap > M)
216216
217217
218218 func aq (ar,as) = (ar >= as)
219219
220220
221221 func at (T) = (T == unit)
222222
223223
224224 func au (h) = if (!(ad(h)))
225225 then throw("Token is not Nft")
226226 else if (ag(h))
227227 then throw("Sell already exists")
228228 else if (ah(h))
229229 then throw("Auction already exists")
230230 else unit
231231
232232
233233 func av (aw,ax,P) = if (!(at(aw)))
234234 then throw("Payment must be at WAVES")
235235 else if (!(aq(ax, P)))
236236 then throw("Not enough funds")
237237 else unit
238238
239239
240240 func ay () = 0
241241
242242
243243 func az () = 0
244244
245245
246246 func aA (aB,ax,aC) = if (aB)
247247 then $Tuple2((aC - az()), (ax - aC))
248248 else $Tuple2((aC - ay()), (ax - aC))
249249
250250
251251 func aD (h) = if (ag(h))
252252 then $Tuple2(c, R(h))
253253 else if (ah(h))
254254 then $Tuple2(b, Q(h))
255255 else throw("Slot doesn`t exist")
256256
257257
258258 let aE = "buy"
259259
260-@Callable(aF)
261-func createNFT (aG,aH,aI,aJ,aK,aL,aM,aN,aO) = {
262- let aP = Issue(aG, aM, 1, 0, false)
263- let aQ = calculateAssetId(aP)
264- let aR = aF.transactionId
265-[aP, ScriptTransfer(aF.caller, 1, aQ), StringEntry(((toBase58String(aQ) + a) + "Owner"), toString(aF.caller)), StringEntry(((toBase58String(aQ) + a) + "nft_type"), aJ), StringEntry(((toBase58String(aQ) + a) + "nft_tags"), aK), StringEntry(((toBase58String(aQ) + a) + "nft_dAppAddress"), aI), IntegerEntry(((toBase58String(aQ) + a) + "nft_selling_price"), aL), StringEntry(((toBase58String(aQ) + a) + "nft_onSell"), aN), StringEntry(((toBase58String(aQ) + a) + "nft_data"), aO), StringEntry(((toBase58String(aR) + a) + "issue_nft"), toBase58String(aQ))]
260+let aF = "bid"
261+
262+let aG = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
263+
264+let aH = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
265+
266+@Callable(aI)
267+func createNft (aJ,aK,aL,aM,aN,aO,aP,aQ,aR) = {
268+ let aS = Issue(aJ, aP, 1, 0, false)
269+ let aT = calculateAssetId(aS)
270+ let aU = aI.transactionId
271+[aS, ScriptTransfer(aI.caller, 1, aT), StringEntry(((toBase58String(aT) + a) + "Owner"), toString(aI.caller)), StringEntry(((toBase58String(aT) + a) + "nft_type"), aM), StringEntry(((toBase58String(aT) + a) + "nft_tags"), aN), StringEntry(((toBase58String(aT) + a) + "nft_dAppAddress"), aL), IntegerEntry(((toBase58String(aT) + a) + "nft_selling_price"), aO), StringEntry(((toBase58String(aT) + a) + "nft_onSell"), aQ), StringEntry(((toBase58String(aT) + a) + "nft_data"), aR), StringEntry(((toBase58String(aU) + a) + "issue_nft"), toBase58String(aT))]
266272 }
267273
268274
269275
270-@Callable(aF)
271-func issueNft (aS,aT) = {
272- let aP = Issue(aS, aT, 1, 0, false)
273- let aQ = calculateAssetId(aP)
274-[aP, ScriptTransfer(aF.caller, 1, aQ), StringEntry(((toBase58String(aQ) + a) + "Owner"), toString(aF.caller))]
276+@Callable(aI)
277+func sellNFT (P) = {
278+ let aU = aI.transactionId
279+ let J = aI.caller.bytes
280+ let aV = $Tuple2(value(aI.payments[0].assetId), value(aI.payments[0].amount))
281+ let aW = aV._1
282+ let aX = aV._2
283+ if (!(ad(aW)))
284+ then throw("Token is not NFT")
285+ else [StringEntry(((e + a) + toBase58String(value(aI.payments[0].assetId))), toString(P)), StringEntry(((toString(aI.caller) + a) + c), ((toBase58String(aW) + a) + toString(aX)))]
275286 }
276287
277288
278289
279-@Callable(aF)
280-func buyNFT (aU) = {
281- let T = fromBase58String(aU)
282- let aV = value(aF.payments[0].amount)
283- let P = valueOrErrorMessage(getString(((e + a) + aU)), "There is no price for this NFT")
284- let aW = valueOrErrorMessage(getStringValue(((aU + a) + "Owner")), "No owner")
285- if ((aF.payments[0].assetId != unit))
290+@Callable(aI)
291+func buyNFT (aY,aZ) = {
292+ let T = fromBase58String(aY)
293+ let ba = value(aI.payments[0].amount)
294+ let bb = {
295+ let F = getString(this, (("nft_" + aZ) + "_owner"))
296+ if ($isInstanceOf(F, "String"))
297+ then {
298+ let bc = F
299+ bc
300+ }
301+ else false
302+ }
303+ let P = getStringValue(((((e + a) + aY) + "_") + aZ))
304+ let bd = valueOrErrorMessage(getStringValue(((aY + a) + "Owner")), "No owner")
305+ if ((aI.payments[0].assetId != unit))
286306 then throw("Pay in waves")
287- else if ((parseIntValue(P) > aV))
288- then throw("Invalid payment")
289- else [ScriptTransfer(aF.caller, 1, T), ScriptTransfer(value(addressFromString(aW)), parseIntValue(P), unit), StringEntry(((toString(aF.caller) + a) + aE), ((aU + a) + toString(aV)))]
307+ else if ((bb == toString(aI.caller)))
308+ then throw("Owner of NFT not able to purchase")
309+ else [ScriptTransfer(aI.caller, 1, T), ScriptTransfer(Address(fromBase58String(bd)), ba, unit), StringEntry(((toString(aI.caller) + a) + aE), ((aY + a) + toString(ba))), DeleteEntry((("nft_" + aZ) + "_owner"))]
290310 }
291311
292312
293313
294-@Callable(aF)
295-func sellNFT (P) = {
296- let aX = $Tuple2(value(aF.payments[0].assetId), value(aF.payments[0].amount))
297- let aY = aX._1
298- let aZ = aX._2
299- if (!(ad(aY)))
300- then throw("Token is not NFT")
301- else [StringEntry(((e + a) + toBase58String(value(aF.payments[0].assetId))), toString(P)), StringEntry(((toString(aF.caller) + a) + c), ((toBase58String(aY) + a) + toString(aZ)))]
314+@Callable(aI)
315+func addAuction (L,M,K,be) = {
316+ let aU = toBase58String(aI.transactionId)
317+ let h = value(aI.payments[0].assetId)
318+ let P = value(K)
319+ let am = aI.caller.bytes
320+ let bf = {
321+ let F = getString(this, (((toBase58String(h) + a) + "nft_status_") + toBase58String(am)))
322+ if ($isInstanceOf(F, "String"))
323+ then {
324+ let bc = F
325+ true
326+ }
327+ else false
328+ }
329+ if ((aI.payments[0].assetId == unit))
330+ then throw("NFT not attached")
331+ else if ((bf == true))
332+ then throw("Already in auction list")
333+ else [StringEntry(((aU + "_nft_start_auction_date_") + toBase58String(am)), L), StringEntry(((aU + "_nft_end_auction_date_") + toBase58String(am)), M), StringEntry((aU + "_nft_start_price"), K), StringEntry((aU + "duration_of_auction"), be), StringEntry((aU + "_nft_owner"), toString(aI.caller)), StringEntry((aU + "_nft_on_auction"), toBase58String(h)), StringEntry((aU + "_previous_bidder"), "none"), StringEntry((aU + "_highest_bid"), "0"), StringEntry((aU + "_winner_of_nft"), "0"), StringEntry((aU + "_bidder_count"), "0"), StringEntry((aU + "_nft_status"), "OPEN")]
302334 }
303335
304336
305337
306-@Callable(aF)
307-func addSell (P) = {
308- let h = value(aF.payments[0].assetId)
309- valueOrElse(au(h), if (!(ai(P)))
310- then throw("Price must be > 0")
311- else [N(h, aF.caller, P)])
338+@Callable(aI)
339+func placeBid (bg,h,aK,bh) = {
340+ let aU = toBase58String(aI.transactionId)
341+ let am = aI.caller.bytes
342+ let T = fromBase58String(h)
343+ let bi = aI.payments[0].amount
344+ let bj = getStringValue(this, (bg + "_highest_bid"))
345+ let bk = getString(this, (bg + "_previous_bidder"))
346+ let bl = getStringValue(this, (bg + "_bidder_count"))
347+ let bm = getStringValue(this, (bg + "_winner_of_nft"))
348+ let bf = getStringValue(this, (bg + "_nft_status"))
349+ if ((aI.payments[0].assetId != unit))
350+ then throw("Pay in waves")
351+ else if ((bf != "OPEN"))
352+ then throw("Not open for auction")
353+ else if ((parseIntValue(bj) >= bi))
354+ then throw("Bid is less then starting/highest Bid")
355+ else if ((bj == "0"))
356+ then [StringEntry((bg + "_highest_bid"), toString(bi)), StringEntry((bg + "_winner_of_nft"), toBase58String(aI.caller.bytes)), StringEntry((bg + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((bg + "_nft_id"), toBase58String(T)), StringEntry((bg + "_nft_owner"), aK), StringEntry((((aU + "_") + bg) + "_highest_bid"), toString(bi)), StringEntry((((aU + "_") + bg) + "_winner"), toBase58String(aI.caller.bytes)), StringEntry((((aU + "_") + bg) + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((((aU + "_") + bg) + "_nft_id"), toBase58String(T)), StringEntry((((aU + "_") + bg) + "_nft_owner"), aK), StringEntry((aU + "_bid_for_nft_by"), toBase58String(am)), StringEntry((aU + "_bid_price_place"), bh), StringEntry((aU + "_previous_bid_amount_refund_to_address"), bm), StringEntry((aU + "_prevoius_bid_amount_refund"), bj)]
357+ else [StringEntry((bg + "_highest_bid"), toString(bi)), StringEntry((bg + "_winner_of_nft"), toBase58String(aI.caller.bytes)), StringEntry((bg + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((bg + "_nft_id"), toBase58String(T)), StringEntry((bg + "_nft_owner"), aK), StringEntry((((aU + "_") + bg) + "_highest_bid"), toString(bi)), StringEntry((((aU + "_") + bg) + "_winner"), toBase58String(aI.caller.bytes)), StringEntry((((aU + "_") + bg) + "_bidder_count"), toString((parseIntValue(bl) + 1))), StringEntry((((aU + "_") + bg) + "_nft_id"), toBase58String(T)), StringEntry((((aU + "_") + bg) + "_nft_owner"), aK), StringEntry((aU + "_bid_for_nft_by"), toBase58String(am)), StringEntry((aU + "_bid_price_place"), bh), StringEntry((aU + "_previous_bid_amount_refund_to_address"), bm), StringEntry((aU + "_prevoius_bid_amount_refund"), bj), ScriptTransfer(Address(fromBase58String(bm)), parseIntValue(bj), unit)]
312358 }
313359
314360
315361
316-@Callable(aF)
317-func addAuction (K,L,M) = {
318- let h = value(aF.payments[0].assetId)
319- valueOrElse(au(h), [I(aF.caller, h, K, L, M), StringEntry(((toBase58String(h) + a) + "nft_owner"), toString(aF.caller))])
362+@Callable(aI)
363+func acceptBidOffer (bg,h,bn) = {
364+ let aU = toBase58String(aI.transactionId)
365+ let am = aI.caller.bytes
366+ let T = fromBase58String(h)
367+ let bo = getStringValue(this, (bg + "_highest_bid"))
368+ let bp = getStringValue(this, (bg + "_winner_of_nft"))
369+[ScriptTransfer(Address(am), parseIntValue(bo), unit), ScriptTransfer(Address(fromBase58String(bp)), 1, T), StringEntry((aU + "_nft_transfer_to"), bp), StringEntry((aU + "_nft_status"), "REWARDED"), StringEntry((bg + "_amount_paid_to_owner"), bo), StringEntry((bg + "_nft_transfer_to"), bp), StringEntry((bg + "_nft_status"), "REWARDED")]
320370 }
321371
322372
323373
324-@Callable(aF)
325-func buyFromSlot (h) = {
326- let ba = $Tuple2(aF.payments[0].assetId, value(aF.payments[0].amount))
327- let aw = ba._1
328- let ax = ba._2
329- let T = fromBase58String(h)
330- let bb = aD(T)
331- let bc = bb._1
332- let B = bb._2
333- let bd = [ScriptTransfer(aF.caller, 1, T), DeleteEntry(f(bc, T))]
334- if ((bc == c))
335- then {
336- let be = D(B)
337- let J = be._1
338- let bf = be._2
339- valueOrElse(av(aw, ax, bf), {
340- let bg = aA(af(T), ax, bf)
341- let bh = bg._1
342- let bi = bg._2
343- let bj = (bd ++ [ScriptTransfer(J, bh, unit)])
344- if ((bi > 0))
345- then (bj ++ [ScriptTransfer(aF.caller, bi, unit)])
346- else bj
347- })
348- }
349- else {
350- let bk = S(T, height)
351- let J = bk._1
352- let aC = bk._2
353- valueOrElse(av(aw, ax, aC), {
354- let bl = aA(af(T), ax, aC)
355- let bh = bl._1
356- let bi = bl._2
357- let bj = (bd ++ [ScriptTransfer(J, bh, unit)])
358- if ((bi > 0))
359- then (bj ++ [ScriptTransfer(aF.caller, bi, unit)])
360- else bj
361- })
362- }
374+@Callable(aI)
375+func cancelAuction (bg) = {
376+ let aU = toBase58String(aI.transactionId)
377+ let am = aI.caller.bytes
378+ let bq = getStringValue(this, (bg + "_nft_status"))
379+ let br = getStringValue(this, (bg + "_winner_of_nft"))
380+ let bs = getStringValue(this, (bg + "_nft_owner"))
381+ let h = getStringValue(this, (bg + "_nft_on_auction"))
382+ let bt = getStringValue(this, (bg + "_highest_bid"))
383+[StringEntry((bg + "_nft_status"), "CANCELED"), StringEntry((bg + "_previous_bid_amount_refund_to_address"), br), StringEntry((bg + "_prevoius_bid_amount_refund"), bt), StringEntry((aU + "_nft_status"), "CANCELED"), StringEntry((aU + "_previous_bid_amount_refund_to_address"), br), StringEntry((aU + "_prevoius_bid_amount_refund"), bt), ScriptTransfer(Address(fromBase58String(bs)), 1, fromBase58String(h)), ScriptTransfer(Address(fromBase58String(br)), parseIntValue(bt), unit)]
363384 }
364385
365386
366387
367-@Callable(aF)
368-func declineSlot (h) = {
369- let T = fromBase58String(h)
370- let bm = aD(T)
371- let bc = bm._1
372- let B = bm._2
373- let bd = [DeleteEntry(f(bc, T))]
374- if ((bc == c))
375- then {
376- let bn = D(B)
377- let J = bn._1
378- let bf = bn._2
379- if (!(an(aF.caller, J)))
380- then throw("Invalid caller")
381- else (bd ++ [ScriptTransfer(J, 1, T)])
382- }
383- else {
384- let bo = A(B)
385- let J = bo._1
386- let W = bo._2
387- let X = bo._3
388- let Y = bo._4
389- let Z = bo._5
390- if (!(an(aF.caller, J)))
391- then throw("Invalid caller")
392- else if (!(ao(height, Z)))
393- then throw("Wait for end of auction")
394- else (bd ++ [ScriptTransfer(J, 1, T)])
395- }
388+@Callable(aI)
389+func withdrawBid (bu) = {
390+ let am = aI.caller.bytes
391+ let bv = getStringValue(this, (bu + "_highest_bid"))
392+ let bw = getStringValue(this, (bu + "_winner"))
393+ let bx = getStringValue(this, (bu + "_nft_id"))
394+ if ((toBase58String(am) != bw))
395+ then throw("No bid")
396+ else [StringEntry((bu + "_nft_bid"), "WITHDRAW"), StringEntry((bu + "_nft_id"), bx), StringEntry((bu + "_bidding_price_refund_amount"), bv), ScriptTransfer(aI.caller, parseIntValue(bv), unit)]
396397 }
397398
398399
399400
400-@Callable(aF)
401-func setTrustedIssuer (bp) = if (!(al(aF.caller)))
402- then throw("Only admin")
403- else [BooleanEntry(l(addressFromStringValue(bp)), true)]
404-
405-
406-
407-@Callable(aF)
408-func getPriceAtCurrentMoment (h,U) = {
409- let T = fromBase58String(h)
410- let bq = S(T, U)
411- let J = bq._1
412- let P = bq._2
413-[IntegerEntry(i(T), P)]
414- }
401+@Callable(aI)
402+func testBid (by) = [StringEntry("E8kkFBYCy44JJaq6pAZ6KizsuResi5UKNhbD1WNZwhhY_highest_bid", "0")]
415403
416404

github/deemru/w8io/169f3d6 
61.95 ms