tx · 8uDmrtGqge5x4UQrcaj8PJ73dw2ME18M45i1HzL6Q3kX 3MuSaVmAi8gQwR4dkCoCeg9DtAiV3pfsNbY: -0.01000000 Waves 2020.12.21 09:53 [1318126] smart account 3MuSaVmAi8gQwR4dkCoCeg9DtAiV3pfsNbY > SELF 0.00000000 Waves
{ "type": 13, "id": "8uDmrtGqge5x4UQrcaj8PJ73dw2ME18M45i1HzL6Q3kX", "fee": 1000000, "feeAssetId": null, "timestamp": 1608533718022, "version": 2, "chainId": 84, "sender": "3MuSaVmAi8gQwR4dkCoCeg9DtAiV3pfsNbY", "senderPublicKey": "Cttdgg3TtRvq6QAwaA6ymn7venH4aZTtDUk1WeTnKPoq", "proofs": [ "4JD4mfhkTPVKYMKfr4aC4jSRtoeo2KswY5sBByAHEEXMR5ZgKn6qGJtX5Fhw8yG9c6rrJwSdZNM2s5HRJoyr4yhQ" ], "script": "base64:AAIDAAAAAAAAABgIARIECgIBARIECgIBARIDCgEBEgMKAQEAAAAAAAAABAAAAAFpAQAAAA1jcmVhdGVBdWN0aW9uAAAAAgAAAAhkdXJhdGlvbgAAAAZtaW5CaWQEAAAAEGxhc3RBdWN0aW9uSWRLZXkCAAAAD2xhc3RfYXVjdGlvbl9pZAQAAAANbGFzdEF1Y3Rpb25JZAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABBsYXN0QXVjdGlvbklkS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAAmlkCQAAZAAAAAIFAAAADWxhc3RBdWN0aW9uSWQAAAAAAAAAAAEEAAAADG5ld0F1Y3Rpb25JZAkAAaQAAAABBQAAAAJpZAQAAAALb3duZXJXYWxsZXQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10CQEAAAAFdmFsdWUAAAABCAUAAAABaQAAAAdwYXltZW50AwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAH1NlbmQgc29tZSB0b2tlbnMsIGJ1dCBub3QgV2F2ZXMEAAAAB2Fzc2V0SWQJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAABJhdWN0aW9uRHVyYXRpb25LZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAlfZHVyYXRpb24EAAAAEGF1Y3Rpb25NaW5CaWRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAhfbWluX2JpZAQAAAARYXVjdGlvbkxhc3RCaWRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAlfbGFzdF9iaWQEAAAAFmF1Y3Rpb25MYXN0QmlkT3duZXJLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAA9fbGFzdF9iaWRfb3duZXIEAAAAD2F1Y3Rpb25Pd25lcktleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAABl9vd25lcgQAAAAQYXVjdGlvbkFtb3VudEtleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAAB19hbW91bnQEAAAAEWF1Y3Rpb25Bc3NldElkS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAJX2Fzc2V0X2lkBAAAABJhdWN0aW9uSXNBY3RpdmVLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAApfaXNfYWN0aXZlBAAAAA51c2VyQmFsYW5jZUtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYmFsYW5jZV8FAAAAC293bmVyV2FsbGV0AgAAAAFfBQAAAAdhc3NldElkBAAAAA1jdXJyZW50QW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAADnVzZXJCYWxhbmNlS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAACW5ld0Ftb3VudAkAAGQAAAACBQAAAA1jdXJyZW50QW1vdW50CAUAAAADcG10AAAABmFtb3VudAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASYXVjdGlvbkR1cmF0aW9uS2V5CQAAZAAAAAIFAAAABmhlaWdodAUAAAAIZHVyYXRpb24JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEGF1Y3Rpb25NaW5CaWRLZXkFAAAABm1pbkJpZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARYXVjdGlvbkxhc3RCaWRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD2F1Y3Rpb25Pd25lcktleQUAAAALb3duZXJXYWxsZXQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEGF1Y3Rpb25BbW91bnRLZXkIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFhdWN0aW9uQXNzZXRJZEtleQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAOdXNlckJhbGFuY2VLZXkFAAAACW5ld0Ftb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASYXVjdGlvbklzQWN0aXZlS2V5BgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAWYXVjdGlvbkxhc3RCaWRPd25lcktleQIAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABBsYXN0QXVjdGlvbklkS2V5BQAAAAJpZAUAAAADbmlsAAAAAWkBAAAAA2JpZAAAAAIAAAAJYXVjdGlvbklkAAAACWJpZEFtb3VudAQAAAAMbmV3QXVjdGlvbklkCQABpAAAAAEFAAAACWF1Y3Rpb25JZAQAAAASYXVjdGlvbkR1cmF0aW9uS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAJX2R1cmF0aW9uBAAAABBhdWN0aW9uTWluQmlkS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAIX21pbl9iaWQEAAAAEWF1Y3Rpb25MYXN0QmlkS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAJX2xhc3RfYmlkBAAAAA9hdWN0aW9uT3duZXJLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAZfb3duZXIEAAAAFmF1Y3Rpb25MYXN0QmlkT3duZXJLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAA9fbGFzdF9iaWRfb3duZXIEAAAAEmF1Y3Rpb25Jc0FjdGl2ZUtleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAACl9pc19hY3RpdmUEAAAAEGxhc3RBdWN0aW9uSWRLZXkCAAAAD2xhc3RfYXVjdGlvbl9pZAQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAASYXVjdGlvbkR1cmF0aW9uS2V5BAAAAA1hdWN0aW9uTWluQmlkCQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAAQYXVjdGlvbk1pbkJpZEtleQQAAAAOYXVjdGlvbkxhc3RCaWQJAQAAAAdleHRyYWN0AAAAAQkABBoAAAACBQAAAAR0aGlzBQAAABFhdWN0aW9uTGFzdEJpZEtleQQAAAAMYXVjdGlvbk93bmVyCQEAAAAHZXh0cmFjdAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAPYXVjdGlvbk93bmVyS2V5BAAAAA1sYXN0QXVjdGlvbklkCQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAAQbGFzdEF1Y3Rpb25JZEtleQQAAAAPYXVjdGlvbklzQWN0aXZlCQEAAAAHZXh0cmFjdAAAAAEJAAQbAAAAAgUAAAAEdGhpcwUAAAASYXVjdGlvbklzQWN0aXZlS2V5BAAAAA5pc1ZhbGlkQXVjdGlvbgkAAGcAAAACBQAAAA1sYXN0QXVjdGlvbklkBQAAAAlhdWN0aW9uSWQEAAAADWlzVmFsaWRIZWlnaHQJAABnAAAAAgUAAAAPYXVjdGlvbkR1cmF0aW9uBQAAAAZoZWlnaHQEAAAADWlzVmFsaWRNaW5CaWQJAABnAAAAAgUAAAAJYmlkQW1vdW50BQAAAA1hdWN0aW9uTWluQmlkBAAAABFpc1ZhbGlkQ3VycmVudEJpZAkAAGYAAAACBQAAAAliaWRBbW91bnQFAAAADmF1Y3Rpb25MYXN0QmlkBAAAAA5pc0Ftb3VudEV4aXN0cwkAAGcAAAACCQAD6wAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdW5pdAUAAAAJYmlkQW1vdW50BAAAAA1pc1ZhbGlkU2VuZGVyCQEAAAACIT0AAAACBQAAAAxhdWN0aW9uT3duZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAEhAAAAAQUAAAAOaXNWYWxpZEF1Y3Rpb24JAAACAAAAAQIAAAASQXVjdGlvbiBub3QgZXhpc3RzAwkBAAAAASEAAAABBQAAAA9hdWN0aW9uSXNBY3RpdmUJAAACAAAAAQIAAAASQXVjdGlvbiBub3QgYWN0aXZlAwkBAAAAASEAAAABBQAAAA1pc1ZhbGlkSGVpZ2h0CQAAAgAAAAECAAAAE0F1Y3Rpb24gYWxyZWFkeSBlbmQDCQEAAAABIQAAAAEFAAAADWlzVmFsaWRNaW5CaWQJAAACAAAAAQIAAAARQmlkIGxlc3MgdGhhdCBtaW4DCQEAAAABIQAAAAEFAAAAEWlzVmFsaWRDdXJyZW50QmlkCQAAAgAAAAECAAAAF0xhc3QgYmlkIG1vcmUgdGhhbiB5b3VyAwkBAAAAASEAAAABBQAAAA5pc0Ftb3VudEV4aXN0cwkAAAIAAAABAgAAACFOb3QgZW5vdWdoIGJhbGFuY2UgaW4geW91ciB3YWxsZXQDCQEAAAABIQAAAAEFAAAADWlzVmFsaWRTZW5kZXIJAAACAAAAAQIAAAAfWW91IGNhbiBub3QgYmlkIGluIHlvdXIgYXVjdGlvbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARYXVjdGlvbkxhc3RCaWRLZXkFAAAACWJpZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAWYXVjdGlvbkxhc3RCaWRPd25lcktleQkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBQAAAANuaWwAAAABaQEAAAAGY2FuY2VsAAAAAQAAAAlhdWN0aW9uSWQEAAAADG5ld0F1Y3Rpb25JZAkAAaQAAAABBQAAAAlhdWN0aW9uSWQEAAAAEmF1Y3Rpb25EdXJhdGlvbktleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAACV9kdXJhdGlvbgQAAAAPYXVjdGlvbk93bmVyS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAGX293bmVyBAAAABBhdWN0aW9uQW1vdW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAHX2Ftb3VudAQAAAARYXVjdGlvbkFzc2V0SWRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAlfYXNzZXRfaWQEAAAAEmF1Y3Rpb25Jc0FjdGl2ZUtleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAACl9pc19hY3RpdmUEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAAB2V4dHJhY3QAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAEmF1Y3Rpb25EdXJhdGlvbktleQQAAAANYXVjdGlvbkFtb3VudAkBAAAAB2V4dHJhY3QAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAEGF1Y3Rpb25BbW91bnRLZXkEAAAADGF1Y3Rpb25Pd25lcgkBAAAAB2V4dHJhY3QAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAD2F1Y3Rpb25Pd25lcktleQQAAAAOYXVjdGlvbkFzc2V0SWQJAQAAAAdleHRyYWN0AAAAAQkABB0AAAACBQAAAAR0aGlzBQAAABFhdWN0aW9uQXNzZXRJZEtleQQAAAAPYXVjdGlvbklzQWN0aXZlCQEAAAAHZXh0cmFjdAAAAAEJAAQbAAAAAgUAAAAEdGhpcwUAAAASYXVjdGlvbklzQWN0aXZlS2V5BAAAAA51c2VyQmFsYW5jZUtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYmFsYW5jZV8FAAAADGF1Y3Rpb25Pd25lcgIAAAABXwUAAAAOYXVjdGlvbkFzc2V0SWQEAAAAC3VzZXJCYWxhbmNlCQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAAOdXNlckJhbGFuY2VLZXkEAAAACm5ld0JhbGFuY2UJAABlAAAAAgUAAAALdXNlckJhbGFuY2UFAAAADWF1Y3Rpb25BbW91bnQEAAAADWlzVmFsaWRTZW5kZXIJAAAAAAAAAgUAAAAMYXVjdGlvbk93bmVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAABIQAAAAEFAAAAD2F1Y3Rpb25Jc0FjdGl2ZQkAAAIAAAABAgAAABBBdWN0aW9uIGluYWN0aXZlAwkBAAAAASEAAAABBQAAAA1pc1ZhbGlkU2VuZGVyCQAAAgAAAAECAAAAGVlvdSBhcmUgbm90IGF1Y3Rpb24gb3duZXIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA51c2VyQmFsYW5jZUtleQUAAAAKbmV3QmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASYXVjdGlvbklzQWN0aXZlS2V5BwUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYXVjdGlvbkFtb3VudAkAAlkAAAABBQAAAA5hdWN0aW9uQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAADXBheUFuZFJlY2VpdmUAAAABAAAACWF1Y3Rpb25JZAQAAAAMbmV3QXVjdGlvbklkCQABpAAAAAEFAAAACWF1Y3Rpb25JZAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAB2Fzc2V0SWQJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAABJhdWN0aW9uRHVyYXRpb25LZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAlfZHVyYXRpb24EAAAAEGF1Y3Rpb25NaW5CaWRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAhfbWluX2JpZAQAAAARYXVjdGlvbkxhc3RCaWRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAAlfbGFzdF9iaWQEAAAAFmF1Y3Rpb25MYXN0QmlkT3duZXJLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAA9fbGFzdF9iaWRfb3duZXIEAAAAD2F1Y3Rpb25Pd25lcktleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAABl9vd25lcgQAAAAQYXVjdGlvbkFtb3VudEtleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAxuZXdBdWN0aW9uSWQCAAAAB19hbW91bnQEAAAAEWF1Y3Rpb25Bc3NldElkS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8FAAAADG5ld0F1Y3Rpb25JZAIAAAAJX2Fzc2V0X2lkBAAAABJhdWN0aW9uSXNBY3RpdmVLZXkJAAEsAAAAAgkAASwAAAACAgAAAAhhdWN0aW9uXwUAAAAMbmV3QXVjdGlvbklkAgAAAApfaXNfYWN0aXZlBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAAAdleHRyYWN0AAAAAQkABBoAAAACBQAAAAR0aGlzBQAAABJhdWN0aW9uRHVyYXRpb25LZXkEAAAADWF1Y3Rpb25BbW91bnQJAQAAAAdleHRyYWN0AAAAAQkABBoAAAACBQAAAAR0aGlzBQAAABBhdWN0aW9uQW1vdW50S2V5BAAAAAxhdWN0aW9uT3duZXIJAQAAAAdleHRyYWN0AAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAA9hdWN0aW9uT3duZXJLZXkEAAAADmF1Y3Rpb25Bc3NldElkCQEAAAAHZXh0cmFjdAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAARYXVjdGlvbkFzc2V0SWRLZXkEAAAAD2F1Y3Rpb25Jc0FjdGl2ZQkBAAAAB2V4dHJhY3QAAAABCQAEGwAAAAIFAAAABHRoaXMFAAAAEmF1Y3Rpb25Jc0FjdGl2ZUtleQQAAAAOdXNlckJhbGFuY2VLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGJhbGFuY2VfBQAAAAxhdWN0aW9uT3duZXICAAAAAV8FAAAADmF1Y3Rpb25Bc3NldElkBAAAAAt1c2VyQmFsYW5jZQkBAAAAB2V4dHJhY3QAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAADnVzZXJCYWxhbmNlS2V5BAAAAA5hdWN0aW9uTGFzdEJpZAkBAAAAB2V4dHJhY3QAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAEWF1Y3Rpb25MYXN0QmlkS2V5BAAAABNhdWN0aW9uTGFzdEJpZE93bmVyCQEAAAAHZXh0cmFjdAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAWYXVjdGlvbkxhc3RCaWRPd25lcktleQQAAAAKbmV3QmFsYW5jZQkAAGUAAAACBQAAAAt1c2VyQmFsYW5jZQUAAAANYXVjdGlvbkFtb3VudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAXQ2FuIHRyYW5zZmVyIFdhdmVzIG9ubHkDCQEAAAABIQAAAAEFAAAAD2F1Y3Rpb25Jc0FjdGl2ZQkAAAIAAAABAgAAABJBdWN0aW9uIG5vdCBhY3RpdmUDCQEAAAACIT0AAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAOYXVjdGlvbkxhc3RCaWQJAAACAAAAAQIAAAAZQW1vdW50IG5vdCBlcXVhbCBsYXN0IGJpZAMJAABmAAAAAgUAAAAPYXVjdGlvbkR1cmF0aW9uBQAAAAZoZWlnaHQJAAACAAAAAQIAAAAUQXVjdGlvbiBub3QgY29tcGxldGUDCQEAAAACIT0AAAACCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAATYXVjdGlvbkxhc3RCaWRPd25lcggFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAF1lvdSBhcmUgbm90IGxhc3QgYmlkZGVyCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAOdXNlckJhbGFuY2VLZXkFAAAACm5ld0JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEmF1Y3Rpb25Jc0FjdGl2ZUtleQcFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWF1Y3Rpb25BbW91bnQJAAJZAAAAAQUAAAAOYXVjdGlvbkFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAADGF1Y3Rpb25Pd25lcggFAAAAA3BtdAAAAAZhbW91bnQFAAAABHVuaXQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAGSEGIjA==", "height": 1318126, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | ||
5 | + | ||
6 | + | @Callable(i) | |
7 | + | func createAuction (duration,minBid) = { | |
8 | + | let lastAuctionIdKey = "last_auction_id" | |
9 | + | let lastAuctionId = match getInteger(this, lastAuctionIdKey) { | |
10 | + | case a: Int => | |
11 | + | a | |
12 | + | case _ => | |
13 | + | 0 | |
14 | + | } | |
15 | + | let id = (lastAuctionId + 1) | |
16 | + | let newAuctionId = toString(id) | |
17 | + | let ownerWallet = toBase58String(i.caller.bytes) | |
18 | + | let pmt = value(i.payment) | |
19 | + | if (!(isDefined(pmt.assetId))) | |
20 | + | then throw("Send some tokens, but not Waves") | |
21 | + | else { | |
22 | + | let assetId = toBase58String(value(pmt.assetId)) | |
23 | + | let auctionDurationKey = (("auction_" + newAuctionId) + "_duration") | |
24 | + | let auctionMinBidKey = (("auction_" + newAuctionId) + "_min_bid") | |
25 | + | let auctionLastBidKey = (("auction_" + newAuctionId) + "_last_bid") | |
26 | + | let auctionLastBidOwnerKey = (("auction_" + newAuctionId) + "_last_bid_owner") | |
27 | + | let auctionOwnerKey = (("auction_" + newAuctionId) + "_owner") | |
28 | + | let auctionAmountKey = (("auction_" + newAuctionId) + "_amount") | |
29 | + | let auctionAssetIdKey = (("auction_" + newAuctionId) + "_asset_id") | |
30 | + | let auctionIsActiveKey = (("auction_" + newAuctionId) + "_is_active") | |
31 | + | let userBalanceKey = ((("balance_" + ownerWallet) + "_") + assetId) | |
32 | + | let currentAmount = match getInteger(this, userBalanceKey) { | |
33 | + | case a: Int => | |
34 | + | a | |
35 | + | case _ => | |
36 | + | 0 | |
37 | + | } | |
38 | + | let newAmount = (currentAmount + pmt.amount) | |
39 | + | WriteSet([DataEntry(auctionDurationKey, (height + duration)), DataEntry(auctionMinBidKey, minBid), DataEntry(auctionLastBidKey, 0), DataEntry(auctionOwnerKey, ownerWallet), DataEntry(auctionAmountKey, pmt.amount), DataEntry(auctionAssetIdKey, assetId), DataEntry(userBalanceKey, newAmount), DataEntry(auctionIsActiveKey, true), DataEntry(auctionLastBidOwnerKey, ""), DataEntry(lastAuctionIdKey, id)]) | |
40 | + | } | |
41 | + | } | |
42 | + | ||
43 | + | ||
44 | + | ||
45 | + | @Callable(i) | |
46 | + | func bid (auctionId,bidAmount) = { | |
47 | + | let newAuctionId = toString(auctionId) | |
48 | + | let auctionDurationKey = (("auction_" + newAuctionId) + "_duration") | |
49 | + | let auctionMinBidKey = (("auction_" + newAuctionId) + "_min_bid") | |
50 | + | let auctionLastBidKey = (("auction_" + newAuctionId) + "_last_bid") | |
51 | + | let auctionOwnerKey = (("auction_" + newAuctionId) + "_owner") | |
52 | + | let auctionLastBidOwnerKey = (("auction_" + newAuctionId) + "_last_bid_owner") | |
53 | + | let auctionIsActiveKey = (("auction_" + newAuctionId) + "_is_active") | |
54 | + | let lastAuctionIdKey = "last_auction_id" | |
55 | + | let auctionDuration = extract(getInteger(this, auctionDurationKey)) | |
56 | + | let auctionMinBid = extract(getInteger(this, auctionMinBidKey)) | |
57 | + | let auctionLastBid = extract(getInteger(this, auctionLastBidKey)) | |
58 | + | let auctionOwner = extract(getString(this, auctionOwnerKey)) | |
59 | + | let lastAuctionId = extract(getInteger(this, lastAuctionIdKey)) | |
60 | + | let auctionIsActive = extract(getBoolean(this, auctionIsActiveKey)) | |
61 | + | let isValidAuction = (lastAuctionId >= auctionId) | |
62 | + | let isValidHeight = (auctionDuration >= height) | |
63 | + | let isValidMinBid = (bidAmount >= auctionMinBid) | |
64 | + | let isValidCurrentBid = (bidAmount > auctionLastBid) | |
65 | + | let isAmountExists = (assetBalance(i.caller, unit) >= bidAmount) | |
66 | + | let isValidSender = (auctionOwner != toBase58String(i.caller.bytes)) | |
67 | + | if (!(isValidAuction)) | |
68 | + | then throw("Auction not exists") | |
69 | + | else if (!(auctionIsActive)) | |
70 | + | then throw("Auction not active") | |
71 | + | else if (!(isValidHeight)) | |
72 | + | then throw("Auction already end") | |
73 | + | else if (!(isValidMinBid)) | |
74 | + | then throw("Bid less that min") | |
75 | + | else if (!(isValidCurrentBid)) | |
76 | + | then throw("Last bid more than your") | |
77 | + | else if (!(isAmountExists)) | |
78 | + | then throw("Not enough balance in your wallet") | |
79 | + | else if (!(isValidSender)) | |
80 | + | then throw("You can not bid in your auction") | |
81 | + | else WriteSet([DataEntry(auctionLastBidKey, bidAmount), DataEntry(auctionLastBidOwnerKey, toBase58String(i.caller.bytes))]) | |
82 | + | } | |
83 | + | ||
84 | + | ||
85 | + | ||
86 | + | @Callable(i) | |
87 | + | func cancel (auctionId) = { | |
88 | + | let newAuctionId = toString(auctionId) | |
89 | + | let auctionDurationKey = (("auction_" + newAuctionId) + "_duration") | |
90 | + | let auctionOwnerKey = (("auction_" + newAuctionId) + "_owner") | |
91 | + | let auctionAmountKey = (("auction_" + newAuctionId) + "_amount") | |
92 | + | let auctionAssetIdKey = (("auction_" + newAuctionId) + "_asset_id") | |
93 | + | let auctionIsActiveKey = (("auction_" + newAuctionId) + "_is_active") | |
94 | + | let auctionDuration = extract(getInteger(this, auctionDurationKey)) | |
95 | + | let auctionAmount = extract(getInteger(this, auctionAmountKey)) | |
96 | + | let auctionOwner = extract(getString(this, auctionOwnerKey)) | |
97 | + | let auctionAssetId = extract(getString(this, auctionAssetIdKey)) | |
98 | + | let auctionIsActive = extract(getBoolean(this, auctionIsActiveKey)) | |
99 | + | let userBalanceKey = ((("balance_" + auctionOwner) + "_") + auctionAssetId) | |
100 | + | let userBalance = extract(getInteger(this, userBalanceKey)) | |
101 | + | let newBalance = (userBalance - auctionAmount) | |
102 | + | let isValidSender = (auctionOwner == toBase58String(i.caller.bytes)) | |
103 | + | if (!(auctionIsActive)) | |
104 | + | then throw("Auction inactive") | |
105 | + | else if (!(isValidSender)) | |
106 | + | then throw("You are not auction owner") | |
107 | + | else ScriptResult(WriteSet([DataEntry(userBalanceKey, newBalance), DataEntry(auctionIsActiveKey, false)]), TransferSet([ScriptTransfer(i.caller, auctionAmount, fromBase58String(auctionAssetId))])) | |
108 | + | } | |
109 | + | ||
110 | + | ||
111 | + | ||
112 | + | @Callable(i) | |
113 | + | func payAndReceive (auctionId) = { | |
114 | + | let newAuctionId = toString(auctionId) | |
115 | + | let pmt = extract(i.payment) | |
116 | + | let assetId = toBase58String(value(pmt.assetId)) | |
117 | + | let auctionDurationKey = (("auction_" + newAuctionId) + "_duration") | |
118 | + | let auctionMinBidKey = (("auction_" + newAuctionId) + "_min_bid") | |
119 | + | let auctionLastBidKey = (("auction_" + newAuctionId) + "_last_bid") | |
120 | + | let auctionLastBidOwnerKey = (("auction_" + newAuctionId) + "_last_bid_owner") | |
121 | + | let auctionOwnerKey = (("auction_" + newAuctionId) + "_owner") | |
122 | + | let auctionAmountKey = (("auction_" + newAuctionId) + "_amount") | |
123 | + | let auctionAssetIdKey = (("auction_" + newAuctionId) + "_asset_id") | |
124 | + | let auctionIsActiveKey = (("auction_" + newAuctionId) + "_is_active") | |
125 | + | let auctionDuration = extract(getInteger(this, auctionDurationKey)) | |
126 | + | let auctionAmount = extract(getInteger(this, auctionAmountKey)) | |
127 | + | let auctionOwner = extract(getString(this, auctionOwnerKey)) | |
128 | + | let auctionAssetId = extract(getString(this, auctionAssetIdKey)) | |
129 | + | let auctionIsActive = extract(getBoolean(this, auctionIsActiveKey)) | |
130 | + | let userBalanceKey = ((("balance_" + auctionOwner) + "_") + auctionAssetId) | |
131 | + | let userBalance = extract(getInteger(this, userBalanceKey)) | |
132 | + | let auctionLastBid = extract(getInteger(this, auctionLastBidKey)) | |
133 | + | let auctionLastBidOwner = extract(getString(this, auctionLastBidOwnerKey)) | |
134 | + | let newBalance = (userBalance - auctionAmount) | |
135 | + | if (isDefined(pmt.assetId)) | |
136 | + | then throw("Can transfer Waves only") | |
137 | + | else if (!(auctionIsActive)) | |
138 | + | then throw("Auction not active") | |
139 | + | else if ((pmt.amount != auctionLastBid)) | |
140 | + | then throw("Amount not equal last bid") | |
141 | + | else if ((auctionDuration > height)) | |
142 | + | then throw("Auction not complete") | |
143 | + | else if ((Address(fromBase58String(auctionLastBidOwner)) != i.caller)) | |
144 | + | then throw("You are not last bidder") | |
145 | + | else ScriptResult(WriteSet([DataEntry(userBalanceKey, newBalance), DataEntry(auctionIsActiveKey, false)]), TransferSet([ScriptTransfer(i.caller, auctionAmount, fromBase58String(auctionAssetId)), ScriptTransfer(Address(fromBase58String(auctionOwner)), pmt.amount, unit)])) | |
146 | + | } | |
147 | + | ||
148 | + | ||
149 | + | @Verifier(tx) | |
150 | + | func verify () = true | |
151 | + |
github/deemru/w8io/873ac7e 24.24 ms ◑