tx · DM8HuRnNdTAFuudPERb13LYpy1FVdjf4zA5iDw5xu3Ri 3Mttoccgkeiiy6UDNxZgRryjbHDhtNSG8hk: -0.01000000 Waves 2019.07.28 13:20 [605780] smart account 3Mttoccgkeiiy6UDNxZgRryjbHDhtNSG8hk > SELF 0.00000000 Waves
{ "type": 13, "id": "DM8HuRnNdTAFuudPERb13LYpy1FVdjf4zA5iDw5xu3Ri", "fee": 1000000, "feeAssetId": null, "timestamp": 1564309306894, "version": 1, "sender": "3Mttoccgkeiiy6UDNxZgRryjbHDhtNSG8hk", "senderPublicKey": "85Agsd1kzDDGoNw1gnh5KHdzJBTckBemuSqfn9v9YyB1", "proofs": [ "3WGgYM3jqdekS2E1zqg8XW2U7DYoApUH6B13EMgmbJBvqkgddWZoVFtTdKMkZUdpY3odFUWvTD5UdJ7mF3S3PKX2" ], "script": "base64:AAIDAAAAAAAAAAAAAAAPAAAAAA5vd25lclB1YmxpY0tleQEAAAAgfedb8gHq6MpA0xTx8E4brUvyXTxMUxGzgoeMhec7vFkAAAAAH2Rlc3RpbmF0aW9uV2FsbGV0QWRkcmVzc0RhdGFLZXkCAAAAGmRlc3RpbmF0aW9uX3dhbGxldF9hZGRyZXNzAAAAAAtidGNDdXJyZW5jeQIAAAADYnRjAAAAAAtldGhDdXJyZW5jeQIAAAADZXRoAAAAAA13YXZlc0N1cnJlbmN5AgAAAAV3YXZlcwAAAAALbHRjQ3VycmVuY3kCAAAAA2x0YwEAAAAbZ2V0RGVzdGluYXRpb25XYWxsZXRBZGRyZXNzAAAAAAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAB9kZXN0aW5hdGlvbldhbGxldEFkZHJlc3NEYXRhS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXYFAAAAByRtYXRjaDADCQAAAAAAAAIFAAAAAXYCAAAAAAkAAAIAAAABAgAAACpEZXN0aW5hdGlvbiB3YWxsZXQgYWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAABdgkAAAIAAAABAgAAACREZXN0aW5hdGlvbiB3YWxsZXQgYWRkcmVzcyB1bmRlZmluZWQBAAAAE2dldENhbmNlbEJldERhdGFLZXkAAAACAAAABnJhY2VJZAAAAA1wbGF5ZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZyYWNlSWQCAAAAAV8FAAAADXBsYXllckFkZHJlc3MCAAAACV9jYW5jZWxlZAEAAAANZ2V0QmV0RGF0YUtleQAAAAMAAAAGcmFjZUlkAAAADXBsYXllckFkZHJlc3MAAAAIY3VycmVuY3kJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZyYWNlSWQCAAAACF9wbGF5ZXJfBQAAAA1wbGF5ZXJBZGRyZXNzAgAAAAVfYmV0XwUAAAAIY3VycmVuY3kCAAAAB19hbW91bnQBAAAAEmdldFNoYXJlU3VtRGF0YUtleQAAAAMAAAAGcmFjZUlkAAAADXBsYXllckFkZHJlc3MAAAAIY3VycmVuY3kJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZyYWNlSWQCAAAACF9wbGF5ZXJfBQAAAA1wbGF5ZXJBZGRyZXNzAgAAAAFfBQAAAAhjdXJyZW5jeQIAAAAKX3NoYXJlX3N1bQEAAAASZ2V0VG90YWxCZXREYXRhS2V5AAAAAQAAAAZyYWNlSWQJAAEsAAAAAgUAAAAGcmFjZUlkAgAAABFfdG90YWxfYmV0X2Ftb3VudAEAAAAcZ2V0UGxhY2VQbGF5ZXJBZGRyZXNzRGF0YUtleQAAAAIAAAAGcmFjZUlkAAAACnBsYWNlSW5kZXgJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABnJhY2VJZAIAAAABXwkAAaQAAAABBQAAAApwbGFjZUluZGV4AgAAABVfcGxhY2VfcGxheWVyX2FkZHJlc3MBAAAAFGdldFN0YXJ0UHJpY2VEYXRhS2V5AAAAAgAAAAZyYWNlSWQAAAAIY3VycmVuY3kJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABnJhY2VJZAIAAAABXwUAAAAIY3VycmVuY3kCAAAADF9zdGFydF9wcmljZQEAAAASZ2V0RW5kUHJpY2VEYXRhS2V5AAAAAgAAAAZyYWNlSWQAAAAIY3VycmVuY3kJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABnJhY2VJZAIAAAABXwUAAAAIY3VycmVuY3kCAAAACl9lbmRfcHJpY2UBAAAADWlzQmV0Q2FuY2VsZWQAAAACAAAABnJhY2VJZAAAAA1wbGF5ZXJBZGRyZXNzBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMJAQAAABNnZXRDYW5jZWxCZXREYXRhS2V5AAAAAgUAAAAGcmFjZUlkBQAAAA1wbGF5ZXJBZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2BwAAAAQAAAABaQEAAAAUc2V0RGVzdGluYXRpb25XYWxsZXQAAAABAAAAB2FkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADm93bmVyUHVibGljS2V5CQAAAgAAAAECAAAAH09ubHkgb3duZXIgY2FuIGNhbGwgdGhpcyBtZXRob2QDCQAAAAAAAAIFAAAAB2FkZHJlc3MCAAAAAAkAAAIAAAABAgAAABdBZGRyZXNzIGNhbm5vdCBiZSBlbXB0eQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAfZGVzdGluYXRpb25XYWxsZXRBZGRyZXNzRGF0YUtleQUAAAAHYWRkcmVzcwUAAAADbmlsAAAAAWkBAAAAA2JldAAAAAYAAAAGcmFjZUlkAAAAFHBvcnRmb2xpb0J0Y1NoYXJlU3VtAAAAFHBvcnRmb2xpb0V0aFNoYXJlU3VtAAAAFnBvcnRmb2xpb1dhdmVzU2hhcmVTdW0AAAAUcG9ydGZvbGlvTHRjU2hhcmVTdW0AAAAJc2lnbmF0dXJlBAAAAAlyYWNlSWRTdHIJAAGkAAAAAQUAAAAGcmFjZUlkBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAACWJldEFtb3VudAgFAAAAB3BheW1lbnQAAAAGYW1vdW50BAAAABBjYWxsZXJBZGRyZXNzU3RyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAANaXNCZXRDYW5jZWxlZAAAAAIFAAAACXJhY2VJZFN0cgUAAAAQY2FsbGVyQWRkcmVzc1N0cgkAAAIAAAABAgAAAD9Zb3VyIGJldCBoYXMgYmVlbiBjYW5jZWxlZCwgeW91IGNhbm5vdCBiZXQgaW4gdGhpcyByYWNlIGFueW1vcmUEAAAAEXZhbGlkYXRpbmdEYXRhU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAlyYWNlSWRTdHIFAAAAEGNhbGxlckFkZHJlc3NTdHIJAAGkAAAAAQUAAAAJYmV0QW1vdW50CQABpAAAAAEFAAAAFHBvcnRmb2xpb0J0Y1NoYXJlU3VtCQABpAAAAAEFAAAAFHBvcnRmb2xpb0V0aFNoYXJlU3VtCQABpAAAAAEFAAAAFnBvcnRmb2xpb1dhdmVzU2hhcmVTdW0JAAGkAAAAAQUAAAAUcG9ydGZvbGlvTHRjU2hhcmVTdW0DCQEAAAABIQAAAAEJAAH0AAAAAwkAAZsAAAABBQAAABF2YWxpZGF0aW5nRGF0YVN0cgUAAAAJc2lnbmF0dXJlBQAAAA5vd25lclB1YmxpY0tleQkAAAIAAAABAgAAABdDYW5ub3QgdmVyaWZ5IHNpZ25hdHVyZQQAAAAOdG90YWxCZXRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEmdldFRvdGFsQmV0RGF0YUtleQAAAAEFAAAACXJhY2VJZFN0cgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2AAAAAAAAAAAABAAAABFuZXdUb3RhbEJldEFtb3VudAkAAGQAAAACBQAAAA50b3RhbEJldEFtb3VudAUAAAAJYmV0QW1vdW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0VG90YWxCZXREYXRhS2V5AAAAAQUAAAAJcmFjZUlkU3RyBQAAABFuZXdUb3RhbEJldEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADWdldEJldERhdGFLZXkAAAADBQAAAAlyYWNlSWRTdHIFAAAAEGNhbGxlckFkZHJlc3NTdHIFAAAADXdhdmVzQ3VycmVuY3kFAAAACWJldEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldFNoYXJlU3VtRGF0YUtleQAAAAMFAAAACXJhY2VJZFN0cgUAAAAQY2FsbGVyQWRkcmVzc1N0cgUAAAALYnRjQ3VycmVuY3kFAAAAFHBvcnRmb2xpb0J0Y1NoYXJlU3VtCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0U2hhcmVTdW1EYXRhS2V5AAAAAwUAAAAJcmFjZUlkU3RyBQAAABBjYWxsZXJBZGRyZXNzU3RyBQAAAAtldGhDdXJyZW5jeQUAAAAUcG9ydGZvbGlvRXRoU2hhcmVTdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRTaGFyZVN1bURhdGFLZXkAAAADBQAAAAlyYWNlSWRTdHIFAAAAEGNhbGxlckFkZHJlc3NTdHIFAAAADXdhdmVzQ3VycmVuY3kFAAAAFnBvcnRmb2xpb1dhdmVzU2hhcmVTdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRTaGFyZVN1bURhdGFLZXkAAAADBQAAAAlyYWNlSWRTdHIFAAAAEGNhbGxlckFkZHJlc3NTdHIFAAAAC2x0Y0N1cnJlbmN5BQAAABRwb3J0Zm9saW9MdGNTaGFyZVN1bQUAAAADbmlsAAAAAWkBAAAACWNhbmNlbEJldAAAAAIAAAAGcmFjZUlkAAAACXNpZ25hdHVyZQQAAAAJcmFjZUlkU3RyCQABpAAAAAEFAAAABnJhY2VJZAQAAAAQY2FsbGVyQWRkcmVzc1N0cgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAADWlzQmV0Q2FuY2VsZWQAAAACBQAAAAlyYWNlSWRTdHIFAAAAEGNhbGxlckFkZHJlc3NTdHIJAAACAAAAAQIAAAAUQmV0IGFscmVhZHkgY2FuY2VsZWQEAAAAEXZhbGlkYXRpbmdEYXRhU3RyCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAZyYWNlSWQFAAAAEGNhbGxlckFkZHJlc3NTdHICAAAABmNhbmNlbAMJAQAAAAEhAAAAAQkAAfQAAAADCQABmwAAAAEFAAAAEXZhbGlkYXRpbmdEYXRhU3RyBQAAAAlzaWduYXR1cmUFAAAADm93bmVyUHVibGljS2V5CQAAAgAAAAECAAAAF0Nhbm5vdCB2ZXJpZnkgc2lnbmF0dXJlBAAAAA90b3RhbEJldERhdGFLZXkJAQAAABJnZXRUb3RhbEJldERhdGFLZXkAAAABBQAAAAlyYWNlSWRTdHIEAAAAD3BsYXllckJldEFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAADWdldEJldERhdGFLZXkAAAADBQAAAAlyYWNlSWRTdHIFAAAAEGNhbGxlckFkZHJlc3NTdHIFAAAADXdhdmVzQ3VycmVuY3kEAAAAFWN1cnJlbnRUb3RhbEJldEFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPdG90YWxCZXREYXRhS2V5BAAAABFuZXdUb3RhbEJldEFtb3VudAkAAGUAAAACBQAAABVjdXJyZW50VG90YWxCZXRBbW91bnQFAAAAD3BsYXllckJldEFtb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAARbmV3VG90YWxCZXRBbW91bnQJAAACAAAAAQIAAAA6TmV3IHN0YXRlIG9mIHRvdGFsIGJldCB3aWxsIGJlIGxlc3MgdGhhbiB6ZXJvLCBzdGF0ZSBlcnJvcgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRDYW5jZWxCZXREYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyBQAAABBjYWxsZXJBZGRyZXNzU3RyBgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPdG90YWxCZXREYXRhS2V5BQAAABFuZXdUb3RhbEJldEFtb3VudAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAQY2FsbGVyQWRkcmVzc1N0cgUAAAAPcGxheWVyQmV0QW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAHZW5kUmFjZQAAAAwAAAACaWQAAAAXZmlyc3RQbGFjZVBsYXllckFkZHJlc3MAAAAYc2Vjb25kUGxhY2VQbGF5ZXJBZGRyZXNzAAAAF3RoaXJkUGxhY2VQbGF5ZXJBZGRyZXNzAAAADWJ0Y1N0YXJ0UHJpY2UAAAALYnRjRW5kUHJpY2UAAAANZXRoU3RhcnRQcmljZQAAAAtldGhFbmRQcmljZQAAAA93YXZlc1N0YXJ0UHJpY2UAAAANd2F2ZXNFbmRQcmljZQAAAA1sdGNTdGFydFByaWNlAAAAC2x0Y0VuZFByaWNlAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5vd25lclB1YmxpY0tleQkAAAIAAAABAgAAABtPbmx5IG93bmVyIGNhbiBjYWxsIGVuZFJhY2UEAAAACXJhY2VJZFN0cgkAAaQAAAABBQAAAAJpZAQAAAAOdG90YWxCZXRBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAQAAABJnZXRUb3RhbEJldERhdGFLZXkAAAABBQAAAAlyYWNlSWRTdHIEAAAAHWZpcnN0UGxhY2VQbGF5ZXJEZXBvc2l0QW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQEAAAANZ2V0QmV0RGF0YUtleQAAAAMFAAAACXJhY2VJZFN0cgUAAAAXZmlyc3RQbGFjZVBsYXllckFkZHJlc3MFAAAADXdhdmVzQ3VycmVuY3kEAAAAHnNlY29uZFBsYWNlUGxheWVyRGVwb3NpdEFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkBAAAADWdldEJldERhdGFLZXkAAAADBQAAAAlyYWNlSWRTdHIFAAAAGHNlY29uZFBsYWNlUGxheWVyQWRkcmVzcwUAAAANd2F2ZXNDdXJyZW5jeQQAAAAddGhpcmRQbGFjZVBsYXllckRlcG9zaXRBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAQAAAA1nZXRCZXREYXRhS2V5AAAAAwUAAAAJcmFjZUlkU3RyBQAAABd0aGlyZFBsYWNlUGxheWVyQWRkcmVzcwUAAAANd2F2ZXNDdXJyZW5jeQQAAAAVZmlyc3RQbGFjZVByaXplQW1vdW50CQAAaAAAAAIFAAAAHWZpcnN0UGxhY2VQbGF5ZXJEZXBvc2l0QW1vdW50AAAAAAAAAAACBAAAABZzZWNvbmRQbGFjZVByaXplQW1vdW50CQAAaQAAAAIJAABoAAAAAgUAAAAec2Vjb25kUGxhY2VQbGF5ZXJEZXBvc2l0QW1vdW50AAAAAAAAAAADAAAAAAAAAAACBAAAABV0aGlyZFBsYWNlUHJpemVBbW91bnQFAAAAHXRoaXJkUGxhY2VQbGF5ZXJEZXBvc2l0QW1vdW50BAAAABBjb21taXNzaW9uQW1vdW50CQAAZQAAAAIFAAAADnRvdGFsQmV0QW1vdW50CQAAZAAAAAIJAABkAAAAAgUAAAAVZmlyc3RQbGFjZVByaXplQW1vdW50BQAAABZzZWNvbmRQbGFjZVByaXplQW1vdW50BQAAABV0aGlyZFBsYWNlUHJpemVBbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAEGNvbW1pc3Npb25BbW91bnQJAAACAAAAAQIAAAAxQ29tbWlzc2lvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBzdGF0ZSBlcnJvcgQAAAANY3VycmVudEFtb3VudAkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMEAAAACW5ld0Ftb3VudAkAAGUAAAACBQAAAA1jdXJyZW50QW1vdW50BQAAABBjb21taXNzaW9uQW1vdW50AwkAAGYAAAACAAAAAAAAAAAABQAAAAluZXdBbW91bnQJAAACAAAAAQIAAAAgTm90IGVub3VnaCBmdW5kcyBpbiBjb3JlIGFjY291bnQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAcZ2V0UGxhY2VQbGF5ZXJBZGRyZXNzRGF0YUtleQAAAAIFAAAACXJhY2VJZFN0cgAAAAAAAAAAAQUAAAAXZmlyc3RQbGFjZVBsYXllckFkZHJlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABxnZXRQbGFjZVBsYXllckFkZHJlc3NEYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyAAAAAAAAAAACBQAAABhzZWNvbmRQbGFjZVBsYXllckFkZHJlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABxnZXRQbGFjZVBsYXllckFkZHJlc3NEYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyAAAAAAAAAAADBQAAABd0aGlyZFBsYWNlUGxheWVyQWRkcmVzcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFGdldFN0YXJ0UHJpY2VEYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyBQAAAAtidGNDdXJyZW5jeQUAAAANYnRjU3RhcnRQcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEVuZFByaWNlRGF0YUtleQAAAAIFAAAACXJhY2VJZFN0cgUAAAALYnRjQ3VycmVuY3kFAAAAC2J0Y0VuZFByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAUZ2V0U3RhcnRQcmljZURhdGFLZXkAAAACBQAAAAlyYWNlSWRTdHIFAAAAC2V0aEN1cnJlbmN5BQAAAA1ldGhTdGFydFByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0RW5kUHJpY2VEYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyBQAAAAtldGhDdXJyZW5jeQUAAAALZXRoRW5kUHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRTdGFydFByaWNlRGF0YUtleQAAAAIFAAAACXJhY2VJZFN0cgUAAAANd2F2ZXNDdXJyZW5jeQUAAAAPd2F2ZXNTdGFydFByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0RW5kUHJpY2VEYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyBQAAAA13YXZlc0N1cnJlbmN5BQAAAA13YXZlc0VuZFByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAUZ2V0U3RhcnRQcmljZURhdGFLZXkAAAACBQAAAAlyYWNlSWRTdHIFAAAAC2x0Y0N1cnJlbmN5BQAAAA1sdGNTdGFydFByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0RW5kUHJpY2VEYXRhS2V5AAAAAgUAAAAJcmFjZUlkU3RyBQAAAAtsdGNDdXJyZW5jeQUAAAALbHRjRW5kUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAF2ZpcnN0UGxhY2VQbGF5ZXJBZGRyZXNzBQAAABVmaXJzdFBsYWNlUHJpemVBbW91bnQFAAAABHVuaXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAABhzZWNvbmRQbGFjZVBsYXllckFkZHJlc3MFAAAAFnNlY29uZFBsYWNlUHJpemVBbW91bnQFAAAABHVuaXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAABd0aGlyZFBsYWNlUGxheWVyQWRkcmVzcwUAAAAVdGhpcmRQbGFjZVByaXplQW1vdW50BQAAAAR1bml0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABtnZXREZXN0aW5hdGlvbldhbGxldEFkZHJlc3MAAAAABQAAABBjb21taXNzaW9uQW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAAAMpAJYw==", "chainId": 84, "height": 605780, "spentComplexity": 0 } View: original | compacted Prev: 3Y4U9nWW6S7BrM9Wg2LUXWyWFWAYfC1ixiyWmEHGYNu3 Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let ownerPublicKey = base58'9UUaVVahBUyLHLQo4HNuQsRMKY9QBH43Grojkbdf4wG4' | |
5 | + | ||
6 | + | let destinationWalletAddressDataKey = "destination_wallet_address" | |
7 | + | ||
8 | + | let btcCurrency = "btc" | |
9 | + | ||
10 | + | let ethCurrency = "eth" | |
11 | + | ||
12 | + | let wavesCurrency = "waves" | |
13 | + | ||
14 | + | let ltcCurrency = "ltc" | |
15 | + | ||
16 | + | func getDestinationWalletAddress () = match getString(this, destinationWalletAddressDataKey) { | |
17 | + | case v: String => | |
18 | + | if ((v == "")) | |
19 | + | then throw("Destination wallet address cannot be empty") | |
20 | + | else addressFromStringValue(v) | |
21 | + | case _ => | |
22 | + | throw("Destination wallet address undefined") | |
23 | + | } | |
24 | + | ||
25 | + | ||
26 | + | func getCancelBetDataKey (raceId,playerAddress) = (((raceId + "_") + playerAddress) + "_canceled") | |
27 | + | ||
28 | + | ||
29 | + | func getBetDataKey (raceId,playerAddress,currency) = (((((raceId + "_player_") + playerAddress) + "_bet_") + currency) + "_amount") | |
30 | + | ||
31 | + | ||
32 | + | func getShareSumDataKey (raceId,playerAddress,currency) = (((((raceId + "_player_") + playerAddress) + "_") + currency) + "_share_sum") | |
33 | + | ||
34 | + | ||
35 | + | func getTotalBetDataKey (raceId) = (raceId + "_total_bet_amount") | |
36 | + | ||
37 | + | ||
38 | + | func getPlacePlayerAddressDataKey (raceId,placeIndex) = (((raceId + "_") + toString(placeIndex)) + "_place_player_address") | |
39 | + | ||
40 | + | ||
41 | + | func getStartPriceDataKey (raceId,currency) = (((raceId + "_") + currency) + "_start_price") | |
42 | + | ||
43 | + | ||
44 | + | func getEndPriceDataKey (raceId,currency) = (((raceId + "_") + currency) + "_end_price") | |
45 | + | ||
46 | + | ||
47 | + | func isBetCanceled (raceId,playerAddress) = match getBoolean(this, getCancelBetDataKey(raceId, playerAddress)) { | |
48 | + | case v: Boolean => | |
49 | + | v | |
50 | + | case _ => | |
51 | + | false | |
52 | + | } | |
53 | + | ||
54 | + | ||
55 | + | @Callable(i) | |
56 | + | func setDestinationWallet (address) = if ((i.callerPublicKey != ownerPublicKey)) | |
57 | + | then throw("Only owner can call this method") | |
58 | + | else if ((address == "")) | |
59 | + | then throw("Address cannot be empty") | |
60 | + | else WriteSet([DataEntry(destinationWalletAddressDataKey, address)]) | |
61 | + | ||
62 | + | ||
63 | + | ||
64 | + | @Callable(i) | |
65 | + | func bet (raceId,portfolioBtcShareSum,portfolioEthShareSum,portfolioWavesShareSum,portfolioLtcShareSum,signature) = { | |
66 | + | let raceIdStr = toString(raceId) | |
67 | + | let payment = extract(i.payment) | |
68 | + | let betAmount = payment.amount | |
69 | + | let callerAddressStr = toBase58String(i.caller.bytes) | |
70 | + | if (isBetCanceled(raceIdStr, callerAddressStr)) | |
71 | + | then throw("Your bet has been canceled, you cannot bet in this race anymore") | |
72 | + | else { | |
73 | + | let validatingDataStr = ((((((raceIdStr + callerAddressStr) + toString(betAmount)) + toString(portfolioBtcShareSum)) + toString(portfolioEthShareSum)) + toString(portfolioWavesShareSum)) + toString(portfolioLtcShareSum)) | |
74 | + | if (!(sigVerify(toBytes(validatingDataStr), signature, ownerPublicKey))) | |
75 | + | then throw("Cannot verify signature") | |
76 | + | else { | |
77 | + | let totalBetAmount = match getInteger(this, getTotalBetDataKey(raceIdStr)) { | |
78 | + | case v: Int => | |
79 | + | v | |
80 | + | case _ => | |
81 | + | 0 | |
82 | + | } | |
83 | + | let newTotalBetAmount = (totalBetAmount + betAmount) | |
84 | + | WriteSet([DataEntry(getTotalBetDataKey(raceIdStr), newTotalBetAmount), DataEntry(getBetDataKey(raceIdStr, callerAddressStr, wavesCurrency), betAmount), DataEntry(getShareSumDataKey(raceIdStr, callerAddressStr, btcCurrency), portfolioBtcShareSum), DataEntry(getShareSumDataKey(raceIdStr, callerAddressStr, ethCurrency), portfolioEthShareSum), DataEntry(getShareSumDataKey(raceIdStr, callerAddressStr, wavesCurrency), portfolioWavesShareSum), DataEntry(getShareSumDataKey(raceIdStr, callerAddressStr, ltcCurrency), portfolioLtcShareSum)]) | |
85 | + | } | |
86 | + | } | |
87 | + | } | |
88 | + | ||
89 | + | ||
90 | + | ||
91 | + | @Callable(i) | |
92 | + | func cancelBet (raceId,signature) = { | |
93 | + | let raceIdStr = toString(raceId) | |
94 | + | let callerAddressStr = toBase58String(i.caller.bytes) | |
95 | + | if (isBetCanceled(raceIdStr, callerAddressStr)) | |
96 | + | then throw("Bet already canceled") | |
97 | + | else { | |
98 | + | let validatingDataStr = ((toString(raceId) + callerAddressStr) + "cancel") | |
99 | + | if (!(sigVerify(toBytes(validatingDataStr), signature, ownerPublicKey))) | |
100 | + | then throw("Cannot verify signature") | |
101 | + | else { | |
102 | + | let totalBetDataKey = getTotalBetDataKey(raceIdStr) | |
103 | + | let playerBetAmount = getIntegerValue(this, getBetDataKey(raceIdStr, callerAddressStr, wavesCurrency)) | |
104 | + | let currentTotalBetAmount = getIntegerValue(this, totalBetDataKey) | |
105 | + | let newTotalBetAmount = (currentTotalBetAmount - playerBetAmount) | |
106 | + | if ((0 > newTotalBetAmount)) | |
107 | + | then throw("New state of total bet will be less than zero, state error") | |
108 | + | else ScriptResult(WriteSet([DataEntry(getCancelBetDataKey(raceIdStr, callerAddressStr), true), DataEntry(totalBetDataKey, newTotalBetAmount)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddressStr), playerBetAmount, unit)])) | |
109 | + | } | |
110 | + | } | |
111 | + | } | |
112 | + | ||
113 | + | ||
114 | + | ||
115 | + | @Callable(i) | |
116 | + | func endRace (id,firstPlacePlayerAddress,secondPlacePlayerAddress,thirdPlacePlayerAddress,btcStartPrice,btcEndPrice,ethStartPrice,ethEndPrice,wavesStartPrice,wavesEndPrice,ltcStartPrice,ltcEndPrice) = if ((i.callerPublicKey != ownerPublicKey)) | |
117 | + | then throw("Only owner can call endRace") | |
118 | + | else { | |
119 | + | let raceIdStr = toString(id) | |
120 | + | let totalBetAmount = getIntegerValue(this, getTotalBetDataKey(raceIdStr)) | |
121 | + | let firstPlacePlayerDepositAmount = getIntegerValue(this, getBetDataKey(raceIdStr, firstPlacePlayerAddress, wavesCurrency)) | |
122 | + | let secondPlacePlayerDepositAmount = getIntegerValue(this, getBetDataKey(raceIdStr, secondPlacePlayerAddress, wavesCurrency)) | |
123 | + | let thirdPlacePlayerDepositAmount = getIntegerValue(this, getBetDataKey(raceIdStr, thirdPlacePlayerAddress, wavesCurrency)) | |
124 | + | let firstPlacePrizeAmount = (firstPlacePlayerDepositAmount * 2) | |
125 | + | let secondPlacePrizeAmount = ((secondPlacePlayerDepositAmount * 3) / 2) | |
126 | + | let thirdPlacePrizeAmount = thirdPlacePlayerDepositAmount | |
127 | + | let commissionAmount = (totalBetAmount - ((firstPlacePrizeAmount + secondPlacePrizeAmount) + thirdPlacePrizeAmount)) | |
128 | + | if ((0 >= commissionAmount)) | |
129 | + | then throw("Commission must be greater than zero, state error") | |
130 | + | else { | |
131 | + | let currentAmount = wavesBalance(this) | |
132 | + | let newAmount = (currentAmount - commissionAmount) | |
133 | + | if ((0 > newAmount)) | |
134 | + | then throw("Not enough funds in core account") | |
135 | + | else ScriptResult(WriteSet([DataEntry(getPlacePlayerAddressDataKey(raceIdStr, 1), firstPlacePlayerAddress), DataEntry(getPlacePlayerAddressDataKey(raceIdStr, 2), secondPlacePlayerAddress), DataEntry(getPlacePlayerAddressDataKey(raceIdStr, 3), thirdPlacePlayerAddress), DataEntry(getStartPriceDataKey(raceIdStr, btcCurrency), btcStartPrice), DataEntry(getEndPriceDataKey(raceIdStr, btcCurrency), btcEndPrice), DataEntry(getStartPriceDataKey(raceIdStr, ethCurrency), ethStartPrice), DataEntry(getEndPriceDataKey(raceIdStr, ethCurrency), ethEndPrice), DataEntry(getStartPriceDataKey(raceIdStr, wavesCurrency), wavesStartPrice), DataEntry(getEndPriceDataKey(raceIdStr, wavesCurrency), wavesEndPrice), DataEntry(getStartPriceDataKey(raceIdStr, ltcCurrency), ltcStartPrice), DataEntry(getEndPriceDataKey(raceIdStr, ltcCurrency), ltcEndPrice)]), TransferSet([ScriptTransfer(addressFromStringValue(firstPlacePlayerAddress), firstPlacePrizeAmount, unit), ScriptTransfer(addressFromStringValue(secondPlacePlayerAddress), secondPlacePrizeAmount, unit), ScriptTransfer(addressFromStringValue(thirdPlacePlayerAddress), thirdPlacePrizeAmount, unit), ScriptTransfer(getDestinationWalletAddress(), commissionAmount, unit)])) | |
136 | + | } | |
137 | + | } | |
138 | + | ||
139 | + |
github/deemru/w8io/169f3d6 31.12 ms ◑![]()