tx · 4w7i2oTyE7SmVgaUXbZB4dg7RTGwM7QsFvamz6y9WUED

3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx:  -0.10000000 Waves

2022.11.25 13:03 [2332489] smart account 3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx > SELF 0.00000000 Waves

{ "type": 13, "id": "4w7i2oTyE7SmVgaUXbZB4dg7RTGwM7QsFvamz6y9WUED", "fee": 10000000, "feeAssetId": null, "timestamp": 1669370625232, "version": 2, "chainId": 84, "sender": "3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx", "senderPublicKey": "EKZmHJ5bK3qKKgRdq8rAamt9qrDbVMLARzRqXoQW258v", "proofs": [ "2yeQXXbzhgmG9XjXSFGEW5fGagsnqxMHnzb4CPTP1GR4eaKn3fWtRqK4FY1AUeZ2dxahXoBi9XCo6CgZnXNNAUuR" ], "script": "base64:BgJKCAISCwoJCAgICAgBCAgIEgQKAggIEgMKAQgSAwoBARIDCgEBEg8KDQEBAQEICAgICAEICAgSAwoBCBIDCgEIEgMKAQgSBAoCCAEnAAlzZXBhcmF0b3ICAV8ACGtBdWN0aW9uAgdhdWN0aW9uAAVrU2VsbAIEc2VsbAAIa1RydXN0ZWQCB3RydXN0ZWQABmtQcmljZQIFcHJpY2UBCmdldFNsb3RLZXkCBnByZWZpeAVuZnRJZAkArAICCQCsAgIFBnByZWZpeAUJc2VwYXJhdG9yCQDYBAEFBW5mdElkAQtnZXRQcmljZUtleQEFbmZ0SWQJAKwCAgkArAICBQZrUHJpY2UFCXNlcGFyYXRvcgkA2AQBBQVuZnRJZAEKZ2V0U2VsbEtleQEFbmZ0SWQJAKwCAgkArAICBQVrU2VsbAUJc2VwYXJhdG9yCQDYBAEFBW5mdElkAQ1nZXRBdWN0aW9uS2V5AQVuZnRJZAkArAICCQCsAgIFCGtBdWN0aW9uBQlzZXBhcmF0b3IJANgEAQUFbmZ0SWQBDWdldFRydXN0ZWRLZXkBBmlzc3VlcgkArAICCQCsAgIFCGtUcnVzdGVkBQlzZXBhcmF0b3IJAKUIAQUGaXNzdWVyAQlhZGRUb0xpc3QCBWFjY3VtCW5leHRWYWx1ZQkAzggCBQVhY2N1bQkAzAgCBQluZXh0VmFsdWUFA25pbAEKam9pblN0cmluZwEGcGFyYW1zBAZsZW5ndGgJAJADAQUGcGFyYW1zAwkAAAIFBmxlbmd0aAAACQACAQINRW1wdHkgIHBhcmFtcwMJAAACBQZsZW5ndGgAAQkAuQkCCgACJGwFBnBhcmFtcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJYWRkVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAxCQEFJGYwXzICCQEFJGYwXzECBQUkYWNjMAAAAAEFCXNlcGFyYXRvcgMJAAACBQZsZW5ndGgAAgkAuQkCCgACJGwFBnBhcmFtcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJYWRkVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgUJc2VwYXJhdG9yAwkAAAIFBmxlbmd0aAADCQC5CQIKAAIkbAUGcGFyYW1zCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlhZGRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDMJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMFCXNlcGFyYXRvcgMJAAACBQZsZW5ndGgABAkAuQkCCgACJGwFBnBhcmFtcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJYWRkVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA0CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQFCXNlcGFyYXRvcgMJAAACBQZsZW5ndGgABQkAuQkCCgACJGwFBnBhcmFtcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJYWRkVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQUJc2VwYXJhdG9yCQACAQIhTWF4IG51bWJlciBvZiBwYXJhbWV0ZXJzIGV4Y2VlZGVkAQ5wYXJzZUFzQXVjdGlvbgEHZGV0YWlscwQDcmVzCQC1CQIFB2RldGFpbHMFCXNlcGFyYXRvcgkAlwoFCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFA3JlcwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDcmVzAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNyZXMAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA3JlcwADCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDcmVzAAQBC3BhcnNlQXNTZWxsAQdkZXRhaWxzBANyZXMJALUJAgUHZGV0YWlscwUJc2VwYXJhdG9yCQCUCgIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUDcmVzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNyZXMAAQEKam9pblN0cnVjdAEGcGFyYW1zBAckbWF0Y2gwBQZwYXJhbXMDCQABAgUHJG1hdGNoMAIdKEFkZHJlc3MsIEludCwgSW50LCBJbnQsIEludCkEB2F1Y3Rpb24FByRtYXRjaDAJAQpqb2luU3RyaW5nAQkAzAgCCQClCAEIBQdhdWN0aW9uAl8xCQDMCAIJAKQDAQgFB2F1Y3Rpb24CXzIJAMwIAgkApAMBCAUHYXVjdGlvbgJfMwkAzAgCCQCkAwEIBQdhdWN0aW9uAl80CQDMCAIJAKQDAQgFB2F1Y3Rpb24CXzUFA25pbAMJAAECBQckbWF0Y2gwAg4oQWRkcmVzcywgSW50KQQEc2VsbAUHJG1hdGNoMAkBCmpvaW5TdHJpbmcBCQDMCAIJAKUIAQgFBHNlbGwCXzEJAMwIAgkApAMBCAUEc2VsbAJfMgUDbmlsCQACAQITV3JvbmcgcGFyYW1zIHR1cHBsZQEKc2V0QXVjdGlvbgYGc2VsbGVyBW5mdElkCnN0YXJ0UHJpY2UIZW5kUHJpY2UFc3RhcnQDZW5kCQELU3RyaW5nRW50cnkCCQENZ2V0QXVjdGlvbktleQEFBW5mdElkCQEKam9pblN0cnVjdAEJAJcKBQUGc2VsbGVyBQpzdGFydFByaWNlBQhlbmRQcmljZQUFc3RhcnQFA2VuZAEHc2V0U2VsbAMFbmZ0SWQGY2VsbGVyBXByaWNlCQELU3RyaW5nRW50cnkCCQEKZ2V0U2VsbEtleQEFBW5mdElkCQEKam9pblN0cnVjdAEJAJQKAgUGY2VsbGVyBQVwcmljZQEKZ2V0QXVjdGlvbgEFbmZ0SWQJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkBDWdldEF1Y3Rpb25LZXkBBQVuZnRJZAEHZ2V0U2VsbAEFbmZ0SWQJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkBCmdldFNlbGxLZXkBBQVuZnRJZAEYY2FsY1ByaWNlQXRDdXJyZW50TW9tZW50Agdhc3NldElkBm1vbWVudAQHZGV0YWlscwkBCmdldEF1Y3Rpb24BBQdhc3NldElkBAskdDAyODE3MjkyMQkBDnBhcnNlQXNBdWN0aW9uAQUHZGV0YWlscwQGc2VsbGVyCAULJHQwMjgxNzI5MjECXzEED3N0YXJ0UHJpY2VWYWx1ZQgFCyR0MDI4MTcyOTIxAl8yBA1lbmRQcmljZVZhbHVlCAULJHQwMjgxNzI5MjECXzMEEHN0YXJ0UGVyaW9kVmFsdWUIBQskdDAyODE3MjkyMQJfNAQOZW5kUGVyaW9kVmFsdWUIBQskdDAyODE3MjkyMQJfNQMJAGcCBQZtb21lbnQFDmVuZFBlcmlvZFZhbHVlCQCUCgIFBnNlbGxlcgUNZW5kUHJpY2VWYWx1ZQQKZGVsdGFQcmljZQkAZQIFD3N0YXJ0UHJpY2VWYWx1ZQUNZW5kUHJpY2VWYWx1ZQQGcGVyaW9kCQBlAgUOZW5kUGVyaW9kVmFsdWUFEHN0YXJ0UGVyaW9kVmFsdWUEB3NwZW5kZWQJAGUCBQZtb21lbnQFEHN0YXJ0UGVyaW9kVmFsdWUJAJQKAgUGc2VsbGVyCQBlAgUPc3RhcnRQcmljZVZhbHVlCQBrAwUHc3BlbmRlZAUKZGVsdGFQcmljZQUGcGVyaW9kAQVpc05mdAEHYXNzZXRJZAQHJG1hdGNoMAkA7AcBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAV0b2tlbgUHJG1hdGNoMAMDCQAAAggFBXRva2VuCGRlY2ltYWxzAAAJAAACCAUFdG9rZW4IcXVhbnRpdHkAAQcJAAACCAUFdG9rZW4KcmVpc3N1YWJsZQcHBwEMaXNUcnVzdGVkTmZ0AQdhc3NldElkBAZpc3N1ZXIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQGaXNzdWVyCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJAQ1nZXRUcnVzdGVkS2V5AQUGaXNzdWVyBwELaXNTZWxsRXhpc3QBB2Fzc2V0SWQJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAQpnZXRTZWxsS2V5AQUHYXNzZXRJZAEOaXNBdWN0aW9uRXhpc3QBB2Fzc2V0SWQJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAQ1nZXRBdWN0aW9uS2V5AQUHYXNzZXRJZAESaXNDb3JyZWN0U2VsbFByaWNlAQVwcmljZQkAZgIFBXByaWNlAAABFmlzQ29ycmVjdEF1Y3Rpb25QZXJpb2QCBXN0YXJ0A2VuZAkAZgIFA2VuZAUFc3RhcnQBFmlzQ29ycmVjdEF1Y3Rpb25QcmljZXMCCnN0YXJ0UHJpY2UIZW5kUHJpY2UJAGYCBQpzdGFydFByaWNlBQhlbmRQcmljZQEHaXNBZG1pbgEGY2FsbGVyCQAAAgUGY2FsbGVyBQR0aGlzAQ1pc1ZhbGlkQ2FsbGVyAgZjYWxsZXIGc2VsbGVyAwkAAAIFBmNhbGxlcgUEdGhpcwYJAAACBQZjYWxsZXIFBnNlbGxlcgEOaXNBdWN0aW9uRW5kZWQCA25vdwNlbmQJAGYCBQNub3cFA2VuZAENaXNFbm91Z2hGdW5kcwIHcGF5bWVudBJjdXJyZW50TW9tZW50UHJpY2UJAGcCBQdwYXltZW50BRJjdXJyZW50TW9tZW50UHJpY2UBB2lzV2F3ZXMBB2Fzc2V0SWQJAAACBQdhc3NldElkBQR1bml0AQxpc0NvcnJlY3ROZnQBBW5mdElkAwkBASEBCQEFaXNOZnQBBQVuZnRJZAkAAgECEFRva2VuIGlzIG5vdCBOZnQDCQELaXNTZWxsRXhpc3QBBQVuZnRJZAkAAgECE1NlbGwgYWxyZWFkeSBleGlzdHMDCQEOaXNBdWN0aW9uRXhpc3QBBQVuZnRJZAkAAgECFkF1Y3Rpb24gYWxyZWFkeSBleGlzdHMFBHVuaXQBEWlzQ29ycmVjdFBheW1lbnRzAwxwYXltZW50QXNzZXQNcGF5bWVudEFtb3VudAVwcmljZQMJAQEhAQkBB2lzV2F3ZXMBBQxwYXltZW50QXNzZXQJAAIBAhhQYXltZW50IG11c3QgYmUgYXQgV0FWRVMDCQEBIQEJAQ1pc0Vub3VnaEZ1bmRzAgUNcGF5bWVudEFtb3VudAUFcHJpY2UJAAIBAhBOb3QgZW5vdWdoIGZ1bmRzBQR1bml0AQdjYWxjRmVlAAAAAQ5jYWxjVHJ1c3RlZEZlZQAAAAEScmVzdWx0RnVuZHNBbW91bnRzAwlpc1RydXN0ZWQNcGF5bWVudEFtb3VudAthY3R1YWxQcmljZQMFCWlzVHJ1c3RlZAkAlAoCCQBlAgULYWN0dWFsUHJpY2UJAQ5jYWxjVHJ1c3RlZEZlZQAJAGUCBQ1wYXltZW50QW1vdW50BQthY3R1YWxQcmljZQkAlAoCCQBlAgULYWN0dWFsUHJpY2UJAQdjYWxjRmVlAAkAZQIFDXBheW1lbnRBbW91bnQFC2FjdHVhbFByaWNlAQdnZXRTbG90AQVuZnRJZAMJAQtpc1NlbGxFeGlzdAEFBW5mdElkCQCUCgIFBWtTZWxsCQEHZ2V0U2VsbAEFBW5mdElkAwkBDmlzQXVjdGlvbkV4aXN0AQUFbmZ0SWQJAJQKAgUIa0F1Y3Rpb24JAQpnZXRBdWN0aW9uAQUFbmZ0SWQJAAIBAhJTbG90IGRvZXNuYHQgZXhpc3QABGtCdXkCA2J1eQoBaQEJY3JlYXRlTmZ0CQhuZnRfbmFtZQluZnRfb3duZXIPbmZ0X2RBcHBBZGRyZXNzCG5mdF90eXBlCG5mdF90YWdzEW5mdF9zZWxsaW5nX3ByaWNlD25mdF9kZXNjcmlwdGlvbgpuZnRfb25TZWxsCG5mdF9kYXRhBAhuZXdUb2tlbgkAwggFBQhuZnRfbmFtZQUPbmZ0X2Rlc2NyaXB0aW9uAAEAAAcEB2lzc3VlSWQJALgIAQUIbmV3VG9rZW4JAMwIAgUIbmV3VG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2lzc3VlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgVPd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfdHlwZQUIbmZ0X3R5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfdGFncwUIbmZ0X3RhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAg9uZnRfZEFwcEFkZHJlc3MFD25mdF9kQXBwQWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAhFuZnRfc2VsbGluZ19wcmljZQURbmZ0X3NlbGxpbmdfcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgpuZnRfb25TZWxsBQpuZnRfb25TZWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X2RhdGEFCG5mdF9kYXRhBQNuaWwBaQEIaXNzdWVOZnQCBG5hbWUEbWV0YQQIbmV3VG9rZW4JAMIIBQUEbmFtZQUEbWV0YQABAAAHBAdpc3N1ZUlkCQC4CAEFCG5ld1Rva2VuCQDMCAIFCG5ld1Rva2VuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdpc3N1ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIFT3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwBaQEGYnV5TkZUAQVuZnRJRAQHYXNzZXRJZAkA2QQBBQVuZnRJRAQGYW1vdW50CQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQFcHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IFBW5mdElEAh5UaGVyZSBpcyBubyBwcmljZSBmb3IgdGhpcyBORlQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgVPd25lcgIITm8gb3duZXIDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAAIBAgxQYXkgaW4gd2F2ZXMDCQBmAgkBDXBhcnNlSW50VmFsdWUBBQVwcmljZQUGYW1vdW50CQACAQIPSW52YWxpZCBwYXltZW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQV2YWx1ZQEJAKYIAQUFb3duZXIJAQ1wYXJzZUludFZhbHVlAQUFcHJpY2UFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBGtCdXkJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yCQCkAwEFBmFtb3VudAUDbmlsAWkBB3NlbGxORlQBBXByaWNlBAskdDA3MzM4NzQyMwkAlAoCCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAZ0b2tlbjAIBQskdDA3MzM4NzQyMwJfMQQHYW1vdW50MAgFCyR0MDczMzg3NDIzAl8yAwkBASEBCQEFaXNOZnQBBQZ0b2tlbjAJAAIBAhBUb2tlbiBpcyBub3QgTkZUCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQZrUHJpY2UFCXNlcGFyYXRvcgkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAKQDAQUFcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBWtTZWxsCQCsAgIJAKwCAgkA2AQBBQZ0b2tlbjAFCXNlcGFyYXRvcgkApAMBBQdhbW91bnQwBQNuaWwBaQEHYWRkU2VsbAEFcHJpY2UEBW5mdElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAQxpc0NvcnJlY3ROZnQBBQVuZnRJZAMJAQEhAQkBEmlzQ29ycmVjdFNlbGxQcmljZQEFBXByaWNlCQACAQIRUHJpY2UgbXVzdCBiZSA+IDAJAMwIAgkBB3NldFNlbGwDBQVuZnRJZAgFAWkGY2FsbGVyBQVwcmljZQUDbmlsAWkBCmFkZEF1Y3Rpb24NCnN0YXJ0UHJpY2UIZW5kUHJpY2UFc3RhcnQDZW5kCG5mdF9uYW1lCW5mdF9vd25lcg9uZnRfZEFwcEFkZHJlc3MIbmZ0X3R5cGUIbmZ0X3RhZ3MRbmZ0X3NlbGxpbmdfcHJpY2UPbmZ0X2Rlc2NyaXB0aW9uCm5mdF9vblNlbGwIbmZ0X2RhdGEEBW5mdElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAQxpc0NvcnJlY3ROZnQBBQVuZnRJZAMJAQEhAQkBFmlzQ29ycmVjdEF1Y3Rpb25QZXJpb2QCBQVzdGFydAUDZW5kCQACAQIVUGVyaW9kIGlzIG5vdCBjb3JyZWN0AwkBASEBCQEWaXNDb3JyZWN0QXVjdGlvblByaWNlcwIFCnN0YXJ0UHJpY2UFCGVuZFByaWNlCQACAQIeU3RhcnQgcHJpY2UgbXVzdCBiZSA+IGVuZFByaWNlCQDMCAIJAQpzZXRBdWN0aW9uBggFAWkGY2FsbGVyBQVuZnRJZAUKc3RhcnRQcmljZQUIZW5kUHJpY2UFBXN0YXJ0BQNlbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUFbmZ0SWQFCXNlcGFyYXRvcgIJbmZ0X293bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQVuZnRJZAUJc2VwYXJhdG9yAghuZnRfdHlwZQUIbmZ0X3R5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUFbmZ0SWQFCXNlcGFyYXRvcgIIbmZ0X3RhZ3MFCG5mdF90YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFBW5mdElkBQlzZXBhcmF0b3ICD25mdF9kQXBwQWRkcmVzcwUPbmZ0X2RBcHBBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkA2AQBBQVuZnRJZAUJc2VwYXJhdG9yAhFuZnRfc2VsbGluZ19wcmljZQURbmZ0X3NlbGxpbmdfcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUFbmZ0SWQFCXNlcGFyYXRvcgIKbmZ0X29uU2VsbAUKbmZ0X29uU2VsbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQVuZnRJZAUJc2VwYXJhdG9yAghuZnRfZGF0YQUIbmZ0X2RhdGEFA25pbAFpAQtidXlGcm9tU2xvdAEFbmZ0SWQECyR0MDkyMjM5MzEyCQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDHBheW1lbnRBc3NldAgFCyR0MDkyMjM5MzEyAl8xBA1wYXltZW50QW1vdW50CAULJHQwOTIyMzkzMTICXzIEB2Fzc2V0SWQJANkEAQUFbmZ0SWQECyR0MDkzNTY5Mzk0CQEHZ2V0U2xvdAEFB2Fzc2V0SWQEBHR5cGUIBQskdDA5MzU2OTM5NAJfMQQHZGV0YWlscwgFCyR0MDkzNTY5Mzk0Al8yBAdiYXNlUmVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQpnZXRTbG90S2V5AgUEdHlwZQUHYXNzZXRJZAUDbmlsAwkAAAIFBHR5cGUFBWtTZWxsBAskdDA5NTM2OTU4MwkBC3BhcnNlQXNTZWxsAQUHZGV0YWlscwQGc2VsbGVyCAULJHQwOTUzNjk1ODMCXzEECnByaWNlVmFsdWUIBQskdDA5NTM2OTU4MwJfMgkBC3ZhbHVlT3JFbHNlAgkBEWlzQ29ycmVjdFBheW1lbnRzAwUMcGF5bWVudEFzc2V0BQ1wYXltZW50QW1vdW50BQpwcmljZVZhbHVlBAskdDA5NjY4OTc3MAkBEnJlc3VsdEZ1bmRzQW1vdW50cwMJAQxpc1RydXN0ZWROZnQBBQdhc3NldElkBQ1wYXltZW50QW1vdW50BQpwcmljZVZhbHVlBAxzZWxsZXJBbW91bnQIBQskdDA5NjY4OTc3MAJfMQQLYnV5ZXJBbW91bnQIBQskdDA5NjY4OTc3MAJfMgQKdXBkYXRlZFJlcwkAzggCBQdiYXNlUmVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBnNlbGxlcgUMc2VsbGVyQW1vdW50BQR1bml0BQNuaWwDCQBmAgULYnV5ZXJBbW91bnQAAAkAzggCBQp1cGRhdGVkUmVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYnV5ZXJBbW91bnQFBHVuaXQFA25pbAUKdXBkYXRlZFJlcwQMJHQwOTk4NzEwMDU2CQEYY2FsY1ByaWNlQXRDdXJyZW50TW9tZW50AgUHYXNzZXRJZAUGaGVpZ2h0BAZzZWxsZXIIBQwkdDA5OTg3MTAwNTYCXzEEC2FjdHVhbFByaWNlCAUMJHQwOTk4NzEwMDU2Al8yCQELdmFsdWVPckVsc2UCCQERaXNDb3JyZWN0UGF5bWVudHMDBQxwYXltZW50QXNzZXQFDXBheW1lbnRBbW91bnQFC2FjdHVhbFByaWNlBA0kdDAxMDE0MjEwMjQ1CQEScmVzdWx0RnVuZHNBbW91bnRzAwkBDGlzVHJ1c3RlZE5mdAEFB2Fzc2V0SWQFDXBheW1lbnRBbW91bnQFC2FjdHVhbFByaWNlBAxzZWxsZXJBbW91bnQIBQ0kdDAxMDE0MjEwMjQ1Al8xBAtidXllckFtb3VudAgFDSR0MDEwMTQyMTAyNDUCXzIECnVwZGF0ZWRSZXMJAM4IAgUHYmFzZVJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZzZWxsZXIFDHNlbGxlckFtb3VudAUEdW5pdAUDbmlsAwkAZgIFC2J1eWVyQW1vdW50AAAJAM4IAgUKdXBkYXRlZFJlcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2J1eWVyQW1vdW50BQR1bml0BQNuaWwFCnVwZGF0ZWRSZXMBaQELZGVjbGluZVNsb3QBBW5mdElkBAdhc3NldElkCQDZBAEFBW5mdElkBA0kdDAxMDU0NjEwNTg0CQEHZ2V0U2xvdAEFB2Fzc2V0SWQEBHR5cGUIBQ0kdDAxMDU0NjEwNTg0Al8xBAdkZXRhaWxzCAUNJHQwMTA1NDYxMDU4NAJfMgQHYmFzZVJlcwkAzAgCCQELRGVsZXRlRW50cnkBCQEKZ2V0U2xvdEtleQIFBHR5cGUFB2Fzc2V0SWQFA25pbAMJAAACBQR0eXBlBQVrU2VsbAQNJHQwMTA2NzYxMDcyMwkBC3BhcnNlQXNTZWxsAQUHZGV0YWlscwQGc2VsbGVyCAUNJHQwMTA2NzYxMDcyMwJfMQQKcHJpY2VWYWx1ZQgFDSR0MDEwNjc2MTA3MjMCXzIDCQEBIQEJAQ1pc1ZhbGlkQ2FsbGVyAggFAWkGY2FsbGVyBQZzZWxsZXIJAAIBAg5JbnZhbGlkIGNhbGxlcgkAzggCBQdiYXNlUmVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBnNlbGxlcgABBQdhc3NldElkBQNuaWwEDSR0MDEwODY4MTA5NzIJAQ5wYXJzZUFzQXVjdGlvbgEFB2RldGFpbHMEBnNlbGxlcggFDSR0MDEwODY4MTA5NzICXzEED3N0YXJ0UHJpY2VWYWx1ZQgFDSR0MDEwODY4MTA5NzICXzIEDWVuZFByaWNlVmFsdWUIBQ0kdDAxMDg2ODEwOTcyAl8zBBBzdGFydFBlcmlvZFZhbHVlCAUNJHQwMTA4NjgxMDk3MgJfNAQOZW5kUGVyaW9kVmFsdWUIBQ0kdDAxMDg2ODEwOTcyAl81AwkBASEBCQENaXNWYWxpZENhbGxlcgIIBQFpBmNhbGxlcgUGc2VsbGVyCQACAQIOSW52YWxpZCBjYWxsZXIDCQEBIQEJAQ5pc0F1Y3Rpb25FbmRlZAIFBmhlaWdodAUOZW5kUGVyaW9kVmFsdWUJAAIBAhdXYWl0IGZvciBlbmQgb2YgYXVjdGlvbgkAzggCBQdiYXNlUmVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBnNlbGxlcgABBQdhc3NldElkBQNuaWwBaQEQc2V0VHJ1c3RlZElzc3VlcgELdHJ1c3RlZEFkZHIDCQEBIQEJAQdpc0FkbWluAQgFAWkGY2FsbGVyCQACAQIKT25seSBhZG1pbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDWdldFRydXN0ZWRLZXkBCQERQGV4dHJOYXRpdmUoMTA2MikBBQt0cnVzdGVkQWRkcgYFA25pbAFpARdnZXRQcmljZUF0Q3VycmVudE1vbWVudAIFbmZ0SWQGbW9tZW50BAdhc3NldElkCQDZBAEFBW5mdElkBA0kdDAxMTUxMzExNTc2CQEYY2FsY1ByaWNlQXRDdXJyZW50TW9tZW50AgUHYXNzZXRJZAUGbW9tZW50BAZzZWxsZXIIBQ0kdDAxMTUxMzExNTc2Al8xBAVwcmljZQgFDSR0MDExNTEzMTE1NzYCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtnZXRQcmljZUtleQEFB2Fzc2V0SWQFBXByaWNlBQNuaWwAAqtGvg==", "height": 2332489, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Bgx9wDKSFvX8jVAoNUmcLjcGcZP8jpwjhHDKJ62kKiRE Next: E9ev8VUisQ1ZrXJzscSL3RuN2uYxYKQXNvC6h8ejX6F3 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "_"
55
66 let kAuction = "auction"
77
88 let kSell = "sell"
99
1010 let kTrusted = "trusted"
1111
1212 let kPrice = "price"
1313
1414 func getSlotKey (prefix,nftId) = ((prefix + separator) + toBase58String(nftId))
1515
1616
1717 func getPriceKey (nftId) = ((kPrice + separator) + toBase58String(nftId))
1818
1919
2020 func getSellKey (nftId) = ((kSell + separator) + toBase58String(nftId))
2121
2222
2323 func getAuctionKey (nftId) = ((kAuction + separator) + toBase58String(nftId))
2424
2525
2626 func getTrustedKey (issuer) = ((kTrusted + separator) + toString(issuer))
2727
2828
2929 func addToList (accum,nextValue) = (accum ++ [nextValue])
3030
3131
3232 func joinString (params) = {
3333 let length = size(params)
3434 if ((length == 0))
3535 then throw("Empty params")
3636 else if ((length == 1))
3737 then makeString({
3838 let $l = params
3939 let $s = size($l)
4040 let $acc0 = nil
4141 func $f0_1 ($a,$i) = if (($i >= $s))
4242 then $a
4343 else addToList($a, $l[$i])
4444
4545 func $f0_2 ($a,$i) = if (($i >= $s))
4646 then $a
4747 else throw("List size exceeds 1")
4848
4949 $f0_2($f0_1($acc0, 0), 1)
5050 }, separator)
5151 else if ((length == 2))
5252 then makeString({
5353 let $l = params
5454 let $s = size($l)
5555 let $acc0 = nil
5656 func $f0_1 ($a,$i) = if (($i >= $s))
5757 then $a
5858 else addToList($a, $l[$i])
5959
6060 func $f0_2 ($a,$i) = if (($i >= $s))
6161 then $a
6262 else throw("List size exceeds 2")
6363
6464 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
6565 }, separator)
6666 else if ((length == 3))
6767 then makeString({
6868 let $l = params
6969 let $s = size($l)
7070 let $acc0 = nil
7171 func $f0_1 ($a,$i) = if (($i >= $s))
7272 then $a
7373 else addToList($a, $l[$i])
7474
7575 func $f0_2 ($a,$i) = if (($i >= $s))
7676 then $a
7777 else throw("List size exceeds 3")
7878
7979 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
8080 }, separator)
8181 else if ((length == 4))
8282 then makeString({
8383 let $l = params
8484 let $s = size($l)
8585 let $acc0 = nil
8686 func $f0_1 ($a,$i) = if (($i >= $s))
8787 then $a
8888 else addToList($a, $l[$i])
8989
9090 func $f0_2 ($a,$i) = if (($i >= $s))
9191 then $a
9292 else throw("List size exceeds 4")
9393
9494 $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
9595 }, separator)
9696 else if ((length == 5))
9797 then makeString({
9898 let $l = params
9999 let $s = size($l)
100100 let $acc0 = nil
101101 func $f0_1 ($a,$i) = if (($i >= $s))
102102 then $a
103103 else addToList($a, $l[$i])
104104
105105 func $f0_2 ($a,$i) = if (($i >= $s))
106106 then $a
107107 else throw("List size exceeds 5")
108108
109109 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
110110 }, separator)
111111 else throw("Max number of parameters exceeded")
112112 }
113113
114114
115115 func parseAsAuction (details) = {
116116 let res = split(details, separator)
117117 $Tuple5(addressFromStringValue(res[0]), parseIntValue(res[1]), parseIntValue(res[2]), parseIntValue(res[3]), parseIntValue(res[4]))
118118 }
119119
120120
121121 func parseAsSell (details) = {
122122 let res = split(details, separator)
123123 $Tuple2(addressFromStringValue(res[0]), parseIntValue(res[1]))
124124 }
125125
126126
127127 func joinStruct (params) = match params {
128128 case auction: (Address, Int, Int, Int, Int) =>
129129 joinString([toString(auction._1), toString(auction._2), toString(auction._3), toString(auction._4), toString(auction._5)])
130130 case sell: (Address, Int) =>
131131 joinString([toString(sell._1), toString(sell._2)])
132132 case _ =>
133133 throw("Wrong params tupple")
134134 }
135135
136136
137137 func setAuction (seller,nftId,startPrice,endPrice,start,end) = StringEntry(getAuctionKey(nftId), joinStruct($Tuple5(seller, startPrice, endPrice, start, end)))
138138
139139
140140 func setSell (nftId,celler,price) = StringEntry(getSellKey(nftId), joinStruct($Tuple2(celler, price)))
141141
142142
143143 func getAuction (nftId) = value(getString(this, getAuctionKey(nftId)))
144144
145145
146146 func getSell (nftId) = value(getString(this, getSellKey(nftId)))
147147
148148
149149 func calcPriceAtCurrentMoment (assetId,moment) = {
150150 let details = getAuction(assetId)
151151 let $t028172921 = parseAsAuction(details)
152152 let seller = $t028172921._1
153153 let startPriceValue = $t028172921._2
154154 let endPriceValue = $t028172921._3
155155 let startPeriodValue = $t028172921._4
156156 let endPeriodValue = $t028172921._5
157157 if ((moment >= endPeriodValue))
158158 then $Tuple2(seller, endPriceValue)
159159 else {
160160 let deltaPrice = (startPriceValue - endPriceValue)
161161 let period = (endPeriodValue - startPeriodValue)
162162 let spended = (moment - startPeriodValue)
163163 $Tuple2(seller, (startPriceValue - fraction(spended, deltaPrice, period)))
164164 }
165165 }
166166
167167
168168 func isNft (assetId) = match assetInfo(assetId) {
169169 case token: Asset =>
170170 if (if ((token.decimals == 0))
171171 then (token.quantity == 1)
172172 else false)
173173 then (token.reissuable == false)
174174 else false
175175 case _ =>
176176 false
177177 }
178178
179179
180180 func isTrustedNft (assetId) = {
181181 let issuer = value(assetInfo(assetId)).issuer
182182 valueOrElse(getBoolean(this, getTrustedKey(issuer)), false)
183183 }
184184
185185
186186 func isSellExist (assetId) = isDefined(getString(this, getSellKey(assetId)))
187187
188188
189189 func isAuctionExist (assetId) = isDefined(getString(this, getAuctionKey(assetId)))
190190
191191
192192 func isCorrectSellPrice (price) = (price > 0)
193193
194194
195195 func isCorrectAuctionPeriod (start,end) = (end > start)
196196
197197
198198 func isCorrectAuctionPrices (startPrice,endPrice) = (startPrice > endPrice)
199199
200200
201201 func isAdmin (caller) = (caller == this)
202202
203203
204204 func isValidCaller (caller,seller) = if ((caller == this))
205205 then true
206206 else (caller == seller)
207207
208208
209209 func isAuctionEnded (now,end) = (now > end)
210210
211211
212212 func isEnoughFunds (payment,currentMomentPrice) = (payment >= currentMomentPrice)
213213
214214
215215 func isWawes (assetId) = (assetId == unit)
216216
217217
218218 func isCorrectNft (nftId) = if (!(isNft(nftId)))
219219 then throw("Token is not Nft")
220220 else if (isSellExist(nftId))
221221 then throw("Sell already exists")
222222 else if (isAuctionExist(nftId))
223223 then throw("Auction already exists")
224224 else unit
225225
226226
227227 func isCorrectPayments (paymentAsset,paymentAmount,price) = if (!(isWawes(paymentAsset)))
228228 then throw("Payment must be at WAVES")
229229 else if (!(isEnoughFunds(paymentAmount, price)))
230230 then throw("Not enough funds")
231231 else unit
232232
233233
234234 func calcFee () = 0
235235
236236
237237 func calcTrustedFee () = 0
238238
239239
240240 func resultFundsAmounts (isTrusted,paymentAmount,actualPrice) = if (isTrusted)
241241 then $Tuple2((actualPrice - calcTrustedFee()), (paymentAmount - actualPrice))
242242 else $Tuple2((actualPrice - calcFee()), (paymentAmount - actualPrice))
243243
244244
245245 func getSlot (nftId) = if (isSellExist(nftId))
246246 then $Tuple2(kSell, getSell(nftId))
247247 else if (isAuctionExist(nftId))
248248 then $Tuple2(kAuction, getAuction(nftId))
249249 else throw("Slot doesn`t exist")
250250
251251
252252 let kBuy = "buy"
253253
254254 @Callable(i)
255255 func createNft (nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
256256 let newToken = Issue(nft_name, nft_description, 1, 0, false)
257257 let issueId = calculateAssetId(newToken)
258258 [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)]
259259 }
260260
261261
262262
263263 @Callable(i)
264264 func issueNft (name,meta) = {
265265 let newToken = Issue(name, meta, 1, 0, false)
266266 let issueId = calculateAssetId(newToken)
267267 [newToken, ScriptTransfer(i.caller, 1, issueId), StringEntry(((toBase58String(issueId) + separator) + "Owner"), toString(i.caller))]
268268 }
269269
270270
271271
272272 @Callable(i)
273273 func buyNFT (nftID) = {
274274 let assetId = fromBase58String(nftID)
275275 let amount = value(i.payments[0].amount)
276276 let price = valueOrErrorMessage(getString(((kPrice + separator) + nftID)), "There is no price for this NFT")
277277 let owner = valueOrErrorMessage(getStringValue(((nftID + separator) + "Owner")), "No owner")
278278 if ((i.payments[0].assetId != unit))
279279 then throw("Pay in waves")
280280 else if ((parseIntValue(price) > amount))
281281 then throw("Invalid payment")
282282 else [ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(value(addressFromString(owner)), parseIntValue(price), unit), StringEntry(((toString(i.caller) + separator) + kBuy), ((nftID + separator) + toString(amount)))]
283283 }
284284
285285
286286
287287 @Callable(i)
288288 func sellNFT (price) = {
289289 let $t073387423 = $Tuple2(value(i.payments[0].assetId), value(i.payments[0].amount))
290290 let token0 = $t073387423._1
291291 let amount0 = $t073387423._2
292292 if (!(isNft(token0)))
293293 then throw("Token is not NFT")
294294 else [StringEntry(((kPrice + separator) + toBase58String(value(i.payments[0].assetId))), toString(price)), StringEntry(((toString(i.caller) + separator) + kSell), ((toBase58String(token0) + separator) + toString(amount0)))]
295295 }
296296
297297
298298
299299 @Callable(i)
300300 func addSell (price) = {
301301 let nftId = value(i.payments[0].assetId)
302302 valueOrElse(isCorrectNft(nftId), if (!(isCorrectSellPrice(price)))
303303 then throw("Price must be > 0")
304304 else [setSell(nftId, i.caller, price)])
305305 }
306306
307307
308308
309309 @Callable(i)
310310 func addAuction (startPrice,endPrice,start,end,nft_name,nft_owner,nft_dAppAddress,nft_type,nft_tags,nft_selling_price,nft_description,nft_onSell,nft_data) = {
311311 let nftId = value(i.payments[0].assetId)
312312 valueOrElse(isCorrectNft(nftId), if (!(isCorrectAuctionPeriod(start, end)))
313313 then throw("Period is not correct")
314314 else if (!(isCorrectAuctionPrices(startPrice, endPrice)))
315315 then throw("Start price must be > endPrice")
316316 else [setAuction(i.caller, nftId, startPrice, endPrice, start, end), StringEntry(((toBase58String(nftId) + separator) + "nft_owner"), toString(i.caller)), StringEntry(((toBase58String(nftId) + separator) + "nft_type"), nft_type), StringEntry(((toBase58String(nftId) + separator) + "nft_tags"), nft_tags), StringEntry(((toBase58String(nftId) + separator) + "nft_dAppAddress"), nft_dAppAddress), IntegerEntry(((toBase58String(nftId) + separator) + "nft_selling_price"), nft_selling_price), StringEntry(((toBase58String(nftId) + separator) + "nft_onSell"), nft_onSell), StringEntry(((toBase58String(nftId) + separator) + "nft_data"), nft_data)])
317317 }
318318
319319
320320
321321 @Callable(i)
322322 func buyFromSlot (nftId) = {
323323 let $t092239312 = $Tuple2(i.payments[0].assetId, value(i.payments[0].amount))
324324 let paymentAsset = $t092239312._1
325325 let paymentAmount = $t092239312._2
326326 let assetId = fromBase58String(nftId)
327327 let $t093569394 = getSlot(assetId)
328328 let type = $t093569394._1
329329 let details = $t093569394._2
330330 let baseRes = [ScriptTransfer(i.caller, 1, assetId), DeleteEntry(getSlotKey(type, assetId))]
331331 if ((type == kSell))
332332 then {
333333 let $t095369583 = parseAsSell(details)
334334 let seller = $t095369583._1
335335 let priceValue = $t095369583._2
336336 valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, priceValue), {
337337 let $t096689770 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, priceValue)
338338 let sellerAmount = $t096689770._1
339339 let buyerAmount = $t096689770._2
340340 let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)])
341341 if ((buyerAmount > 0))
342342 then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)])
343343 else updatedRes
344344 })
345345 }
346346 else {
347347 let $t0998710056 = calcPriceAtCurrentMoment(assetId, height)
348348 let seller = $t0998710056._1
349349 let actualPrice = $t0998710056._2
350350 valueOrElse(isCorrectPayments(paymentAsset, paymentAmount, actualPrice), {
351351 let $t01014210245 = resultFundsAmounts(isTrustedNft(assetId), paymentAmount, actualPrice)
352352 let sellerAmount = $t01014210245._1
353353 let buyerAmount = $t01014210245._2
354354 let updatedRes = (baseRes ++ [ScriptTransfer(seller, sellerAmount, unit)])
355355 if ((buyerAmount > 0))
356356 then (updatedRes ++ [ScriptTransfer(i.caller, buyerAmount, unit)])
357357 else updatedRes
358358 })
359359 }
360360 }
361361
362362
363363
364364 @Callable(i)
365365 func declineSlot (nftId) = {
366366 let assetId = fromBase58String(nftId)
367367 let $t01054610584 = getSlot(assetId)
368368 let type = $t01054610584._1
369369 let details = $t01054610584._2
370370 let baseRes = [DeleteEntry(getSlotKey(type, assetId))]
371371 if ((type == kSell))
372372 then {
373373 let $t01067610723 = parseAsSell(details)
374374 let seller = $t01067610723._1
375375 let priceValue = $t01067610723._2
376376 if (!(isValidCaller(i.caller, seller)))
377377 then throw("Invalid caller")
378378 else (baseRes ++ [ScriptTransfer(seller, 1, assetId)])
379379 }
380380 else {
381381 let $t01086810972 = parseAsAuction(details)
382382 let seller = $t01086810972._1
383383 let startPriceValue = $t01086810972._2
384384 let endPriceValue = $t01086810972._3
385385 let startPeriodValue = $t01086810972._4
386386 let endPeriodValue = $t01086810972._5
387387 if (!(isValidCaller(i.caller, seller)))
388388 then throw("Invalid caller")
389389 else if (!(isAuctionEnded(height, endPeriodValue)))
390390 then throw("Wait for end of auction")
391391 else (baseRes ++ [ScriptTransfer(seller, 1, assetId)])
392392 }
393393 }
394394
395395
396396
397397 @Callable(i)
398398 func setTrustedIssuer (trustedAddr) = if (!(isAdmin(i.caller)))
399399 then throw("Only admin")
400400 else [BooleanEntry(getTrustedKey(addressFromStringValue(trustedAddr)), true)]
401401
402402
403403
404404 @Callable(i)
405405 func getPriceAtCurrentMoment (nftId,moment) = {
406406 let assetId = fromBase58String(nftId)
407407 let $t01151311576 = calcPriceAtCurrentMoment(assetId, moment)
408408 let seller = $t01151311576._1
409409 let price = $t01151311576._2
410410 [IntegerEntry(getPriceKey(assetId), price)]
411411 }
412412
413413

github/deemru/w8io/169f3d6 
53.50 ms