tx · FtTcXfRCUHVgnKZHpnmuxRRtWU6WY8q8mDogiUzL53EA

3MshBTYYGc24JWzE2aYEktiz5KzeNQGA4GV:  -0.01400000 Waves

2022.01.06 18:56 [1867244] smart account 3MshBTYYGc24JWzE2aYEktiz5KzeNQGA4GV > SELF 0.00000000 Waves

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

github/deemru/w8io/873ac7e 
79.13 ms