tx · BTsKZaLgXAVswsef4XE4PCmo58T8Gyr1b6xtETtniuBL

3Mv9Gu7Fc9sxgXLDqTbM8RvgBrwqGBCCHhc:  -0.01400000 Waves

2022.01.02 07:49 [1860818] smart account 3Mv9Gu7Fc9sxgXLDqTbM8RvgBrwqGBCCHhc > SELF 0.00000000 Waves

{ "type": 13, "id": "BTsKZaLgXAVswsef4XE4PCmo58T8Gyr1b6xtETtniuBL", "fee": 1400000, "feeAssetId": null, "timestamp": 1641099007948, "version": 2, "chainId": 84, "sender": "3Mv9Gu7Fc9sxgXLDqTbM8RvgBrwqGBCCHhc", "senderPublicKey": "6G5tpz8pTVXVZ7VUJDEqBEpNLJQwBfQvdEjokfQPeTUD", "proofs": [ "2XFhZSqtHcoDw1zK6Nm5vSMtNKXHYD5bWTvagYYFvQPtWpzqvMUgw6XQBV5w49LGh1f2vp1hU5gsY8rCLNesYqoB" ], "script": "base64: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dmRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQFAAAAFGluZGl2aWR1YWx2b3Rlc2NvdW50BQAAAANuaWwAAAABaQEAAAATV2l0aGRyYXdWb3RlZFRva2VucwAAAAEAAAAMRW50ZXJBc3NldElEBAAAAANwbXQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAtMC4xIFROIFRva2VuIGlzIHJlcXVpcmVkIGFzIEF0dGFjaGVkIHBheW1lbnQuBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADmNoZWNrZW5kaGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAClZvdGluZ19FSF8FAAAADEVudGVyQXNzZXRJRAQAAAAZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAACFBhaXJfVVZfBQAAAAxFbnRlckFzc2V0SUQEAAAAFmNoZWNrdXNlcnZvdGluZ2JhbGFuY2UJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtWb3Rlc19SY3ZkXwUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwUAAAAMRW50ZXJBc3NldElECQABLAAAAAIFAAAADWNhbGxlcmFkZHJlc3MCAAAAJSBBZGRyZXNzIG5ldmVyIHZvdGVkICYgZXhpc3QgaW4gbGlzdC4EAAAAHXBlbmRpbmdibG9ja3Nmb3Jwcm9qZWN0ZXhwaXJlCQAAZQAAAAIFAAAADmNoZWNrZW5kaGVpZ2h0BQAAAAZoZWlnaHQDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAAlUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFZv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ZXJBc3NldElECQAAAgAAAAECAAAAK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAAAAAAIFAAAADFZvdGluZ1N0YXR1cwUAAAATQ3VycmVudFZvdGluZ1N0YXR1cwkAAAIAAAABCQABLAAAAAIFAAAADEVudGVyQXNzZXRJRAIAAAAgIGlzIG5vdCBBIFdoaXRlbGlzdGVkIFRva2VuIFlldC4DCQAAAAAAAAIFAAAADEVudGVyQXNzZXRJRAkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAJJJbnB1dCBjYW4gTmV2ZXIgYmUgYSBVU0RUIEFzc2V0SUQuIEVudGVyIFdoaXRlbGlzdGVkIEFzc2V0SUQgaW4gaW5wdXQgYXMgd2VsbCBhcyBpbiBwYXltZW50WzFdICYgQXR0YWNoIFVTRFQgYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzJdLgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAACeVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZCBhcyBwYXltZW50IGluIDUwJS01MCUuIEtpbmRseSBBdHRhY2ggcGF5bWVudDEgPSBUb2tlbiB5b3Ugd2FudCB0byBhZGQgZm9yIExpcXVpZGl0eSAmIHBheW1lbnQyID0gRXF1aXZhbGVudCBBbW91bnQgb2YgVVNEVCBUb2tlbi4DCQAAAAAAAAIIBQAAAARwbXQxAAAAB2Fzc2V0SWQFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAeFlvdSBBdHRhY2hlZCBVU0RUIGFzc2V0IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggb25seSB3aGl0ZWxpc3RlZCBUb2tlbiBpbiBwYXltZW50WzFdIGFsb25nIHdpdGggVVNEVCBpbiBwYXltZW50WzJdLgMJAQAAAAIhPQAAAAIIBQAAAARwbXQxAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElECQAAAgAAAAECAAAAa0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCBmb3IgTGlxdWlkaXR5IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggU3RyaW5nIEFzc2V0IG9yIFdoaXRlbGlzdGVkIFRva2VuIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAABHBtdDEAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAABrSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkIGZvciBMaXF1aWRpdHkgaW4gcGF5bWVudFsxXSwgcGxlYXNlIGF0dGFjaCBTdHJpbmcgQXNzZXQgb3IgV2hpdGVsaXN0ZWQgVG9rZW4gb25seS4DCQEAAAACIT0AAAACCAUAAAAEcG10MgAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAGpXcm9uZyBBc3NldCBBdHRhY2hlZCBpbiBwYXltZW50c1syXSwgUGxlYXNlIGF0dGFjaCBwYXltZW50WzFdID0gTGlxdWlkaXR5IFRva2VuICYgcGF5bWVudFsyXSA9IFVTRFQgVG9rZW4uAwkAAGYAAAACAAAAAAAAmJaACAUAAAAEcG10MgAAAAZhbW91bnQJAAACAAAAAQIAAABVcGxlYXNlIGF0dGFjaCBhdGxlYXN0IDEwIFVTRFQgaW4gcGF5bWVudFsyXSAmIEVxdWl2YWxlbnQgd29ydGggb2YgVG9rZW4gaW4gcGF5bWVudFsxXQMJAQAAAAIhPQAAAAIIBQAAAARwbXQyAAAABmFtb3VudAUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAkAAAIAAAABCQABLAAAAAICAAAAW0F0dGFjaGVkIHBheW1lbnRbMl0gcXVhbnRpdHkgaXMgbm90IG1hdGNoaW5nIGFzIHBlciBhdHRhY2hlZCBwYXltZW50WzFdLnBheW1lbnRbMl0gbXVzdCBiZSAJAAGkAAAAAQUAAAAWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAUTmV3VVNEVEhvbGRpbmdJ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BAAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAkAAGUAAAACBQAAABBDaGVja1VTRFRCYWxhbmNlBQAAABBuZXdiYWxhbmNlb2ZVU0RUBAAAABNDdXJyZW50Vm90aW5nU3RhdHVzAgAAAAFGBAAAAAdTd2FwRmVlAAAAAAAAAAADBAAAABBTd2FwRmVldG9yZWNlaXZlCQAAaQAAAAIJAABoAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAB1N3YXBGZWUAAAAAAAAAA+gEAAAAFHVzZXJiYWxhbmNldG9yZWNlaXZlCQAAZQAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAABBTd2FwRmVldG9yZWNlaXZlBAAAABlTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABxOZXdTdW11cG9mQXNzZXRUb1VTRFRTd2FwRmVlCQAAZAAAAAIFAAAAGVN1bXVwb2ZBc3NldFRvVVNEVFN3YXBGZWUFAAAAEFN3YXBGZWV0b3JlY2VpdmUEAAAAEVN1bXVwQXNzZXRCYWxhbmNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC0JhbGFuY2Vfb2ZfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAgAAAAFfBQAAAAxFbnRlckFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAAGQAAAACBQAAABFDaGVja0Fzc2V0QmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAAEFN1bXVwVVNEVEJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVOZXdTdW11cG9mVVNEVEJhbGFuY2UJAABlAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQEAAAABFRPUFQEAAAAByRtYXRjaDAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAATVG90YWxfb2ZfUGFpcl9UeG5zXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAABk5ld1RQVAkAAGQAAAACBQAAAARUT1BUAAAAAAAAAAABAwkAAAAAAAACBQAAAAxFbnRlckFzc2V0SUQJAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQJAAACAAAAAQIAAACGSW5wdXQgY2FuIE5ldmVyIGJlIGEgVVNEVCBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0ICYgQXR0YWNoIFdoaXRlbGlzdGVkIEFzc2V0IGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAtVU0RUQXNzZXRJRAkAAAIAAAABAgAAAFNZb3UgY2FuJ3QgQXR0YWNoIFVTRFQgYXMgYW4gQXR0YWNoZWQgUGF5bWVudC4gT25seSBXaGl0ZWxpc3RlZCBUb2tlbnMgYXJlIGFjY2VwdGVkLgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQkAASwAAAACAgAAADBJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQsIHBsZWFzZSBhdHRhY2ggb3Igc2VuZCAFAAAADEVudGVyQXNzZXRJRAMJAAAAAAAAAgUAAAAQQ2hlY2tVU0RUQmFsYW5jZQAAAAAAAAAAAAkAAAIAAAABAgAAAGVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAAAAAAAAAgUAAAARQ2hlY2tBc3NldEJhbGFuY2UAAAAAAAAAAAAJAAACAAAAAQIAAABlU3dhcCBQYWlyIE5lZWQgdG8gQWRkIExpcXVpZGl0eSBmaXJzdCBpbnRvIFBvb2wuIE9ubHkgQWZ0ZXIgdGhhdCBQYWlyIHdpbGwgYmUgYWN0aXZhdGVkIGZvciBTd2FwcGluZy4DCQAAZgAAAAIAAAAAAACYloAFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADRZb3VyIEF0dGFjaGVkIEFzc2V0IEFtb3VudCBpcyB2ZXJ5IGxvdy4gQXR0YWNoIE1vcmUgBQAAAAxFbnRlckFzc2V0SUQCAAAAOSBUb2tlbnMgdG8gQ2xhaW0gdGhlIG1pbmltdW0gQW1vdW50IG9mIDEwIGRvbGxhciBhdGxlYXN0LgMJAABmAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAEENoZWNrVVNEVEJhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHVBvb2wgT25seSBoYXMgYSBMaXF1aWRpdHkg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c3NldElEBAAAABNDdXJyZW50Vm90aW5nU3RhdHVzAgAAAAFGBAAAAAdTd2FwRmVlAAAAAAAAAAADBAAAABBTd2FwRmVldG9yZWNlaXZlCQAAaQAAAAIJAABoAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAB1N3YXBGZWUAAAAAAAAAA+gEAAAAFHVzZXJiYWxhbmNldG9yZWNlaXZlCQAAZQAAAAIFAAAAFHF1YW50aXR5b2ZwcmljZWFzc2V0BQAAABBTd2FwRmVldG9yZWNlaXZlBAAAABlTdW11cG9mVVNEVFRvQXNzZXRTd2FwRmVlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAZVG90YWxfU3dhcF9GZWVfQ29sbGVjdGVkXwUAAAAMRW50ZXJBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAHE5ld1N1bXVwb2ZVU0RUVG9Bc3NldFN3YXBGZWUJAABkAAAAAgUAAAAZU3VtdXBvZlVTRFRUb0Fzc2V0U3dhcEZlZQUAAAAQU3dhcEZlZXRvcmVjZWl2ZQQAAAARU3VtdXBBc3NldEJhbGFuY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQCAAAAAV8FAAAADEVudGVyQXNzZXRJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABZOZXdTdW11cG9mQXNzZXRCYWxhbmNlCQAAZQAAAAIFAAAAEUNoZWNrQXNzZXRCYWxhbmNlBQAAABRxdWFudGl0eW9mcHJpY2Vhc3NldAQAAAAQU3VtdXBVU0RUQmFsYW5jZQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtCYWxhbmNlX29mXwUAAAAMRW50ZXJBc3NldElEAgAAAAFfCQACWAAAAAEFAAAAC1VTRFRBc3NldElEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAFU5ld1N1bXVwb2ZVU0RUQmFsYW5jZQkAAGQAAAACBQAAABBDaGVja1VTRFRCYWxhbmNlCAUAAAADcG10AAAABmFtb3VudAQAAAAEVE9QVAQAAAAHJG1hdGNoMAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABNUb3RhbF9vZl9QYWlyX1R4bnNfBQAAAAxFbnRlckFzc2V0SUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAGTmV3VFBUCQAAZAAAAAIFAAAABFRPUFQAAAAAAAAAAAEDCQEAAAACIT0AAAACBQAAABljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQAAAAxFbnRlckFzc2V0SUQJAAACAAAAAQIAAAArUGFpciBpcyBub3QgYXZhaWxhYmxlIGluIFdoaXRlbGlzdGVkIEFzc2V0LgMJAAAAAAAAAgUAAAAMVm90aW5nU3RhdHVzBQAAABNDdXJyZW50Vm90aW5nU3RhdHVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMRW50ZXJBc3NldElEAgAAACAgaXMgbm90IEEgV2hpdGVsaXN0ZWQgVG9rZW4gWWV0LgMJAAAAAAAAAgUAAAAMRW50ZXJBc3NldElECQACWAAAAAEFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAeUlucHV0IGNhbiBOZXZlciBiZSBhIFVTRFQgQXNzZXRJRC4gRW50ZXIgV2hpdGVsaXN0ZWQgQXNzZXRJRCBpbiBpbnB1dCAmIEF0dGFjaCBVU0RUIGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAC1VTRFRBc3NldElECQAAAgAAAAECAAAAfllvdSBjYW4gQXR0YWNoIFVTRFQgYXMgYW4gQXR0YWNoZWQgUGF5bWVudFsxXSB0byBTd2FwIFVTRFQgVG8gUmVxdWlyZWQgVG9rZW4uIEFueSBvdGhlciBhc3NldCBlbHNlIHRoYW4gVVNEVCB3aWxsIGJlIHJlamVjdGVkLgMJAABmAAAAAgAAAAAAAJiWgAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAABaWW91ciBBdHRhY2hlZCBVU0RUIEFtb3VudCBpcyB2ZXJ5IGxvdy4gQXR0YWNoIEF0bGVhc3QgMTAgVVNEVCB0byBDbGFpbSB0aGUgbWluaW11bSBUb2tlbnMuAwkAAAAAAAACBQAAABBDaGVja1VTRFRCYWxhbmNlAAAAAAAAAAAACQAAAgAAAAECAAAAZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAAAAAAACBQAAABFDaGVja0Fzc2V0QmFsYW5jZQAAAAAAAAAAAAkAAAIAAAABAgAAAGVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAABmAAAAAgUAAAAUcXVhbnRpdHlvZnByaWNlYXNzZXQFAAAAEUNoZWNrQXNzZXRCYWxhbmNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAB1Qb29sIE9ubHkgaGFzIGEgTGlxdWlkaXR5IG9mIAkAAaQAAAABBQAAABFDaGVja0Fzc2V0QmFsYW5jZQIAAAAhIFRva2Vucy4gQWRkIExpcXVpZGl0eSBpbnRvIFBvb2wuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FAAAADEVudGVyQXNzZXRJRAUAAAAcTmV3U3VtdXBvZlVTRFRUb0Fzc2V0U3dhcEZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABNUb3RhbF9vZl9QYWlyX1R4bnNfBQAAAAxFbnRlckFzc2V0SUQFAAAABk5ld1RQVAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8JAAJYAAAAAQUAAAALVVNEVEFzc2V0SUQCAAAAAV8FAAAADEVudGVyQXNzZXRJRAUAAAAWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALQmFsYW5jZV9vZl8FAAAADEVudGVyQXNzZXRJRAIAAAABXwkAAlgAAAABBQAAAAtVU0RUQXNzZXRJRAUAAAAVTmV3U3VtdXBvZlVTRFRCYWxhbmNlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAUdXNlcmJhbGFuY2V0b3JlY2VpdmUJAAJZAAAAAQUAAAAMRW50ZXJBc3NldElECQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAGkNvbGxlY3RBc3NldFN3YXBGZWVBZGRyZXNzBQAAABBTd2FwRmVldG9yZWNlaXZlCQACWQAAAAEFAAAADEVudGVyQXNzZXRJRAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5sZaHuA==", "height": 1860818, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C1y66fUsYQ4m2Fh3o2rfCwLWEAbPgcDcJm2mu1y9qnqd Next: none Diff:
OldNewDifferences
261261 }
262262
263263
264+
265+@Callable(i)
266+func SwapAssetToUSDTPairEntry (EnterAssetID) = {
267+ let calleraddress = toBase58String(i.caller.bytes)
268+ let pmt = if ((size(i.payments) == 1))
269+ then i.payments[0]
270+ else throw("Whitelisted Token is required as Attached payment[1].")
271+ let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
272+ let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
273+ let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
274+ let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
275+ let newbalanceofUSDT = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckAssetBalance + pmt.amount))
276+ let quantityofpriceasset = (CheckUSDTBalance - newbalanceofUSDT)
277+ let CurrentVotingStatus = "F"
278+ let SwapFee = 3
279+ let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
280+ let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
281+ let SumupofAssetToUSDTSwapFee = match getInteger(this, ((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
282+ case a: Int =>
283+ a
284+ case _ =>
285+ 0
286+ }
287+ let NewSumupofAssetToUSDTSwapFee = (SumupofAssetToUSDTSwapFee + SwapFeetoreceive)
288+ let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
289+ case a: Int =>
290+ a
291+ case _ =>
292+ 0
293+ }
294+ let NewSumupofAssetBalance = (CheckAssetBalance + pmt.amount)
295+ let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
296+ case a: Int =>
297+ a
298+ case _ =>
299+ 0
300+ }
301+ let NewSumupofUSDTBalance = (CheckUSDTBalance - quantityofpriceasset)
302+ let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
303+ case a: Int =>
304+ a
305+ case _ =>
306+ 0
307+ }
308+ let NewTPT = (TOPT + 1)
309+ if ((EnterAssetID == toBase58String(USDTAssetID)))
310+ then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].")
311+ else if ((checkpairisavailableornot != EnterAssetID))
312+ then throw("Pair is not available in Whitelisted Asset.")
313+ else if ((VotingStatus == CurrentVotingStatus))
314+ then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
315+ else if ((pmt.assetId == USDTAssetID))
316+ then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.")
317+ else if ((pmt.assetId != fromBase58String(EnterAssetID)))
318+ then throw(("Incorrect asset attached, please attach or send " + EnterAssetID))
319+ else if ((CheckUSDTBalance == 0))
320+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
321+ else if ((CheckAssetBalance == 0))
322+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
323+ else if ((10000000 > quantityofpriceasset))
324+ then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 10 dollar atleast."))
325+ else if ((quantityofpriceasset > CheckUSDTBalance))
326+ then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool."))
327+ 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)]
328+ }
329+
330+
331+
332+@Callable(i)
333+func SwapUSDTToAssetPairEntry (EnterAssetID) = {
334+ let calleraddress = toBase58String(i.caller.bytes)
335+ let pmt = if ((size(i.payments) == 1))
336+ then i.payments[0]
337+ else throw("Only USDT Token is required as an Attached payment[1].")
338+ let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
339+ let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
340+ let newbalanceofAsset = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckUSDTBalance + pmt.amount))
341+ let quantityofpriceasset = (CheckAssetBalance - newbalanceofAsset)
342+ let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
343+ let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
344+ let CurrentVotingStatus = "F"
345+ let SwapFee = 3
346+ let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
347+ let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
348+ let SumupofUSDTToAssetSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + EnterAssetID)) {
349+ case a: Int =>
350+ a
351+ case _ =>
352+ 0
353+ }
354+ let NewSumupofUSDTToAssetSwapFee = (SumupofUSDTToAssetSwapFee + SwapFeetoreceive)
355+ let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
356+ case a: Int =>
357+ a
358+ case _ =>
359+ 0
360+ }
361+ let NewSumupofAssetBalance = (CheckAssetBalance - quantityofpriceasset)
362+ let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
363+ case a: Int =>
364+ a
365+ case _ =>
366+ 0
367+ }
368+ let NewSumupofUSDTBalance = (CheckUSDTBalance + pmt.amount)
369+ let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
370+ case a: Int =>
371+ a
372+ case _ =>
373+ 0
374+ }
375+ let NewTPT = (TOPT + 1)
376+ if ((checkpairisavailableornot != EnterAssetID))
377+ then throw("Pair is not available in Whitelisted Asset.")
378+ else if ((VotingStatus == CurrentVotingStatus))
379+ then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
380+ else if ((EnterAssetID == toBase58String(USDTAssetID)))
381+ then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach USDT as an attachment Token in payment[1].")
382+ else if ((pmt.assetId != USDTAssetID))
383+ 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.")
384+ else if ((10000000 > pmt.amount))
385+ then throw("Your Attached USDT Amount is very low. Attach Atleast 10 USDT to Claim the minimum Tokens.")
386+ else if ((CheckUSDTBalance == 0))
387+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
388+ else if ((CheckAssetBalance == 0))
389+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
390+ else if ((quantityofpriceasset > CheckAssetBalance))
391+ then throw((("Pool Only has a Liquidity of " + toString(CheckAssetBalance)) + " Tokens. Add Liquidity into Pool."))
392+ 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))]
393+ }
394+
395+
264396 @Verifier(tx)
265397 func verify () = match tx {
266398 case _ =>
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 != 10000000))
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))
130130 let LPissue = Issue((("LP-" + take(name, 8)) + "-USDT"), (((("LP-" + name) + "-USDT") + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), (1 * pow(10, 0, fraction((decimals + 6), 1, 2), 0, 0, UP)), fraction((decimals + 6), 1, 2), true)
131131 let LPid = calculateAssetId(LPissue)
132132 if ((adminrights != calleraddress))
133133 then throw((("Your are not allowded to Issue LP Token. Only " + adminrights) + " can issue the LP Token."))
134134 else if ((checkpairisavailableornot != EnterAssetID))
135135 then throw("Pair is not available in Voting List.")
136136 else if ((VotingStatus != NewVotingStatus))
137137 then throw("LP Token must be a Whitelisted Token.")
138138 else [LPissue, StringEntry(("LP_" + EnterAssetID), toBase58String(LPid))]
139139 }
140140
141141
142142
143143 @Callable(i)
144144 func AddLiquidity (EnterAssetID) = {
145145 let calleraddress = toBase58String(i.caller.bytes)
146146 let pmt1 = value(i.payments[0])
147147 let pmt2 = value(i.payments[1])
148148 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
149149 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
150150 let ReissueassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or May be not Generated."))
151151 let CurrentVotingStatus = "F"
152152 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
153153 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
154154 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
155155 let decimals = decimalsinfo.decimals
156156 let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, UP)), 0, 1, 0, 0, UP)
157157 let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
158158 let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
159159 let bothassetsdecimals = (6 + decimals)
160160 let sharedecimals = (bothassetsdecimals / 2)
161161 let quantityofEnterAssetID = fraction(args3, pmt1.amount, pow(10, 0, bothassetsdecimals, 0, 0, UP))
162162 let quantityofLPToken1 = pow((fraction(pmt1.amount, 1, pow(10, 0, decimals, 0, 0, UP)) * fraction(pmt2.amount, 1, pow(10, 0, 6, 0, 0, UP))), 0, 5, 1, sharedecimals, DOWN)
163163 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
164164 case a: Int =>
165165 a
166166 case _ =>
167167 0
168168 }
169169 let NewUSDTHoldingInPair = (USDTHoldingInPair + pmt2.amount)
170170 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
171171 case a: Int =>
172172 a
173173 case _ =>
174174 0
175175 }
176176 let NewAssetHoldingInPair = (AssetHoldingInPair + pmt1.amount)
177177 let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
178178 case a: Int =>
179179 a
180180 case _ =>
181181 0
182182 }
183183 let NewLPTokenIssued = (LPTokenIssued + quantityofLPToken1)
184184 if ((checkpairisavailableornot != EnterAssetID))
185185 then throw("Pair is not available in Whitelisted Asset.")
186186 else if ((VotingStatus == CurrentVotingStatus))
187187 then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
188188 else if ((EnterAssetID == toBase58String(USDTAssetID)))
189189 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].")
190190 else if ((size(i.payments) != 2))
191191 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.")
192192 else if ((pmt1.assetId == USDTAssetID))
193193 then throw("You Attached USDT asset in payment[1], please attach only whitelisted Token in payment[1] along with USDT in payment[2].")
194194 else if ((pmt1.assetId != fromBase58String(EnterAssetID)))
195195 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
196196 else if ((pmt1.assetId != fromBase58String(EnterAssetID)))
197197 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
198198 else if ((pmt2.assetId != USDTAssetID))
199199 then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = USDT Token.")
200200 else if ((10000000 > pmt2.amount))
201201 then throw("please attach atleast 10 USDT in payment[2] & Equivalent worth of Token in payment[1]")
202202 else if ((pmt2.amount != quantityofEnterAssetID))
203203 then throw(("Attached payment[2] quantity is not matching as per attached payment[1].payment[2] must be " + toString(quantityofEnterAssetID)))
204204 else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)), NewUSDTHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), IntegerEntry("Price_Per_Token", args3), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), Reissue(ReissueassetId, quantityofLPToken1, true), ScriptTransfer(i.caller, quantityofLPToken1, ReissueassetId)]
205205 }
206206
207207
208208
209209 @Callable(i)
210210 func RemoveLiquidity (EnterAssetID) = {
211211 let calleraddress = toBase58String(i.caller.bytes)
212212 let pmt = if ((size(i.payments) == 1))
213213 then i.payments[0]
214214 else throw("No payment attached, Please Attach LP Token as payment[1].")
215215 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
216216 let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
217217 let ReissueableassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or not Generated."))
218218 let CurrentVotingStatus = "F"
219219 let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
220220 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
221221 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
222222 let decimals = decimalsinfo.decimals
223223 let arg1 = pow((CheckUSDTBalance / pow(10, 6, 6, 0, 0, UP)), 0, 1, 0, 0, UP)
224224 let arg2 = pow((CheckAssetBalance / pow(10, decimals, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
225225 let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, UP)), 0, 1, 0, 0, UP)
226226 let bothassetsdecimals = (6 + decimals)
227227 let sharedecimals = (bothassetsdecimals / 2)
228228 let SquareofAttachedPymt = fraction(pow(pmt.amount, sharedecimals, 2, 0, 6, HALFUP), 1, fraction(args3, 1, pow(10, 0, 6, 0, 0, UP)))
229229 let SqrtofAttachPymt = pow(SquareofAttachedPymt, 0, 5, 1, sharedecimals, DOWN)
230230 let UserLPWorth = fraction(args3, SqrtofAttachPymt, pow(10, 0, bothassetsdecimals, 0, 0, UP))
231231 let USDTHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
232232 case a: Int =>
233233 a
234234 case _ =>
235235 0
236236 }
237237 let NewUSDTHoldingInPair = (USDTHoldingInPair - UserLPWorth)
238238 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
239239 case a: Int =>
240240 a
241241 case _ =>
242242 0
243243 }
244244 let NewAssetHoldingInPair = (AssetHoldingInPair - SqrtofAttachPymt)
245245 let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
246246 case a: Int =>
247247 a
248248 case _ =>
249249 0
250250 }
251251 let NewLPTokenIssued = (LPTokenIssued - pmt.amount)
252252 if ((checkpairisavailableornot != EnterAssetID))
253253 then throw("Pair is not available in Whitelist.")
254254 else if ((VotingStatus == CurrentVotingStatus))
255255 then throw((EnterAssetID + " is not A Whitelist Token Yet."))
256256 else if ((fromBase58String(EnterAssetID) == USDTAssetID))
257257 then throw("Don't choose USDT AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]")
258258 else if ((pmt.assetId != ReissueableassetId))
259259 then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.")
260260 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))]
261261 }
262262
263263
264+
265+@Callable(i)
266+func SwapAssetToUSDTPairEntry (EnterAssetID) = {
267+ let calleraddress = toBase58String(i.caller.bytes)
268+ let pmt = if ((size(i.payments) == 1))
269+ then i.payments[0]
270+ else throw("Whitelisted Token is required as Attached payment[1].")
271+ let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
272+ let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
273+ let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
274+ let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
275+ let newbalanceofUSDT = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckAssetBalance + pmt.amount))
276+ let quantityofpriceasset = (CheckUSDTBalance - newbalanceofUSDT)
277+ let CurrentVotingStatus = "F"
278+ let SwapFee = 3
279+ let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
280+ let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
281+ let SumupofAssetToUSDTSwapFee = match getInteger(this, ((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
282+ case a: Int =>
283+ a
284+ case _ =>
285+ 0
286+ }
287+ let NewSumupofAssetToUSDTSwapFee = (SumupofAssetToUSDTSwapFee + SwapFeetoreceive)
288+ let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
289+ case a: Int =>
290+ a
291+ case _ =>
292+ 0
293+ }
294+ let NewSumupofAssetBalance = (CheckAssetBalance + pmt.amount)
295+ let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
296+ case a: Int =>
297+ a
298+ case _ =>
299+ 0
300+ }
301+ let NewSumupofUSDTBalance = (CheckUSDTBalance - quantityofpriceasset)
302+ let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
303+ case a: Int =>
304+ a
305+ case _ =>
306+ 0
307+ }
308+ let NewTPT = (TOPT + 1)
309+ if ((EnterAssetID == toBase58String(USDTAssetID)))
310+ then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].")
311+ else if ((checkpairisavailableornot != EnterAssetID))
312+ then throw("Pair is not available in Whitelisted Asset.")
313+ else if ((VotingStatus == CurrentVotingStatus))
314+ then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
315+ else if ((pmt.assetId == USDTAssetID))
316+ then throw("You can't Attach USDT as an Attached Payment. Only Whitelisted Tokens are accepted.")
317+ else if ((pmt.assetId != fromBase58String(EnterAssetID)))
318+ then throw(("Incorrect asset attached, please attach or send " + EnterAssetID))
319+ else if ((CheckUSDTBalance == 0))
320+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
321+ else if ((CheckAssetBalance == 0))
322+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
323+ else if ((10000000 > quantityofpriceasset))
324+ then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 10 dollar atleast."))
325+ else if ((quantityofpriceasset > CheckUSDTBalance))
326+ then throw((("Pool Only has a Liquidity of " + toString((CheckUSDTBalance / pow(10, 0, 6, 0, 0, UP)))) + " USDT. Add Liquidity into Pool."))
327+ 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)]
328+ }
329+
330+
331+
332+@Callable(i)
333+func SwapUSDTToAssetPairEntry (EnterAssetID) = {
334+ let calleraddress = toBase58String(i.caller.bytes)
335+ let pmt = if ((size(i.payments) == 1))
336+ then i.payments[0]
337+ else throw("Only USDT Token is required as an Attached payment[1].")
338+ let CheckUSDTBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID)))
339+ let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID))
340+ let newbalanceofAsset = fraction(CheckUSDTBalance, CheckAssetBalance, (CheckUSDTBalance + pmt.amount))
341+ let quantityofpriceasset = (CheckAssetBalance - newbalanceofAsset)
342+ let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
343+ let VotingStatus = getStringValue(this, ("Voting_Status_" + EnterAssetID))
344+ let CurrentVotingStatus = "F"
345+ let SwapFee = 3
346+ let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
347+ let userbalancetoreceive = (quantityofpriceasset - SwapFeetoreceive)
348+ let SumupofUSDTToAssetSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + EnterAssetID)) {
349+ case a: Int =>
350+ a
351+ case _ =>
352+ 0
353+ }
354+ let NewSumupofUSDTToAssetSwapFee = (SumupofUSDTToAssetSwapFee + SwapFeetoreceive)
355+ let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(USDTAssetID)) + "_") + EnterAssetID)) {
356+ case a: Int =>
357+ a
358+ case _ =>
359+ 0
360+ }
361+ let NewSumupofAssetBalance = (CheckAssetBalance - quantityofpriceasset)
362+ let SumupUSDTBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(USDTAssetID))) {
363+ case a: Int =>
364+ a
365+ case _ =>
366+ 0
367+ }
368+ let NewSumupofUSDTBalance = (CheckUSDTBalance + pmt.amount)
369+ let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
370+ case a: Int =>
371+ a
372+ case _ =>
373+ 0
374+ }
375+ let NewTPT = (TOPT + 1)
376+ if ((checkpairisavailableornot != EnterAssetID))
377+ then throw("Pair is not available in Whitelisted Asset.")
378+ else if ((VotingStatus == CurrentVotingStatus))
379+ then throw((EnterAssetID + " is not A Whitelisted Token Yet."))
380+ else if ((EnterAssetID == toBase58String(USDTAssetID)))
381+ then throw("Input can Never be a USDT AssetID. Enter Whitelisted AssetID in input & Attach USDT as an attachment Token in payment[1].")
382+ else if ((pmt.assetId != USDTAssetID))
383+ 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.")
384+ else if ((10000000 > pmt.amount))
385+ then throw("Your Attached USDT Amount is very low. Attach Atleast 10 USDT to Claim the minimum Tokens.")
386+ else if ((CheckUSDTBalance == 0))
387+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
388+ else if ((CheckAssetBalance == 0))
389+ then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
390+ else if ((quantityofpriceasset > CheckAssetBalance))
391+ then throw((("Pool Only has a Liquidity of " + toString(CheckAssetBalance)) + " Tokens. Add Liquidity into Pool."))
392+ 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))]
393+ }
394+
395+
264396 @Verifier(tx)
265397 func verify () = match tx {
266398 case _ =>
267399 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
268400 }
269401

github/deemru/w8io/169f3d6 
64.23 ms