tx · 6bhSZok4uizxwBARiXwspHZPtGAcj7btuecxiT8dVjcj

3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv:  -0.01400000 Waves

2022.01.13 08:48 [1876774] smart account 3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv > SELF 0.00000000 Waves

{ "type": 13, "id": "6bhSZok4uizxwBARiXwspHZPtGAcj7btuecxiT8dVjcj", "fee": 1400000, "feeAssetId": null, "timestamp": 1642052909316, "version": 2, "chainId": 84, "sender": "3Mrnje6z2xa3xuXyU2Lk6ynKy8tsRnnt4Bv", "senderPublicKey": "28sGn7FYnmxceAmnGYiDiKuMK1QyXiqX8zQXfKDnrc8t", "proofs": [ "4vcwY5uk4bUnc4VAdre4Jb8UAWmiALqyG9E2q1jN9TZCpDyuxrFp7vvBwKPX2FhcxZgKvBViwStEqwd2LT1aXCQ3" ], "script": "base64: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Vm90ZXNfUmN2ZF8FAAAADWNhbGxlcmFkZHJlc3MCAAAAAV8FAAAADEVudGVyQXNzZXRJRAUAAAAUaW5kaXZpZHVhbHZvdGVzY291bnQFAAAAA25pbAAAAAFpAQAAABNXaXRoZHJhd1ZvdGVkVG9rZW5zAAAAAQAAAAxFbnRlckFzc2V0SUQEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAAC0wLjEgVE4gVG9rZW4gaXMgcmVxdWlyZWQgYXMgQXR0YWNoZWQgcGF5bWVudC4EAAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAOY2hlY2tlbmRoZWlnaHQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAKVm90aW5nX0VIXwUAAAAMRW50ZXJBc3NldElEBAAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAIUGFpcl9VVl8FAAAADEVudGVyQXNzZXRJRAQAAAAWY2hlY2t1c2Vydm90aW5nYmFsYW5jZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC1ZvdGVzX1JjdmRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQJAAEsAAAAAgUAAAANY2FsbGVyYWRkcmVzcwIAAAAlIEFkZHJlc3MgbmV2ZXIgdm90ZWQgJiBleGlzdCBpbiBsaXN0LgQAAAAdcGVuZGluZ2Jsb2Nrc2ZvcnByb2plY3RleHBpcmUJAABlAAAAAgUAAAAOY2hlY2tlbmRoZWlnaHQFAAAABmhlaWdodAMJAQAAAAIhPQAAAAIFAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABAgAAACVQYWlyIGlzIG5vdCBhdmFpbGFi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SW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAABlAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQEAAAABFRPUFQEAAAAByRtYXRjaDAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAATVG90YWxfb2ZfUGFpcl9UeG5zXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAABk5ld1RQVAkAAGQAAAACBQAAAARUT1BUAAAAAAAAAAABAwkAAAAAAAACBQAAAAxFbnRlckFzc2V0SUQJAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAACGSW5wdXQgY2FuIE5ldmVyIGJlIGEgVVNEVCBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0ICYgQXR0YWNoIFdoaXRlbGlzdGVkIEFzc2V0IGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAFNZb3UgY2FuJ3QgQXR0YWNoIFVTRFQgYXMgYW4gQXR0YWNoZWQgUGF5bWVudC4gT25seSBXaGl0ZWxpc3RlZCBUb2tlbnMgYXJlIGFjY2VwdGVkLgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQkAASwAAAACAgAAADBJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQsIHBsZWFzZSBhdHRhY2ggb3Igc2VuZCAFAAAADEVudGVyQXNzZXRJRAMJAAAAAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQAAAAAAAAAAAAkAAAIAAAABAgAAAGVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAAAAAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAZgAAAAIAAAAAAACYloAFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADRZb3VyIEF0dGFjaGVkIEFzc2V0IEFtb3VudCBpcyB2ZXJ5IGxvdy4gQXR0YWNoIE1vcmUgBQAAAAxFbnRlckFzc2V0SUQCAAAAOSBUb2tlbnMgdG8gQ2xhaW0gdGhlIG1pbmltdW0gQW1vdW50IG9mIDEwIGRvbGxhciBhdGxlYXN0LgMJAABmAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAEENoZWNrVVNEVEJhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHVBvb2wgT25seSBoYXMgYSBMaXF1aWRpdHkgb2YgCQABpAAAAAEJAABpAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAABQAAAAZIQUxGVVACAAAAHyBVU0RULiBBZGQgTGlxdWlkaXR5IGludG8gUG9vbC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAcTmV3U3VtdXBvZkFzc2V0VG9VU0RUU3dhcEZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABNUb3RhbF9vZl9QYWlyX1R4bnNfBQAAAAxFbnRlckFzc2V0SUQFAAAABk5ld1RQVAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQCAAAAAV8FAAAADEVudGVyQXNzZXRJRAUAAAAWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAVTmV3U3VtdXBvZlVTRFRCYWxhbmNlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAUdXNlcmJhbGFuY2V0b3JlY2VpdmUFAAAAC1VTRFRBc3NldElECQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAGUNvbGxlY3RVU0RUU3dhcEZlZUFkZHJlc3MFAAAAEFN3YXBGZWV0b3JlY2VpdmUFAAAAC1VTRFRBc3NldElEBQAAAANuaWwAAAABaQEAAAAYU3dhcFVTRFRUb0Fzc2V0UGFpckVudHJ5AAAAAQAAAAxFbnRlckFzc2V0SUQEAAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10AwkAAAAAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAVPbmx5IAkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAAyIFVTRFQgVG9rZW4gaXMgcmVxdWlyZWQgYXMgYW4gQXR0YWNoZWQgcGF5bWVudFsxXS4EAAAAEENoZWNrVVNEVEJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfBQAAAAxFbnRlckFzc2V0SUQCAAAAAV8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQEAAAAEUNoZWNrQXNzZXRCYWxhbmNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAABXwUAAAAMRW50ZXJBc3NldElEBAAAABFuZXdiYWxhbmNlb2ZBc3NldAkAAGsAAAADBQAAABBDaGVja1VTRFRCYWxhbmNlBQAAABFDaGVja0Fzc2V0QmFsYW5jZQkAAGQAAAACBQAAABBDaGVja1VTRFRCYWxhbmNlCAUAAAADcG10AAAABmFtb3VudAQAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQJAABlAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UFAAAAEW5ld2JhbGFuY2VvZkFzc2V0BAAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAIUGFpcl9VVl8FAAAADEVudGVyQXNzZXRJRAQAAAAMVm90aW5nU3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAICAAAADlZvdGluZ19TdGF0dXNfBQAAAAxFbnRlckFzc2V0SUQEAAAAE0N1cnJlbnRWb3RpbmdTdGF0dXMCAAAAAUYEAAAAB1N3YXBGZWUAAAAAAAAAAAMEAAAAEFN3YXBGZWV0b3JlY2VpdmUJAABpAAAAAgkAAGgAAAACBQAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAUAAAAHU3dhcEZlZQAAAAAAAAAD6AQAAAAUdXNlcmJhbGFuY2V0b3JlY2VpdmUJAABlAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAEFN3YXBGZWV0b3JlY2VpdmUEAAAAGVN1bXVwb2ZVU0RUVG9Bc3NldFN3YXBGZWUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQAAAAxFbnRlckFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAcTmV3U3VtdXBvZlVTRFRUb0Fzc2V0U3dhcEZlZQkAAGQAAAACBQAAABlTdW11cG9mVVNEVFRvQXNzZXRTd2FwRmVlBQAAABBTd2FwRmVldG9yZWNlaXZlBAAAABFTdW11cEFzc2V0QmFsYW5jZQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAABXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAFk5ld1N1bXVwb2ZBc3NldEJhbGFuY2UJAABlAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BAAAABBTdW11cFVTRFRCYWxhbmNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfBQAAAAxFbnRlckFzc2V0SUQCAAAAAV8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAVTmV3U3VtdXBvZlVTRFRCYWxhbmNlCQAAZAAAAAIFAAAAEENoZWNrVVNEVEJhbGFuY2UIBQAAAANwbXQAAAAGYW1vdW50BAAAAARUT1BUBAAAAAckbWF0Y2gwCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAE1RvdGFsX29mX1BhaXJfVHhuc18FAAAADEVudGVyQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAZOZXdUUFQJAABkAAAAAgUAAAAEVE9QVAAAAAAAAAAAAQMJAQAAAAIhPQAAAAIFAAAAGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABAgAAACtQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gV2hpdGVsaXN0ZWQgQXNzZXQuAwkAAAAAAAACBQAAAAxWb3RpbmdTdGF0dXMFAAAAE0N1cnJlbnRWb3RpbmdTdGF0dXMJAAACAAAAAQkAASwAAAACBQAAAAxFbnRlckFzc2V0SUQCAAAAICBpcyBub3QgQSBXaGl0ZWxpc3RlZCBUb2tlbiBZZXQuAwkAAAAAAAACBQAAAAxFbnRlckFzc2V0SUQJAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAAB5SW5wdXQgY2FuIE5ldmVyIGJlIGEgVVNEVCBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0ICYgQXR0YWNoIFVTRFQgYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzFdLgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAAB+WW91IGNhbiBBdHRhY2ggVVNEVCBhcyBhbiBBdHRhY2hlZCBQYXltZW50WzFdIHRvIFN3YXAgVVNEVCBUbyBSZXF1aXJlZCBUb2tlbi4gQW55IG90aGVyIGFzc2V0IGVsc2UgdGhhbiBVU0RUIHdpbGwgYmUgcmVqZWN0ZWQuAwkAAGYAAAACAAAAAAAAmJaACAUAAAADcG10AAAABmFtb3VudAkAAAIAAAABAgAAAFpZb3VyIEF0dGFjaGVkIFVTRFQgQW1vdW50IGlzIHZlcnkgbG93LiBBdHRhY2ggQXRsZWFzdCAxMCBVU0RUIHRvIENsYWltIHRoZSBtaW5pbXVtIFRva2Vucy4DCQAAAAAAAAIFAAAAEENoZWNrVVNEVEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAAAAAAAIFAAAAEUNoZWNrQXNzZXRCYWxhbmNlAAAAAAAAAAAACQAAAgAAAAECAAAAZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAGYAAAACBQAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAUAAAARQ2hlY2tBc3NldEJhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHVBvb2wgT25seSBoYXMgYSBMaXF1aWRpdHkgb2YgCQABpAAAAAEFAAAAEUNoZWNrQXNzZXRCYWxhbmNlAgAAACEgVG9rZW5zLiBBZGQgTGlxdWlkaXR5IGludG8gUG9vbC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAZVG90YWxfU3dhcF9GZWVfQ29sbGVjdGVkXwUAAAAMRW50ZXJBc3NldElEBQAAABxOZXdTdW11cG9mVVNEVFRvQXNzZXRTd2FwRmVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAE1RvdGFsX29mX1BhaXJfVHhuc18FAAAADEVudGVyQXNzZXRJRAUAAAAGTmV3VFBUCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAAB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AAAAAQIAAACSSW5wdXQgY2FuIE5ldmVyIGJlIGEgVVNEVCBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0IGFzIHdlbGwgYXMgaW4gcGF5bWVudFsxXSAmIEF0dGFjaCBVU0RUIGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsyXS4DCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAnlR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQgYXMgcGF5bWVudCBpbiA1MCUtNTAlLiBLaW5kbHkgQXR0YWNoIHBheW1lbnQxID0gVG9rZW4geW91IHdhbnQgdG8gYWRkIGZvciBMaXF1aWRpdHkgJiBwYXltZW50MiA9IEVxdWl2YWxlbnQgQW1vdW50IG9mIFVTRFQgVG9rZW4uAwkAAAAAAAACCAUAAAAEcG10MQAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAHhZb3UgQXR0YWNoZWQgVVNEVCBhc3NldCBpbiBwYXltZW50WzFdLCBwbGVhc2UgYXR0YWNoIG9ubHkgd2hpdGVsaXN0ZWQgVG9rZW4gaW4gcGF5bWVudFsxXSBhbG9uZyB3aXRoIFVTRFQgaW4gcGF5bWVudFsyXS4DCQEAAAACIT0AAAACCAUAAAAEcG10MQAAAAdhc3NldElkCQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAkAAAIAAAABAgAAAGtJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQgZm9yIExpcXVpZGl0eSBpbiBwYXltZW50WzFdLCBwbGVhc2UgYXR0YWNoIFN0cmluZyBBc3NldCBvciBXaGl0ZWxpc3RlZCBUb2tlbiBvbmx5LgMJAQAAAAIhPQAAAAIIBQAAAARwbXQxAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAa0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCBmb3IgTGlxdWlkaXR5IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggU3RyaW5nIEFzc2V0IG9yIFdoaXRlbGlzdGVkIFRva2VuIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAABHBtdDIAAAAHYXNzZXRJZAUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAABqV3JvbmcgQXNzZXQgQXR0YWNoZWQgaW4gcGF5bWVudHNbMl0sIFBsZWFzZSBhdHRhY2ggcGF5bWVudFsxXSA9IExpcXVpZGl0eSBUb2tlbiAmIHBheW1lbnRbMl0gPSBVU0RUIFRva2VuLgMJAABmAAAAAgAAAAAAAJiWgAgFAAAABHBtdDIAAAAGYW1vdW50CQAAAgAAAAECAAAAVXBsZWFzZSBhdHRhY2ggYXRsZWFzdCAxMCBVU0RUIGluIHBheW1lbnRbMl0gJiBFcXVpdmFsZW50IHdvcnRoIG9mIFRva2VuIGluIHBheW1lbnRbMV0DCQEAAAACIT0AAAACCAUAAAAEcG10MgAAAAZhbW91bnQFAAAAFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQJAAACAAAAAQkAASwAAAACAgAAAFtBdHRhY2hlZCBwYXltZW50WzJdIHF1YW50aXR5IGlzIG5vdCBtYXRjaGluZyBhcyBwZXIgYXR0YWNoZWQgcGF5bWVudFsxXS5wYXltZW50WzJdIG11c3QgYmUgCQABpAAAAAEFAAAAFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfBQAAAAxFbnRlckFzc2V0SUQCAAAAAV8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQFAAAAFE5ld1VTRFRIb2xkaW5nSW5QYWlyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAIAAAABXwUAAAAMRW50ZXJBc3NldElEBQAAABVOZXdBc3NldEhvbGRpbmdJblBhaXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAJVG90YWxfTFBfBQAAAAxFbnRlckFzc2V0SUQFAAAAEE5ld0xQVG9rZW5Jc3N1ZWQJ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", "height": 1876774, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3G94W1FiavjisbRYf9S7bYjSgDsUxfqmLQqpLsvHqrcJ Next: 2s6uAd4C4vnfLyhV96bidf2P89JRikrvMQ4aEXUWpZpJ Diff:
OldNewDifferences
127127 let decimals = info.decimals
128128 let NewVotingStatus = "P"
129129 let VotingStatus = valueOrErrorMessage(getString(this, ("Voting_Status_" + EnterAssetID)), ("Voting Status is Missing for " + EnterAssetID))
130- let FirstLPQty = (1 * pow(10, 0, fraction((decimals + 6), 1, 2), 0, 0, UP))
130+ let FirstLPQty = (1 * pow(10, 0, fraction((decimals + 6), 1, 2), 0, 0, HALFUP))
131131 let LPissue = Issue((("LP-" + take(name, 8)) + "-USDT"), (((("LP-" + name) + "-USDT") + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), FirstLPQty, fraction((decimals + 6), 1, 2), true)
132132 let LPid = calculateAssetId(LPissue)
133133 if ((adminrights != calleraddress))
202202 else if ((10000000 > quantityofpriceasset))
203203 then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 10 dollar atleast."))
204204 else if ((quantityofpriceasset > CheckUSDTBalance))
205- then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool."))
205+ then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, HALFUP)))) + " USDT. Add Liquidity into Pool."))
206206 else [IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewSumupofAssetToUSDTSwapFee), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), NewTPT), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewSumupofAssetBalance), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewSumupofUSDTBalance), ScriptTransfer(i.caller, userbalancetoreceive, USDTAssetID), ScriptTransfer(CollectUSDTSwapFeeAddress, SwapFeetoreceive, USDTAssetID)]
207207 }
208208
286286 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
287287 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
288288 let decimals = decimalsinfo.decimals
289- let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, UP)), 0, 1, 0, 0, UP)
290- let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
291- let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
289+ let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
290+ let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
291+ let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
292292 let bothassetsdecimals = (6 + decimals)
293293 let sharedecimals = (bothassetsdecimals / 2)
294- let quantityofEnterAssetID = fraction(args3, pmt1.amount, pow(10, 0, bothassetsdecimals, 0, 0, UP))
294+ let quantityofEnterAssetID = fraction(args3, pmt1.amount, pow(10, 0, bothassetsdecimals, 0, 0, HALFUP))
295+ let quantityofLPToken1 = pow((fraction(pmt1.amount, 1, pow(10, 0, decimals, 0, 0, HALFUP)) * fraction(pmt2.amount, 1, pow(10, 0, 6, 0, 0, HALFUP))), 0, 5, 1, sharedecimals, DOWN)
295296 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
296297 case a: Int =>
297298 a
306307 0
307308 }
308309 let NewAssetHoldingInPair = (AssetHoldingInPair + pmt1.amount)
310+ let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
311+ case a: Int =>
312+ a
313+ case _ =>
314+ 0
315+ }
316+ let NewLPTokenIssued = (LPTokenIssued + quantityofLPToken1)
309317 if ((checkpairisavailableornot != EnterAssetID))
310318 then throw("Pair is not available in Whitelisted Asset.")
311319 else if ((VotingStatus == CurrentVotingStatus))
326334 then throw("please attach atleast 10 USDT in payment[2] & Equivalent worth of Token in payment[1]")
327335 else if ((pmt2.amount != quantityofEnterAssetID))
328336 then throw(("Attached payment[2] quantity is not matching as per attached payment[1].payment[2] must be " + toString(quantityofEnterAssetID)))
329- else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair)]
337+ else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), Reissue(ReissueassetId, quantityofLPToken1, true), ScriptTransfer(i.caller, quantityofLPToken1, ReissueassetId)]
330338 }
331339
332340
345353 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
346354 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
347355 let decimals = decimalsinfo.decimals
348- let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, UP)), 0, 1, 0, 0, UP)
349- let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
350- let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
356+ let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
357+ let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
358+ let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
351359 let bothassetsdecimals = (6 + decimals)
352360 let sharedecimals = (bothassetsdecimals / 2)
353- let SquareofAttachedPymt = fraction(pow(pmt.amount, sharedecimals, 2, 0, 6, HALFUP), 1, fraction(args3, 1, pow(10, 0, 6, 0, 0, UP)))
361+ let SquareofAttachedPymt = fraction(pow(pmt.amount, sharedecimals, 2, 0, 6, HALFUP), 1, fraction(args3, 1, pow(10, 0, 6, 0, 0, HALFUP)))
354362 let SqrtofAttachPymt = pow(SquareofAttachedPymt, 0, 5, 1, sharedecimals, DOWN)
355- let UserLPWorth = fraction(args3, SqrtofAttachPymt, pow(10, 0, bothassetsdecimals, 0, 0, UP))
363+ let UserLPWorth = fraction(args3, SqrtofAttachPymt, pow(10, 0, bothassetsdecimals, 0, 0, HALFUP))
356364 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
357365 case a: Int =>
358366 a
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let USDTAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
55
66 let CODEAssetID = base58'44Mq8KqUhM94t93MiBq3S22iiuGczMxpKmse5dBy2w5y'
77
88 let CollectCODEFeeAddress = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR')
99
1010 let CollectUSDTSwapFeeAddress = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR')
1111
1212 let CollectAssetSwapFeeAddress = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR')
1313
1414 @Callable(i)
1515 func RegisterPairForVoting (EnterAssetID,days) = {
1616 let pmt1 = value(i.payments[0])
1717 let pmt2 = value(i.payments[1])
1818 let maximumvotingdays = 90
1919 let currentKey = toBase58String(i.caller.bytes)
2020 let TN = !(isDefined(pmt2.assetId))
2121 let oneday = 1440
2222 let NoOfDaysBlocks = (oneday * days)
2323 let gap = (NoOfDaysBlocks - 43199)
2424 let votesrequired = ((100000 + ((11574 * gap) / 10000)) * 100000000)
2525 let votingExpire = (height + NoOfDaysBlocks)
2626 let fetchpair = getString(this, ("Pair_UV_" + EnterAssetID))
2727 let votingstatus = "F"
2828 let assetinfopmt2 = fromBase58String(EnterAssetID)
2929 if ((43 > size(EnterAssetID)))
3030 then throw("Wrong AssetID is Entered for Voting. Please Enter a Valid AssetID. Probably you entered an AssetID less than 43 Chars.")
3131 else if ((29 >= days))
3232 then throw("Enter no. of days in between 30 to 90.")
3333 else if ((days > maximumvotingdays))
3434 then throw("You Entered days greater than 90 please Enter no. of days in between 1 to 90.")
3535 else if ((fetchpair == EnterAssetID))
3636 then throw("Pair Already Exist in Voting List.")
3737 else if ((size(i.payments) != 2))
3838 then throw("Two attached assets expected as payment. Kindly Attach payment1 = CODE Token & payment2 = Token you want to List for Voting.")
3939 else if ((pmt1.assetId != CODEAssetID))
4040 then throw("Incorrect asset attached for Voting in payment[1], please attach 2000 CODE Token only.")
4141 else if ((pmt1.amount != 200000000000))
4242 then throw((((("You attached only " + toString(fraction(pmt1.amount, 1, 100000000))) + ".") + toString(fraction(pmt1.amount, 1, 10000000))) + " CODE for Voting in payment[1], please attach 2000 CODE Token."))
4343 else if ((pmt2.assetId != assetinfopmt2))
4444 then throw("Input String & Attached AssetID in payment2 is not matching.")
4545 else if ((TN == true))
4646 then throw("You Attached TN Asset ID for Voting, please attach fsTN instead of TN or Token You want to list in payment[2].")
4747 else [StringEntry(("Pair_UV_" + EnterAssetID), EnterAssetID), StringEntry(("Voting_Status_" + EnterAssetID), votingstatus), IntegerEntry(("Voting_SH_" + EnterAssetID), height), IntegerEntry(("Voting_EH_" + EnterAssetID), votingExpire), IntegerEntry(("Voting_Period_" + EnterAssetID), NoOfDaysBlocks), IntegerEntry(("Listing_Fee_" + EnterAssetID), pmt1.amount), IntegerEntry(("Votes_Req_" + EnterAssetID), (votesrequired / 3)), IntegerEntry(("Votes_Rcvd_" + EnterAssetID), 0), ScriptTransfer(CollectCODEFeeAddress, pmt1.amount, CODEAssetID)]
4848 }
4949
5050
5151
5252 @Callable(i)
5353 func DoVoting (EnterAssetID) = {
5454 let pmt = if ((size(i.payments) == 1))
5555 then i.payments[0]
5656 else throw((toBase58String(CODEAssetID) + "CODE Token is required as Attached payment"))
5757 let calleraddress = toBase58String(i.caller.bytes)
5858 let NewVotingStatus = "P"
5959 let checkendheight = getIntegerValue(this, ("Voting_EH_" + EnterAssetID))
6060 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
6161 let checkvotesrequired = getIntegerValue(this, ("Votes_Req_" + EnterAssetID))
6262 let checkvotesreceived = getIntegerValue(this, ("Votes_Rcvd_" + EnterAssetID))
6363 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
6464 let currentvotes = match getInteger(this, ("Votes_Rcvd_" + EnterAssetID)) {
6565 case a: Int =>
6666 a
6767 case _ =>
6868 0
6969 }
7070 let newvotescount = (currentvotes + pmt.amount)
7171 let individualvotes = match getInteger(this, ((("Votes_Rcvd_" + calleraddress) + "_") + EnterAssetID)) {
7272 case b: Int =>
7373 b
7474 case _ =>
7575 0
7676 }
7777 let individualvotescount = (individualvotes + pmt.amount)
7878 let checkwhitelist = (checkvotesreceived >= checkvotesrequired)
7979 let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
8080 if ((checkpairisavailableornot != EnterAssetID))
8181 then throw("Pair is not available in Voting List.")
8282 else if ((height > checkendheight))
8383 then throw((("Voting timeline for " + EnterAssetID) + " is expired."))
8484 else if ((pmt.assetId != CODEAssetID))
8585 then throw((("Kindly Attach Only " + toBase58String(CODEAssetID)) + " Token."))
8686 else if ((VotingStatus == NewVotingStatus))
8787 then throw((("Voting for " + EnterAssetID) + " pair is completed & it’s available in whitelist."))
8888 else if (checkwhitelist)
8989 then [StringEntry(("Voting_Status_" + EnterAssetID), NewVotingStatus), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), 0), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), 0), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), IntegerEntry(((("Votes_Rcvd_" + calleraddress) + "_") + EnterAssetID), individualvotescount)]
9090 else [IntegerEntry(("Votes_Rcvd_" + EnterAssetID), newvotescount), IntegerEntry(((("Votes_Rcvd_" + calleraddress) + "_") + EnterAssetID), individualvotescount)]
9191 }
9292
9393
9494
9595 @Callable(i)
9696 func WithdrawVotedTokens (EnterAssetID) = {
9797 let pmt = if ((size(i.payments) == 1))
9898 then i.payments[0]
9999 else throw("0.1 TN Token is required as Attached payment.")
100100 let calleraddress = toBase58String(i.caller.bytes)
101101 let checkendheight = getIntegerValue(this, ("Voting_EH_" + EnterAssetID))
102102 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
103103 let checkuservotingbalance = valueOrErrorMessage(getInteger(this, ((("Votes_Rcvd_" + calleraddress) + "_") + EnterAssetID)), (calleraddress + " Address never voted & exist in list."))
104104 let pendingblocksforprojectexpire = (checkendheight - height)
105105 if ((checkpairisavailableornot != EnterAssetID))
106106 then throw("Pair is not available in Voting List.")
107107 else if ((checkendheight > height))
108108 then throw((("Voting Already Running. You can withdraw your CODE Token after " + toString(pendingblocksforprojectexpire)) + " blocks"))
109109 else if ((0 >= checkuservotingbalance))
110110 then throw("You don't have any dues of CODE balance in this Voting Pair.")
111111 else if (isDefined(pmt.assetId))
112112 then throw("Don't attach any other asset. Please attach 0.1 TN as a fee to release your token")
113113 else if ((pmt.amount != 10000000))
114114 then throw("Please attach 0.1 TN as a fee to release your token.")
115115 else [IntegerEntry(((("Votes_Rcvd_" + calleraddress) + "_") + EnterAssetID), 0), ScriptTransfer(i.caller, checkuservotingbalance, CODEAssetID)]
116116 }
117117
118118
119119
120120 @Callable(i)
121121 func IssueLPToken (EnterAssetID) = {
122122 let adminrights = valueOrErrorMessage(getString(this, "LP_Admin_Rights"), "LP Admin Rights are Not Included into Smart Contract. Deploy Admin Rights First.")
123123 let calleraddress = toBase58String(i.caller.bytes)
124124 let checkpairisavailableornot = valueOrErrorMessage(getString(this, ("Pair_UV_" + EnterAssetID)), "Asset not Found in Whitelisted Token")
125125 let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
126126 let name = info.name
127127 let decimals = info.decimals
128128 let NewVotingStatus = "P"
129129 let VotingStatus = valueOrErrorMessage(getString(this, ("Voting_Status_" + EnterAssetID)), ("Voting Status is Missing for " + EnterAssetID))
130- let FirstLPQty = (1 * pow(10, 0, fraction((decimals + 6), 1, 2), 0, 0, UP))
130+ let FirstLPQty = (1 * pow(10, 0, fraction((decimals + 6), 1, 2), 0, 0, HALFUP))
131131 let LPissue = Issue((("LP-" + take(name, 8)) + "-USDT"), (((("LP-" + name) + "-USDT") + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), FirstLPQty, fraction((decimals + 6), 1, 2), true)
132132 let LPid = calculateAssetId(LPissue)
133133 if ((adminrights != calleraddress))
134134 then throw((("Your are not allowded to Issue LP Token. Only " + adminrights) + " can issue the LP Token."))
135135 else if ((checkpairisavailableornot != EnterAssetID))
136136 then throw("Pair is not available in Voting List.")
137137 else if ((VotingStatus != NewVotingStatus))
138138 then throw("LP Token must be a Whitelisted Token.")
139139 else [LPissue, StringEntry(("LP_" + EnterAssetID), toBase58String(LPid)), IntegerEntry(("Total_LP_" + EnterAssetID), FirstLPQty)]
140140 }
141141
142142
143143
144144 @Callable(i)
145145 func SwapAssetToUSDTPairEntry (EnterAssetID) = {
146146 let calleraddress = toBase58String(i.caller.bytes)
147147 let pmt = if ((size(i.payments) == 1))
148148 then i.payments[0]
149149 else throw("Whitelisted Token is required as Attached payment[1].")
150150 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
151151 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
152152 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
153153 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
154154 let newbalanceofUSDT = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckAssetBalance + pmt.amount))
155155 let quantityofpriceasset = (CheckUSDTBalance - newbalanceofUSDT)
156156 let CurrentVotingStatus = "F"
157157 let SwapFee = 3
158158 let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
159159 let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
160160 let SumupofAssetToUSDTSwapFee = match getInteger(this, ((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
161161 case a: Int =>
162162 a
163163 case _ =>
164164 0
165165 }
166166 let NewSumupofAssetToUSDTSwapFee = (SumupofAssetToUSDTSwapFee + SwapFeetoreceive)
167167 let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
168168 case a: Int =>
169169 a
170170 case _ =>
171171 0
172172 }
173173 let NewSumupofAssetBalance = (CheckAssetBalance + pmt.amount)
174174 let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
175175 case a: Int =>
176176 a
177177 case _ =>
178178 0
179179 }
180180 let NewSumupofUSDTBalance = (CheckUSDTBalance - quantityofpriceasset)
181181 let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
182182 case a: Int =>
183183 a
184184 case _ =>
185185 0
186186 }
187187 let NewTPT = (TOPT + 1)
188188 if ((EnterAssetID == toBase58String(USDTAssetID)))
189189 then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].")
190190 else if ((checkpairisavailableornot != EnterAssetID))
191191 then throw("Pair is not available in Whitelisted Asset.")
192192 else if ((VotingStatus == CurrentVotingStatus))
193193 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
194194 else if ((pmt.assetId == USDTAssetID))
195195 then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.")
196196 else if ((pmt.assetId != fromBase58String(EnterAssetID)))
197197 then throw(("Incorrect asset attached, please attach or send " + EnterAssetID))
198198 else if ((CheckUSDTBalance == 0))
199199 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
200200 else if ((CheckAssetBalance == 0))
201201 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
202202 else if ((10000000 > quantityofpriceasset))
203203 then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 10 dollar atleast."))
204204 else if ((quantityofpriceasset > CheckUSDTBalance))
205- then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool."))
205+ then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, HALFUP)))) + " USDT. Add Liquidity into Pool."))
206206 else [IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewSumupofAssetToUSDTSwapFee), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), NewTPT), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewSumupofAssetBalance), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewSumupofUSDTBalance), ScriptTransfer(i.caller, userbalancetoreceive, USDTAssetID), ScriptTransfer(CollectUSDTSwapFeeAddress, SwapFeetoreceive, USDTAssetID)]
207207 }
208208
209209
210210
211211 @Callable(i)
212212 func SwapUSDTToAssetPairEntry (EnterAssetID) = {
213213 let calleraddress = toBase58String(i.caller.bytes)
214214 let pmt = if ((size(i.payments) == 1))
215215 then i.payments[0]
216216 else throw((("Only " + toBase58String(USDTAssetID)) + " USDT Token is required as an Attached payment[1]."))
217217 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
218218 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
219219 let newbalanceofAsset = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckUSDTBalance + pmt.amount))
220220 let quantityofpriceasset = (CheckAssetBalance - newbalanceofAsset)
221221 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
222222 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
223223 let CurrentVotingStatus = "F"
224224 let SwapFee = 3
225225 let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
226226 let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
227227 let SumupofUSDTToAssetSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + EnterAssetID)) {
228228 case a: Int =>
229229 a
230230 case _ =>
231231 0
232232 }
233233 let NewSumupofUSDTToAssetSwapFee = (SumupofUSDTToAssetSwapFee + SwapFeetoreceive)
234234 let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
235235 case a: Int =>
236236 a
237237 case _ =>
238238 0
239239 }
240240 let NewSumupofAssetBalance = (CheckAssetBalance - quantityofpriceasset)
241241 let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
242242 case a: Int =>
243243 a
244244 case _ =>
245245 0
246246 }
247247 let NewSumupofUSDTBalance = (CheckUSDTBalance + pmt.amount)
248248 let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
249249 case a: Int =>
250250 a
251251 case _ =>
252252 0
253253 }
254254 let NewTPT = (TOPT + 1)
255255 if ((checkpairisavailableornot != EnterAssetID))
256256 then throw("Pair is not available in Whitelisted Asset.")
257257 else if ((VotingStatus == CurrentVotingStatus))
258258 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
259259 else if ((EnterAssetID == toBase58String(USDTAssetID)))
260260 then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach USDT as an attachment Token in payment[1].")
261261 else if ((pmt.assetId != USDTAssetID))
262262 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.")
263263 else if ((10000000 > pmt.amount))
264264 then throw("Your Attached USDT Amount is very low. Attach Atleast 10 USDT to Claim the minimum Tokens.")
265265 else if ((CheckUSDTBalance == 0))
266266 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
267267 else if ((CheckAssetBalance == 0))
268268 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
269269 else if ((quantityofpriceasset > CheckAssetBalance))
270270 then throw((("Pool Only has a Liquidity of " + toString(CheckAssetBalance)) + " Tokens. Add Liquidity into Pool."))
271271 else [IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), NewSumupofUSDTToAssetSwapFee), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), NewTPT), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewSumupofAssetBalance), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewSumupofUSDTBalance), ScriptTransfer(i.caller, userbalancetoreceive, fromBase58String(EnterAssetID)), ScriptTransfer(CollectAssetSwapFeeAddress, SwapFeetoreceive, fromBase58String(EnterAssetID))]
272272 }
273273
274274
275275
276276 @Callable(i)
277277 func AddLiquidity (EnterAssetID) = {
278278 let calleraddress = toBase58String(i.caller.bytes)
279279 let pmt1 = value(i.payments[0])
280280 let pmt2 = value(i.payments[1])
281281 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
282282 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
283283 let ReissueassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or May be not Generated."))
284284 let CurrentVotingStatus = "F"
285285 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
286286 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
287287 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
288288 let decimals = decimalsinfo.decimals
289- let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, UP)), 0, 1, 0, 0, UP)
290- let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
291- let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
289+ let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
290+ let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
291+ let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
292292 let bothassetsdecimals = (6 + decimals)
293293 let sharedecimals = (bothassetsdecimals / 2)
294- let quantityofEnterAssetID = fraction(args3, pmt1.amount, pow(10, 0, bothassetsdecimals, 0, 0, UP))
294+ let quantityofEnterAssetID = fraction(args3, pmt1.amount, pow(10, 0, bothassetsdecimals, 0, 0, HALFUP))
295+ let quantityofLPToken1 = pow((fraction(pmt1.amount, 1, pow(10, 0, decimals, 0, 0, HALFUP)) * fraction(pmt2.amount, 1, pow(10, 0, 6, 0, 0, HALFUP))), 0, 5, 1, sharedecimals, DOWN)
295296 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
296297 case a: Int =>
297298 a
298299 case _ =>
299300 0
300301 }
301302 let NewUSDTHoldingInPair = (USDTHoldingInPair + pmt2.amount)
302303 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
303304 case a: Int =>
304305 a
305306 case _ =>
306307 0
307308 }
308309 let NewAssetHoldingInPair = (AssetHoldingInPair + pmt1.amount)
310+ let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
311+ case a: Int =>
312+ a
313+ case _ =>
314+ 0
315+ }
316+ let NewLPTokenIssued = (LPTokenIssued + quantityofLPToken1)
309317 if ((checkpairisavailableornot != EnterAssetID))
310318 then throw("Pair is not available in Whitelisted Asset.")
311319 else if ((VotingStatus == CurrentVotingStatus))
312320 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
313321 else if ((EnterAssetID == toBase58String(USDTAssetID)))
314322 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].")
315323 else if ((size(i.payments) != 2))
316324 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.")
317325 else if ((pmt1.assetId == USDTAssetID))
318326 then throw("You Attached USDT asset in payment[1], please attach only whitelisted Token in payment[1] along with USDT in payment[2].")
319327 else if ((pmt1.assetId != fromBase58String(EnterAssetID)))
320328 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
321329 else if ((pmt1.assetId != fromBase58String(EnterAssetID)))
322330 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
323331 else if ((pmt2.assetId != USDTAssetID))
324332 then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = USDT Token.")
325333 else if ((10000000 > pmt2.amount))
326334 then throw("please attach atleast 10 USDT in payment[2] & Equivalent worth of Token in payment[1]")
327335 else if ((pmt2.amount != quantityofEnterAssetID))
328336 then throw(("Attached payment[2] quantity is not matching as per attached payment[1].payment[2] must be " + toString(quantityofEnterAssetID)))
329- else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair)]
337+ else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), Reissue(ReissueassetId, quantityofLPToken1, true), ScriptTransfer(i.caller, quantityofLPToken1, ReissueassetId)]
330338 }
331339
332340
333341
334342 @Callable(i)
335343 func RemoveLiquidity (EnterAssetID) = {
336344 let calleraddress = toBase58String(i.caller.bytes)
337345 let pmt = if ((size(i.payments) == 1))
338346 then i.payments[0]
339347 else throw("No payment attached, Please Attach LP Token as payment[1].")
340348 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
341349 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
342350 let ReissueableassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or not Generated."))
343351 let CurrentVotingStatus = "F"
344352 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
345353 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
346354 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
347355 let decimals = decimalsinfo.decimals
348- let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, UP)), 0, 1, 0, 0, UP)
349- let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
350- let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
356+ let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
357+ let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
358+ let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, HALFUP)), 0, 1, 0, 0, HALFUP)
351359 let bothassetsdecimals = (6 + decimals)
352360 let sharedecimals = (bothassetsdecimals / 2)
353- let SquareofAttachedPymt = fraction(pow(pmt.amount, sharedecimals, 2, 0, 6, HALFUP), 1, fraction(args3, 1, pow(10, 0, 6, 0, 0, UP)))
361+ let SquareofAttachedPymt = fraction(pow(pmt.amount, sharedecimals, 2, 0, 6, HALFUP), 1, fraction(args3, 1, pow(10, 0, 6, 0, 0, HALFUP)))
354362 let SqrtofAttachPymt = pow(SquareofAttachedPymt, 0, 5, 1, sharedecimals, DOWN)
355- let UserLPWorth = fraction(args3, SqrtofAttachPymt, pow(10, 0, bothassetsdecimals, 0, 0, UP))
363+ let UserLPWorth = fraction(args3, SqrtofAttachPymt, pow(10, 0, bothassetsdecimals, 0, 0, HALFUP))
356364 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
357365 case a: Int =>
358366 a
359367 case _ =>
360368 0
361369 }
362370 let NewUSDTHoldingInPair = (USDTHoldingInPair - UserLPWorth)
363371 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
364372 case a: Int =>
365373 a
366374 case _ =>
367375 0
368376 }
369377 let NewAssetHoldingInPair = (AssetHoldingInPair - SqrtofAttachPymt)
370378 let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
371379 case a: Int =>
372380 a
373381 case _ =>
374382 0
375383 }
376384 let NewLPTokenIssued = (LPTokenIssued - pmt.amount)
377385 if ((checkpairisavailableornot != EnterAssetID))
378386 then throw("Pair is not available in Whitelist.")
379387 else if ((VotingStatus == CurrentVotingStatus))
380388 then throw((EnterAssetID + " is not A Whitelist Token Yet."))
381389 else if ((fromBase58String(EnterAssetID) == USDTAssetID))
382390 then throw("Don't choose USDT AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]")
383391 else if ((pmt.assetId != ReissueableassetId))
384392 then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.")
385393 else [Burn(ReissueableassetId, pmt.amount), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), ScriptTransfer(i.caller, UserLPWorth, USDTAssetID), ScriptTransfer(i.caller, SqrtofAttachPymt, fromBase58String(EnterAssetID))]
386394 }
387395
388396
389397
390398 @Callable(i)
391399 func RemoveEntry (Key,Key1,Key2,Key3) = [DeleteEntry(Key), DeleteEntry(Key1), DeleteEntry(Key2), DeleteEntry(Key3)]
392400
393401
394402 @Verifier(tx)
395403 func verify () = match tx {
396404 case _ =>
397405 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
398406 }
399407

github/deemru/w8io/873ac7e 
75.85 ms