tx · GW3f8SmkpCeGfhxFzDyzCpwwZfRhJ8DCLsGF4tLR6vXt 3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv: -0.01400000 Waves 2022.01.29 22:38 [1900660] smart account 3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv > SELF 0.00000000 Waves
{ "type": 13, "id": "GW3f8SmkpCeGfhxFzDyzCpwwZfRhJ8DCLsGF4tLR6vXt", "fee": 1400000, "feeAssetId": null, "timestamp": 1643485134238, "version": 2, "chainId": 84, "sender": "3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv", "senderPublicKey": "28sGn7FYnmxceAmnGYiDiKuMK1QyXiqX8zQXfKDnrc8t", "proofs": [ "2GQAvw5updeqNTy8bn2ufXU7k8kgV5H4weVRgBCKzMGsHZZ2UdnTWngjJreWLtoJgdyTKyVqtjNqPyDfc5JhNcF" ], "script": "base64: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dmRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQFAAAAFGluZGl2aWR1YWx2b3Rlc2NvdW50BQAAAANuaWwAAAABaQEAAAATV2l0aGRyYXdWb3RlZFRva2VucwAAAAEAAAAMRW50ZXJBc3NldElEBAAAAANwbXQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAtMC4xIFROIFRva2VuIGlzIHJlcXVpcmVkIGFzIEF0dGFjaGVkIHBheW1lbnQuBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADmNoZWNrZW5kaGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAClZvdGluZ19FSF8FAAAADEVudGVyQXNzZXRJRAQAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAACFBhaXJfVVZfBQAAAAxFbnRlckFzc2V0SUQEAAAAFmNoZWNrdXNlcnZvdGluZ2JhbGFuY2UJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtWb3Rlc19SY3ZkXwUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwUAAAAMRW50ZXJBc3NldElECQABLAAAAAIFAAAADWNhbGxlcmFkZHJlc3MCAAAAJSBBZGRyZXNzIG5ldmVyIHZvdGVkICYgZXhpc3QgaW4gbGlzdC4EAAAAHXBlbmRpbmdibG9ja3Nmb3Jwcm9qZWN0ZXhwaXJlCQAAZQAAAAIFAAAADmNoZWNrZW5kaGVpZ2h0BQAAAAZoZWlnaHQDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAAlUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFZv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BAAAAANwbXQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAA1V2hpdGVsaXN0ZWQgVG9rZW4gaXMgcmVxdWlyZWQgYXMgQXR0YWNoZWQgcGF5bWVudFsxXS4EAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAhQYWlyX1VWXwUAAAAMRW50ZXJBc3NldElEBAAAAAxWb3RpbmdTdGF0dXMJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAOVm90aW5nX1N0YXR1c18FAAAADEVudGVyQXNzZXRJRAQAAAAQQ2hlY2tVU0RUQmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAQAAAARQ2hlY2tBc3NldEJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQEAAAAEG5ld2JhbGFuY2VvZlVTRFQJAABrAAAAAwUAAAAQQ2hlY2tVU0RUQmFsYW5jZQUAAAARQ2hlY2tBc3NldEJhbGFuY2UJAABkAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UIBQAAAANwbXQAAAAGYW1vdW50BAAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAkAAGUAAAACBQAAABBDaGVja1VTRFRCYWxhbmNlBQAAABBuZXdiYWxhbmNlb2ZVU0RUBAAAABNDdXJyZW50Vm90aW5nU3RhdHVzAgAAAAFGBAAAAAdTd2FwRmVlAAAAAAAAAAAGBAAAABBTd2FwRmVldG9yZWNlaXZlCQAAaQAAAAIJAABoAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAB1N3YXBGZWUAAAAAAAAAA+gEAAAAFHVzZXJiYWxhbmNldG9yZWNlaXZlCQAAZQAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAABBTd2FwRmVldG9yZWNlaXZlBAAAABlTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABxOZXdTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlCQAAZAAAAAIFAAAAGVN1bXVwb2ZBc3NldFRvVVNEVFN3YXBGZWUFAAAAEFN3YXBGZWV0b3JlY2VpdmUEAAAAEVN1bXVwQXNzZXRCYWxhbmNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAAGQAAAACBQAAABFDaGVja0Fzc2V0QmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAAEFN1bXVwVVNEVEJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAABlAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQEAAAABFRPUFQEAAAAByRtYXRjaDAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAATVG90YWxfb2ZfUGFpcl9UeG5zXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAABk5ld1RQVAkAAGQAAAACBQAAAARUT1BUAAAAAAAAAAABAwkAAAAAAAACBQAAAAxFbnRlckFzc2V0SUQJAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAACGSW5wdXQgY2FuIE5ldmVyIGJlIGEgVVNEVCBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0ICYgQXR0YWNoIFdoaXRlbGlzdGVkIEFzc2V0IGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAFNZb3UgY2FuJ3QgQXR0YWNoIFVTRFQgYXMgYW4gQXR0YWNoZWQgUGF5bWVudC4gT25seSBXaGl0ZWxpc3RlZCBUb2tlbnMgYXJlIGFjY2VwdGVkLgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQkAASwAAAACAgAAADBJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQsIHBsZWFzZSBhdHRhY2ggb3Igc2VuZCAFAAAADEVudGVyQXNzZXRJRAMJAAAAAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQAAAAAAAAAAAAkAAAIAAAABAgAAAGVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAAAAAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAZgAAAAIAAAAAAACYloAFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADRZb3VyIEF0dGFjaGVkIEFzc2V0IEFtb3VudCBpcyB2ZXJ5IGxvdy4gQXR0YWNoIE1vcmUgBQAAAAxFbnRlckFzc2V0SUQCAAAAOSBUb2tlbnMgdG8gQ2xhaW0gdGhlIG1pbmltdW0gQW1vdW50IG9mIDEwIGRvbGxhciBhdGxlYXN0LgMJAABmAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAEENoZWNrVVNEVEJhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHVBvb2wgT25seSBoYXMgYSBMaXF1aWRpdHkgb2YgCQABpAAAAAEJAABpAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAABQAAAAJVUAIAAAAfIFVTRFQuIEFkZCBMaXF1aWRpdHkgaW50byBQb29sLgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAZVG90YWxfU3dhcF9GZWVfQ29sbGVjdGVkXwUAAAAMRW50ZXJBc3NldElEAgAAAAFfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEBQAAABxOZXdTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAE1RvdGFsX29mX1BhaXJfVHhuc18FAAAADEVudGVyQXNzZXRJRAUAAAAGTmV3VFBUCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAABXwUAAAAMRW50ZXJBc3NldElEBQAAABZOZXdTdW11cG9mQXNzZXRCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwUAAAAMRW50ZXJBc3NldElEAgAAAAFfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEBQAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABR1c2VyYmFsYW5jZXRvcmVjZWl2ZQUAAAALVVNEVEFzc2V0SUQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAZQ29sbGVjdFVTRFRTd2FwRmVlQWRkcmVzcwUAAAAQU3dhcEZlZXRvcmVjZWl2ZQUAAAALVVNEVEFzc2V0SUQFAAAAA25pbAAAAAFpAQAAABhTd2FwVVNEVFRvQXNzZXRQYWlyRW50cnkAAAABAAAADEVudGVyQXNzZXRJRAQAAAANY2FsbGVyYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAANwbXQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABU9ubHkgCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAADIgVVNEVCBUb2tlbiBpcyByZXF1aXJlZCBhcyBhbiBBdHRhY2hlZCBwYXltZW50WzFdLgQAAAAQQ2hlY2tVU0RUQmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAQAAAARQ2hlY2tBc3NldEJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQEAAAAEW5ld2JhbGFuY2VvZkFzc2V0CQAAawAAAAMFAAAAEENoZWNrVVNEVEJhbGFuY2UFAAAAEUNoZWNrQXNzZXRCYWxhbmNlCQAAZAAAAAIFAAAAEENoZWNrVVNEVEJhbGFuY2UIBQAAAANwbXQAAAAGYW1vdW50BAAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAkAAGUAAAACBQAAABFDaGVja0Fzc2V0QmFsYW5jZQUAAAARbmV3YmFsYW5jZW9mQXNzZXQEAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAhQYWlyX1VWXwUAAAAMRW50ZXJBc3NldElEBAAAAAxWb3RpbmdTdGF0dXMJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAOVm90aW5nX1N0YXR1c18FAAAADEVudGVyQXNzZXRJRAQAAAATQ3VycmVudFZvdGluZ1N0YXR1cwIAAAABRgQAAAAHU3dhcEZlZQAAAAAAAAAAAwQAAAAQU3dhcEZlZXRvcmVjZWl2ZQkAAGkAAAACCQAAaAAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAAAdTd2FwRmVlAAAAAAAAAAPoBAAAABR1c2VyYmFsYW5jZXRvcmVjZWl2ZQkAAGUAAAACBQAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAUAAAAQU3dhcEZlZXRvcmVjZWl2ZQQAAAAZU3VtdXBvZlVTRFRUb0Fzc2V0U3dhcEZlZQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FAAAADEVudGVyQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABxOZXdTdW11cG9mVVNEVFRvQXNzZXRTd2FwRmVlCQAAZAAAAAIFAAAAGVN1bXVwb2ZVU0RUVG9Bc3NldFN3YXBGZWUFAAAAEFN3YXBGZWV0b3JlY2VpdmUEAAAAEVN1bXVwQXNzZXRCYWxhbmNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAAGUAAAACBQAAABFDaGVja0Fzc2V0QmFsYW5jZQUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQEAAAAEFN1bXVwVVNEVEJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAABkAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAABFRPUFQEAAAAByRtYXRjaDAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAATVG90YWxfb2ZfUGFpcl9UeG5zXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAABk5ld1RQVAkAAGQAAAACBQAAAARUT1BUAAAAAAAAAAABAwkBAAAAAiE9AAAAAgUAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAAAAAAIFAAAADFZvdGluZ1N0YXR1cwUAAAATQ3VycmVudFZvdGluZ1N0YXR1cwkAAAIAAAABCQABLAAAAAIFAAAADEVudGVyQXNzZXRJRAIAAAAgIGlzIG5vdCBBIFdoaXRlbGlzdGVkIFRva2VuIFlldC4DCQAAAAAAAAIFAAAADEVudGVyQXNzZXRJRAkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAHlJbnB1dCBjYW4gTmV2ZXIgYmUgYSBVU0RUIEFzc2V0SUQuIEVudGVyIFdoaXRlbGlzdGVkIEFzc2V0SUQgaW4gaW5wdXQgJiBBdHRhY2ggVVNEVCBhcyBhbiBhdHRhY2htZW50IFRva2VuIGluIHBheW1lbnRbMV0uAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAH5Zb3UgY2FuIEF0dGFjaCBVU0RUIGFzIGFuIEF0dGFjaGVkIFBheW1lbnRbMV0gdG8gU3dhcCBVU0RUIFRvIFJlcXVpcmVkIFRva2VuLiBBbnkgb3RoZXIgYXNzZXQgZWxzZSB0aGFuIFVTRFQgd2lsbCBiZSByZWplY3RlZC4DCQAAZgAAAAIAAAAAAACYloAIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAAWllvdXIgQXR0YWNoZWQgVVNEVCBBbW91bnQgaXMgdmVyeSBsb3cuIEF0dGFjaCBBdGxlYXN0IDEwIFVTRFQgdG8gQ2xhaW0gdGhlIG1pbmltdW0gVG9rZW5zLgMJAAAAAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQAAAAAAAAAAAAkAAAIAAAABAgAAAGVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAAAAAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAZgAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAABFDaGVja0Fzc2V0QmFsYW5jZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAdUG9vbCBPbmx5IGhhcyBhIExpcXVpZGl0eSBvZiAJAAGkAAAAAQUAAAARQ2hlY2tBc3NldEJhbGFuY2UCAAAAISBUb2tlbnMuIEFkZCBMaXF1aWRpdHkgaW50byBQb29sLgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQAAAAxFbnRlckFzc2V0SUQFAAAAHE5ld1N1bXVwb2ZVU0RUVG9Bc3NldFN3YXBGZWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAATVG90YWxfb2ZfUGFpcl9UeG5zXwUAAAAMRW50ZXJBc3NldElEBQAAAAZOZXdUUFQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0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AAAVTmV3QXNzZXRIb2xkaW5nSW5QYWlyCQAAZAAAAAIFAAAAEkFzc2V0SG9sZGluZ0luUGFpcggFAAAABHBtdDEAAAAGYW1vdW50BAAAAA1MUFRva2VuSXNzdWVkBAAAAAckbWF0Y2gwCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAACVRvdGFsX0xQXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAEE5ld0xQVG9rZW5Jc3N1ZWQJAABkAAAAAgUAAAANTFBUb2tlbklzc3VlZAUAAAAScXVhbnRpdHlvZkxQVG9rZW4xAwkBAAAAAiE9AAAAAgUAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAAAAAAIFAAAADFZvdGluZ1N0YXR1cwUAAAATQ3VycmVudFZvdGluZ1N0YXR1cwkAAAIAAAABCQABLAAAAAIFAAAADEVudGVyQXNzZXRJRAIAAAAgIGlzIG5vdCBBIFdoaXRlbGlzdGVkIFRva2VuIFlldC4DCQAAAAAAAAIFAAAADEVudGVyQXNzZXRJRAkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAJJJbnB1dCBjYW4gTmV2ZXIgYmUgYSBVU0RUIEFzc2V0SUQuIEVudGVyIFdoaXRlbGlzdGVkIEFzc2V0SUQgaW4gaW5wdXQgYXMgd2VsbCBhcyBpbiBwYXltZW50WzFdICYgQXR0YWNoIFVTRFQgYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzJdLgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAACeVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZCBhcyBwYXltZW50IGluIDUwJS01MCUuIEtpbmRseSBBdHRhY2ggcGF5bWVudDEgPSBUb2tlbiB5b3Ugd2FudCB0byBhZGQgZm9yIExpcXVpZGl0eSAmIHBheW1lbnQyID0gRXF1aXZhbGVudCBBbW91bnQgb2YgVVNEVCBUb2tlbi4DCQAAAAAAAAIIBQAAAARwbXQxAAAAB2Fzc2V0SWQFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAeFlvdSBBdHRhY2hlZCBVU0RUIGFzc2V0IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggb25seSB3aGl0ZWxpc3RlZCBUb2tlbiBpbiBwYXltZW50WzFdIGFsb25nIHdpdGggVVNEVCBpbiBwYXltZW50WzJdLgMJAQAAAAIhPQAAAAIIBQAAAARwbXQxAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAa0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCBmb3IgTGlxdWlkaXR5IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggU3RyaW5nIEFzc2V0IG9yIFdoaXRlbGlzdGVkIFRva2VuIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAABHBtdDEAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAABrSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkIGZvciBMaXF1aWRpdHkgaW4gcGF5bWVudFsxXSwgcGxlYXNlIGF0dGFjaCBTdHJpbmcgQXNzZXQgb3IgV2hpdGVsaXN0ZWQgVG9rZW4gb25seS4DCQEAAAACIT0AAAACCAUAAAAEcG10MgAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAGpXcm9uZyBBc3NldCBBdHRhY2hlZCBpbiBwYXltZW50c1syXSwgUGxlYXNlIGF0dGFjaCBwYXltZW50WzFdID0gTGlxdWlkaXR5IFRva2VuICYgcGF5bWVudFsyXSA9IFVTRFQgVG9rZW4uAwkAAGYAAAACAAAAAAAAmJaACAUAAAAEcG10MgAAAAZhbW91bnQJAAACAAAAAQIAAABVcGxlYXNlIGF0dGFjaCBhdGxlYXN0IDEwIFVTRFQgaW4gcGF5bWVudFsyXSAmIEVxdWl2YWxlbnQgd29ydGggb2YgVG9rZW4gaW4gcGF5bWVudFsxXQMJAQAAAAIhPQAAAAIIBQAAAARwbXQyAAAABmFtb3VudAUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAF5BdHRhY2hlZCBwYXltZW50WzJdIHF0eSBpcyBub3QgbWF0Y2hpbmcgYXMgcGVyIGF0dGFjaGVkIHBheW1lbnRbMV0ucGF5bWVudFsyXSBtdXN0IGJlIGFzIGludCBbCQABpAAAAAEFAAAAFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQCAAAABV0gb3IgCQABpAAAAAEJAABrAAAAAwUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAAAAAAAAAAAAQAAAAAAAA9CQAIAAAABLgkBAAAACXRha2VSaWdodAAAAAIJAAGkAAAAAQUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAAAAAAAAAAABgIAAAAGIFVTRFQuAwkAAGYAAAACAAAAAAAAAAABBQAAABJxdWFudGl0eW9mTFBUb2tlbjEJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIExQIFRva2VuIE91dGNvbWUgaXMgZ29pbmcgYmVsb3cgCQABpAAAAAEFAAAADXNoYXJlZGVjaW1hbHMCAAAAPCBEZWNpbWFscy4gUGxlYXNlIEF0dGFjaCBtaW4uIDEgTFAgdG9rZW4gb3IgMTAgVVNEVCBBdGxlYXN0LgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAUTmV3VVNEVEhvbGRpbmdJblBhaXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQFAAAAFU5ld0Fzc2V0SG9sZGluZ0luUGFpcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAAlUb3RhbF9MUF8FAAAADEVudGVyQXNzZXRJRAUAAAAQTmV3TFBUb2tlbklzc3VlZAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADlJlaXNzdWVhc3NldElkBQAAABJxdWFudGl0eW9mTFBUb2tlbjEGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAScXVhbnRpdHlvZkxQVG9rZW4xBQAAAA5SZWlzc3VlYXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAD1JlbW92ZUxpcXVpZGl0eQAAAAEAAAAMRW50ZXJBc3NldElEBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAADpObyBwYXltZW50IGF0dGFjaGVkLCBQbGVhc2UgQXR0YWNoIExQIFRva2VuIGFzIHBheW1lbnRbMV0uBAAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAIUGFpcl9VVl8FAAAADEVudGVyQXNzZXRJRAQAAAAMVm90aW5nU3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAxFbnRlckFzc2V0SUQEAAAAElJlaXNzdWVhYmxlYXNzZXRJZAkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAANMUF8FAAAADEVudGVyQXNzZXRJRAIAAAAlTFAgVG9rZW4gaXMgTWlzc2luZyBvciBub3QgR2VuZXJhdGVkLgQAAAATQ3VycmVudFZvdGluZ1N0YXR1cwIAAAABRgQAAAAMZGVjaW1hbHNpbmZvCQEAAAAT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AAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAQTmV3TFBUb2tlbklzc3VlZAkAAGUAAAACBQAAAA1MUFRva2VuSXNzdWVkCAUAAAADcG10AAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABAgAAACNQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gV2hpdGVsaXN0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAAB4gaXMgbm90IEEgV2hpdGVsaXN0IFRva2VuIFlldC4DCQAAAAAAAAIJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElEBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAGtEb24ndCBjaG9vc2UgVVNEVCBBc3NldElEIGFzIElucHV0LCBPbmx5IFdoaXRlbGlzdGVkIEFzc2V0IGFzIElucHV0IFN0cmluZyAmIEF0dGFjaCBMUCBUb2tlbnMgYXMgcGF5bWVudFsxXQMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAASUmVpc3N1ZWFibGVhc3NldElkCQAAAgAAAAECAAAAR1dyb25nIEFzc2V0IGlzIGF0dGFjaGVkIGluIHBheW1lbnRbMV0gb3IgTFAgVG9rZW4gTm90IEZvdW5kIG9yIE1pc3NpbmcuAwkAAGYAAAACAAAAAAAAAAABBQAAABBVc2VyTFBQZXJjZW50YWdlCQAAAgAAAAECAAAALllvdXIgTFAgVG9rZW4gYW1vdW50ICUgaXMgdmVyeSBsb3cgdG8gY29udmVydC4DCQAAZgAAAAIAAAAAAAAAAAEFAAAAD1VzZXJMUFdvcnRoVVNEVAkAAAIAAAABAgAAAFJZb3VyIExQIFRva2VuIGNvbnZlcnNpb24gYW1vdW50IGlzIHZlcnkgbG93IHRvIGNvbnZlcnQgb3IgbGVzcyB0aGFuIDAuMDAwMDAxIFVTRFQuAwkAAGYAAAACAAAAAAAAAAABBQAAABBVc2VyTFBXb3J0aEFzc2V0CQAAAgAAAAECAAAAXFlvdXIgTFAgVG9rZW4gY29udmVyc2lvbiBhbW91bnQgaXMgdmVyeSBsb3cgdG8gY29udmVydCBvciBsZXNzIHRoYW4gZnJhY3Rpb24gdmFsdWUgb2YgVG9rZW4uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABZXaXRoZHJhd19MUF9QZXJjZW50YWdlBQAAABBVc2VyTFBQZXJjZW50YWdlCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAASUmVpc3N1ZWFibGVhc3NldElkCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAAlUb3RhbF9MUF8FAAAADEVudGVyQXNzZXRJRAUAAAAQTmV3TFBUb2tlbklzc3VlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAUTmV3VVNEVEhvbGRpbmdJblBhaXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQFAAAAFU5ld0Fzc2V0SG9sZGluZ0luUGFpcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAD1VzZXJMUFdvcnRoVVNEVAUAAAALVVNEVEFzc2V0SUQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABBVc2VyTFBXb3J0aEFzc2V0CQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5AU0pYw==", "height": 1900660, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3y2VyqKLt2EeUVVHkfxyPT6HxZKwm14LMVJHABGKiZUw Next: ChtHNHDwk9MjrAoJQ1hP6S8s5eeA3F8m7jf7uJAwk65C Diff:
Old | New | Differences | |
---|---|---|---|
5 | 5 | ||
6 | 6 | let b = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
7 | 7 | ||
8 | - | let c = base58' | |
8 | + | let c = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
9 | 9 | ||
10 | 10 | let d = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
11 | 11 | ||
12 | 12 | let e = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
13 | 13 | ||
14 | - | let f = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
15 | - | ||
16 | - | @Callable(g) | |
17 | - | func RegisterPairForVoting (h,i) = { | |
18 | - | let j = value(g.payments[0]) | |
19 | - | let k = value(g.payments[1]) | |
20 | - | let l = value(g.payments[2]) | |
21 | - | let m = 90 | |
22 | - | let n = toBase58String(g.caller.bytes) | |
23 | - | let o = !(isDefined(k.assetId)) | |
24 | - | let p = 1440 | |
25 | - | let q = (p * i) | |
26 | - | let r = (q - 43199) | |
27 | - | let s = ((100000 + ((11574 * r) / 10000)) * 100000000) | |
28 | - | let t = (height + q) | |
29 | - | let u = getString(this, ("Pair_UV_" + h)) | |
30 | - | let v = "F" | |
31 | - | let w = fromBase58String(h) | |
32 | - | if ((43 > size(h))) | |
14 | + | @Callable(f) | |
15 | + | func RegisterPairForVoting (g,h) = { | |
16 | + | let i = value(f.payments[0]) | |
17 | + | let j = value(f.payments[1]) | |
18 | + | let k = 90 | |
19 | + | let l = toBase58String(f.caller.bytes) | |
20 | + | let m = !(isDefined(j.assetId)) | |
21 | + | let n = 1440 | |
22 | + | let o = (n * h) | |
23 | + | let p = (o - 43199) | |
24 | + | let q = ((100000 + ((11574 * p) / 10000)) * 100000000) | |
25 | + | let r = (height + o) | |
26 | + | let s = getString(this, ("Pair_UV_" + g)) | |
27 | + | let t = "F" | |
28 | + | let u = fromBase58String(g) | |
29 | + | if ((43 > size(g))) | |
33 | 30 | then throw("Wrong AssetID is Entered for Voting. Please Enter a Valid AssetID. Probably you entered an AssetID less than 43 Chars.") | |
34 | - | else if ((29 >= | |
31 | + | else if ((29 >= h)) | |
35 | 32 | then throw("Enter no. of days in between 30 to 90.") | |
36 | - | else if (( | |
33 | + | else if ((h > k)) | |
37 | 34 | then throw("You Entered days greater than 90 please Enter no. of days in between 1 to 90.") | |
38 | - | else if (( | |
35 | + | else if ((s == g)) | |
39 | 36 | then throw("Pair Already Exist in Voting List.") | |
40 | - | else if ((size( | |
41 | - | then throw(" | |
42 | - | else if (( | |
43 | - | then throw("Incorrect asset attached for Voting in payment[1], please attach | |
44 | - | else if (( | |
45 | - | then throw((((("You attached only " + toString(fraction( | |
46 | - | else if (( | |
37 | + | else if ((size(f.payments) != 2)) | |
38 | + | then throw("Two attached assets expected as payment. Kindly Attach payment1 = CODE Token & payment2 = Token you want to List for Voting.") | |
39 | + | else if ((i.assetId != b)) | |
40 | + | then throw("Incorrect asset attached for Voting in payment[1], please attach 2000 CODE Token only.") | |
41 | + | else if ((i.amount != 200000000000)) | |
42 | + | then throw((((("You attached only " + toString(fraction(i.amount, 1, 100000000))) + ".") + toString(fraction(i.amount, 1, 10000000))) + " CODE for Voting in payment[1], please attach 2000 CODE Token.")) | |
43 | + | else if ((j.assetId != u)) | |
47 | 44 | then throw("Input String & Attached AssetID in payment2 is not matching.") | |
48 | - | else if (( | |
45 | + | else if ((m == true)) | |
49 | 46 | then throw("You Attached TN Asset ID for Voting, please attach fsTN instead of TN or Token You want to list in payment[2].") | |
50 | - | else if ((l.assetId != c)) | |
51 | - | then throw("Incorrect asset attached for Voting in payment[3], please attach 1000 xUSD Token only.") | |
52 | - | else if ((l.amount != 10000000)) | |
53 | - | then throw((((("You attached only " + toString(fraction(l.amount, 1, 100000000))) + ".") + toString(fraction(l.amount, 1, 10000000))) + " xUSD for Voting in payment[3], please attach 1000 xUSD Token.")) | |
54 | - | else [StringEntry(("Pair_UV_" + h), h), StringEntry(("Voting_Status_" + h), v), IntegerEntry(("Voting_SH_" + h), height), IntegerEntry(("Voting_EH_" + h), t), IntegerEntry(("Voting_Period_" + h), q), IntegerEntry(("Listing_Fee_" + h), j.amount), IntegerEntry(("xUSD_Listing_Fee_" + h), l.amount), IntegerEntry(("Votes_Req_" + h), (s / 3)), IntegerEntry(("Votes_Rcvd_" + h), 0), ScriptTransfer(d, j.amount, b)] | |
47 | + | else [StringEntry(("Pair_UV_" + g), g), StringEntry(("Voting_Status_" + g), t), IntegerEntry(("Voting_SH_" + g), height), IntegerEntry(("Voting_EH_" + g), r), IntegerEntry(("Voting_Period_" + g), o), IntegerEntry(("Listing_Fee_" + g), i.amount), IntegerEntry(("Votes_Req_" + g), (q / 3)), IntegerEntry(("Votes_Rcvd_" + g), 0), ScriptTransfer(c, i.amount, b)] | |
55 | 48 | } | |
56 | 49 | ||
57 | 50 | ||
58 | 51 | ||
59 | - | @Callable( | |
60 | - | func DoVoting ( | |
61 | - | let | |
62 | - | then | |
52 | + | @Callable(f) | |
53 | + | func DoVoting (g) = { | |
54 | + | let v = if ((size(f.payments) == 1)) | |
55 | + | then f.payments[0] | |
63 | 56 | else throw((toBase58String(b) + "CODE Token is required as Attached payment")) | |
64 | - | let | |
65 | - | let | |
66 | - | let | |
67 | - | let | |
68 | - | let | |
69 | - | let | |
70 | - | let | |
71 | - | let | |
72 | - | let | |
73 | - | if ($isInstanceOf( | |
57 | + | let w = toBase58String(f.caller.bytes) | |
58 | + | let x = "P" | |
59 | + | let y = getIntegerValue(this, ("Voting_EH_" + g)) | |
60 | + | let z = getString(this, ("Pair_UV_" + g)) | |
61 | + | let A = getIntegerValue(this, ("Votes_Req_" + g)) | |
62 | + | let B = getIntegerValue(this, ("Votes_Rcvd_" + g)) | |
63 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
64 | + | let D = { | |
65 | + | let E = getInteger(this, ("Votes_Rcvd_" + g)) | |
66 | + | if ($isInstanceOf(E, "Int")) | |
74 | 67 | then { | |
75 | - | let | |
76 | - | | |
68 | + | let F = E | |
69 | + | F | |
77 | 70 | } | |
78 | 71 | else 0 | |
79 | 72 | } | |
80 | - | let | |
81 | - | let | |
82 | - | let | |
83 | - | if ($isInstanceOf( | |
73 | + | let G = (D + v.amount) | |
74 | + | let H = { | |
75 | + | let E = getInteger(this, ((("Votes_Rcvd_" + w) + "_") + g)) | |
76 | + | if ($isInstanceOf(E, "Int")) | |
84 | 77 | then { | |
85 | - | let | |
86 | - | | |
78 | + | let I = E | |
79 | + | I | |
87 | 80 | } | |
88 | 81 | else 0 | |
89 | 82 | } | |
90 | - | let | |
91 | - | let | |
92 | - | let | |
93 | - | if (( | |
83 | + | let J = (H + v.amount) | |
84 | + | let K = (B >= A) | |
85 | + | let L = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
86 | + | if ((z != g)) | |
94 | 87 | then throw("Pair is not available in Voting List.") | |
95 | - | else if ((height > | |
96 | - | then throw((("Voting timeline for " + | |
97 | - | else if (( | |
88 | + | else if ((height > y)) | |
89 | + | then throw((("Voting timeline for " + g) + " is expired.")) | |
90 | + | else if ((v.assetId != b)) | |
98 | 91 | then throw((("Kindly Attach Only " + toBase58String(b)) + " Token.")) | |
99 | - | else if (( | |
100 | - | then throw((("Voting for " + | |
101 | - | else if ( | |
102 | - | then [StringEntry(("Voting_Status_" + | |
103 | - | else [IntegerEntry(("Votes_Rcvd_" + | |
92 | + | else if ((C == x)) | |
93 | + | then throw((("Voting for " + g) + " pair is completed & it’s available in whitelist.")) | |
94 | + | else if (K) | |
95 | + | then [StringEntry(("Voting_Status_" + g), x), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), 0), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), 0), IntegerEntry(("Total_of_Pair_Txns_" + g), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + g) + "_") + toBase58String(a)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + g), 0), IntegerEntry(((("Votes_Rcvd_" + w) + "_") + g), J)] | |
96 | + | else [IntegerEntry(("Votes_Rcvd_" + g), G), IntegerEntry(((("Votes_Rcvd_" + w) + "_") + g), J)] | |
104 | 97 | } | |
105 | 98 | ||
106 | 99 | ||
107 | 100 | ||
108 | - | @Callable( | |
109 | - | func WithdrawVotedTokens ( | |
110 | - | let | |
111 | - | then | |
101 | + | @Callable(f) | |
102 | + | func WithdrawVotedTokens (g) = { | |
103 | + | let v = if ((size(f.payments) == 1)) | |
104 | + | then f.payments[0] | |
112 | 105 | else throw("0.1 TN Token is required as Attached payment.") | |
113 | - | let | |
114 | - | let | |
115 | - | let | |
116 | - | let | |
117 | - | let | |
118 | - | if (( | |
106 | + | let w = toBase58String(f.caller.bytes) | |
107 | + | let y = getIntegerValue(this, ("Voting_EH_" + g)) | |
108 | + | let z = getString(this, ("Pair_UV_" + g)) | |
109 | + | let M = valueOrErrorMessage(getInteger(this, ((("Votes_Rcvd_" + w) + "_") + g)), (w + " Address never voted & exist in list.")) | |
110 | + | let N = (y - height) | |
111 | + | if ((z != g)) | |
119 | 112 | then throw("Pair is not available in Voting List.") | |
120 | - | else if (( | |
121 | - | then throw((("Voting Already Running. You can withdraw your CODE Token after " + toString( | |
122 | - | else if ((0 >= | |
113 | + | else if ((y > height)) | |
114 | + | then throw((("Voting Already Running. You can withdraw your CODE Token after " + toString(N)) + " blocks")) | |
115 | + | else if ((0 >= M)) | |
123 | 116 | then throw("You don't have any dues of CODE balance in this Voting Pair.") | |
124 | - | else if (isDefined( | |
117 | + | else if (isDefined(v.assetId)) | |
125 | 118 | then throw("Don't attach any other asset. Please attach 0.1 TN as a fee to release your token") | |
126 | - | else if (( | |
119 | + | else if ((v.amount != 10000000)) | |
127 | 120 | then throw("Please attach 0.1 TN as a fee to release your token.") | |
128 | - | else [IntegerEntry(((("Votes_Rcvd_" + | |
121 | + | else [IntegerEntry(((("Votes_Rcvd_" + w) + "_") + g), 0), ScriptTransfer(f.caller, M, b)] | |
129 | 122 | } | |
130 | 123 | ||
131 | 124 | ||
132 | 125 | ||
133 | - | @Callable( | |
134 | - | func IssueLPToken ( | |
135 | - | let | |
136 | - | let | |
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | let | |
141 | - | let | |
142 | - | let | |
143 | - | let | |
144 | - | let | |
145 | - | let | |
146 | - | if (( | |
147 | - | then throw((("Your are not allowded to Issue LP Token. Only " + | |
148 | - | else if (( | |
126 | + | @Callable(f) | |
127 | + | func IssueLPToken (g) = { | |
128 | + | let O = valueOrErrorMessage(getString(this, "LP_Admin_Rights"), "LP Admin Rights are Not Included into Smart Contract. Deploy Admin Rights First.") | |
129 | + | let w = toBase58String(f.caller.bytes) | |
130 | + | let z = valueOrErrorMessage(getString(this, ("Pair_UV_" + g)), "Asset not Found in Whitelisted Token") | |
131 | + | let L = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
132 | + | let P = L.name | |
133 | + | let Q = L.decimals | |
134 | + | let x = "P" | |
135 | + | let C = valueOrErrorMessage(getString(this, ("Voting_Status_" + g)), ("Voting Status is Missing for " + g)) | |
136 | + | let R = (1 * pow(10, 0, fraction((Q + 6), 1, 2), 0, 0, UP)) | |
137 | + | let S = Issue((("LP-" + take(P, 8)) + "-USDT"), (((("LP-" + P) + "-USDT") + " is a Liquidity Provider Token Issued Against ") + g), R, fraction((Q + 6), 1, 2), true) | |
138 | + | let T = calculateAssetId(S) | |
139 | + | if ((O != w)) | |
140 | + | then throw((("Your are not allowded to Issue LP Token. Only " + O) + " can issue the LP Token.")) | |
141 | + | else if ((z != g)) | |
149 | 142 | then throw("Pair is not available in Voting List.") | |
150 | - | else if (( | |
143 | + | else if ((C != x)) | |
151 | 144 | then throw("LP Token must be a Whitelisted Token.") | |
152 | - | else [ | |
145 | + | else [S, StringEntry(("LP_" + g), toBase58String(T)), IntegerEntry(("Total_LP_" + g), R)] | |
153 | 146 | } | |
154 | 147 | ||
155 | 148 | ||
156 | 149 | ||
157 | - | @Callable( | |
158 | - | func SwapAssetToUSDTPairEntry ( | |
159 | - | let | |
160 | - | let | |
161 | - | then | |
150 | + | @Callable(f) | |
151 | + | func SwapAssetToUSDTPairEntry (g) = { | |
152 | + | let w = toBase58String(f.caller.bytes) | |
153 | + | let v = if ((size(f.payments) == 1)) | |
154 | + | then f.payments[0] | |
162 | 155 | else throw("Whitelisted Token is required as Attached payment[1].") | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | let | |
168 | - | let | |
169 | - | let | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | if ($isInstanceOf( | |
156 | + | let z = getString(this, ("Pair_UV_" + g)) | |
157 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
158 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
159 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
160 | + | let W = fraction(U, V, (V + v.amount)) | |
161 | + | let X = (U - W) | |
162 | + | let Y = "F" | |
163 | + | let Z = 6 | |
164 | + | let aa = ((X * Z) / 1000) | |
165 | + | let ab = (X - aa) | |
166 | + | let ac = { | |
167 | + | let E = getInteger(this, ((("Total_Swap_Fee_Collected_" + g) + "_") + toBase58String(a))) | |
168 | + | if ($isInstanceOf(E, "Int")) | |
176 | 169 | then { | |
177 | - | let | |
178 | - | | |
170 | + | let F = E | |
171 | + | F | |
179 | 172 | } | |
180 | 173 | else 0 | |
181 | 174 | } | |
182 | - | let | |
183 | - | let | |
184 | - | let | |
185 | - | if ($isInstanceOf( | |
175 | + | let ad = (ac + aa) | |
176 | + | let ae = { | |
177 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
178 | + | if ($isInstanceOf(E, "Int")) | |
186 | 179 | then { | |
187 | - | let | |
188 | - | | |
180 | + | let F = E | |
181 | + | F | |
189 | 182 | } | |
190 | 183 | else 0 | |
191 | 184 | } | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | if ($isInstanceOf( | |
185 | + | let af = (V + v.amount) | |
186 | + | let ag = { | |
187 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
188 | + | if ($isInstanceOf(E, "Int")) | |
196 | 189 | then { | |
197 | - | let | |
198 | - | | |
190 | + | let F = E | |
191 | + | F | |
199 | 192 | } | |
200 | 193 | else 0 | |
201 | 194 | } | |
202 | - | let | |
203 | - | let | |
204 | - | let | |
205 | - | if ($isInstanceOf( | |
195 | + | let ah = (U - X) | |
196 | + | let ai = { | |
197 | + | let E = getIntegerValue(this, ("Total_of_Pair_Txns_" + g)) | |
198 | + | if ($isInstanceOf(E, "Int")) | |
206 | 199 | then { | |
207 | - | let | |
208 | - | | |
200 | + | let F = E | |
201 | + | F | |
209 | 202 | } | |
210 | 203 | else 0 | |
211 | 204 | } | |
212 | - | let | |
213 | - | if (( | |
205 | + | let aj = (ai + 1) | |
206 | + | if ((g == toBase58String(a))) | |
214 | 207 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].") | |
215 | - | else if (( | |
208 | + | else if ((z != g)) | |
216 | 209 | then throw("Pair is not available in Whitelisted Asset.") | |
217 | - | else if (( | |
218 | - | then throw(( | |
219 | - | else if (( | |
210 | + | else if ((C == Y)) | |
211 | + | then throw((g + " is not A Whitelisted Token Yet.")) | |
212 | + | else if ((v.assetId == a)) | |
220 | 213 | then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.") | |
221 | - | else if (( | |
222 | - | then throw(("Incorrect asset attached, please attach or send " + | |
223 | - | else if (( | |
214 | + | else if ((v.assetId != fromBase58String(g))) | |
215 | + | then throw(("Incorrect asset attached, please attach or send " + g)) | |
216 | + | else if ((U == 0)) | |
224 | 217 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
225 | - | else if (( | |
218 | + | else if ((V == 0)) | |
226 | 219 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
227 | - | else if ((10000000 > | |
228 | - | then throw((("Your Attached Asset Amount is very low. Attach More " + | |
229 | - | else if (( | |
230 | - | then throw((("Pool Only has a Liquidity of " + toString(( | |
231 | - | else [IntegerEntry(((("Total_Swap_Fee_Collected_" + | |
220 | + | else if ((10000000 > X)) | |
221 | + | then throw((("Your Attached Asset Amount is very low. Attach More " + g) + " Tokens to Claim the minimum Amount of 10 dollar atleast.")) | |
222 | + | else if ((X > U)) | |
223 | + | then throw((("Pool Only has a Liquidity of " + toString((U / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool.")) | |
224 | + | else [IntegerEntry(((("Total_Swap_Fee_Collected_" + g) + "_") + toBase58String(a)), ad), IntegerEntry(("Total_of_Pair_Txns_" + g), aj), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), af), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ah), ScriptTransfer(f.caller, ab, a), ScriptTransfer(d, aa, a)] | |
232 | 225 | } | |
233 | 226 | ||
234 | 227 | ||
235 | 228 | ||
236 | - | @Callable( | |
237 | - | func SwapUSDTToAssetPairEntry ( | |
238 | - | let | |
239 | - | let | |
240 | - | then | |
229 | + | @Callable(f) | |
230 | + | func SwapUSDTToAssetPairEntry (g) = { | |
231 | + | let w = toBase58String(f.caller.bytes) | |
232 | + | let v = if ((size(f.payments) == 1)) | |
233 | + | then f.payments[0] | |
241 | 234 | else throw((("Only " + toBase58String(a)) + " USDT Token is required as an Attached payment[1].")) | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | if ($isInstanceOf( | |
235 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
236 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
237 | + | let ak = fraction(U, V, (U + v.amount)) | |
238 | + | let X = (V - ak) | |
239 | + | let z = getString(this, ("Pair_UV_" + g)) | |
240 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
241 | + | let Y = "F" | |
242 | + | let Z = 3 | |
243 | + | let aa = ((X * Z) / 1000) | |
244 | + | let ab = (X - aa) | |
245 | + | let al = { | |
246 | + | let E = getInteger(this, ("Total_Swap_Fee_Collected_" + g)) | |
247 | + | if ($isInstanceOf(E, "Int")) | |
255 | 248 | then { | |
256 | - | let | |
257 | - | | |
249 | + | let F = E | |
250 | + | F | |
258 | 251 | } | |
259 | 252 | else 0 | |
260 | 253 | } | |
261 | - | let | |
262 | - | let | |
263 | - | let | |
264 | - | if ($isInstanceOf( | |
254 | + | let am = (al + aa) | |
255 | + | let ae = { | |
256 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
257 | + | if ($isInstanceOf(E, "Int")) | |
265 | 258 | then { | |
266 | - | let | |
267 | - | | |
259 | + | let F = E | |
260 | + | F | |
268 | 261 | } | |
269 | 262 | else 0 | |
270 | 263 | } | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | if ($isInstanceOf( | |
264 | + | let af = (V - X) | |
265 | + | let ag = { | |
266 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
267 | + | if ($isInstanceOf(E, "Int")) | |
275 | 268 | then { | |
276 | - | let | |
277 | - | | |
269 | + | let F = E | |
270 | + | F | |
278 | 271 | } | |
279 | 272 | else 0 | |
280 | 273 | } | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | if ($isInstanceOf( | |
274 | + | let ah = (U + v.amount) | |
275 | + | let ai = { | |
276 | + | let E = getIntegerValue(this, ("Total_of_Pair_Txns_" + g)) | |
277 | + | if ($isInstanceOf(E, "Int")) | |
285 | 278 | then { | |
286 | - | let | |
287 | - | | |
279 | + | let F = E | |
280 | + | F | |
288 | 281 | } | |
289 | 282 | else 0 | |
290 | 283 | } | |
291 | - | let | |
292 | - | if (( | |
284 | + | let aj = (ai + 1) | |
285 | + | if ((z != g)) | |
293 | 286 | then throw("Pair is not available in Whitelisted Asset.") | |
294 | - | else if (( | |
295 | - | then throw(( | |
296 | - | else if (( | |
287 | + | else if ((C == Y)) | |
288 | + | then throw((g + " is not A Whitelisted Token Yet.")) | |
289 | + | else if ((g == toBase58String(a))) | |
297 | 290 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach USDT as an attachment Token in payment[1].") | |
298 | - | else if (( | |
291 | + | else if ((v.assetId != a)) | |
299 | 292 | then throw("You can Attach USDT as an Attached Payment[1] to Swap USDT To Required Token. Any other asset else than USDT will be rejected.") | |
300 | - | else if ((10000000 > | |
293 | + | else if ((10000000 > v.amount)) | |
301 | 294 | then throw("Your Attached USDT Amount is very low. Attach Atleast 10 USDT to Claim the minimum Tokens.") | |
302 | - | else if (( | |
295 | + | else if ((U == 0)) | |
303 | 296 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
304 | - | else if (( | |
297 | + | else if ((V == 0)) | |
305 | 298 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
306 | - | else if (( | |
307 | - | then throw((("Pool Only has a Liquidity of " + toString( | |
308 | - | else [IntegerEntry(("Total_Swap_Fee_Collected_" + | |
299 | + | else if ((X > V)) | |
300 | + | then throw((("Pool Only has a Liquidity of " + toString(V)) + " Tokens. Add Liquidity into Pool.")) | |
301 | + | else [IntegerEntry(("Total_Swap_Fee_Collected_" + g), am), IntegerEntry(("Total_of_Pair_Txns_" + g), aj), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), af), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ah), ScriptTransfer(f.caller, ab, fromBase58String(g)), ScriptTransfer(e, aa, fromBase58String(g))] | |
309 | 302 | } | |
310 | 303 | ||
311 | 304 | ||
312 | 305 | ||
313 | - | @Callable( | |
314 | - | func AddLiquidity ( | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | if ($isInstanceOf( | |
306 | + | @Callable(f) | |
307 | + | func AddLiquidity (g) = { | |
308 | + | let w = toBase58String(f.caller.bytes) | |
309 | + | let i = value(f.payments[0]) | |
310 | + | let j = value(f.payments[1]) | |
311 | + | let z = getString(this, ("Pair_UV_" + g)) | |
312 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
313 | + | let an = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + g)), "LP Token is Missing or May be not Generated.")) | |
314 | + | let Y = "F" | |
315 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
316 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
317 | + | let ao = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
318 | + | let Q = ao.decimals | |
319 | + | let ap = U | |
320 | + | let aq = V | |
321 | + | let ar = pow((((ap * 1000000) / aq) * pow(10, 0, Q, 0, 0, UP)), 0, 1, 0, 0, UP) | |
322 | + | let as = (6 + Q) | |
323 | + | let at = (as / 2) | |
324 | + | let au = fraction(ar, i.amount, pow(10, 0, as, 0, 0, UP)) | |
325 | + | let av = pow((fraction(i.amount, 1, pow(10, 0, Q, 0, 0, UP)) * fraction(j.amount, 1, pow(10, 0, 6, 0, 0, UP))), 0, 5, 1, at, DOWN) | |
326 | + | let aw = { | |
327 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
328 | + | if ($isInstanceOf(E, "Int")) | |
336 | 329 | then { | |
337 | - | let | |
338 | - | | |
330 | + | let F = E | |
331 | + | F | |
339 | 332 | } | |
340 | 333 | else 0 | |
341 | 334 | } | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | if ($isInstanceOf( | |
335 | + | let ax = (aw + j.amount) | |
336 | + | let ay = { | |
337 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
338 | + | if ($isInstanceOf(E, "Int")) | |
346 | 339 | then { | |
347 | - | let | |
348 | - | | |
340 | + | let F = E | |
341 | + | F | |
349 | 342 | } | |
350 | 343 | else 0 | |
351 | 344 | } | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | if ($isInstanceOf( | |
345 | + | let az = (ay + i.amount) | |
346 | + | let aA = { | |
347 | + | let E = getIntegerValue(this, ("Total_LP_" + g)) | |
348 | + | if ($isInstanceOf(E, "Int")) | |
356 | 349 | then { | |
357 | - | let | |
358 | - | | |
350 | + | let F = E | |
351 | + | F | |
359 | 352 | } | |
360 | 353 | else 0 | |
361 | 354 | } | |
362 | - | let | |
363 | - | if (( | |
355 | + | let aB = (aA + av) | |
356 | + | if ((z != g)) | |
364 | 357 | then throw("Pair is not available in Whitelisted Asset.") | |
365 | - | else if (( | |
366 | - | then throw(( | |
367 | - | else if (( | |
358 | + | else if ((C == Y)) | |
359 | + | then throw((g + " is not A Whitelisted Token Yet.")) | |
360 | + | else if ((g == toBase58String(a))) | |
368 | 361 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input as well as in payment[1] & Attach USDT as an attachment Token in payment[2].") | |
369 | - | else if ((size( | |
362 | + | else if ((size(f.payments) != 2)) | |
370 | 363 | then throw("Two attached assets expected as payment in 50%-50%. Kindly Attach payment1 = Token you want to add for Liquidity & payment2 = Equivalent Amount of USDT Token.") | |
371 | - | else if (( | |
364 | + | else if ((i.assetId == a)) | |
372 | 365 | then throw("You Attached USDT asset in payment[1], please attach only whitelisted Token in payment[1] along with USDT in payment[2].") | |
373 | - | else if (( | |
366 | + | else if ((i.assetId != fromBase58String(g))) | |
374 | 367 | then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.") | |
375 | - | else if (( | |
368 | + | else if ((i.assetId != fromBase58String(g))) | |
376 | 369 | then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.") | |
377 | - | else if (( | |
370 | + | else if ((j.assetId != a)) | |
378 | 371 | then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = USDT Token.") | |
379 | - | else if ((10000000 > | |
372 | + | else if ((10000000 > j.amount)) | |
380 | 373 | then throw("please attach atleast 10 USDT in payment[2] & Equivalent worth of Token in payment[1]") | |
381 | - | else if (( | |
382 | - | then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as [" + toString( | |
383 | - | else if ((1 > | |
384 | - | then throw((("LP Token Outcome is going below " + toString( | |
385 | - | else [IntegerEntry(((("Balance_of_" + | |
374 | + | else if ((j.amount != au)) | |
375 | + | then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(au)) + "] or ") + toString(fraction(au, 1, 1000000))) + ".") + takeRight(toString(au), 6)) + " USDT.")) | |
376 | + | else if ((1 > av)) | |
377 | + | then throw((("LP Token Outcome is going below " + toString(at)) + " Decimals. Please Attach min. 1 LP token or 10 USDT Atleast.")) | |
378 | + | else [IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ax), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), az), IntegerEntry(("Total_LP_" + g), aB), Reissue(an, av, true), ScriptTransfer(f.caller, av, an)] | |
386 | 379 | } | |
387 | 380 | ||
388 | 381 | ||
389 | 382 | ||
390 | - | @Callable( | |
391 | - | func RemoveLiquidity ( | |
392 | - | let | |
393 | - | let | |
394 | - | then | |
383 | + | @Callable(f) | |
384 | + | func RemoveLiquidity (g) = { | |
385 | + | let w = toBase58String(f.caller.bytes) | |
386 | + | let v = if ((size(f.payments) == 1)) | |
387 | + | then f.payments[0] | |
395 | 388 | else throw("No payment attached, Please Attach LP Token as payment[1].") | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | let | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | if ($isInstanceOf( | |
389 | + | let z = getString(this, ("Pair_UV_" + g)) | |
390 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
391 | + | let aC = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + g)), "LP Token is Missing or not Generated.")) | |
392 | + | let Y = "F" | |
393 | + | let ao = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
394 | + | let Q = ao.decimals | |
395 | + | let as = (6 + Q) | |
396 | + | let at = (as / 2) | |
397 | + | let aD = getIntegerValue(this, ("Total_LP_" + g)) | |
398 | + | let aE = pow(fraction(v.amount, pow(10, 0, 8, 0, 0, UP), aD), 6, 1, 0, 6, UP) | |
399 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
400 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
401 | + | let aF = fraction(U, aE, pow(10, 0, 8, 0, 0, UP)) | |
402 | + | let aG = fraction(V, aE, pow(10, 0, 8, 0, 0, UP)) | |
403 | + | let aw = { | |
404 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
405 | + | if ($isInstanceOf(E, "Int")) | |
413 | 406 | then { | |
414 | - | let | |
415 | - | | |
407 | + | let F = E | |
408 | + | F | |
416 | 409 | } | |
417 | 410 | else 0 | |
418 | 411 | } | |
419 | - | let | |
420 | - | let | |
421 | - | let | |
422 | - | if ($isInstanceOf( | |
412 | + | let ax = (aw - aF) | |
413 | + | let ay = { | |
414 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
415 | + | if ($isInstanceOf(E, "Int")) | |
423 | 416 | then { | |
424 | - | let | |
425 | - | | |
417 | + | let F = E | |
418 | + | F | |
426 | 419 | } | |
427 | 420 | else 0 | |
428 | 421 | } | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | if ($isInstanceOf( | |
422 | + | let az = (ay - aG) | |
423 | + | let aA = { | |
424 | + | let E = getIntegerValue(this, ("Total_LP_" + g)) | |
425 | + | if ($isInstanceOf(E, "Int")) | |
433 | 426 | then { | |
434 | - | let | |
435 | - | | |
427 | + | let F = E | |
428 | + | F | |
436 | 429 | } | |
437 | 430 | else 0 | |
438 | 431 | } | |
439 | - | let | |
440 | - | if (( | |
432 | + | let aB = (aA - v.amount) | |
433 | + | if ((z != g)) | |
441 | 434 | then throw("Pair is not available in Whitelist.") | |
442 | - | else if (( | |
443 | - | then throw(( | |
444 | - | else if ((fromBase58String( | |
435 | + | else if ((C == Y)) | |
436 | + | then throw((g + " is not A Whitelist Token Yet.")) | |
437 | + | else if ((fromBase58String(g) == a)) | |
445 | 438 | then throw("Don't choose USDT AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]") | |
446 | - | else if (( | |
439 | + | else if ((v.assetId != aC)) | |
447 | 440 | then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.") | |
448 | - | else if ((1 > | |
441 | + | else if ((1 > aE)) | |
449 | 442 | then throw("Your LP Token amount % is very low to convert.") | |
450 | - | else if ((1 > | |
443 | + | else if ((1 > aF)) | |
451 | 444 | then throw("Your LP Token conversion amount is very low to convert or less than 0.000001 USDT.") | |
452 | - | else if ((1 > | |
445 | + | else if ((1 > aG)) | |
453 | 446 | then throw("Your LP Token conversion amount is very low to convert or less than fraction value of Token.") | |
454 | - | else [IntegerEntry("Withdraw_LP_Percentage", | |
447 | + | else [IntegerEntry("Withdraw_LP_Percentage", aE), Burn(aC, v.amount), IntegerEntry(("Total_LP_" + g), aB), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ax), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), az), ScriptTransfer(f.caller, aF, a), ScriptTransfer(f.caller, aG, fromBase58String(g))] | |
455 | 448 | } | |
456 | 449 | ||
457 | 450 | ||
458 | - | @Verifier( | |
459 | - | func | |
460 | - | let | |
461 | - | sigVerify( | |
451 | + | @Verifier(aH) | |
452 | + | func aI () = { | |
453 | + | let E = aH | |
454 | + | sigVerify(aH.bodyBytes, aH.proofs[0], aH.senderPublicKey) | |
462 | 455 | } | |
463 | 456 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H' | |
5 | 5 | ||
6 | 6 | let b = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y' | |
7 | 7 | ||
8 | - | let c = base58' | |
8 | + | let c = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
9 | 9 | ||
10 | 10 | let d = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
11 | 11 | ||
12 | 12 | let e = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
13 | 13 | ||
14 | - | let f = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR') | |
15 | - | ||
16 | - | @Callable(g) | |
17 | - | func RegisterPairForVoting (h,i) = { | |
18 | - | let j = value(g.payments[0]) | |
19 | - | let k = value(g.payments[1]) | |
20 | - | let l = value(g.payments[2]) | |
21 | - | let m = 90 | |
22 | - | let n = toBase58String(g.caller.bytes) | |
23 | - | let o = !(isDefined(k.assetId)) | |
24 | - | let p = 1440 | |
25 | - | let q = (p * i) | |
26 | - | let r = (q - 43199) | |
27 | - | let s = ((100000 + ((11574 * r) / 10000)) * 100000000) | |
28 | - | let t = (height + q) | |
29 | - | let u = getString(this, ("Pair_UV_" + h)) | |
30 | - | let v = "F" | |
31 | - | let w = fromBase58String(h) | |
32 | - | if ((43 > size(h))) | |
14 | + | @Callable(f) | |
15 | + | func RegisterPairForVoting (g,h) = { | |
16 | + | let i = value(f.payments[0]) | |
17 | + | let j = value(f.payments[1]) | |
18 | + | let k = 90 | |
19 | + | let l = toBase58String(f.caller.bytes) | |
20 | + | let m = !(isDefined(j.assetId)) | |
21 | + | let n = 1440 | |
22 | + | let o = (n * h) | |
23 | + | let p = (o - 43199) | |
24 | + | let q = ((100000 + ((11574 * p) / 10000)) * 100000000) | |
25 | + | let r = (height + o) | |
26 | + | let s = getString(this, ("Pair_UV_" + g)) | |
27 | + | let t = "F" | |
28 | + | let u = fromBase58String(g) | |
29 | + | if ((43 > size(g))) | |
33 | 30 | then throw("Wrong AssetID is Entered for Voting. Please Enter a Valid AssetID. Probably you entered an AssetID less than 43 Chars.") | |
34 | - | else if ((29 >= | |
31 | + | else if ((29 >= h)) | |
35 | 32 | then throw("Enter no. of days in between 30 to 90.") | |
36 | - | else if (( | |
33 | + | else if ((h > k)) | |
37 | 34 | then throw("You Entered days greater than 90 please Enter no. of days in between 1 to 90.") | |
38 | - | else if (( | |
35 | + | else if ((s == g)) | |
39 | 36 | then throw("Pair Already Exist in Voting List.") | |
40 | - | else if ((size( | |
41 | - | then throw(" | |
42 | - | else if (( | |
43 | - | then throw("Incorrect asset attached for Voting in payment[1], please attach | |
44 | - | else if (( | |
45 | - | then throw((((("You attached only " + toString(fraction( | |
46 | - | else if (( | |
37 | + | else if ((size(f.payments) != 2)) | |
38 | + | then throw("Two attached assets expected as payment. Kindly Attach payment1 = CODE Token & payment2 = Token you want to List for Voting.") | |
39 | + | else if ((i.assetId != b)) | |
40 | + | then throw("Incorrect asset attached for Voting in payment[1], please attach 2000 CODE Token only.") | |
41 | + | else if ((i.amount != 200000000000)) | |
42 | + | then throw((((("You attached only " + toString(fraction(i.amount, 1, 100000000))) + ".") + toString(fraction(i.amount, 1, 10000000))) + " CODE for Voting in payment[1], please attach 2000 CODE Token.")) | |
43 | + | else if ((j.assetId != u)) | |
47 | 44 | then throw("Input String & Attached AssetID in payment2 is not matching.") | |
48 | - | else if (( | |
45 | + | else if ((m == true)) | |
49 | 46 | then throw("You Attached TN Asset ID for Voting, please attach fsTN instead of TN or Token You want to list in payment[2].") | |
50 | - | else if ((l.assetId != c)) | |
51 | - | then throw("Incorrect asset attached for Voting in payment[3], please attach 1000 xUSD Token only.") | |
52 | - | else if ((l.amount != 10000000)) | |
53 | - | then throw((((("You attached only " + toString(fraction(l.amount, 1, 100000000))) + ".") + toString(fraction(l.amount, 1, 10000000))) + " xUSD for Voting in payment[3], please attach 1000 xUSD Token.")) | |
54 | - | else [StringEntry(("Pair_UV_" + h), h), StringEntry(("Voting_Status_" + h), v), IntegerEntry(("Voting_SH_" + h), height), IntegerEntry(("Voting_EH_" + h), t), IntegerEntry(("Voting_Period_" + h), q), IntegerEntry(("Listing_Fee_" + h), j.amount), IntegerEntry(("xUSD_Listing_Fee_" + h), l.amount), IntegerEntry(("Votes_Req_" + h), (s / 3)), IntegerEntry(("Votes_Rcvd_" + h), 0), ScriptTransfer(d, j.amount, b)] | |
47 | + | else [StringEntry(("Pair_UV_" + g), g), StringEntry(("Voting_Status_" + g), t), IntegerEntry(("Voting_SH_" + g), height), IntegerEntry(("Voting_EH_" + g), r), IntegerEntry(("Voting_Period_" + g), o), IntegerEntry(("Listing_Fee_" + g), i.amount), IntegerEntry(("Votes_Req_" + g), (q / 3)), IntegerEntry(("Votes_Rcvd_" + g), 0), ScriptTransfer(c, i.amount, b)] | |
55 | 48 | } | |
56 | 49 | ||
57 | 50 | ||
58 | 51 | ||
59 | - | @Callable( | |
60 | - | func DoVoting ( | |
61 | - | let | |
62 | - | then | |
52 | + | @Callable(f) | |
53 | + | func DoVoting (g) = { | |
54 | + | let v = if ((size(f.payments) == 1)) | |
55 | + | then f.payments[0] | |
63 | 56 | else throw((toBase58String(b) + "CODE Token is required as Attached payment")) | |
64 | - | let | |
65 | - | let | |
66 | - | let | |
67 | - | let | |
68 | - | let | |
69 | - | let | |
70 | - | let | |
71 | - | let | |
72 | - | let | |
73 | - | if ($isInstanceOf( | |
57 | + | let w = toBase58String(f.caller.bytes) | |
58 | + | let x = "P" | |
59 | + | let y = getIntegerValue(this, ("Voting_EH_" + g)) | |
60 | + | let z = getString(this, ("Pair_UV_" + g)) | |
61 | + | let A = getIntegerValue(this, ("Votes_Req_" + g)) | |
62 | + | let B = getIntegerValue(this, ("Votes_Rcvd_" + g)) | |
63 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
64 | + | let D = { | |
65 | + | let E = getInteger(this, ("Votes_Rcvd_" + g)) | |
66 | + | if ($isInstanceOf(E, "Int")) | |
74 | 67 | then { | |
75 | - | let | |
76 | - | | |
68 | + | let F = E | |
69 | + | F | |
77 | 70 | } | |
78 | 71 | else 0 | |
79 | 72 | } | |
80 | - | let | |
81 | - | let | |
82 | - | let | |
83 | - | if ($isInstanceOf( | |
73 | + | let G = (D + v.amount) | |
74 | + | let H = { | |
75 | + | let E = getInteger(this, ((("Votes_Rcvd_" + w) + "_") + g)) | |
76 | + | if ($isInstanceOf(E, "Int")) | |
84 | 77 | then { | |
85 | - | let | |
86 | - | | |
78 | + | let I = E | |
79 | + | I | |
87 | 80 | } | |
88 | 81 | else 0 | |
89 | 82 | } | |
90 | - | let | |
91 | - | let | |
92 | - | let | |
93 | - | if (( | |
83 | + | let J = (H + v.amount) | |
84 | + | let K = (B >= A) | |
85 | + | let L = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
86 | + | if ((z != g)) | |
94 | 87 | then throw("Pair is not available in Voting List.") | |
95 | - | else if ((height > | |
96 | - | then throw((("Voting timeline for " + | |
97 | - | else if (( | |
88 | + | else if ((height > y)) | |
89 | + | then throw((("Voting timeline for " + g) + " is expired.")) | |
90 | + | else if ((v.assetId != b)) | |
98 | 91 | then throw((("Kindly Attach Only " + toBase58String(b)) + " Token.")) | |
99 | - | else if (( | |
100 | - | then throw((("Voting for " + | |
101 | - | else if ( | |
102 | - | then [StringEntry(("Voting_Status_" + | |
103 | - | else [IntegerEntry(("Votes_Rcvd_" + | |
92 | + | else if ((C == x)) | |
93 | + | then throw((("Voting for " + g) + " pair is completed & it’s available in whitelist.")) | |
94 | + | else if (K) | |
95 | + | then [StringEntry(("Voting_Status_" + g), x), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), 0), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), 0), IntegerEntry(("Total_of_Pair_Txns_" + g), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + g) + "_") + toBase58String(a)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + g), 0), IntegerEntry(((("Votes_Rcvd_" + w) + "_") + g), J)] | |
96 | + | else [IntegerEntry(("Votes_Rcvd_" + g), G), IntegerEntry(((("Votes_Rcvd_" + w) + "_") + g), J)] | |
104 | 97 | } | |
105 | 98 | ||
106 | 99 | ||
107 | 100 | ||
108 | - | @Callable( | |
109 | - | func WithdrawVotedTokens ( | |
110 | - | let | |
111 | - | then | |
101 | + | @Callable(f) | |
102 | + | func WithdrawVotedTokens (g) = { | |
103 | + | let v = if ((size(f.payments) == 1)) | |
104 | + | then f.payments[0] | |
112 | 105 | else throw("0.1 TN Token is required as Attached payment.") | |
113 | - | let | |
114 | - | let | |
115 | - | let | |
116 | - | let | |
117 | - | let | |
118 | - | if (( | |
106 | + | let w = toBase58String(f.caller.bytes) | |
107 | + | let y = getIntegerValue(this, ("Voting_EH_" + g)) | |
108 | + | let z = getString(this, ("Pair_UV_" + g)) | |
109 | + | let M = valueOrErrorMessage(getInteger(this, ((("Votes_Rcvd_" + w) + "_") + g)), (w + " Address never voted & exist in list.")) | |
110 | + | let N = (y - height) | |
111 | + | if ((z != g)) | |
119 | 112 | then throw("Pair is not available in Voting List.") | |
120 | - | else if (( | |
121 | - | then throw((("Voting Already Running. You can withdraw your CODE Token after " + toString( | |
122 | - | else if ((0 >= | |
113 | + | else if ((y > height)) | |
114 | + | then throw((("Voting Already Running. You can withdraw your CODE Token after " + toString(N)) + " blocks")) | |
115 | + | else if ((0 >= M)) | |
123 | 116 | then throw("You don't have any dues of CODE balance in this Voting Pair.") | |
124 | - | else if (isDefined( | |
117 | + | else if (isDefined(v.assetId)) | |
125 | 118 | then throw("Don't attach any other asset. Please attach 0.1 TN as a fee to release your token") | |
126 | - | else if (( | |
119 | + | else if ((v.amount != 10000000)) | |
127 | 120 | then throw("Please attach 0.1 TN as a fee to release your token.") | |
128 | - | else [IntegerEntry(((("Votes_Rcvd_" + | |
121 | + | else [IntegerEntry(((("Votes_Rcvd_" + w) + "_") + g), 0), ScriptTransfer(f.caller, M, b)] | |
129 | 122 | } | |
130 | 123 | ||
131 | 124 | ||
132 | 125 | ||
133 | - | @Callable( | |
134 | - | func IssueLPToken ( | |
135 | - | let | |
136 | - | let | |
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | let | |
141 | - | let | |
142 | - | let | |
143 | - | let | |
144 | - | let | |
145 | - | let | |
146 | - | if (( | |
147 | - | then throw((("Your are not allowded to Issue LP Token. Only " + | |
148 | - | else if (( | |
126 | + | @Callable(f) | |
127 | + | func IssueLPToken (g) = { | |
128 | + | let O = valueOrErrorMessage(getString(this, "LP_Admin_Rights"), "LP Admin Rights are Not Included into Smart Contract. Deploy Admin Rights First.") | |
129 | + | let w = toBase58String(f.caller.bytes) | |
130 | + | let z = valueOrErrorMessage(getString(this, ("Pair_UV_" + g)), "Asset not Found in Whitelisted Token") | |
131 | + | let L = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
132 | + | let P = L.name | |
133 | + | let Q = L.decimals | |
134 | + | let x = "P" | |
135 | + | let C = valueOrErrorMessage(getString(this, ("Voting_Status_" + g)), ("Voting Status is Missing for " + g)) | |
136 | + | let R = (1 * pow(10, 0, fraction((Q + 6), 1, 2), 0, 0, UP)) | |
137 | + | let S = Issue((("LP-" + take(P, 8)) + "-USDT"), (((("LP-" + P) + "-USDT") + " is a Liquidity Provider Token Issued Against ") + g), R, fraction((Q + 6), 1, 2), true) | |
138 | + | let T = calculateAssetId(S) | |
139 | + | if ((O != w)) | |
140 | + | then throw((("Your are not allowded to Issue LP Token. Only " + O) + " can issue the LP Token.")) | |
141 | + | else if ((z != g)) | |
149 | 142 | then throw("Pair is not available in Voting List.") | |
150 | - | else if (( | |
143 | + | else if ((C != x)) | |
151 | 144 | then throw("LP Token must be a Whitelisted Token.") | |
152 | - | else [ | |
145 | + | else [S, StringEntry(("LP_" + g), toBase58String(T)), IntegerEntry(("Total_LP_" + g), R)] | |
153 | 146 | } | |
154 | 147 | ||
155 | 148 | ||
156 | 149 | ||
157 | - | @Callable( | |
158 | - | func SwapAssetToUSDTPairEntry ( | |
159 | - | let | |
160 | - | let | |
161 | - | then | |
150 | + | @Callable(f) | |
151 | + | func SwapAssetToUSDTPairEntry (g) = { | |
152 | + | let w = toBase58String(f.caller.bytes) | |
153 | + | let v = if ((size(f.payments) == 1)) | |
154 | + | then f.payments[0] | |
162 | 155 | else throw("Whitelisted Token is required as Attached payment[1].") | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | let | |
168 | - | let | |
169 | - | let | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | if ($isInstanceOf( | |
156 | + | let z = getString(this, ("Pair_UV_" + g)) | |
157 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
158 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
159 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
160 | + | let W = fraction(U, V, (V + v.amount)) | |
161 | + | let X = (U - W) | |
162 | + | let Y = "F" | |
163 | + | let Z = 6 | |
164 | + | let aa = ((X * Z) / 1000) | |
165 | + | let ab = (X - aa) | |
166 | + | let ac = { | |
167 | + | let E = getInteger(this, ((("Total_Swap_Fee_Collected_" + g) + "_") + toBase58String(a))) | |
168 | + | if ($isInstanceOf(E, "Int")) | |
176 | 169 | then { | |
177 | - | let | |
178 | - | | |
170 | + | let F = E | |
171 | + | F | |
179 | 172 | } | |
180 | 173 | else 0 | |
181 | 174 | } | |
182 | - | let | |
183 | - | let | |
184 | - | let | |
185 | - | if ($isInstanceOf( | |
175 | + | let ad = (ac + aa) | |
176 | + | let ae = { | |
177 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
178 | + | if ($isInstanceOf(E, "Int")) | |
186 | 179 | then { | |
187 | - | let | |
188 | - | | |
180 | + | let F = E | |
181 | + | F | |
189 | 182 | } | |
190 | 183 | else 0 | |
191 | 184 | } | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | if ($isInstanceOf( | |
185 | + | let af = (V + v.amount) | |
186 | + | let ag = { | |
187 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
188 | + | if ($isInstanceOf(E, "Int")) | |
196 | 189 | then { | |
197 | - | let | |
198 | - | | |
190 | + | let F = E | |
191 | + | F | |
199 | 192 | } | |
200 | 193 | else 0 | |
201 | 194 | } | |
202 | - | let | |
203 | - | let | |
204 | - | let | |
205 | - | if ($isInstanceOf( | |
195 | + | let ah = (U - X) | |
196 | + | let ai = { | |
197 | + | let E = getIntegerValue(this, ("Total_of_Pair_Txns_" + g)) | |
198 | + | if ($isInstanceOf(E, "Int")) | |
206 | 199 | then { | |
207 | - | let | |
208 | - | | |
200 | + | let F = E | |
201 | + | F | |
209 | 202 | } | |
210 | 203 | else 0 | |
211 | 204 | } | |
212 | - | let | |
213 | - | if (( | |
205 | + | let aj = (ai + 1) | |
206 | + | if ((g == toBase58String(a))) | |
214 | 207 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].") | |
215 | - | else if (( | |
208 | + | else if ((z != g)) | |
216 | 209 | then throw("Pair is not available in Whitelisted Asset.") | |
217 | - | else if (( | |
218 | - | then throw(( | |
219 | - | else if (( | |
210 | + | else if ((C == Y)) | |
211 | + | then throw((g + " is not A Whitelisted Token Yet.")) | |
212 | + | else if ((v.assetId == a)) | |
220 | 213 | then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.") | |
221 | - | else if (( | |
222 | - | then throw(("Incorrect asset attached, please attach or send " + | |
223 | - | else if (( | |
214 | + | else if ((v.assetId != fromBase58String(g))) | |
215 | + | then throw(("Incorrect asset attached, please attach or send " + g)) | |
216 | + | else if ((U == 0)) | |
224 | 217 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
225 | - | else if (( | |
218 | + | else if ((V == 0)) | |
226 | 219 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
227 | - | else if ((10000000 > | |
228 | - | then throw((("Your Attached Asset Amount is very low. Attach More " + | |
229 | - | else if (( | |
230 | - | then throw((("Pool Only has a Liquidity of " + toString(( | |
231 | - | else [IntegerEntry(((("Total_Swap_Fee_Collected_" + | |
220 | + | else if ((10000000 > X)) | |
221 | + | then throw((("Your Attached Asset Amount is very low. Attach More " + g) + " Tokens to Claim the minimum Amount of 10 dollar atleast.")) | |
222 | + | else if ((X > U)) | |
223 | + | then throw((("Pool Only has a Liquidity of " + toString((U / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool.")) | |
224 | + | else [IntegerEntry(((("Total_Swap_Fee_Collected_" + g) + "_") + toBase58String(a)), ad), IntegerEntry(("Total_of_Pair_Txns_" + g), aj), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), af), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ah), ScriptTransfer(f.caller, ab, a), ScriptTransfer(d, aa, a)] | |
232 | 225 | } | |
233 | 226 | ||
234 | 227 | ||
235 | 228 | ||
236 | - | @Callable( | |
237 | - | func SwapUSDTToAssetPairEntry ( | |
238 | - | let | |
239 | - | let | |
240 | - | then | |
229 | + | @Callable(f) | |
230 | + | func SwapUSDTToAssetPairEntry (g) = { | |
231 | + | let w = toBase58String(f.caller.bytes) | |
232 | + | let v = if ((size(f.payments) == 1)) | |
233 | + | then f.payments[0] | |
241 | 234 | else throw((("Only " + toBase58String(a)) + " USDT Token is required as an Attached payment[1].")) | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | if ($isInstanceOf( | |
235 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
236 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
237 | + | let ak = fraction(U, V, (U + v.amount)) | |
238 | + | let X = (V - ak) | |
239 | + | let z = getString(this, ("Pair_UV_" + g)) | |
240 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
241 | + | let Y = "F" | |
242 | + | let Z = 3 | |
243 | + | let aa = ((X * Z) / 1000) | |
244 | + | let ab = (X - aa) | |
245 | + | let al = { | |
246 | + | let E = getInteger(this, ("Total_Swap_Fee_Collected_" + g)) | |
247 | + | if ($isInstanceOf(E, "Int")) | |
255 | 248 | then { | |
256 | - | let | |
257 | - | | |
249 | + | let F = E | |
250 | + | F | |
258 | 251 | } | |
259 | 252 | else 0 | |
260 | 253 | } | |
261 | - | let | |
262 | - | let | |
263 | - | let | |
264 | - | if ($isInstanceOf( | |
254 | + | let am = (al + aa) | |
255 | + | let ae = { | |
256 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
257 | + | if ($isInstanceOf(E, "Int")) | |
265 | 258 | then { | |
266 | - | let | |
267 | - | | |
259 | + | let F = E | |
260 | + | F | |
268 | 261 | } | |
269 | 262 | else 0 | |
270 | 263 | } | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | if ($isInstanceOf( | |
264 | + | let af = (V - X) | |
265 | + | let ag = { | |
266 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
267 | + | if ($isInstanceOf(E, "Int")) | |
275 | 268 | then { | |
276 | - | let | |
277 | - | | |
269 | + | let F = E | |
270 | + | F | |
278 | 271 | } | |
279 | 272 | else 0 | |
280 | 273 | } | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | if ($isInstanceOf( | |
274 | + | let ah = (U + v.amount) | |
275 | + | let ai = { | |
276 | + | let E = getIntegerValue(this, ("Total_of_Pair_Txns_" + g)) | |
277 | + | if ($isInstanceOf(E, "Int")) | |
285 | 278 | then { | |
286 | - | let | |
287 | - | | |
279 | + | let F = E | |
280 | + | F | |
288 | 281 | } | |
289 | 282 | else 0 | |
290 | 283 | } | |
291 | - | let | |
292 | - | if (( | |
284 | + | let aj = (ai + 1) | |
285 | + | if ((z != g)) | |
293 | 286 | then throw("Pair is not available in Whitelisted Asset.") | |
294 | - | else if (( | |
295 | - | then throw(( | |
296 | - | else if (( | |
287 | + | else if ((C == Y)) | |
288 | + | then throw((g + " is not A Whitelisted Token Yet.")) | |
289 | + | else if ((g == toBase58String(a))) | |
297 | 290 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach USDT as an attachment Token in payment[1].") | |
298 | - | else if (( | |
291 | + | else if ((v.assetId != a)) | |
299 | 292 | then throw("You can Attach USDT as an Attached Payment[1] to Swap USDT To Required Token. Any other asset else than USDT will be rejected.") | |
300 | - | else if ((10000000 > | |
293 | + | else if ((10000000 > v.amount)) | |
301 | 294 | then throw("Your Attached USDT Amount is very low. Attach Atleast 10 USDT to Claim the minimum Tokens.") | |
302 | - | else if (( | |
295 | + | else if ((U == 0)) | |
303 | 296 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
304 | - | else if (( | |
297 | + | else if ((V == 0)) | |
305 | 298 | then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.") | |
306 | - | else if (( | |
307 | - | then throw((("Pool Only has a Liquidity of " + toString( | |
308 | - | else [IntegerEntry(("Total_Swap_Fee_Collected_" + | |
299 | + | else if ((X > V)) | |
300 | + | then throw((("Pool Only has a Liquidity of " + toString(V)) + " Tokens. Add Liquidity into Pool.")) | |
301 | + | else [IntegerEntry(("Total_Swap_Fee_Collected_" + g), am), IntegerEntry(("Total_of_Pair_Txns_" + g), aj), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), af), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ah), ScriptTransfer(f.caller, ab, fromBase58String(g)), ScriptTransfer(e, aa, fromBase58String(g))] | |
309 | 302 | } | |
310 | 303 | ||
311 | 304 | ||
312 | 305 | ||
313 | - | @Callable( | |
314 | - | func AddLiquidity ( | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | if ($isInstanceOf( | |
306 | + | @Callable(f) | |
307 | + | func AddLiquidity (g) = { | |
308 | + | let w = toBase58String(f.caller.bytes) | |
309 | + | let i = value(f.payments[0]) | |
310 | + | let j = value(f.payments[1]) | |
311 | + | let z = getString(this, ("Pair_UV_" + g)) | |
312 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
313 | + | let an = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + g)), "LP Token is Missing or May be not Generated.")) | |
314 | + | let Y = "F" | |
315 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
316 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
317 | + | let ao = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
318 | + | let Q = ao.decimals | |
319 | + | let ap = U | |
320 | + | let aq = V | |
321 | + | let ar = pow((((ap * 1000000) / aq) * pow(10, 0, Q, 0, 0, UP)), 0, 1, 0, 0, UP) | |
322 | + | let as = (6 + Q) | |
323 | + | let at = (as / 2) | |
324 | + | let au = fraction(ar, i.amount, pow(10, 0, as, 0, 0, UP)) | |
325 | + | let av = pow((fraction(i.amount, 1, pow(10, 0, Q, 0, 0, UP)) * fraction(j.amount, 1, pow(10, 0, 6, 0, 0, UP))), 0, 5, 1, at, DOWN) | |
326 | + | let aw = { | |
327 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
328 | + | if ($isInstanceOf(E, "Int")) | |
336 | 329 | then { | |
337 | - | let | |
338 | - | | |
330 | + | let F = E | |
331 | + | F | |
339 | 332 | } | |
340 | 333 | else 0 | |
341 | 334 | } | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | if ($isInstanceOf( | |
335 | + | let ax = (aw + j.amount) | |
336 | + | let ay = { | |
337 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
338 | + | if ($isInstanceOf(E, "Int")) | |
346 | 339 | then { | |
347 | - | let | |
348 | - | | |
340 | + | let F = E | |
341 | + | F | |
349 | 342 | } | |
350 | 343 | else 0 | |
351 | 344 | } | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | if ($isInstanceOf( | |
345 | + | let az = (ay + i.amount) | |
346 | + | let aA = { | |
347 | + | let E = getIntegerValue(this, ("Total_LP_" + g)) | |
348 | + | if ($isInstanceOf(E, "Int")) | |
356 | 349 | then { | |
357 | - | let | |
358 | - | | |
350 | + | let F = E | |
351 | + | F | |
359 | 352 | } | |
360 | 353 | else 0 | |
361 | 354 | } | |
362 | - | let | |
363 | - | if (( | |
355 | + | let aB = (aA + av) | |
356 | + | if ((z != g)) | |
364 | 357 | then throw("Pair is not available in Whitelisted Asset.") | |
365 | - | else if (( | |
366 | - | then throw(( | |
367 | - | else if (( | |
358 | + | else if ((C == Y)) | |
359 | + | then throw((g + " is not A Whitelisted Token Yet.")) | |
360 | + | else if ((g == toBase58String(a))) | |
368 | 361 | then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input as well as in payment[1] & Attach USDT as an attachment Token in payment[2].") | |
369 | - | else if ((size( | |
362 | + | else if ((size(f.payments) != 2)) | |
370 | 363 | then throw("Two attached assets expected as payment in 50%-50%. Kindly Attach payment1 = Token you want to add for Liquidity & payment2 = Equivalent Amount of USDT Token.") | |
371 | - | else if (( | |
364 | + | else if ((i.assetId == a)) | |
372 | 365 | then throw("You Attached USDT asset in payment[1], please attach only whitelisted Token in payment[1] along with USDT in payment[2].") | |
373 | - | else if (( | |
366 | + | else if ((i.assetId != fromBase58String(g))) | |
374 | 367 | then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.") | |
375 | - | else if (( | |
368 | + | else if ((i.assetId != fromBase58String(g))) | |
376 | 369 | then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.") | |
377 | - | else if (( | |
370 | + | else if ((j.assetId != a)) | |
378 | 371 | then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = USDT Token.") | |
379 | - | else if ((10000000 > | |
372 | + | else if ((10000000 > j.amount)) | |
380 | 373 | then throw("please attach atleast 10 USDT in payment[2] & Equivalent worth of Token in payment[1]") | |
381 | - | else if (( | |
382 | - | then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as [" + toString( | |
383 | - | else if ((1 > | |
384 | - | then throw((("LP Token Outcome is going below " + toString( | |
385 | - | else [IntegerEntry(((("Balance_of_" + | |
374 | + | else if ((j.amount != au)) | |
375 | + | then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(au)) + "] or ") + toString(fraction(au, 1, 1000000))) + ".") + takeRight(toString(au), 6)) + " USDT.")) | |
376 | + | else if ((1 > av)) | |
377 | + | then throw((("LP Token Outcome is going below " + toString(at)) + " Decimals. Please Attach min. 1 LP token or 10 USDT Atleast.")) | |
378 | + | else [IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ax), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), az), IntegerEntry(("Total_LP_" + g), aB), Reissue(an, av, true), ScriptTransfer(f.caller, av, an)] | |
386 | 379 | } | |
387 | 380 | ||
388 | 381 | ||
389 | 382 | ||
390 | - | @Callable( | |
391 | - | func RemoveLiquidity ( | |
392 | - | let | |
393 | - | let | |
394 | - | then | |
383 | + | @Callable(f) | |
384 | + | func RemoveLiquidity (g) = { | |
385 | + | let w = toBase58String(f.caller.bytes) | |
386 | + | let v = if ((size(f.payments) == 1)) | |
387 | + | then f.payments[0] | |
395 | 388 | else throw("No payment attached, Please Attach LP Token as payment[1].") | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | let | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | if ($isInstanceOf( | |
389 | + | let z = getString(this, ("Pair_UV_" + g)) | |
390 | + | let C = getStringValue(this, ("Voting_Status_" + g)) | |
391 | + | let aC = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + g)), "LP Token is Missing or not Generated.")) | |
392 | + | let Y = "F" | |
393 | + | let ao = valueOrErrorMessage(assetInfo(fromBase58String(g)), (("Asset " + g) + " doesn't exist")) | |
394 | + | let Q = ao.decimals | |
395 | + | let as = (6 + Q) | |
396 | + | let at = (as / 2) | |
397 | + | let aD = getIntegerValue(this, ("Total_LP_" + g)) | |
398 | + | let aE = pow(fraction(v.amount, pow(10, 0, 8, 0, 0, UP), aD), 6, 1, 0, 6, UP) | |
399 | + | let U = getIntegerValue(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
400 | + | let V = getIntegerValue(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
401 | + | let aF = fraction(U, aE, pow(10, 0, 8, 0, 0, UP)) | |
402 | + | let aG = fraction(V, aE, pow(10, 0, 8, 0, 0, UP)) | |
403 | + | let aw = { | |
404 | + | let E = getInteger(this, ((("Balance_of_" + g) + "_") + toBase58String(a))) | |
405 | + | if ($isInstanceOf(E, "Int")) | |
413 | 406 | then { | |
414 | - | let | |
415 | - | | |
407 | + | let F = E | |
408 | + | F | |
416 | 409 | } | |
417 | 410 | else 0 | |
418 | 411 | } | |
419 | - | let | |
420 | - | let | |
421 | - | let | |
422 | - | if ($isInstanceOf( | |
412 | + | let ax = (aw - aF) | |
413 | + | let ay = { | |
414 | + | let E = getInteger(this, ((("Balance_of_" + toBase58String(a)) + "_") + g)) | |
415 | + | if ($isInstanceOf(E, "Int")) | |
423 | 416 | then { | |
424 | - | let | |
425 | - | | |
417 | + | let F = E | |
418 | + | F | |
426 | 419 | } | |
427 | 420 | else 0 | |
428 | 421 | } | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | if ($isInstanceOf( | |
422 | + | let az = (ay - aG) | |
423 | + | let aA = { | |
424 | + | let E = getIntegerValue(this, ("Total_LP_" + g)) | |
425 | + | if ($isInstanceOf(E, "Int")) | |
433 | 426 | then { | |
434 | - | let | |
435 | - | | |
427 | + | let F = E | |
428 | + | F | |
436 | 429 | } | |
437 | 430 | else 0 | |
438 | 431 | } | |
439 | - | let | |
440 | - | if (( | |
432 | + | let aB = (aA - v.amount) | |
433 | + | if ((z != g)) | |
441 | 434 | then throw("Pair is not available in Whitelist.") | |
442 | - | else if (( | |
443 | - | then throw(( | |
444 | - | else if ((fromBase58String( | |
435 | + | else if ((C == Y)) | |
436 | + | then throw((g + " is not A Whitelist Token Yet.")) | |
437 | + | else if ((fromBase58String(g) == a)) | |
445 | 438 | then throw("Don't choose USDT AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]") | |
446 | - | else if (( | |
439 | + | else if ((v.assetId != aC)) | |
447 | 440 | then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.") | |
448 | - | else if ((1 > | |
441 | + | else if ((1 > aE)) | |
449 | 442 | then throw("Your LP Token amount % is very low to convert.") | |
450 | - | else if ((1 > | |
443 | + | else if ((1 > aF)) | |
451 | 444 | then throw("Your LP Token conversion amount is very low to convert or less than 0.000001 USDT.") | |
452 | - | else if ((1 > | |
445 | + | else if ((1 > aG)) | |
453 | 446 | then throw("Your LP Token conversion amount is very low to convert or less than fraction value of Token.") | |
454 | - | else [IntegerEntry("Withdraw_LP_Percentage", | |
447 | + | else [IntegerEntry("Withdraw_LP_Percentage", aE), Burn(aC, v.amount), IntegerEntry(("Total_LP_" + g), aB), IntegerEntry(((("Balance_of_" + g) + "_") + toBase58String(a)), ax), IntegerEntry(((("Balance_of_" + toBase58String(a)) + "_") + g), az), ScriptTransfer(f.caller, aF, a), ScriptTransfer(f.caller, aG, fromBase58String(g))] | |
455 | 448 | } | |
456 | 449 | ||
457 | 450 | ||
458 | - | @Verifier( | |
459 | - | func | |
460 | - | let | |
461 | - | sigVerify( | |
451 | + | @Verifier(aH) | |
452 | + | func aI () = { | |
453 | + | let E = aH | |
454 | + | sigVerify(aH.bodyBytes, aH.proofs[0], aH.senderPublicKey) | |
462 | 455 | } | |
463 | 456 |
github/deemru/w8io/169f3d6 207.87 ms ◑