tx · 3Znh7af43gNxaDHbfkJguMThMGNi6g85qkXQWZWqHtYx 3N9cKCHp6ZLMgz7rRgF8Q8DEt8zbtd1Ht7F: -0.01100000 Waves 2023.01.24 15:45 [2419065] smart account 3N9cKCHp6ZLMgz7rRgF8Q8DEt8zbtd1Ht7F > SELF 0.00000000 Waves
{ "type": 13, "id": "3Znh7af43gNxaDHbfkJguMThMGNi6g85qkXQWZWqHtYx", "fee": 1100000, "feeAssetId": null, "timestamp": 1674564445993, "version": 2, "chainId": 84, "sender": "3N9cKCHp6ZLMgz7rRgF8Q8DEt8zbtd1Ht7F", "senderPublicKey": "3V22YUj3GF4AeBxdWx8rgGdG4groE4W6P2s4sAkshe7R", "proofs": [ "cgQVUpZUBjj19HsKEhASutus4TZXhbkAHGXFeRptgLWJ8gVU1P2XExpZZNU7TLXMwsd8coRSMbRVACmXndBqm9m" ], "script": "base64:BgJLCAISCwoJCAgICAgBCAgIEgMKAQgSBAoCCAgSAwoBCBIGCgQICAgBEgYKBAgICAgSBQoDCAgBEgMKAQgSAwoBCBIECgIICBIDCgEICwAJc2VwYXJhdG9yAgFfAARrQnV5AgNidXkABmtQcmljZQIFcHJpY2UABWtTZWxsAgRzZWxsABJtYXhBdWN0aW9uRHVyYXRpb24ABwAFdGVhbXMBIIVjlaPziI6w3gwXjghOv5o/krsm2zrodo4W3BQiKkh+AAV3YXZlcwEAAARrQmlkAgNiaWQADHN0YXR1c0Zvck5GVAkAlgoEAgRPUEVOAgZDTE9TRUQCCFJFV0FSREVEAghDQU5DRUxFRAALZEFwcEFkZHJlc3MBGgFUSrhPbN7C2pPt9I7pSjb41U9/ldVVW12gAQVpc05mdAEHYXNzZXRJZAQHJG1hdGNoMAkA7AcBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAV0b2tlbgUHJG1hdGNoMAMDCQAAAggFBXRva2VuCGRlY2ltYWxzAAAJAAACCAUFdG9rZW4IcXVhbnRpdHkAAQcJAAACCAUFdG9rZW4KcmVpc3N1YWJsZQcHBwsBaQEJY3JlYXRlTmZ0CQhuZnRfbmFtZQluZnRfb3duZXIPbmZ0X2RBcHBBZGRyZXNzCG5mdF90eXBlCG5mdF90YWdzEW5mdF9zZWxsaW5nX3ByaWNlD25mdF9kZXNjcmlwdGlvbgpuZnRfb25TZWxsCG5mdF9kYXRhBAhuZXdUb2tlbgkAwggFBQhuZnRfbmFtZQUPbmZ0X2Rlc2NyaXB0aW9uAAEAAAcEB2lzc3VlSWQJALgIAQUIbmV3VG9rZW4EBHR4SWQIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgUIbmV3VG9rZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2lzc3VlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgVPd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfdHlwZQUIbmZ0X3R5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfdGFncwUIbmZ0X3RhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAg9uZnRfZEFwcEFkZHJlc3MFD25mdF9kQXBwQWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAhFuZnRfc2VsbGluZ19wcmljZQURbmZ0X3NlbGxpbmdfcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAgpuZnRfb25TZWxsBQpuZnRfb25TZWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X2RhdGEFCG5mdF9kYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFBHR4SWQFCXNlcGFyYXRvcgIJaXNzdWVfbmZ0CQDYBAEFB2lzc3VlSWQFA25pbAFpAQdzZWxsTkZUAQVwcmljZQQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAQGc2VsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAskdDAxODc3MTk2MgkAlAoCCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAZ0b2tlbjAIBQskdDAxODc3MTk2MgJfMQQHYW1vdW50MAgFCyR0MDE4NzcxOTYyAl8yAwkBASEBCQEFaXNOZnQBBQZ0b2tlbjAJAAIBAhBUb2tlbiBpcyBub3QgTkZUCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQZrUHJpY2UFCXNlcGFyYXRvcgkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBXByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQVrU2VsbAkArAICCQCsAgIJANgEAQUGdG9rZW4wBQlzZXBhcmF0b3IJAKQDAQUHYW1vdW50MAUDbmlsAWkBBmJ1eU5GVAIFbmZ0SUQRY3VycmVudF9uZnRfb3duZXIEB2Fzc2V0SWQJANkEAQUFbmZ0SUQEBmFtb3VudAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEEGNoZWNrT3duZXJJc1NhbWUEByRtYXRjaDAJAJ0IAgUEdGhpcwkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhBwQFcHJpY2UJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IFBW5mdElEAgFfBRFjdXJyZW50X25mdF9vd25lcgMJAAACBRFjdXJyZW50X25mdF9vd25lcgkApQgBCAUBaQZjYWxsZXIJAAIBAiljdXJyZW50IE93bmVyIG9mIE5GVCBub3QgYWJsZSB0byBwdXJjaGFzZQMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRFjdXJyZW50X25mdF9vd25lcgUGYW1vdW50BQV0ZWFtcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXIFCXNlcGFyYXRvcgUEa0J1eQkArAICCQCsAgIFBW5mdElEBQlzZXBhcmF0b3IJAKQDAQUGYW1vdW50CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBRFjdXJyZW50X25mdF9vd25lcgIGX293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBRFjdXJyZW50X25mdF9vd25lcgIGX293bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgIGX293bmVyCQClCAEIBQFpBmNhbGxlcgUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRFjdXJyZW50X25mdF9vd25lcgUGYW1vdW50BQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwBaQEKY2FuY2VsU2VsbAEFbmZ0SWQEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGc2VsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQR0eElkBQVuZnRJZAILX25mdF9zdGF0dXMCCENBTkNFTEVECQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUGc2VsbGVyAAEJANkEAQUFbmZ0SWQFA25pbAFpAQphZGRBdWN0aW9uBAVzdGFydANlbmQKc3RhcnRQcmljZQhkdXJhdGlvbgQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAVuZnRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAVwcmljZQkBBXZhbHVlAQUKc3RhcnRQcmljZQQJZW5kSGVpZ2h0CQBkAggFCWxhc3RCbG9jawZoZWlnaHQFCGR1cmF0aW9uBAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEEWNoZWNrTmZ0QXVjdGlvbmVkBAckbWF0Y2gwCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJANgEAQUFbmZ0SWQFCXNlcGFyYXRvcgILbmZ0X3N0YXR1c18JANgEAQUGY2FsbGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAYHAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAAgECEE5GVCBub3QgYXR0YWNoZWQDCQAAAgURY2hlY2tOZnRBdWN0aW9uZWQGCQACAQIXQWxyZWFkeSBpbiBhdWN0aW9uIGxpc3QDCQBmAgUIZHVyYXRpb24FEm1heEF1Y3Rpb25EdXJhdGlvbgkAAgEJAKwCAgI2RHVyYXRpb24gaXMgdG9vIGxvbmcuIE11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDcgCQCkAwEFEm1heEF1Y3Rpb25EdXJhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUEdHhJZAIYX25mdF9zdGFydF9hdWN0aW9uX2RhdGVfCQDYBAEFBmNhbGxlcgUFc3RhcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQCFl9uZnRfZW5kX2F1Y3Rpb25fZGF0ZV8JANgEAQUGY2FsbGVyBQNlbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhBfbmZ0X3N0YXJ0X3ByaWNlBQpzdGFydFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIKX25mdF9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAg9fbmZ0X29uX2F1Y3Rpb24JANgEAQUFbmZ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhBfcHJldmlvdXNfYmlkZGVyAgRub25lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIMX2hpZ2hlc3RfYmlkAgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIOX3dpbm5lcl9vZl9uZnQCATAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAg1fYmlkZGVyX2NvdW50AgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAILX25mdF9zdGF0dXMCBE9QRU4FA25pbAFpAQhwbGFjZUJpZAQJYXVjdGlvbklkBW5mdElkCW5mdF9vd25lcgliaWRfcHJpY2UEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdhc3NldElkCQDZBAEFBW5mdElkBA9jdXJyZW50QmlkUHJpY2UICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBVnZXRMYXN0V2lubmVyQmlkUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQEGGdldFByZXZpb3VzQmlkZGVyQWRkcmVzcwkAnQgCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIQX3ByZXZpb3VzX2JpZGRlcgQPY3VycmVudEJpZENvdW50CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAINX2JpZGRlcl9jb3VudAQUZ2V0TGFzdFdpbm5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAQRY2hlY2tOZnRBdWN0aW9uZWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAAgECDFBheSBpbiB3YXZlcwMJAQIhPQIFEWNoZWNrTmZ0QXVjdGlvbmVkAgRPUEVOCQACAQIUTm90IG9wZW4gZm9yIGF1Y3Rpb24DCQBnAgkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFD2N1cnJlbnRCaWRQcmljZQkAAgECJUJpZCBpcyBsZXNzIHRoZW4gc3RhcnRpbmcvaGlnaGVzdCBCaWQDCQAAAgUVZ2V0TGFzdFdpbm5lckJpZFByaWNlAgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQJAKQDAQUPY3VycmVudEJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgdfbmZ0X2lkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIFCW5mdF9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAkApAMBBQ9jdXJyZW50QmlkUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgdfd2lubmVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIHX25mdF9pZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIKX25mdF9vd25lcgUJbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIPX2JpZF9mb3JfbmZ0X2J5CQDYBAEFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9iaWRfcHJpY2VfcGxhY2UFCWJpZF9wcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCJl9wcmV2aW91c19iaWRfYW1vdW50X3JlZnVuZF90b19hZGRyZXNzBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCG19wcmV2b2l1c19iaWRfYW1vdW50X3JlZnVuZAUVZ2V0TGFzdFdpbm5lckJpZFByaWNlBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAkApAMBBQ9jdXJyZW50QmlkUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCDl93aW5uZXJfb2ZfbmZ0CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCDV9iaWRkZXJfY291bnQJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQUPY3VycmVudEJpZENvdW50AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCB19uZnRfaWQJANgEAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIKX25mdF9vd25lcgUJbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkCQCkAwEFD2N1cnJlbnRCaWRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCB193aW5uZXIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCDV9iaWRkZXJfY291bnQJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQUPY3VycmVudEJpZENvdW50AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgdfbmZ0X2lkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgpfbmZ0X293bmVyBQluZnRfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAg9fYmlkX2Zvcl9uZnRfYnkJANgEAQUGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX2JpZF9wcmljZV9wbGFjZQUJYmlkX3ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAImX3ByZXZpb3VzX2JpZF9hbW91bnRfcmVmdW5kX3RvX2FkZHJlc3MFFGdldExhc3RXaW5uZXJBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIbX3ByZXZvaXVzX2JpZF9hbW91bnRfcmVmdW5kBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFFGdldExhc3RXaW5uZXJBZGRyZXNzCQENcGFyc2VJbnRWYWx1ZQEFFWdldExhc3RXaW5uZXJCaWRQcmljZQUEdW5pdAUDbmlsAWkBDmFjY2VwdEJpZE9mZmVyAwlhdWN0aW9uSWQFbmZ0SWQUYmlkX2Ftb3VudF9mcm9tX3VzZXIEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdhc3NldElkCQDZBAEFBW5mdElkBBJnZXROZnRXaW5uaW5nUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQEEGdldEF1Y3Rpb25XaW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBBRJnZXROZnRXaW5uaW5nUHJpY2UFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFEGdldEF1Y3Rpb25XaW5uZXIAAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCFV9hbW91bnRfcGFpZF90b19vd25lcgUSZ2V0TmZ0V2lubmluZ1ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX25mdF90cmFuc2Zlcl90bwUQZ2V0QXVjdGlvbldpbm5lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCC19uZnRfc3RhdHVzAghSRVdBUkRFRAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIVX2Ftb3VudF9wYWlkX3RvX293bmVyBRJnZXROZnRXaW5uaW5nUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCEF9uZnRfdHJhbnNmZXJfdG8FEGdldEF1Y3Rpb25XaW5uZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCC19uZnRfc3RhdHVzAghSRVdBUkRFRAUDbmlsAWkBDWNhbmNlbEF1Y3Rpb24BCWF1Y3Rpb25JZAQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEDWF1Y3Rpb25TdGF0dXMJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwQNYmlkZGluZ1dpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDl93aW5uZXJfb2ZfbmZ0BAhuZnRPd25lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIEBW5mdElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIPX25mdF9vbl9hdWN0aW9uBAxiaWRkaW5nUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQDCQAAAgUNYmlkZGluZ1dpbm5lcgIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUEdHhJZAUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAILX25mdF9zdGF0dXMCCENBTkNFTEVECQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAiZfcHJldmlvdXNfYmlkX2Ftb3VudF9yZWZ1bmRfdG9fYWRkcmVzcwUNYmlkZGluZ1dpbm5lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIbX3ByZXZvaXVzX2JpZF9hbW91bnRfcmVmdW5kBQxiaWRkaW5nUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAiZfcHJldmlvdXNfYmlkX2Ftb3VudF9yZWZ1bmRfdG9fYWRkcmVzcwUNYmlkZGluZ1dpbm5lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCG19wcmV2b2l1c19iaWRfYW1vdW50X3JlZnVuZAUMYmlkZGluZ1ByaWNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQhuZnRPd25lcgABCQDZBAEFBW5mdElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQ1iaWRkaW5nV2lubmVyCQENcGFyc2VJbnRWYWx1ZQEFDGJpZGRpbmdQcmljZQUEdW5pdAUDbmlsAWkBC3dpdGhkcmF3QmlkAQdiaWRUeElkBAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMECGJpZFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFB2JpZFR4SWQCDF9oaWdoZXN0X2JpZAQIYXNCaWRkZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUHYmlkVHhJZAIHX3dpbm5lcgQJYmlkRm9yTkZUCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFB2JpZFR4SWQCB19uZnRfaWQDCQECIT0CCQDYBAEFBmNhbGxlcgUIYXNCaWRkZXIJAAIBAgZObyBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAghfbmZ0X2JpZAIIV0lUSERSQVcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAgdfbmZ0X2lkBQliaWRGb3JORlQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAhxfYmlkZGluZ19wcmljZV9yZWZ1bmRfYW1vdW50BQhiaWRQcmljZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAQ1wYXJzZUludFZhbHVlAQUIYmlkUHJpY2UFBHVuaXQFA25pbAFpARJtYW51YWxGdW5kVHJhbnNmZXICDXJlY2VwaWVudEFkZHIHbWVzc2FnZQQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdyZWNpdmVyCQDZBAEFDXJlY2VwaWVudEFkZHIEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDCQAAAgkApAMBBQZhbW91bnQCAAkAAgECIFBheW1lbnQgaXMgbm90IGF0dGFjaGVkIG9yIGVtcHR5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJANgEAQUGY2FsbGVyAglfdHJhbnNmZXIFBmFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJANgEAQUGY2FsbGVyAgxfdHJhbnNmZXJfdG8FDXJlY2VwaWVudEFkZHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQdyZWNpdmVyBQZhbW91bnQFBHVuaXQFA25pbAFpAQd0ZXN0QmlkAQRkYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQICOEU4a2tGQllDeTQ0SkphcTZwQVo2S2l6c3VSZXNpNVVLTmhiRDFXTlp3aGhZX2hpZ2hlc3RfYmlkAgEwBQNuaWwAoSyazQ==", "height": 2419065, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2Q7gK7vm9X6q5tjD4n5i3V2NLuDy75ao4DgLN91871ZL Next: 2enx3TqAnFVefz5P4fy96NpVa8vwVqXPjo9SM9PhSc4W Diff:
Old | New | Differences | |
---|---|---|---|
11 | 11 | ||
12 | 12 | let e = 7 | |
13 | 13 | ||
14 | - | let f = | |
14 | + | let f = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq' | |
15 | 15 | ||
16 | - | let g = | |
16 | + | let g = base58'' | |
17 | 17 | ||
18 | - | let h = | |
18 | + | let h = "bid" | |
19 | 19 | ||
20 | - | func i (j) = { | |
21 | - | let k = assetInfo(j) | |
22 | - | if ($isInstanceOf(k, "Asset")) | |
20 | + | let i = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED") | |
21 | + | ||
22 | + | let j = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq' | |
23 | + | ||
24 | + | func k (l) = { | |
25 | + | let m = assetInfo(l) | |
26 | + | if ($isInstanceOf(m, "Asset")) | |
23 | 27 | then { | |
24 | - | let | |
25 | - | if (if (( | |
26 | - | then ( | |
28 | + | let n = m | |
29 | + | if (if ((n.decimals == 0)) | |
30 | + | then (n.quantity == 1) | |
27 | 31 | else false) | |
28 | - | then ( | |
32 | + | then (n.reissuable == false) | |
29 | 33 | else false | |
30 | 34 | } | |
31 | 35 | else false | |
32 | 36 | } | |
33 | 37 | ||
34 | 38 | ||
35 | - | @Callable( | |
36 | - | func createNft ( | |
37 | - | let | |
38 | - | let | |
39 | - | let | |
40 | - | [ | |
39 | + | @Callable(o) | |
40 | + | func createNft (p,q,r,s,t,u,v,w,x) = { | |
41 | + | let y = Issue(p, v, 1, 0, false) | |
42 | + | let z = calculateAssetId(y) | |
43 | + | let A = o.transactionId | |
44 | + | [y, ScriptTransfer(o.caller, 1, z), StringEntry(((toBase58String(z) + a) + "Owner"), toString(o.caller)), StringEntry(((toBase58String(z) + a) + "nft_type"), s), StringEntry(((toBase58String(z) + a) + "nft_tags"), t), StringEntry(((toBase58String(z) + a) + "nft_dAppAddress"), r), IntegerEntry(((toBase58String(z) + a) + "nft_selling_price"), u), StringEntry(((toBase58String(z) + a) + "nft_onSell"), w), StringEntry(((toBase58String(z) + a) + "nft_data"), x), StringEntry(((toBase58String(A) + a) + "issue_nft"), toBase58String(z))] | |
41 | 45 | } | |
42 | 46 | ||
43 | 47 | ||
44 | 48 | ||
45 | - | @Callable( | |
46 | - | func sellNFT ( | |
47 | - | let | |
48 | - | let | |
49 | - | let | |
50 | - | let | |
51 | - | let | |
52 | - | if (!( | |
49 | + | @Callable(o) | |
50 | + | func sellNFT (B) = { | |
51 | + | let A = o.transactionId | |
52 | + | let C = o.caller.bytes | |
53 | + | let D = $Tuple2(value(o.payments[0].assetId), value(o.payments[0].amount)) | |
54 | + | let E = D._1 | |
55 | + | let F = D._2 | |
56 | + | if (!(k(E))) | |
53 | 57 | then throw("Token is not NFT") | |
54 | - | else [StringEntry(((c + a) + toBase58String(value( | |
58 | + | else [StringEntry(((c + a) + toBase58String(value(o.payments[0].assetId))), B), StringEntry(((toString(o.caller) + a) + d), ((toBase58String(E) + a) + toString(F)))] | |
55 | 59 | } | |
56 | 60 | ||
57 | 61 | ||
58 | 62 | ||
59 | - | @Callable( | |
60 | - | func buyNFT ( | |
61 | - | let | |
62 | - | let | |
63 | - | let | |
64 | - | let | |
65 | - | if ($isInstanceOf( | |
63 | + | @Callable(o) | |
64 | + | func buyNFT (G,H) = { | |
65 | + | let l = fromBase58String(G) | |
66 | + | let I = value(o.payments[0].amount) | |
67 | + | let J = { | |
68 | + | let m = getString(this, (("nft_" + H) + "_owner")) | |
69 | + | if ($isInstanceOf(m, "String")) | |
66 | 70 | then { | |
67 | - | let | |
68 | - | | |
71 | + | let K = m | |
72 | + | K | |
69 | 73 | } | |
70 | 74 | else false | |
71 | 75 | } | |
72 | - | let | |
73 | - | if (( | |
74 | - | then throw(" | |
75 | - | else if (( | |
76 | - | then | |
77 | - | else [ScriptTransfer( | |
76 | + | let B = getStringValue(((((c + a) + G) + "_") + H)) | |
77 | + | if ((H == toString(o.caller))) | |
78 | + | then throw("current Owner of NFT not able to purchase") | |
79 | + | else if ((o.payments[0].assetId == f)) | |
80 | + | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(H)), I, f), StringEntry(((toString(o.caller) + a) + b), ((G + a) + toString(I))), DeleteEntry((("nft_" + H) + "_owner")), StringEntry((("nft_" + H) + "_owner"), toString(o.caller)), StringEntry(((G + a) + "_owner"), toString(o.caller))] | |
81 | + | else [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(H)), I, unit), StringEntry(((toString(o.caller) + a) + b), ((G + a) + toString(I))), DeleteEntry((("nft_" + H) + "_owner")), StringEntry((("nft_" + H) + "_owner"), toString(o.caller)), StringEntry(((G + a) + "_owner"), toString(o.caller))] | |
78 | 82 | } | |
79 | 83 | ||
80 | 84 | ||
81 | 85 | ||
82 | - | @Callable(m) | |
83 | - | func addAuction (J,K,L,M) = { | |
84 | - | let y = toBase58String(m.transactionId) | |
85 | - | let N = value(m.payments[0].assetId) | |
86 | - | let z = value(L) | |
87 | - | let O = (lastBlock.height + M) | |
88 | - | let P = m.caller.bytes | |
89 | - | let Q = { | |
90 | - | let k = getString(this, (((toBase58String(N) + a) + "nft_status_") + toBase58String(P))) | |
91 | - | if ($isInstanceOf(k, "String")) | |
86 | + | @Callable(o) | |
87 | + | func cancelSell (L) = { | |
88 | + | let A = toBase58String(o.transactionId) | |
89 | + | let C = o.caller.bytes | |
90 | + | [StringEntry(((A + L) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(C), 1, fromBase58String(L))] | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | ||
95 | + | @Callable(o) | |
96 | + | func addAuction (M,N,O,P) = { | |
97 | + | let A = toBase58String(o.transactionId) | |
98 | + | let L = value(o.payments[0].assetId) | |
99 | + | let B = value(O) | |
100 | + | let Q = (lastBlock.height + P) | |
101 | + | let R = o.caller.bytes | |
102 | + | let S = { | |
103 | + | let m = getString(this, (((toBase58String(L) + a) + "nft_status_") + toBase58String(R))) | |
104 | + | if ($isInstanceOf(m, "String")) | |
92 | 105 | then { | |
93 | - | let | |
106 | + | let K = m | |
94 | 107 | true | |
95 | 108 | } | |
96 | 109 | else false | |
97 | 110 | } | |
98 | - | if (( | |
111 | + | if ((o.payments[0].assetId == unit)) | |
99 | 112 | then throw("NFT not attached") | |
100 | - | else if (( | |
113 | + | else if ((S == true)) | |
101 | 114 | then throw("Already in auction list") | |
102 | - | else if (( | |
115 | + | else if ((P > e)) | |
103 | 116 | then throw(("Duration is too long. Must be less than or equal to 7 " + toString(e))) | |
104 | - | else [StringEntry((( | |
117 | + | else [StringEntry(((A + "_nft_start_auction_date_") + toBase58String(R)), M), StringEntry(((A + "_nft_end_auction_date_") + toBase58String(R)), N), StringEntry((A + "_nft_start_price"), O), StringEntry((A + "_nft_owner"), toString(o.caller)), StringEntry((A + "_nft_on_auction"), toBase58String(L)), StringEntry((A + "_previous_bidder"), "none"), StringEntry((A + "_highest_bid"), "0"), StringEntry((A + "_winner_of_nft"), "0"), StringEntry((A + "_bidder_count"), "0"), StringEntry((A + "_nft_status"), "OPEN")] | |
105 | 118 | } | |
106 | 119 | ||
107 | 120 | ||
108 | 121 | ||
109 | - | @Callable( | |
110 | - | func placeBid ( | |
111 | - | let | |
112 | - | let | |
113 | - | let | |
114 | - | let | |
115 | - | let | |
116 | - | let | |
117 | - | let | |
118 | - | let | |
119 | - | let | |
120 | - | if (( | |
122 | + | @Callable(o) | |
123 | + | func placeBid (T,L,q,U) = { | |
124 | + | let A = toBase58String(o.transactionId) | |
125 | + | let R = o.caller.bytes | |
126 | + | let l = fromBase58String(L) | |
127 | + | let V = o.payments[0].amount | |
128 | + | let W = getStringValue(this, (T + "_highest_bid")) | |
129 | + | let X = getString(this, (T + "_previous_bidder")) | |
130 | + | let Y = getStringValue(this, (T + "_bidder_count")) | |
131 | + | let Z = getStringValue(this, (T + "_winner_of_nft")) | |
132 | + | let S = getStringValue(this, (T + "_nft_status")) | |
133 | + | if ((o.payments[0].assetId != unit)) | |
121 | 134 | then throw("Pay in waves") | |
122 | - | else if (( | |
135 | + | else if ((S != "OPEN")) | |
123 | 136 | then throw("Not open for auction") | |
124 | - | else if ((parseIntValue( | |
137 | + | else if ((parseIntValue(W) >= V)) | |
125 | 138 | then throw("Bid is less then starting/highest Bid") | |
126 | - | else if (( | |
127 | - | then [StringEntry(( | |
128 | - | else [StringEntry(( | |
139 | + | else if ((W == "0")) | |
140 | + | then [StringEntry((T + "_highest_bid"), toString(V)), StringEntry((T + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((T + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((T + "_nft_id"), toBase58String(l)), StringEntry((T + "_nft_owner"), q), StringEntry((((A + "_") + T) + "_highest_bid"), toString(V)), StringEntry((((A + "_") + T) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + T) + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((((A + "_") + T) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + T) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(R)), StringEntry((A + "_bid_price_place"), U), StringEntry((A + "_previous_bid_amount_refund_to_address"), Z), StringEntry((A + "_prevoius_bid_amount_refund"), W)] | |
141 | + | else [StringEntry((T + "_highest_bid"), toString(V)), StringEntry((T + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((T + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((T + "_nft_id"), toBase58String(l)), StringEntry((T + "_nft_owner"), q), StringEntry((((A + "_") + T) + "_highest_bid"), toString(V)), StringEntry((((A + "_") + T) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + T) + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((((A + "_") + T) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + T) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(R)), StringEntry((A + "_bid_price_place"), U), StringEntry((A + "_previous_bid_amount_refund_to_address"), Z), StringEntry((A + "_prevoius_bid_amount_refund"), W), ScriptTransfer(Address(fromBase58String(Z)), parseIntValue(W), unit)] | |
129 | 142 | } | |
130 | 143 | ||
131 | 144 | ||
132 | 145 | ||
133 | - | @Callable( | |
134 | - | func acceptBidOffer ( | |
135 | - | let | |
136 | - | let | |
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | [ScriptTransfer(Address( | |
146 | + | @Callable(o) | |
147 | + | func acceptBidOffer (T,L,aa) = { | |
148 | + | let A = toBase58String(o.transactionId) | |
149 | + | let R = o.caller.bytes | |
150 | + | let l = fromBase58String(L) | |
151 | + | let ab = getStringValue(this, (T + "_highest_bid")) | |
152 | + | let ac = getStringValue(this, (T + "_winner_of_nft")) | |
153 | + | [ScriptTransfer(Address(R), parseIntValue(ab), unit), ScriptTransfer(Address(fromBase58String(ac)), 1, l), StringEntry((A + "_amount_paid_to_owner"), ab), StringEntry((A + "_nft_transfer_to"), ac), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((T + "_amount_paid_to_owner"), ab), StringEntry((T + "_nft_transfer_to"), ac), StringEntry((T + "_nft_status"), "REWARDED")] | |
141 | 154 | } | |
142 | 155 | ||
143 | 156 | ||
144 | 157 | ||
145 | - | @Callable( | |
146 | - | func cancelAuction ( | |
147 | - | let | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | let | |
153 | - | let | |
154 | - | if (( | |
155 | - | then [StringEntry((( | |
156 | - | else [StringEntry(( | |
158 | + | @Callable(o) | |
159 | + | func cancelAuction (T) = { | |
160 | + | let A = toBase58String(o.transactionId) | |
161 | + | let R = o.caller.bytes | |
162 | + | let ad = getStringValue(this, (T + "_nft_status")) | |
163 | + | let ae = getStringValue(this, (T + "_winner_of_nft")) | |
164 | + | let af = getStringValue(this, (T + "_nft_owner")) | |
165 | + | let L = getStringValue(this, (T + "_nft_on_auction")) | |
166 | + | let ag = getStringValue(this, (T + "_highest_bid")) | |
167 | + | if ((ae == "0")) | |
168 | + | then [StringEntry(((A + T) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(af)), 1, fromBase58String(L))] | |
169 | + | else [StringEntry((T + "_nft_status"), "CANCELED"), StringEntry((T + "_previous_bid_amount_refund_to_address"), ae), StringEntry((T + "_prevoius_bid_amount_refund"), ag), StringEntry((A + "_nft_status"), "CANCELED"), StringEntry((A + "_previous_bid_amount_refund_to_address"), ae), StringEntry((A + "_prevoius_bid_amount_refund"), ag), ScriptTransfer(Address(fromBase58String(af)), 1, fromBase58String(L)), ScriptTransfer(Address(fromBase58String(ae)), parseIntValue(ag), unit)] | |
157 | 170 | } | |
158 | 171 | ||
159 | 172 | ||
160 | 173 | ||
161 | - | @Callable( | |
162 | - | func withdrawBid ( | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | if ((toBase58String( | |
174 | + | @Callable(o) | |
175 | + | func withdrawBid (ah) = { | |
176 | + | let R = o.caller.bytes | |
177 | + | let ai = getStringValue(this, (ah + "_highest_bid")) | |
178 | + | let aj = getStringValue(this, (ah + "_winner")) | |
179 | + | let ak = getStringValue(this, (ah + "_nft_id")) | |
180 | + | if ((toBase58String(R) != aj)) | |
168 | 181 | then throw("No bid") | |
169 | - | else [StringEntry(( | |
182 | + | else [StringEntry((ah + "_nft_bid"), "WITHDRAW"), StringEntry((ah + "_nft_id"), ak), StringEntry((ah + "_bidding_price_refund_amount"), ai), ScriptTransfer(o.caller, parseIntValue(ai), unit)] | |
170 | 183 | } | |
171 | 184 | ||
172 | 185 | ||
173 | 186 | ||
174 | - | @Callable( | |
175 | - | func manualFundTransfer ( | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | if ((toString( | |
187 | + | @Callable(o) | |
188 | + | func manualFundTransfer (al,am) = { | |
189 | + | let R = o.caller.bytes | |
190 | + | let an = fromBase58String(al) | |
191 | + | let I = o.payments[0].amount | |
192 | + | if ((toString(I) == "")) | |
180 | 193 | then throw("Payment is not attached or empty") | |
181 | - | else [IntegerEntry((toBase58String( | |
194 | + | else [IntegerEntry((toBase58String(R) + "_transfer"), I), StringEntry((toBase58String(R) + "_transfer_to"), al), ScriptTransfer(Address(an), I, unit)] | |
182 | 195 | } | |
183 | 196 | ||
184 | 197 | ||
185 | 198 | ||
186 | - | @Callable( | |
187 | - | func testBid ( | |
199 | + | @Callable(o) | |
200 | + | func testBid (ao) = [StringEntry("E8kkFBYCy44JJaq6pAZ6KizsuResi5UKNhbD1WNZwhhY_highest_bid", "0")] | |
188 | 201 | ||
189 | 202 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "_" | |
5 | 5 | ||
6 | 6 | let b = "buy" | |
7 | 7 | ||
8 | 8 | let c = "price" | |
9 | 9 | ||
10 | 10 | let d = "sell" | |
11 | 11 | ||
12 | 12 | let e = 7 | |
13 | 13 | ||
14 | - | let f = | |
14 | + | let f = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq' | |
15 | 15 | ||
16 | - | let g = | |
16 | + | let g = base58'' | |
17 | 17 | ||
18 | - | let h = | |
18 | + | let h = "bid" | |
19 | 19 | ||
20 | - | func i (j) = { | |
21 | - | let k = assetInfo(j) | |
22 | - | if ($isInstanceOf(k, "Asset")) | |
20 | + | let i = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED") | |
21 | + | ||
22 | + | let j = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq' | |
23 | + | ||
24 | + | func k (l) = { | |
25 | + | let m = assetInfo(l) | |
26 | + | if ($isInstanceOf(m, "Asset")) | |
23 | 27 | then { | |
24 | - | let | |
25 | - | if (if (( | |
26 | - | then ( | |
28 | + | let n = m | |
29 | + | if (if ((n.decimals == 0)) | |
30 | + | then (n.quantity == 1) | |
27 | 31 | else false) | |
28 | - | then ( | |
32 | + | then (n.reissuable == false) | |
29 | 33 | else false | |
30 | 34 | } | |
31 | 35 | else false | |
32 | 36 | } | |
33 | 37 | ||
34 | 38 | ||
35 | - | @Callable( | |
36 | - | func createNft ( | |
37 | - | let | |
38 | - | let | |
39 | - | let | |
40 | - | [ | |
39 | + | @Callable(o) | |
40 | + | func createNft (p,q,r,s,t,u,v,w,x) = { | |
41 | + | let y = Issue(p, v, 1, 0, false) | |
42 | + | let z = calculateAssetId(y) | |
43 | + | let A = o.transactionId | |
44 | + | [y, ScriptTransfer(o.caller, 1, z), StringEntry(((toBase58String(z) + a) + "Owner"), toString(o.caller)), StringEntry(((toBase58String(z) + a) + "nft_type"), s), StringEntry(((toBase58String(z) + a) + "nft_tags"), t), StringEntry(((toBase58String(z) + a) + "nft_dAppAddress"), r), IntegerEntry(((toBase58String(z) + a) + "nft_selling_price"), u), StringEntry(((toBase58String(z) + a) + "nft_onSell"), w), StringEntry(((toBase58String(z) + a) + "nft_data"), x), StringEntry(((toBase58String(A) + a) + "issue_nft"), toBase58String(z))] | |
41 | 45 | } | |
42 | 46 | ||
43 | 47 | ||
44 | 48 | ||
45 | - | @Callable( | |
46 | - | func sellNFT ( | |
47 | - | let | |
48 | - | let | |
49 | - | let | |
50 | - | let | |
51 | - | let | |
52 | - | if (!( | |
49 | + | @Callable(o) | |
50 | + | func sellNFT (B) = { | |
51 | + | let A = o.transactionId | |
52 | + | let C = o.caller.bytes | |
53 | + | let D = $Tuple2(value(o.payments[0].assetId), value(o.payments[0].amount)) | |
54 | + | let E = D._1 | |
55 | + | let F = D._2 | |
56 | + | if (!(k(E))) | |
53 | 57 | then throw("Token is not NFT") | |
54 | - | else [StringEntry(((c + a) + toBase58String(value( | |
58 | + | else [StringEntry(((c + a) + toBase58String(value(o.payments[0].assetId))), B), StringEntry(((toString(o.caller) + a) + d), ((toBase58String(E) + a) + toString(F)))] | |
55 | 59 | } | |
56 | 60 | ||
57 | 61 | ||
58 | 62 | ||
59 | - | @Callable( | |
60 | - | func buyNFT ( | |
61 | - | let | |
62 | - | let | |
63 | - | let | |
64 | - | let | |
65 | - | if ($isInstanceOf( | |
63 | + | @Callable(o) | |
64 | + | func buyNFT (G,H) = { | |
65 | + | let l = fromBase58String(G) | |
66 | + | let I = value(o.payments[0].amount) | |
67 | + | let J = { | |
68 | + | let m = getString(this, (("nft_" + H) + "_owner")) | |
69 | + | if ($isInstanceOf(m, "String")) | |
66 | 70 | then { | |
67 | - | let | |
68 | - | | |
71 | + | let K = m | |
72 | + | K | |
69 | 73 | } | |
70 | 74 | else false | |
71 | 75 | } | |
72 | - | let | |
73 | - | if (( | |
74 | - | then throw(" | |
75 | - | else if (( | |
76 | - | then | |
77 | - | else [ScriptTransfer( | |
76 | + | let B = getStringValue(((((c + a) + G) + "_") + H)) | |
77 | + | if ((H == toString(o.caller))) | |
78 | + | then throw("current Owner of NFT not able to purchase") | |
79 | + | else if ((o.payments[0].assetId == f)) | |
80 | + | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(H)), I, f), StringEntry(((toString(o.caller) + a) + b), ((G + a) + toString(I))), DeleteEntry((("nft_" + H) + "_owner")), StringEntry((("nft_" + H) + "_owner"), toString(o.caller)), StringEntry(((G + a) + "_owner"), toString(o.caller))] | |
81 | + | else [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(H)), I, unit), StringEntry(((toString(o.caller) + a) + b), ((G + a) + toString(I))), DeleteEntry((("nft_" + H) + "_owner")), StringEntry((("nft_" + H) + "_owner"), toString(o.caller)), StringEntry(((G + a) + "_owner"), toString(o.caller))] | |
78 | 82 | } | |
79 | 83 | ||
80 | 84 | ||
81 | 85 | ||
82 | - | @Callable(m) | |
83 | - | func addAuction (J,K,L,M) = { | |
84 | - | let y = toBase58String(m.transactionId) | |
85 | - | let N = value(m.payments[0].assetId) | |
86 | - | let z = value(L) | |
87 | - | let O = (lastBlock.height + M) | |
88 | - | let P = m.caller.bytes | |
89 | - | let Q = { | |
90 | - | let k = getString(this, (((toBase58String(N) + a) + "nft_status_") + toBase58String(P))) | |
91 | - | if ($isInstanceOf(k, "String")) | |
86 | + | @Callable(o) | |
87 | + | func cancelSell (L) = { | |
88 | + | let A = toBase58String(o.transactionId) | |
89 | + | let C = o.caller.bytes | |
90 | + | [StringEntry(((A + L) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(C), 1, fromBase58String(L))] | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | ||
95 | + | @Callable(o) | |
96 | + | func addAuction (M,N,O,P) = { | |
97 | + | let A = toBase58String(o.transactionId) | |
98 | + | let L = value(o.payments[0].assetId) | |
99 | + | let B = value(O) | |
100 | + | let Q = (lastBlock.height + P) | |
101 | + | let R = o.caller.bytes | |
102 | + | let S = { | |
103 | + | let m = getString(this, (((toBase58String(L) + a) + "nft_status_") + toBase58String(R))) | |
104 | + | if ($isInstanceOf(m, "String")) | |
92 | 105 | then { | |
93 | - | let | |
106 | + | let K = m | |
94 | 107 | true | |
95 | 108 | } | |
96 | 109 | else false | |
97 | 110 | } | |
98 | - | if (( | |
111 | + | if ((o.payments[0].assetId == unit)) | |
99 | 112 | then throw("NFT not attached") | |
100 | - | else if (( | |
113 | + | else if ((S == true)) | |
101 | 114 | then throw("Already in auction list") | |
102 | - | else if (( | |
115 | + | else if ((P > e)) | |
103 | 116 | then throw(("Duration is too long. Must be less than or equal to 7 " + toString(e))) | |
104 | - | else [StringEntry((( | |
117 | + | else [StringEntry(((A + "_nft_start_auction_date_") + toBase58String(R)), M), StringEntry(((A + "_nft_end_auction_date_") + toBase58String(R)), N), StringEntry((A + "_nft_start_price"), O), StringEntry((A + "_nft_owner"), toString(o.caller)), StringEntry((A + "_nft_on_auction"), toBase58String(L)), StringEntry((A + "_previous_bidder"), "none"), StringEntry((A + "_highest_bid"), "0"), StringEntry((A + "_winner_of_nft"), "0"), StringEntry((A + "_bidder_count"), "0"), StringEntry((A + "_nft_status"), "OPEN")] | |
105 | 118 | } | |
106 | 119 | ||
107 | 120 | ||
108 | 121 | ||
109 | - | @Callable( | |
110 | - | func placeBid ( | |
111 | - | let | |
112 | - | let | |
113 | - | let | |
114 | - | let | |
115 | - | let | |
116 | - | let | |
117 | - | let | |
118 | - | let | |
119 | - | let | |
120 | - | if (( | |
122 | + | @Callable(o) | |
123 | + | func placeBid (T,L,q,U) = { | |
124 | + | let A = toBase58String(o.transactionId) | |
125 | + | let R = o.caller.bytes | |
126 | + | let l = fromBase58String(L) | |
127 | + | let V = o.payments[0].amount | |
128 | + | let W = getStringValue(this, (T + "_highest_bid")) | |
129 | + | let X = getString(this, (T + "_previous_bidder")) | |
130 | + | let Y = getStringValue(this, (T + "_bidder_count")) | |
131 | + | let Z = getStringValue(this, (T + "_winner_of_nft")) | |
132 | + | let S = getStringValue(this, (T + "_nft_status")) | |
133 | + | if ((o.payments[0].assetId != unit)) | |
121 | 134 | then throw("Pay in waves") | |
122 | - | else if (( | |
135 | + | else if ((S != "OPEN")) | |
123 | 136 | then throw("Not open for auction") | |
124 | - | else if ((parseIntValue( | |
137 | + | else if ((parseIntValue(W) >= V)) | |
125 | 138 | then throw("Bid is less then starting/highest Bid") | |
126 | - | else if (( | |
127 | - | then [StringEntry(( | |
128 | - | else [StringEntry(( | |
139 | + | else if ((W == "0")) | |
140 | + | then [StringEntry((T + "_highest_bid"), toString(V)), StringEntry((T + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((T + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((T + "_nft_id"), toBase58String(l)), StringEntry((T + "_nft_owner"), q), StringEntry((((A + "_") + T) + "_highest_bid"), toString(V)), StringEntry((((A + "_") + T) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + T) + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((((A + "_") + T) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + T) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(R)), StringEntry((A + "_bid_price_place"), U), StringEntry((A + "_previous_bid_amount_refund_to_address"), Z), StringEntry((A + "_prevoius_bid_amount_refund"), W)] | |
141 | + | else [StringEntry((T + "_highest_bid"), toString(V)), StringEntry((T + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((T + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((T + "_nft_id"), toBase58String(l)), StringEntry((T + "_nft_owner"), q), StringEntry((((A + "_") + T) + "_highest_bid"), toString(V)), StringEntry((((A + "_") + T) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + T) + "_bidder_count"), toString((parseIntValue(Y) + 1))), StringEntry((((A + "_") + T) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + T) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(R)), StringEntry((A + "_bid_price_place"), U), StringEntry((A + "_previous_bid_amount_refund_to_address"), Z), StringEntry((A + "_prevoius_bid_amount_refund"), W), ScriptTransfer(Address(fromBase58String(Z)), parseIntValue(W), unit)] | |
129 | 142 | } | |
130 | 143 | ||
131 | 144 | ||
132 | 145 | ||
133 | - | @Callable( | |
134 | - | func acceptBidOffer ( | |
135 | - | let | |
136 | - | let | |
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | [ScriptTransfer(Address( | |
146 | + | @Callable(o) | |
147 | + | func acceptBidOffer (T,L,aa) = { | |
148 | + | let A = toBase58String(o.transactionId) | |
149 | + | let R = o.caller.bytes | |
150 | + | let l = fromBase58String(L) | |
151 | + | let ab = getStringValue(this, (T + "_highest_bid")) | |
152 | + | let ac = getStringValue(this, (T + "_winner_of_nft")) | |
153 | + | [ScriptTransfer(Address(R), parseIntValue(ab), unit), ScriptTransfer(Address(fromBase58String(ac)), 1, l), StringEntry((A + "_amount_paid_to_owner"), ab), StringEntry((A + "_nft_transfer_to"), ac), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((T + "_amount_paid_to_owner"), ab), StringEntry((T + "_nft_transfer_to"), ac), StringEntry((T + "_nft_status"), "REWARDED")] | |
141 | 154 | } | |
142 | 155 | ||
143 | 156 | ||
144 | 157 | ||
145 | - | @Callable( | |
146 | - | func cancelAuction ( | |
147 | - | let | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | let | |
152 | - | let | |
153 | - | let | |
154 | - | if (( | |
155 | - | then [StringEntry((( | |
156 | - | else [StringEntry(( | |
158 | + | @Callable(o) | |
159 | + | func cancelAuction (T) = { | |
160 | + | let A = toBase58String(o.transactionId) | |
161 | + | let R = o.caller.bytes | |
162 | + | let ad = getStringValue(this, (T + "_nft_status")) | |
163 | + | let ae = getStringValue(this, (T + "_winner_of_nft")) | |
164 | + | let af = getStringValue(this, (T + "_nft_owner")) | |
165 | + | let L = getStringValue(this, (T + "_nft_on_auction")) | |
166 | + | let ag = getStringValue(this, (T + "_highest_bid")) | |
167 | + | if ((ae == "0")) | |
168 | + | then [StringEntry(((A + T) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(af)), 1, fromBase58String(L))] | |
169 | + | else [StringEntry((T + "_nft_status"), "CANCELED"), StringEntry((T + "_previous_bid_amount_refund_to_address"), ae), StringEntry((T + "_prevoius_bid_amount_refund"), ag), StringEntry((A + "_nft_status"), "CANCELED"), StringEntry((A + "_previous_bid_amount_refund_to_address"), ae), StringEntry((A + "_prevoius_bid_amount_refund"), ag), ScriptTransfer(Address(fromBase58String(af)), 1, fromBase58String(L)), ScriptTransfer(Address(fromBase58String(ae)), parseIntValue(ag), unit)] | |
157 | 170 | } | |
158 | 171 | ||
159 | 172 | ||
160 | 173 | ||
161 | - | @Callable( | |
162 | - | func withdrawBid ( | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | if ((toBase58String( | |
174 | + | @Callable(o) | |
175 | + | func withdrawBid (ah) = { | |
176 | + | let R = o.caller.bytes | |
177 | + | let ai = getStringValue(this, (ah + "_highest_bid")) | |
178 | + | let aj = getStringValue(this, (ah + "_winner")) | |
179 | + | let ak = getStringValue(this, (ah + "_nft_id")) | |
180 | + | if ((toBase58String(R) != aj)) | |
168 | 181 | then throw("No bid") | |
169 | - | else [StringEntry(( | |
182 | + | else [StringEntry((ah + "_nft_bid"), "WITHDRAW"), StringEntry((ah + "_nft_id"), ak), StringEntry((ah + "_bidding_price_refund_amount"), ai), ScriptTransfer(o.caller, parseIntValue(ai), unit)] | |
170 | 183 | } | |
171 | 184 | ||
172 | 185 | ||
173 | 186 | ||
174 | - | @Callable( | |
175 | - | func manualFundTransfer ( | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | if ((toString( | |
187 | + | @Callable(o) | |
188 | + | func manualFundTransfer (al,am) = { | |
189 | + | let R = o.caller.bytes | |
190 | + | let an = fromBase58String(al) | |
191 | + | let I = o.payments[0].amount | |
192 | + | if ((toString(I) == "")) | |
180 | 193 | then throw("Payment is not attached or empty") | |
181 | - | else [IntegerEntry((toBase58String( | |
194 | + | else [IntegerEntry((toBase58String(R) + "_transfer"), I), StringEntry((toBase58String(R) + "_transfer_to"), al), ScriptTransfer(Address(an), I, unit)] | |
182 | 195 | } | |
183 | 196 | ||
184 | 197 | ||
185 | 198 | ||
186 | - | @Callable( | |
187 | - | func testBid ( | |
199 | + | @Callable(o) | |
200 | + | func testBid (ao) = [StringEntry("E8kkFBYCy44JJaq6pAZ6KizsuResi5UKNhbD1WNZwhhY_highest_bid", "0")] | |
188 | 201 | ||
189 | 202 |
github/deemru/w8io/169f3d6 144.92 ms ◑![]()