2023.05.25 21:54 [3659394] smart account 3PBeerh759eA1eGFuw77RowaZfZNohzJzvz > SELF 0.00000000 Waves
{ "type": 13, "id": "713CN5W5YUxtWKLZ7G54ymdZytcwxSvXuUjDrVwJn1fW", "fee": 2000000, "feeAssetId": null, "timestamp": 1685040967558, "version": 2, "chainId": 87, "sender": "3PBeerh759eA1eGFuw77RowaZfZNohzJzvz", "senderPublicKey": "Fw5NUe1f5xvDWNgCRm1CuYRnJGm2JqeSjqEBioaPvwaR", "proofs": [ "5yCqnbNWbtvV35Go2pkJE1dydr8eFtetbwq1MDsxGVBoEeE7izZesL1GJ2YnBoCkd7tgFUWCPx3FSDHMLqLjCZiA" ], "script": "base64:BgJACAISABIJCgcIAQgICAgEEg0KCwgICAgIBAgIAQgEEhEKDwgICAgIBAgICAQICAEIBBIDCgEIEgMKAQgSAwoBCBAACnJ1bGVyX3Rlc3QCLEJneHBDbTR3eGJXOFNLTFBLWm5mNEtVMkQ2WlUyOW92OE1nWnJrYVNBcXBZAAVydWxlcgIsN3pOVUpCVm9QTUJDUnN0UDNSMUF2eGh4ck41MVNRa241Qk1pMmlKOWNpQWQABnJ1bGVyMgIsOWZlNjdld3p4dGFMb3plUFoyVTNTRzcxWlFGeUdMQVhXbW1tSFJFcEZlTUMABnJ1bGVyMwIsQW8ycWlqUVZ2dlpaU2dSektvWXlKOWtCeFlqc1BRMzdDZFVwcGRKdFQ2VjEABnJ1bGVyNAIsM1BTSzdiNmJNZjFnQkR2akhSYkdROXpHYzY4VWlyZXFCajJldWJWaTFxNXIABnJ1bGVyNQIsNjZyQ3Y5ZGZkb3VxUTNTUkc5WHJLblJpRm1NYndrWlFnbWhTMWZ0bkN0cW0ABnJ1bGVyNgIsRmVNWDZoUWFSS3NMc2tpNzd4VkhIREdSa2o5VnVKem1QMk1BQ2JBV0RqREsABnJ1bGVyNwIsN3hERVE3SlpOTDFaTExxY3lTVWIxV1dpakcxWDNHRFdHMzVReHlOcWJ4eGkABnJ1bGVyOAIsR1g1azFDcHVobnY5b1A5Vm5XTVNYQnJKdXNha1U1UDNLenFRVzVlN1BqZ2QACmFicmFjYWRicmEBIITDhEyr4nwCCd6iwXNoCSzra2gXEkldulYQmi+2iXMBAQN2aXABA2trawMDAwMDAwMDCQAAAgUDa2trBQVydWxlcgYJAAACBQNra2sFBnJ1bGVyMgYJAAACBQNra2sFBnJ1bGVyMwYJAAACBQNra2sFBnJ1bGVyNAYJAAACBQNra2sFBnJ1bGVyNQYJAAACBQNra2sFBnJ1bGVyNgYJAAACBQNra2sFBnJ1bGVyNwYJAAACBQNra2sFBnJ1bGVyOAYHAQpnZXRBc3NldElkAQNwbXQEByRtYXRjaDAFA3BtdAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFwBQckbWF0Y2gwBQNwbXQFBHVuaXQBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFjY0JhbGFuY2UBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAENZ2V0QXNzZXRCeXRlcwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkAQlteUJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA8AcCBQR0aGlzBQFiCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQcBaQEEdGVzdAAJAJQKAgUDbmlsAgABaQEEZmFrZQcEYV9pbgZhbW91bnQFYV9vdXQCcG8FcG9fdHkOd3hfbHBfYXNzZXRfaWQJaXNfc3RhYmxlBAdhc3NldEluCQENZ2V0QXNzZXRCeXRlcwEFBGFfaW4ECGFtb3VudEluBQZhbW91bnQEBXB1dE9wAwUJaXNfc3RhYmxlAgtwdXRPbmVUa25WMgIJcHV0T25lVGtuBAVnZXRPcAMFCWlzX3N0YWJsZQILZ2V0T25lVGtuVjICCWdldE9uZVRrbgQUYW1vdW50X2JlZl9hc3NldF9vdXQJAQlteUJhbGFuY2UBCQENZ2V0QXNzZXRCeXRlcwEFBWFfb3V0AwkAAAIFFGFtb3VudF9iZWZfYXNzZXRfb3V0BRRhbW91bnRfYmVmX2Fzc2V0X291dAQGZW50cnkxAwkAAAIFBXBvX3R5AgFwCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwbwIEc3dhcAkAzAgCBQVhX291dAkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJbgUIYW1vdW50SW4FA25pbAMJAAACBQVwb190eQIBcwkA/AcECQEHQWRkcmVzcwEJANkEAQUCcG8CCGV4Y2hhbmdlCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldEluBQhhbW91bnRJbgUDbmlsBANwdXQJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnBvBQVwdXRPcAkAzAgCAAEJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJbgUIYW1vdW50SW4FA25pbAMJAAACBQNwdXQFA3B1dAQLd3hfbHBfYXNzZXQJAQ1nZXRBc3NldEJ5dGVzAQUOd3hfbHBfYXNzZXRfaWQECWxwQmFsYW5jZQkBCW15QmFsYW5jZQEFC3d4X2xwX2Fzc2V0AwkAAAIFCWxwQmFsYW5jZQUJbHBCYWxhbmNlCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwbwUFZ2V0T3AJAMwIAgUFYV9vdXQJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3d4X2xwX2Fzc2V0BQlscEJhbGFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQZlbnRyeTEFBmVudHJ5MQQWYW1vdW50X2FmdGVyX2Fzc2V0X291dAkBCW15QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUFYV9vdXQDCQAAAgUWYW1vdW50X2FmdGVyX2Fzc2V0X291dAUWYW1vdW50X2FmdGVyX2Fzc2V0X291dAQEcmVzdQkAZQIFFmFtb3VudF9hZnRlcl9hc3NldF9vdXQFFGFtb3VudF9iZWZfYXNzZXRfb3V0CQACAQkApAMBBQRyZXN1CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3RyYWRlX3cLAWECYW8CcDEDcDF0EHd4X2xwX2Fzc2V0X2lkXzELaXNfc3RhYmxlXzECcDIDcDJ0A21pbhB3eF9scF9hc3NldF9pZF8yC2lzX3N0YWJsZV8yBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5AwkBASEBCQEDdmlwAQUJY2FsbGVyUGJrCQACAQIITm8tbm8tbm8EA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldEluCQEKZ2V0QXNzZXRJZAEIBQNwbXQHYXNzZXRJZAQIYW1vdW50SW4JAQV2YWx1ZQEIBQNwbXQGYW1vdW50BBFhbW91bnRfYmVmX2Fzc2V0MQkBCW15QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUBYQMJAAACBRFhbW91bnRfYmVmX2Fzc2V0MQURYW1vdW50X2JlZl9hc3NldDEEBnB1dE9wMQMFC2lzX3N0YWJsZV8xAgtwdXRPbmVUa25WMgIJcHV0T25lVGtuBAZnZXRPcDEDBQtpc19zdGFibGVfMQILZ2V0T25lVGtuVjICCWdldE9uZVRrbgQGcHV0T3AyAwULaXNfc3RhYmxlXzICC3B1dE9uZVRrblYyAglwdXRPbmVUa24EBmdldE9wMgMFC2lzX3N0YWJsZV8yAgtnZXRPbmVUa25WMgIJZ2V0T25lVGtuBAZlbnRyeTEDCQAAAgUDcDF0AgFwCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwMQIEc3dhcAkAzAgCBQFhCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldEluBQhhbW91bnRJbgUDbmlsAwkAAAIFA3AxdAIBcwkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDECCGV4Y2hhbmdlCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldEluBQhhbW91bnRJbgUDbmlsBANwdXQJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAxBQZwdXRPcDEJAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SW4FCGFtb3VudEluBQNuaWwDCQAAAgUDcHV0BQNwdXQEDXd4X2xwX2Fzc2V0XzEJAQ1nZXRBc3NldEJ5dGVzAQUQd3hfbHBfYXNzZXRfaWRfMQQLbHBCYWxhbmNlXzEJAQlteUJhbGFuY2UBBQ13eF9scF9hc3NldF8xAwkAAAIFC2xwQmFsYW5jZV8xBQtscEJhbGFuY2VfMQkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDEFBmdldE9wMQkAzAgCBQFhCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQ13eF9scF9hc3NldF8xBQtscEJhbGFuY2VfMQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBmVudHJ5MQUGZW50cnkxBAJuYgkAZQIJAQlteUJhbGFuY2UBCQENZ2V0QXNzZXRCeXRlcwEFAWEFEWFtb3VudF9iZWZfYXNzZXQxAwkAAAIFAm5iBQJuYgQVYW1vdW50X2JlZl9iYXNlX2Fzc2V0CQEJbXlCYWxhbmNlAQkBDWdldEFzc2V0Qnl0ZXMBBQJhbwMJAAACBRVhbW91bnRfYmVmX2Jhc2VfYXNzZXQFFWFtb3VudF9iZWZfYmFzZV9hc3NldAQGZW50cnkyAwkAAAIFA3AydAIBcAkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDICBHN3YXAJAMwIAgUCYW8JAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUBYQUCbmIFA25pbAMJAAACBQNwMnQCAXMJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAyAghleGNoYW5nZQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQFhBQJuYgUDbmlsBANwdXQJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAyBQZwdXRPcDIJAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUBYQUCbmIFA25pbAMJAAACBQNwdXQFA3B1dAQNd3hfbHBfYXNzZXRfMgkBDWdldEFzc2V0Qnl0ZXMBBRB3eF9scF9hc3NldF9pZF8yBAtscEJhbGFuY2VfMgkBCW15QmFsYW5jZQEFDXd4X2xwX2Fzc2V0XzIDCQAAAgULbHBCYWxhbmNlXzIFC2xwQmFsYW5jZV8yCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwMgUGZ2V0T3AyCQDMCAIFAmFvCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQ13eF9scF9hc3NldF8yBQtscEJhbGFuY2VfMgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBmVudHJ5MgUGZW50cnkyBANuYjIJAGUCCQEJbXlCYWxhbmNlAQkBDWdldEFzc2V0Qnl0ZXMBBQJhbwUVYW1vdW50X2JlZl9iYXNlX2Fzc2V0AwkAAAIFA25iMgUDbmIyAwkAZgIFA25iMgUDbWluBAdodWphYnJhCQBlAgUDbmIyBQhhbW91bnRJbgQEcmV0dQUIYW1vdW50SW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQRyZXR1BQdhc3NldEluCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAKcIAQUKYWJyYWNhZGJyYQUHaHVqYWJyYQUHYXNzZXRJbgUDbmlsCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgtPb29wcywgaW46IAkApAMBBQhhbW91bnRJbgIFLCAxOiAJAKQDAQUCbmICBywgb3V0OiAJAKQDAQUDbmIyAgcsIG1pbjogCQCkAwEFA21pbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt0cmlwdHJhZGVfdw8BYQJhMgJwMQNwMXQQd3hfbHBfYXNzZXRfaWRfMQtpc19zdGFibGVfMQJwMgNwMnQQd3hfbHBfYXNzZXRfaWRfMgtpc19zdGFibGVfMgJwMwNwM3QDbWluEHd4X2xwX2Fzc2V0X2lkXzMLaXNfc3RhYmxlXzMECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJAQN2aXABBQljYWxsZXJQYmsJAAIBAghOby1uby1ubwQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SW4JAQpnZXRBc3NldElkAQgFA3BtdAdhc3NldElkBAhhbW91bnRJbgkBBXZhbHVlAQgFA3BtdAZhbW91bnQEEWFtb3VudF9iZWZfYXNzZXQxCQEJbXlCYWxhbmNlAQkBDWdldEFzc2V0Qnl0ZXMBBQFhAwkAAAIFEWFtb3VudF9iZWZfYXNzZXQxBRFhbW91bnRfYmVmX2Fzc2V0MQQGcHV0T3AxAwULaXNfc3RhYmxlXzECC3B1dE9uZVRrblYyAglwdXRPbmVUa24EBmdldE9wMQMFC2lzX3N0YWJsZV8xAgtnZXRPbmVUa25WMgIJZ2V0T25lVGtuBAZwdXRPcDIDBQtpc19zdGFibGVfMgILcHV0T25lVGtuVjICCXB1dE9uZVRrbgQGZ2V0T3AyAwULaXNfc3RhYmxlXzICC2dldE9uZVRrblYyAglnZXRPbmVUa24EBnB1dE9wMwMFC2lzX3N0YWJsZV8zAgtwdXRPbmVUa25WMgIJcHV0T25lVGtuBAZnZXRPcDMDBQtpc19zdGFibGVfMwILZ2V0T25lVGtuVjICCWdldE9uZVRrbgQGZW50cnkxAwkAAAIFA3AxdAIBcAkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDECBHN3YXAJAMwIAgUBYQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJbgUIYW1vdW50SW4FA25pbAMJAAACBQNwMXQCAXMJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAxAghleGNoYW5nZQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJbgUIYW1vdW50SW4FA25pbAQEcHV0MQkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDEFBnB1dE9wMQkAzAgCAAEJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJbgUIYW1vdW50SW4FA25pbAMJAAACBQRwdXQxBQRwdXQxBA13eF9scF9hc3NldF8xCQENZ2V0QXNzZXRCeXRlcwEFEHd4X2xwX2Fzc2V0X2lkXzEEC2xwQmFsYW5jZV8xCQEJbXlCYWxhbmNlAQUNd3hfbHBfYXNzZXRfMQMJAAACBQtscEJhbGFuY2VfMQULbHBCYWxhbmNlXzEJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAxBQZnZXRPcDEJAMwIAgUBYQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUNd3hfbHBfYXNzZXRfMQULbHBCYWxhbmNlXzEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQZlbnRyeTEFBmVudHJ5MQQCbmIJAGUCCQEJbXlCYWxhbmNlAQkBDWdldEFzc2V0Qnl0ZXMBBQFhBRFhbW91bnRfYmVmX2Fzc2V0MQMJAAACBQJuYgUCbmIEEWFtb3VudF9iZWZfYXNzZXQyCQEJbXlCYWxhbmNlAQkBDWdldEFzc2V0Qnl0ZXMBBQJhMgMJAAACBRFhbW91bnRfYmVmX2Fzc2V0MgURYW1vdW50X2JlZl9hc3NldDIEBmVudHJ5MgMJAAACBQNwMnQCAXAJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAyAgRzd2FwCQDMCAIFAmEyCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFAWEFAm5iBQNuaWwDCQAAAgUDcDJ0AgFzCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwMgIIZXhjaGFuZ2UJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUBYQUCbmIFA25pbAQEcHV0MgkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDIFBnB1dE9wMgkAzAgCAAEJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQFhBQJuYgUDbmlsAwkAAAIFBHB1dDIFBHB1dDIEDXd4X2xwX2Fzc2V0XzIJAQ1nZXRBc3NldEJ5dGVzAQUQd3hfbHBfYXNzZXRfaWRfMgQLbHBCYWxhbmNlXzIJAQlteUJhbGFuY2UBBQ13eF9scF9hc3NldF8yAwkAAAIFC2xwQmFsYW5jZV8yBQtscEJhbGFuY2VfMgkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDIFBmdldE9wMgkAzAgCBQJhMgkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUNd3hfbHBfYXNzZXRfMgULbHBCYWxhbmNlXzIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQZlbnRyeTIFBmVudHJ5MgQVYW1vdW50X2JlZl9iYXNlX2Fzc2V0CQEJbXlCYWxhbmNlAQUHYXNzZXRJbgMJAAACBRVhbW91bnRfYmVmX2Jhc2VfYXNzZXQFFWFtb3VudF9iZWZfYmFzZV9hc3NldAQDbmIyCQBlAgkBCW15QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUCYTIFEWFtb3VudF9iZWZfYXNzZXQyAwkAAAIFA25iMgUDbmIyBAZlbnRyeTMDCQAAAgUDcDN0AgFwCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwMwIEc3dhcAkAzAgCCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldEluCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFAmEyBQNuYjIFA25pbAMJAAACBQNwM3QCAXMJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAzAghleGNoYW5nZQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQJhMgUDbmIyBQNuaWwEBHB1dDMJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAnAzBQZwdXRPcDMJAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUCYTIFA25iMgUDbmlsAwkAAAIFBHB1dDMFBHB1dDMEDXd4X2xwX2Fzc2V0XzMJAQ1nZXRBc3NldEJ5dGVzAQUQd3hfbHBfYXNzZXRfaWRfMwQLbHBCYWxhbmNlXzMJAQlteUJhbGFuY2UBBQ13eF9scF9hc3NldF8zAwkAAAIFC2xwQmFsYW5jZV8zBQtscEJhbGFuY2VfMwkA/AcECQEHQWRkcmVzcwEJANkEAQUCcDMFBmdldE9wMwkAzAgCCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldEluCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQ13eF9scF9hc3NldF8zBQtscEJhbGFuY2VfMwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBmVudHJ5MwUGZW50cnkzBANuYjMJAGUCCQEJbXlCYWxhbmNlAQUHYXNzZXRJbgUVYW1vdW50X2JlZl9iYXNlX2Fzc2V0AwkAAAIFA25iMwUDbmIzAwkAZgIFA25iMwUDbWluBAdodWphYnJhCQBlAgUDbmIzBQhhbW91bnRJbgQEcmV0dQUIYW1vdW50SW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQRyZXR1BQdhc3NldEluCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAKcIAQUKYWJyYWNhZGJyYQUHaHVqYWJyYQUHYXNzZXRJbgUDbmlsCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgILT29vcHMsIGluOiAJAKQDAQUIYW1vdW50SW4CBSwgMTogCQCkAwEFAm5iAgUsIDI6IAkApAMBBQNuYjICBywgb3V0OiAJAKQDAQUDbmIzAgcsIG1pbjogCQCkAwEFA21pbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3Qg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dAkAZQIJAQlteUJhbGFuY2UBBQdhc3NldEluBQphX2Jhc2VfYmVmAwkAAAIFBnJlc3VsdAUGcmVzdWx0AwkAZgIFBnJlc3VsdAUFbWluaW0EB2h1amFicmEJAGUCBQZyZXN1bHQFCGFtb3VudEluBARyZXR1BQhhbW91bnRJbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBHJldHUFB2Fzc2V0SW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkApwgBBQphYnJhY2FkYnJhBQdodWphYnJhBQdhc3NldEluBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICC09vb3BzLCBpbjogCQCkAwEFCGFtb3VudEluAgUsIDE6IAkApAMBBQNuYjECBywgb3V0OiAJAKQDAQUGcmVzdWx0AgcsIG1pbjogCQCkAwEFBW1pbmltCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNPb29wcywgUkVKRUNUMV9pbjogCQCkAwEFCGFtb3VudEluAgUsIDE6IAkApAMBBQNuYjECCCwgbWluMTogCQCkAwEFBm1pbmltMQIHLCBtaW46IAkApAMBBQVtaW5pbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQFiAQFkBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5AwkBASEBCQEDdmlwAQUJY2FsbGVyUGJrCQACAQIITm8tbm8tbm8EA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldEluCQEKZ2V0QXNzZXRJZAEIBQNwbXQHYXNzZXRJZAQI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U3RyaW5nAQUHYXNzZXRJbgkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQJhMgUDbmIyBQNuaWwDCQAAAgUDcDN0AgFzCQD8BwQJAQdBZGRyZXNzAQkA2QQBBQJwMwIIZXhjaGFuZ2UJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUCYTIFA25iMgUDbmlsAwkAAAIFA3AzdAIBdwkA/AcECQEHQWRkcmVzcwEBGgFXLio1NbENt/F5PuG3RtCedFJNezHQg64GAgRzd2FwCQDMCAIAAQkAzAgCCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldEluCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFAmEyBQNuYjIFA25pbAkAAgECEVVua25vd24gcG9vbCB0eXBlAwkAAAIFAnMzBQJzMwQGcmVzdWx0CQBlAgkBCW15QmFsYW5jZQEFB2Fzc2V0SW4FCmFfYmFzZV9iZWYDCQAAAgUGcmVzdWx0BQZyZXN1bHQDCQBmAgUGcmVzdWx0BQVtaW5pbQQHaHVqYWJyYQkAZQIFBnJlc3VsdAUIYW1vdW50SW4EBHJldHUFCGFtb3VudEluCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUEcmV0dQUHYXNzZXRJbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQCnCAEFCmFicmFjYWRicmEFB2h1amFicmEFB2Fzc2V0SW4FA25pbAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICC09vb3BzLCBpbjogCQCkAwEFCGFtb3VudEluAgUsIDE6IAkApAMBBQNuYjECBSwgMjogCQCkAwEFA25iMgIHLCBvdXQ6IAkApAMBBQZyZXN1bHQCBywgbWluOiAJAKQDAQUFbWluaW0JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIB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bAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQJhMwUDbmIzBQNuaWwJAAIBAhFVbmtub3duIHBvb2wgdHlwZQMJAAACBQJzNAUCczQEBnJlc3VsdAkAZQIJAQlteUJhbGFuY2UBBQdhc3NldEluBQphX2Jhc2VfYmVmAwkAAAIFBnJlc3VsdAUGcmVzdWx0AwkAZgIFBnJlc3VsdAUFbWluaW0EB2h1amFicmEJAGUCBQZyZXN1bHQFCGFtb3VudEluBARyZXR1BQhhbW91bnRJbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBHJldHUFB2Fzc2V0SW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkApwgBBQphYnJhY2FkYnJhBQdodWphYnJhBQdhc3NldEluBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgILT29vcHMsIGluOiAJAKQDAQUIYW1vdW50SW4CBSwgMTogCQCkAwEFA25iMQIFLCAyOiAJAKQDAQUDbmIyAgUsIDM6IAkApAMBBQNuYjMCBywgb3V0OiAJAKQDAQUGcmVzdWx0AgcsIG1pbjogCQCkAwEFBW1pbmltCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITT29vcHMsIFJFSkVDVDJfaW46IAkApAMBBQhhbW91bnRJbgIFLCAxOiAJAKQDAQUDbmIxAggsIG1pbjE6IAkApAMBBQZtaW5pbTECBSwgMjogCQCkAwEFA25iMgIILCBtaW4yOiAJAKQDAQUGbWluaW0yAgUsIDM6IAIBMAIHLCBvdXQ6IAIBMAIHLCBtaW46IAkApAMBBQVtaW5pbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITT29vcHMsIFJFSkVDVDFfaW46IAkApAMBBQhhbW91bnRJbgIFLCAxOiAJAKQDAQUDbmIxAggsIG1pbjE6IAkApAMBBQZtaW5pbTECBSwgMjogAgEwAgUsIDM6IAIBMAIHLCBvdXQ6IAIBMAIHLCBtaW46IAkApAMBBQVtaW5pbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXl+FUQ+", "height": 3659394, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DG1SLy777fVgtjRycHxjVwT7J6SNcULruj6HZf4KD9ih Next: 5Ry4Q2HDnYZKsT2HH7P8RvTrwxXNq2CMCL31QQA4Audk Diff:
Old | New | Differences | |
---|---|---|---|
353 | 353 | let assetIn = getAssetId(pmt.assetId) | |
354 | 354 | let amountIn = value(pmt.amount) | |
355 | 355 | let arr = split(d, "|") | |
356 | - | let $t01174311823 = $Tuple6(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]) | |
357 | - | let a1 = $t01174311823._1 | |
358 | - | let p1 = $t01174311823._2 | |
359 | - | let p1t = $t01174311823._3 | |
360 | - | let p2 = $t01174311823._4 | |
361 | - | let p2t = $t01174311823._5 | |
362 | - | let m = $t01174311823._6 | |
356 | + | let $t01201812110 = $Tuple7(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6]) | |
357 | + | let a1 = $t01201812110._1 | |
358 | + | let p1 = $t01201812110._2 | |
359 | + | let p1t = $t01201812110._3 | |
360 | + | let p2 = $t01201812110._4 | |
361 | + | let p2t = $t01201812110._5 | |
362 | + | let m = $t01201812110._6 | |
363 | + | let m1 = $t01201812110._7 | |
363 | 364 | let minim = parseIntValue(m) | |
365 | + | let minim1 = parseIntValue(m1) | |
364 | 366 | let a1_bef = myBalance(getAssetBytes(a1)) | |
365 | 367 | if ((a1_bef == a1_bef)) | |
366 | 368 | then { | |
378 | 380 | then { | |
379 | 381 | let a_base_bef = myBalance(assetIn) | |
380 | 382 | if ((a_base_bef == a_base_bef)) | |
381 | - | then { | |
382 | - | let s2 = if ((p2t == "p")) | |
383 | - | then invoke(Address(fromBase58String(p2)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
384 | - | else if ((p2t == "s")) | |
385 | - | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
386 | - | else if ((p2t == "w")) | |
387 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
388 | - | else throw("Unknown pool type") | |
389 | - | if ((s2 == s2)) | |
390 | - | then { | |
391 | - | let result = (myBalance(assetIn) - a_base_bef) | |
392 | - | if ((result == result)) | |
393 | - | then if ((result > minim)) | |
394 | - | then { | |
395 | - | let hujabra = (result - amountIn) | |
396 | - | let retu = amountIn | |
383 | + | then if ((nb1 >= minim1)) | |
384 | + | then { | |
385 | + | let s2 = if ((p2t == "p")) | |
386 | + | then invoke(Address(fromBase58String(p2)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
387 | + | else if ((p2t == "s")) | |
388 | + | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
389 | + | else if ((p2t == "w")) | |
390 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
391 | + | else throw("Unknown pool type") | |
392 | + | if ((s2 == s2)) | |
393 | + | then { | |
394 | + | let result = (myBalance(assetIn) - a_base_bef) | |
395 | + | if ((result == result)) | |
396 | + | then if ((result > minim)) | |
397 | + | then { | |
398 | + | let hujabra = (result - amountIn) | |
399 | + | let retu = amountIn | |
397 | 400 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
398 | - | } | |
399 | - | else throw(((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
400 | - | else throw("Strict value is not equal to itself.") | |
401 | - | } | |
402 | - | else throw("Strict value is not equal to itself.") | |
403 | - | } | |
401 | + | } | |
402 | + | else throw(((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
403 | + | else throw("Strict value is not equal to itself.") | |
404 | + | } | |
405 | + | else throw("Strict value is not equal to itself.") | |
406 | + | } | |
407 | + | else throw(((((((("Ooops, REJECT1_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", min: ") + toString(minim))) | |
404 | 408 | else throw("Strict value is not equal to itself.") | |
405 | 409 | } | |
406 | 410 | else throw("Strict value is not equal to itself.") | |
423 | 427 | let assetIn = getAssetId(pmt.assetId) | |
424 | 428 | let amountIn = value(pmt.amount) | |
425 | 429 | let arr = split(d, "|") | |
426 | - | let $t01392814045 = $Tuple9(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]) | |
427 | - | let a1 = $t01392814045._1 | |
428 | - | let p1 = $t01392814045._2 | |
429 | - | let p1t = $t01392814045._3 | |
430 | - | let a2 = $t01392814045._4 | |
431 | - | let p2 = $t01392814045._5 | |
432 | - | let p2t = $t01392814045._6 | |
433 | - | let p3 = $t01392814045._7 | |
434 | - | let p3t = $t01392814045._8 | |
435 | - | let m = $t01392814045._9 | |
430 | + | let $t01457114713 = $Tuple11(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10]) | |
431 | + | let a1 = $t01457114713._1 | |
432 | + | let p1 = $t01457114713._2 | |
433 | + | let p1t = $t01457114713._3 | |
434 | + | let a2 = $t01457114713._4 | |
435 | + | let p2 = $t01457114713._5 | |
436 | + | let p2t = $t01457114713._6 | |
437 | + | let p3 = $t01457114713._7 | |
438 | + | let p3t = $t01457114713._8 | |
439 | + | let m = $t01457114713._9 | |
440 | + | let m1 = $t01457114713._10 | |
441 | + | let m2 = $t01457114713._11 | |
436 | 442 | let minim = parseIntValue(m) | |
443 | + | let minim1 = parseIntValue(m1) | |
444 | + | let minim2 = parseIntValue(m2) | |
437 | 445 | let a1_bef = myBalance(getAssetBytes(a1)) | |
438 | 446 | if ((a1_bef == a1_bef)) | |
439 | 447 | then { | |
451 | 459 | then { | |
452 | 460 | let a2_bef = myBalance(getAssetBytes(a2)) | |
453 | 461 | if ((a2_bef == a2_bef)) | |
454 | - | then { | |
455 | - | let s2 = if ((p2t == "p")) | |
456 | - | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
457 | - | else if ((p2t == "s")) | |
458 | - | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
459 | - | else if ((p2t == "w")) | |
460 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
461 | - | else throw("Unknown pool type") | |
462 | - | if ((s2 == s2)) | |
463 | - | then { | |
464 | - | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
465 | - | if ((nb2 == nb2)) | |
466 | - | then { | |
467 | - | let a_base_bef = myBalance(assetIn) | |
468 | - | if ((a_base_bef == a_base_bef)) | |
469 | - | then { | |
470 | - | let s3 = if ((p3t == "p")) | |
471 | - | then invoke(Address(fromBase58String(p3)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
472 | - | else if ((p3t == "s")) | |
473 | - | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
474 | - | else if ((p3t == "w")) | |
475 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
476 | - | else throw("Unknown pool type") | |
477 | - | if ((s3 == s3)) | |
462 | + | then if ((nb1 >= minim1)) | |
463 | + | then { | |
464 | + | let s2 = if ((p2t == "p")) | |
465 | + | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
466 | + | else if ((p2t == "s")) | |
467 | + | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
468 | + | else if ((p2t == "w")) | |
469 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
470 | + | else throw("Unknown pool type") | |
471 | + | if ((s2 == s2)) | |
472 | + | then { | |
473 | + | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
474 | + | if ((nb2 == nb2)) | |
475 | + | then { | |
476 | + | let a_base_bef = myBalance(assetIn) | |
477 | + | if ((a_base_bef == a_base_bef)) | |
478 | + | then if ((nb2 >= minim2)) | |
478 | 479 | then { | |
479 | - | let result = (myBalance(assetIn) - a_base_bef) | |
480 | - | if ((result == result)) | |
481 | - | then if ((result > minim)) | |
482 | - | then { | |
483 | - | let hujabra = (result - amountIn) | |
484 | - | let retu = amountIn | |
480 | + | let s3 = if ((p3t == "p")) | |
481 | + | then invoke(Address(fromBase58String(p3)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
482 | + | else if ((p3t == "s")) | |
483 | + | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
484 | + | else if ((p3t == "w")) | |
485 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
486 | + | else throw("Unknown pool type") | |
487 | + | if ((s3 == s3)) | |
488 | + | then { | |
489 | + | let result = (myBalance(assetIn) - a_base_bef) | |
490 | + | if ((result == result)) | |
491 | + | then if ((result > minim)) | |
492 | + | then { | |
493 | + | let hujabra = (result - amountIn) | |
494 | + | let retu = amountIn | |
485 | 495 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
486 | - | } | |
487 | - | else throw(((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
496 | + | } | |
497 | + | else throw(((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
498 | + | else throw("Strict value is not equal to itself.") | |
499 | + | } | |
488 | 500 | else throw("Strict value is not equal to itself.") | |
489 | 501 | } | |
490 | - | else throw(" | |
491 | - | | |
492 | - | | |
493 | - | | |
494 | - | | |
495 | - | | |
496 | - | | |
497 | - | | |
502 | + | else throw(((((((((((((("Ooops, REJECT2_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", 2: ") + toString(nb2)) + ", min2: ") + toString(minim2)) + ", out: ") + "0") + ", min: ") + toString(minim))) | |
503 | + | else throw("Strict value is not equal to itself.") | |
504 | + | } | |
505 | + | else throw("Strict value is not equal to itself.") | |
506 | + | } | |
507 | + | else throw("Strict value is not equal to itself.") | |
508 | + | } | |
509 | + | else throw(((((((((("Ooops, REJECT1_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", out: ") + "0") + ", min: ") + toString(minim))) | |
498 | 510 | else throw("Strict value is not equal to itself.") | |
499 | 511 | } | |
500 | 512 | else throw("Strict value is not equal to itself.") | |
517 | 529 | let assetIn = getAssetId(pmt.assetId) | |
518 | 530 | let amountIn = value(pmt.amount) | |
519 | 531 | let arr = split(d, "|") | |
520 | - | let $t01687117027 = $Tuple12(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]) | |
521 | - | let a1 = $t01687117027._1 | |
522 | - | let p1 = $t01687117027._2 | |
523 | - | let p1t = $t01687117027._3 | |
524 | - | let a2 = $t01687117027._4 | |
525 | - | let p2 = $t01687117027._5 | |
526 | - | let p2t = $t01687117027._6 | |
527 | - | let a3 = $t01687117027._7 | |
528 | - | let p3 = $t01687117027._8 | |
529 | - | let p3t = $t01687117027._9 | |
530 | - | let p4 = $t01687117027._10 | |
531 | - | let p4t = $t01687117027._11 | |
532 | - | let m = $t01687117027._12 | |
532 | + | let $t01838118563 = $Tuple14(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11], arr[12], arr[13]) | |
533 | + | let a1 = $t01838118563._1 | |
534 | + | let p1 = $t01838118563._2 | |
535 | + | let p1t = $t01838118563._3 | |
536 | + | let a2 = $t01838118563._4 | |
537 | + | let p2 = $t01838118563._5 | |
538 | + | let p2t = $t01838118563._6 | |
539 | + | let a3 = $t01838118563._7 | |
540 | + | let p3 = $t01838118563._8 | |
541 | + | let p3t = $t01838118563._9 | |
542 | + | let p4 = $t01838118563._10 | |
543 | + | let p4t = $t01838118563._11 | |
544 | + | let m = $t01838118563._12 | |
545 | + | let m1 = $t01838118563._13 | |
546 | + | let m2 = $t01838118563._14 | |
533 | 547 | let minim = parseIntValue(m) | |
548 | + | let minim1 = parseIntValue(m1) | |
549 | + | let minim2 = parseIntValue(m2) | |
534 | 550 | let a1_bef = myBalance(getAssetBytes(a1)) | |
535 | 551 | if ((a1_bef == a1_bef)) | |
536 | 552 | then { | |
548 | 564 | then { | |
549 | 565 | let a2_bef = myBalance(getAssetBytes(a2)) | |
550 | 566 | if ((a2_bef == a2_bef)) | |
551 | - | then { | |
552 | - | let s2 = if ((p2t == "p")) | |
553 | - | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
554 | - | else if ((p2t == "s")) | |
555 | - | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
556 | - | else if ((p2t == "w")) | |
557 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
558 | - | else throw("Unknown pool type") | |
559 | - | if ((s2 == s2)) | |
560 | - | then { | |
561 | - | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
562 | - | if ((nb2 == nb2)) | |
563 | - | then { | |
564 | - | let a3_bef = myBalance(getAssetBytes(a3)) | |
565 | - | if ((a3_bef == a3_bef)) | |
566 | - | then { | |
567 | - | let s3 = if ((p3t == "p")) | |
568 | - | then invoke(Address(fromBase58String(p3)), "swap", [a3, 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
569 | - | else if ((p3t == "s")) | |
570 | - | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
571 | - | else if ((p3t == "w")) | |
572 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a3, toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
573 | - | else throw("Unknown pool type") | |
574 | - | if ((s3 == s3)) | |
567 | + | then if ((nb1 >= minim1)) | |
568 | + | then { | |
569 | + | let s2 = if ((p2t == "p")) | |
570 | + | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
571 | + | else if ((p2t == "s")) | |
572 | + | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
573 | + | else if ((p2t == "w")) | |
574 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
575 | + | else throw("Unknown pool type") | |
576 | + | if ((s2 == s2)) | |
577 | + | then { | |
578 | + | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
579 | + | if ((nb2 == nb2)) | |
580 | + | then { | |
581 | + | let a3_bef = myBalance(getAssetBytes(a3)) | |
582 | + | if ((a3_bef == a3_bef)) | |
583 | + | then if ((nb2 >= minim2)) | |
575 | 584 | then { | |
576 | - | let nb3 = (myBalance(getAssetBytes(a3)) - a3_bef) | |
577 | - | if ((nb3 == nb3)) | |
585 | + | let s3 = if ((p3t == "p")) | |
586 | + | then invoke(Address(fromBase58String(p3)), "swap", [a3, 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
587 | + | else if ((p3t == "s")) | |
588 | + | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
589 | + | else if ((p3t == "w")) | |
590 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a3, toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
591 | + | else throw("Unknown pool type") | |
592 | + | if ((s3 == s3)) | |
578 | 593 | then { | |
579 | - | let | |
580 | - | if (( | |
594 | + | let nb3 = (myBalance(getAssetBytes(a3)) - a3_bef) | |
595 | + | if ((nb3 == nb3)) | |
581 | 596 | then { | |
582 | - | let s4 = if ((p4t == "p")) | |
583 | - | then invoke(Address(fromBase58String(p4)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
584 | - | else if ((p4t == "s")) | |
585 | - | then invoke(Address(fromBase58String(p4)), "exchange", [1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
586 | - | else if ((p4t == "w")) | |
587 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
588 | - | else throw("Unknown pool type") | |
589 | - | if ((s4 == s4)) | |
597 | + | let a_base_bef = myBalance(assetIn) | |
598 | + | if ((a_base_bef == a_base_bef)) | |
590 | 599 | then { | |
591 | - | let result = (myBalance(assetIn) - a_base_bef) | |
592 | - | if ((result == result)) | |
593 | - | then if ((result > minim)) | |
594 | - | then { | |
595 | - | let hujabra = (result - amountIn) | |
596 | - | let retu = amountIn | |
600 | + | let s4 = if ((p4t == "p")) | |
601 | + | then invoke(Address(fromBase58String(p4)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
602 | + | else if ((p4t == "s")) | |
603 | + | then invoke(Address(fromBase58String(p4)), "exchange", [1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
604 | + | else if ((p4t == "w")) | |
605 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
606 | + | else throw("Unknown pool type") | |
607 | + | if ((s4 == s4)) | |
608 | + | then { | |
609 | + | let result = (myBalance(assetIn) - a_base_bef) | |
610 | + | if ((result == result)) | |
611 | + | then if ((result > minim)) | |
612 | + | then { | |
613 | + | let hujabra = (result - amountIn) | |
614 | + | let retu = amountIn | |
597 | 615 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
598 | - | } | |
599 | - | else throw(((((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", 3: ") + toString(nb3)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
616 | + | } | |
617 | + | else throw(((((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", 3: ") + toString(nb3)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
618 | + | else throw("Strict value is not equal to itself.") | |
619 | + | } | |
600 | 620 | else throw("Strict value is not equal to itself.") | |
601 | 621 | } | |
602 | 622 | else throw("Strict value is not equal to itself.") | |
605 | 625 | } | |
606 | 626 | else throw("Strict value is not equal to itself.") | |
607 | 627 | } | |
608 | - | else throw(" | |
609 | - | | |
610 | - | | |
611 | - | | |
612 | - | | |
613 | - | | |
614 | - | | |
615 | - | | |
628 | + | else throw(((((((((((((((("Ooops, REJECT2_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", 2: ") + toString(nb2)) + ", min2: ") + toString(minim2)) + ", 3: ") + "0") + ", out: ") + "0") + ", min: ") + toString(minim))) | |
629 | + | else throw("Strict value is not equal to itself.") | |
630 | + | } | |
631 | + | else throw("Strict value is not equal to itself.") | |
632 | + | } | |
633 | + | else throw("Strict value is not equal to itself.") | |
634 | + | } | |
635 | + | else throw(((((((((((((("Ooops, REJECT1_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", 2: ") + "0") + ", 3: ") + "0") + ", out: ") + "0") + ", min: ") + toString(minim))) | |
616 | 636 | else throw("Strict value is not equal to itself.") | |
617 | 637 | } | |
618 | 638 | else throw("Strict value is not equal to itself.") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let ruler_test = "BgxpCm4wxbW8SKLPKZnf4KU2D6ZU29ov8MgZrkaSAqpY" | |
5 | 5 | ||
6 | 6 | let ruler = "7zNUJBVoPMBCRstP3R1AvxhxrN51SQkn5BMi2iJ9ciAd" | |
7 | 7 | ||
8 | 8 | let ruler2 = "9fe67ewzxtaLozePZ2U3SG71ZQFyGLAXWmmmHREpFeMC" | |
9 | 9 | ||
10 | 10 | let ruler3 = "Ao2qijQVvvZZSgRzKoYyJ9kBxYjsPQ37CdUppdJtT6V1" | |
11 | 11 | ||
12 | 12 | let ruler4 = "3PSK7b6bMf1gBDvjHRbGQ9zGc68UireqBj2eubVi1q5r" | |
13 | 13 | ||
14 | 14 | let ruler5 = "66rCv9dfdouqQ3SRG9XrKnRiFmMbwkZQgmhS1ftnCtqm" | |
15 | 15 | ||
16 | 16 | let ruler6 = "FeMX6hQaRKsLski77xVHHDGRkj9VuJzmP2MACbAWDjDK" | |
17 | 17 | ||
18 | 18 | let ruler7 = "7xDEQ7JZNL1ZLLqcySUb1WWijG1X3GDWG35QxyNqbxxi" | |
19 | 19 | ||
20 | 20 | let ruler8 = "GX5k1Cpuhnv9oP9VnWMSXBrJusakU5P3KzqQW5e7Pjgd" | |
21 | 21 | ||
22 | 22 | let abracadbra = base58'9wFjTx4rK6ZxfHa3z65BHhP6A7gkZLioxVrD4p2Frjjn' | |
23 | 23 | ||
24 | 24 | func vip (kkk) = if (if (if (if (if (if (if (if ((kkk == ruler)) | |
25 | 25 | then true | |
26 | 26 | else (kkk == ruler2)) | |
27 | 27 | then true | |
28 | 28 | else (kkk == ruler3)) | |
29 | 29 | then true | |
30 | 30 | else (kkk == ruler4)) | |
31 | 31 | then true | |
32 | 32 | else (kkk == ruler5)) | |
33 | 33 | then true | |
34 | 34 | else (kkk == ruler6)) | |
35 | 35 | then true | |
36 | 36 | else (kkk == ruler7)) | |
37 | 37 | then true | |
38 | 38 | else (kkk == ruler8)) | |
39 | 39 | then true | |
40 | 40 | else false | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func getAssetId (pmt) = match pmt { | |
44 | 44 | case p: ByteVector => | |
45 | 45 | pmt | |
46 | 46 | case _ => | |
47 | 47 | unit | |
48 | 48 | } | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func getAssetString (assetId) = match assetId { | |
52 | 52 | case b: ByteVector => | |
53 | 53 | toBase58String(b) | |
54 | 54 | case _ => | |
55 | 55 | "WAVES" | |
56 | 56 | } | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | func getAccBalance (assetId) = if ((assetId == "WAVES")) | |
60 | 60 | then wavesBalance(this).available | |
61 | 61 | else assetBalance(this, fromBase58String(assetId)) | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | func getAssetBytes (assetId) = if ((assetId == "WAVES")) | |
65 | 65 | then unit | |
66 | 66 | else fromBase58String(assetId) | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | func myBalance (assetId) = match assetId { | |
70 | 70 | case b: ByteVector => | |
71 | 71 | assetBalance(this, b) | |
72 | 72 | case _ => | |
73 | 73 | wavesBalance(this).available | |
74 | 74 | } | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | @Callable(i) | |
78 | 78 | func test () = $Tuple2(nil, "") | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | ||
82 | 82 | @Callable(i) | |
83 | 83 | func fake (a_in,amount,a_out,po,po_ty,wx_lp_asset_id,is_stable) = { | |
84 | 84 | let assetIn = getAssetBytes(a_in) | |
85 | 85 | let amountIn = amount | |
86 | 86 | let putOp = if (is_stable) | |
87 | 87 | then "putOneTknV2" | |
88 | 88 | else "putOneTkn" | |
89 | 89 | let getOp = if (is_stable) | |
90 | 90 | then "getOneTknV2" | |
91 | 91 | else "getOneTkn" | |
92 | 92 | let amount_bef_asset_out = myBalance(getAssetBytes(a_out)) | |
93 | 93 | if ((amount_bef_asset_out == amount_bef_asset_out)) | |
94 | 94 | then { | |
95 | 95 | let entry1 = if ((po_ty == "p")) | |
96 | 96 | then invoke(Address(fromBase58String(po)), "swap", [a_out, 1], [AttachedPayment(assetIn, amountIn)]) | |
97 | 97 | else if ((po_ty == "s")) | |
98 | 98 | then invoke(Address(fromBase58String(po)), "exchange", [1], [AttachedPayment(assetIn, amountIn)]) | |
99 | 99 | else { | |
100 | 100 | let put = invoke(Address(fromBase58String(po)), putOp, [1, false], [AttachedPayment(assetIn, amountIn)]) | |
101 | 101 | if ((put == put)) | |
102 | 102 | then { | |
103 | 103 | let wx_lp_asset = getAssetBytes(wx_lp_asset_id) | |
104 | 104 | let lpBalance = myBalance(wx_lp_asset) | |
105 | 105 | if ((lpBalance == lpBalance)) | |
106 | 106 | then invoke(Address(fromBase58String(po)), getOp, [a_out, 1], [AttachedPayment(wx_lp_asset, lpBalance)]) | |
107 | 107 | else throw("Strict value is not equal to itself.") | |
108 | 108 | } | |
109 | 109 | else throw("Strict value is not equal to itself.") | |
110 | 110 | } | |
111 | 111 | if ((entry1 == entry1)) | |
112 | 112 | then { | |
113 | 113 | let amount_after_asset_out = myBalance(getAssetBytes(a_out)) | |
114 | 114 | if ((amount_after_asset_out == amount_after_asset_out)) | |
115 | 115 | then { | |
116 | 116 | let resu = (amount_after_asset_out - amount_bef_asset_out) | |
117 | 117 | throw(toString(resu)) | |
118 | 118 | } | |
119 | 119 | else throw("Strict value is not equal to itself.") | |
120 | 120 | } | |
121 | 121 | else throw("Strict value is not equal to itself.") | |
122 | 122 | } | |
123 | 123 | else throw("Strict value is not equal to itself.") | |
124 | 124 | } | |
125 | 125 | ||
126 | 126 | ||
127 | 127 | ||
128 | 128 | @Callable(i) | |
129 | 129 | func trade_w (a,ao,p1,p1t,wx_lp_asset_id_1,is_stable_1,p2,p2t,min,wx_lp_asset_id_2,is_stable_2) = { | |
130 | 130 | let callerPbk = toBase58String(i.callerPublicKey) | |
131 | 131 | if (!(vip(callerPbk))) | |
132 | 132 | then throw("No-no-no") | |
133 | 133 | else { | |
134 | 134 | let pmt = i.payments[0] | |
135 | 135 | let assetIn = getAssetId(pmt.assetId) | |
136 | 136 | let amountIn = value(pmt.amount) | |
137 | 137 | let amount_bef_asset1 = myBalance(getAssetBytes(a)) | |
138 | 138 | if ((amount_bef_asset1 == amount_bef_asset1)) | |
139 | 139 | then { | |
140 | 140 | let putOp1 = if (is_stable_1) | |
141 | 141 | then "putOneTknV2" | |
142 | 142 | else "putOneTkn" | |
143 | 143 | let getOp1 = if (is_stable_1) | |
144 | 144 | then "getOneTknV2" | |
145 | 145 | else "getOneTkn" | |
146 | 146 | let putOp2 = if (is_stable_2) | |
147 | 147 | then "putOneTknV2" | |
148 | 148 | else "putOneTkn" | |
149 | 149 | let getOp2 = if (is_stable_2) | |
150 | 150 | then "getOneTknV2" | |
151 | 151 | else "getOneTkn" | |
152 | 152 | let entry1 = if ((p1t == "p")) | |
153 | 153 | then invoke(Address(fromBase58String(p1)), "swap", [a, 1], [AttachedPayment(assetIn, amountIn)]) | |
154 | 154 | else if ((p1t == "s")) | |
155 | 155 | then invoke(Address(fromBase58String(p1)), "exchange", [1], [AttachedPayment(assetIn, amountIn)]) | |
156 | 156 | else { | |
157 | 157 | let put = invoke(Address(fromBase58String(p1)), putOp1, [1, false], [AttachedPayment(assetIn, amountIn)]) | |
158 | 158 | if ((put == put)) | |
159 | 159 | then { | |
160 | 160 | let wx_lp_asset_1 = getAssetBytes(wx_lp_asset_id_1) | |
161 | 161 | let lpBalance_1 = myBalance(wx_lp_asset_1) | |
162 | 162 | if ((lpBalance_1 == lpBalance_1)) | |
163 | 163 | then invoke(Address(fromBase58String(p1)), getOp1, [a, 1], [AttachedPayment(wx_lp_asset_1, lpBalance_1)]) | |
164 | 164 | else throw("Strict value is not equal to itself.") | |
165 | 165 | } | |
166 | 166 | else throw("Strict value is not equal to itself.") | |
167 | 167 | } | |
168 | 168 | if ((entry1 == entry1)) | |
169 | 169 | then { | |
170 | 170 | let nb = (myBalance(getAssetBytes(a)) - amount_bef_asset1) | |
171 | 171 | if ((nb == nb)) | |
172 | 172 | then { | |
173 | 173 | let amount_bef_base_asset = myBalance(getAssetBytes(ao)) | |
174 | 174 | if ((amount_bef_base_asset == amount_bef_base_asset)) | |
175 | 175 | then { | |
176 | 176 | let entry2 = if ((p2t == "p")) | |
177 | 177 | then invoke(Address(fromBase58String(p2)), "swap", [ao, 1], [AttachedPayment(getAssetBytes(a), nb)]) | |
178 | 178 | else if ((p2t == "s")) | |
179 | 179 | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a), nb)]) | |
180 | 180 | else { | |
181 | 181 | let put = invoke(Address(fromBase58String(p2)), putOp2, [1, false], [AttachedPayment(getAssetBytes(a), nb)]) | |
182 | 182 | if ((put == put)) | |
183 | 183 | then { | |
184 | 184 | let wx_lp_asset_2 = getAssetBytes(wx_lp_asset_id_2) | |
185 | 185 | let lpBalance_2 = myBalance(wx_lp_asset_2) | |
186 | 186 | if ((lpBalance_2 == lpBalance_2)) | |
187 | 187 | then invoke(Address(fromBase58String(p2)), getOp2, [ao, 1], [AttachedPayment(wx_lp_asset_2, lpBalance_2)]) | |
188 | 188 | else throw("Strict value is not equal to itself.") | |
189 | 189 | } | |
190 | 190 | else throw("Strict value is not equal to itself.") | |
191 | 191 | } | |
192 | 192 | if ((entry2 == entry2)) | |
193 | 193 | then { | |
194 | 194 | let nb2 = (myBalance(getAssetBytes(ao)) - amount_bef_base_asset) | |
195 | 195 | if ((nb2 == nb2)) | |
196 | 196 | then if ((nb2 > min)) | |
197 | 197 | then { | |
198 | 198 | let hujabra = (nb2 - amountIn) | |
199 | 199 | let retu = amountIn | |
200 | 200 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
201 | 201 | } | |
202 | 202 | else throw(((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb)) + ", out: ") + toString(nb2)) + ", min: ") + toString(min))) | |
203 | 203 | else throw("Strict value is not equal to itself.") | |
204 | 204 | } | |
205 | 205 | else throw("Strict value is not equal to itself.") | |
206 | 206 | } | |
207 | 207 | else throw("Strict value is not equal to itself.") | |
208 | 208 | } | |
209 | 209 | else throw("Strict value is not equal to itself.") | |
210 | 210 | } | |
211 | 211 | else throw("Strict value is not equal to itself.") | |
212 | 212 | } | |
213 | 213 | else throw("Strict value is not equal to itself.") | |
214 | 214 | } | |
215 | 215 | } | |
216 | 216 | ||
217 | 217 | ||
218 | 218 | ||
219 | 219 | @Callable(i) | |
220 | 220 | func triptrade_w (a,a2,p1,p1t,wx_lp_asset_id_1,is_stable_1,p2,p2t,wx_lp_asset_id_2,is_stable_2,p3,p3t,min,wx_lp_asset_id_3,is_stable_3) = { | |
221 | 221 | let callerPbk = toBase58String(i.callerPublicKey) | |
222 | 222 | if (!(vip(callerPbk))) | |
223 | 223 | then throw("No-no-no") | |
224 | 224 | else { | |
225 | 225 | let pmt = i.payments[0] | |
226 | 226 | let assetIn = getAssetId(pmt.assetId) | |
227 | 227 | let amountIn = value(pmt.amount) | |
228 | 228 | let amount_bef_asset1 = myBalance(getAssetBytes(a)) | |
229 | 229 | if ((amount_bef_asset1 == amount_bef_asset1)) | |
230 | 230 | then { | |
231 | 231 | let putOp1 = if (is_stable_1) | |
232 | 232 | then "putOneTknV2" | |
233 | 233 | else "putOneTkn" | |
234 | 234 | let getOp1 = if (is_stable_1) | |
235 | 235 | then "getOneTknV2" | |
236 | 236 | else "getOneTkn" | |
237 | 237 | let putOp2 = if (is_stable_2) | |
238 | 238 | then "putOneTknV2" | |
239 | 239 | else "putOneTkn" | |
240 | 240 | let getOp2 = if (is_stable_2) | |
241 | 241 | then "getOneTknV2" | |
242 | 242 | else "getOneTkn" | |
243 | 243 | let putOp3 = if (is_stable_3) | |
244 | 244 | then "putOneTknV2" | |
245 | 245 | else "putOneTkn" | |
246 | 246 | let getOp3 = if (is_stable_3) | |
247 | 247 | then "getOneTknV2" | |
248 | 248 | else "getOneTkn" | |
249 | 249 | let entry1 = if ((p1t == "p")) | |
250 | 250 | then invoke(Address(fromBase58String(p1)), "swap", [a, 1], [AttachedPayment(assetIn, amountIn)]) | |
251 | 251 | else if ((p1t == "s")) | |
252 | 252 | then invoke(Address(fromBase58String(p1)), "exchange", [1], [AttachedPayment(assetIn, amountIn)]) | |
253 | 253 | else { | |
254 | 254 | let put1 = invoke(Address(fromBase58String(p1)), putOp1, [1, false], [AttachedPayment(assetIn, amountIn)]) | |
255 | 255 | if ((put1 == put1)) | |
256 | 256 | then { | |
257 | 257 | let wx_lp_asset_1 = getAssetBytes(wx_lp_asset_id_1) | |
258 | 258 | let lpBalance_1 = myBalance(wx_lp_asset_1) | |
259 | 259 | if ((lpBalance_1 == lpBalance_1)) | |
260 | 260 | then invoke(Address(fromBase58String(p1)), getOp1, [a, 1], [AttachedPayment(wx_lp_asset_1, lpBalance_1)]) | |
261 | 261 | else throw("Strict value is not equal to itself.") | |
262 | 262 | } | |
263 | 263 | else throw("Strict value is not equal to itself.") | |
264 | 264 | } | |
265 | 265 | if ((entry1 == entry1)) | |
266 | 266 | then { | |
267 | 267 | let nb = (myBalance(getAssetBytes(a)) - amount_bef_asset1) | |
268 | 268 | if ((nb == nb)) | |
269 | 269 | then { | |
270 | 270 | let amount_bef_asset2 = myBalance(getAssetBytes(a2)) | |
271 | 271 | if ((amount_bef_asset2 == amount_bef_asset2)) | |
272 | 272 | then { | |
273 | 273 | let entry2 = if ((p2t == "p")) | |
274 | 274 | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a), nb)]) | |
275 | 275 | else if ((p2t == "s")) | |
276 | 276 | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a), nb)]) | |
277 | 277 | else { | |
278 | 278 | let put2 = invoke(Address(fromBase58String(p2)), putOp2, [1, false], [AttachedPayment(getAssetBytes(a), nb)]) | |
279 | 279 | if ((put2 == put2)) | |
280 | 280 | then { | |
281 | 281 | let wx_lp_asset_2 = getAssetBytes(wx_lp_asset_id_2) | |
282 | 282 | let lpBalance_2 = myBalance(wx_lp_asset_2) | |
283 | 283 | if ((lpBalance_2 == lpBalance_2)) | |
284 | 284 | then invoke(Address(fromBase58String(p2)), getOp2, [a2, 1], [AttachedPayment(wx_lp_asset_2, lpBalance_2)]) | |
285 | 285 | else throw("Strict value is not equal to itself.") | |
286 | 286 | } | |
287 | 287 | else throw("Strict value is not equal to itself.") | |
288 | 288 | } | |
289 | 289 | if ((entry2 == entry2)) | |
290 | 290 | then { | |
291 | 291 | let amount_bef_base_asset = myBalance(assetIn) | |
292 | 292 | if ((amount_bef_base_asset == amount_bef_base_asset)) | |
293 | 293 | then { | |
294 | 294 | let nb2 = (myBalance(getAssetBytes(a2)) - amount_bef_asset2) | |
295 | 295 | if ((nb2 == nb2)) | |
296 | 296 | then { | |
297 | 297 | let entry3 = if ((p3t == "p")) | |
298 | 298 | then invoke(Address(fromBase58String(p3)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
299 | 299 | else if ((p3t == "s")) | |
300 | 300 | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
301 | 301 | else { | |
302 | 302 | let put3 = invoke(Address(fromBase58String(p3)), putOp3, [1, false], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
303 | 303 | if ((put3 == put3)) | |
304 | 304 | then { | |
305 | 305 | let wx_lp_asset_3 = getAssetBytes(wx_lp_asset_id_3) | |
306 | 306 | let lpBalance_3 = myBalance(wx_lp_asset_3) | |
307 | 307 | if ((lpBalance_3 == lpBalance_3)) | |
308 | 308 | then invoke(Address(fromBase58String(p3)), getOp3, [getAssetString(assetIn), 1], [AttachedPayment(wx_lp_asset_3, lpBalance_3)]) | |
309 | 309 | else throw("Strict value is not equal to itself.") | |
310 | 310 | } | |
311 | 311 | else throw("Strict value is not equal to itself.") | |
312 | 312 | } | |
313 | 313 | if ((entry3 == entry3)) | |
314 | 314 | then { | |
315 | 315 | let nb3 = (myBalance(assetIn) - amount_bef_base_asset) | |
316 | 316 | if ((nb3 == nb3)) | |
317 | 317 | then if ((nb3 > min)) | |
318 | 318 | then { | |
319 | 319 | let hujabra = (nb3 - amountIn) | |
320 | 320 | let retu = amountIn | |
321 | 321 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
322 | 322 | } | |
323 | 323 | else throw(((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb)) + ", 2: ") + toString(nb2)) + ", out: ") + toString(nb3)) + ", min: ") + toString(min))) | |
324 | 324 | else throw("Strict value is not equal to itself.") | |
325 | 325 | } | |
326 | 326 | else throw("Strict value is not equal to itself.") | |
327 | 327 | } | |
328 | 328 | else throw("Strict value is not equal to itself.") | |
329 | 329 | } | |
330 | 330 | else throw("Strict value is not equal to itself.") | |
331 | 331 | } | |
332 | 332 | else throw("Strict value is not equal to itself.") | |
333 | 333 | } | |
334 | 334 | else throw("Strict value is not equal to itself.") | |
335 | 335 | } | |
336 | 336 | else throw("Strict value is not equal to itself.") | |
337 | 337 | } | |
338 | 338 | else throw("Strict value is not equal to itself.") | |
339 | 339 | } | |
340 | 340 | else throw("Strict value is not equal to itself.") | |
341 | 341 | } | |
342 | 342 | } | |
343 | 343 | ||
344 | 344 | ||
345 | 345 | ||
346 | 346 | @Callable(i) | |
347 | 347 | func a (d) = { | |
348 | 348 | let callerPbk = toBase58String(i.callerPublicKey) | |
349 | 349 | if (!(vip(callerPbk))) | |
350 | 350 | then throw("No-no-no") | |
351 | 351 | else { | |
352 | 352 | let pmt = i.payments[0] | |
353 | 353 | let assetIn = getAssetId(pmt.assetId) | |
354 | 354 | let amountIn = value(pmt.amount) | |
355 | 355 | let arr = split(d, "|") | |
356 | - | let $t01174311823 = $Tuple6(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]) | |
357 | - | let a1 = $t01174311823._1 | |
358 | - | let p1 = $t01174311823._2 | |
359 | - | let p1t = $t01174311823._3 | |
360 | - | let p2 = $t01174311823._4 | |
361 | - | let p2t = $t01174311823._5 | |
362 | - | let m = $t01174311823._6 | |
356 | + | let $t01201812110 = $Tuple7(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6]) | |
357 | + | let a1 = $t01201812110._1 | |
358 | + | let p1 = $t01201812110._2 | |
359 | + | let p1t = $t01201812110._3 | |
360 | + | let p2 = $t01201812110._4 | |
361 | + | let p2t = $t01201812110._5 | |
362 | + | let m = $t01201812110._6 | |
363 | + | let m1 = $t01201812110._7 | |
363 | 364 | let minim = parseIntValue(m) | |
365 | + | let minim1 = parseIntValue(m1) | |
364 | 366 | let a1_bef = myBalance(getAssetBytes(a1)) | |
365 | 367 | if ((a1_bef == a1_bef)) | |
366 | 368 | then { | |
367 | 369 | let s1 = if ((p1t == "p")) | |
368 | 370 | then invoke(Address(fromBase58String(p1)), "swap", [a1, 1], [AttachedPayment(assetIn, amountIn)]) | |
369 | 371 | else if ((p1t == "s")) | |
370 | 372 | then invoke(Address(fromBase58String(p1)), "exchange", [1], [AttachedPayment(assetIn, amountIn)]) | |
371 | 373 | else if ((p1t == "w")) | |
372 | 374 | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a1, toString(this)], [AttachedPayment(assetIn, amountIn)]) | |
373 | 375 | else throw("Unknown pool type") | |
374 | 376 | if ((s1 == s1)) | |
375 | 377 | then { | |
376 | 378 | let nb1 = (myBalance(getAssetBytes(a1)) - a1_bef) | |
377 | 379 | if ((nb1 == nb1)) | |
378 | 380 | then { | |
379 | 381 | let a_base_bef = myBalance(assetIn) | |
380 | 382 | if ((a_base_bef == a_base_bef)) | |
381 | - | then { | |
382 | - | let s2 = if ((p2t == "p")) | |
383 | - | then invoke(Address(fromBase58String(p2)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
384 | - | else if ((p2t == "s")) | |
385 | - | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
386 | - | else if ((p2t == "w")) | |
387 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
388 | - | else throw("Unknown pool type") | |
389 | - | if ((s2 == s2)) | |
390 | - | then { | |
391 | - | let result = (myBalance(assetIn) - a_base_bef) | |
392 | - | if ((result == result)) | |
393 | - | then if ((result > minim)) | |
394 | - | then { | |
395 | - | let hujabra = (result - amountIn) | |
396 | - | let retu = amountIn | |
383 | + | then if ((nb1 >= minim1)) | |
384 | + | then { | |
385 | + | let s2 = if ((p2t == "p")) | |
386 | + | then invoke(Address(fromBase58String(p2)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
387 | + | else if ((p2t == "s")) | |
388 | + | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
389 | + | else if ((p2t == "w")) | |
390 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
391 | + | else throw("Unknown pool type") | |
392 | + | if ((s2 == s2)) | |
393 | + | then { | |
394 | + | let result = (myBalance(assetIn) - a_base_bef) | |
395 | + | if ((result == result)) | |
396 | + | then if ((result > minim)) | |
397 | + | then { | |
398 | + | let hujabra = (result - amountIn) | |
399 | + | let retu = amountIn | |
397 | 400 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
398 | - | } | |
399 | - | else throw(((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
400 | - | else throw("Strict value is not equal to itself.") | |
401 | - | } | |
402 | - | else throw("Strict value is not equal to itself.") | |
403 | - | } | |
401 | + | } | |
402 | + | else throw(((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
403 | + | else throw("Strict value is not equal to itself.") | |
404 | + | } | |
405 | + | else throw("Strict value is not equal to itself.") | |
406 | + | } | |
407 | + | else throw(((((((("Ooops, REJECT1_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", min: ") + toString(minim))) | |
404 | 408 | else throw("Strict value is not equal to itself.") | |
405 | 409 | } | |
406 | 410 | else throw("Strict value is not equal to itself.") | |
407 | 411 | } | |
408 | 412 | else throw("Strict value is not equal to itself.") | |
409 | 413 | } | |
410 | 414 | else throw("Strict value is not equal to itself.") | |
411 | 415 | } | |
412 | 416 | } | |
413 | 417 | ||
414 | 418 | ||
415 | 419 | ||
416 | 420 | @Callable(i) | |
417 | 421 | func b (d) = { | |
418 | 422 | let callerPbk = toBase58String(i.callerPublicKey) | |
419 | 423 | if (!(vip(callerPbk))) | |
420 | 424 | then throw("No-no-no") | |
421 | 425 | else { | |
422 | 426 | let pmt = i.payments[0] | |
423 | 427 | let assetIn = getAssetId(pmt.assetId) | |
424 | 428 | let amountIn = value(pmt.amount) | |
425 | 429 | let arr = split(d, "|") | |
426 | - | let $t01392814045 = $Tuple9(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]) | |
427 | - | let a1 = $t01392814045._1 | |
428 | - | let p1 = $t01392814045._2 | |
429 | - | let p1t = $t01392814045._3 | |
430 | - | let a2 = $t01392814045._4 | |
431 | - | let p2 = $t01392814045._5 | |
432 | - | let p2t = $t01392814045._6 | |
433 | - | let p3 = $t01392814045._7 | |
434 | - | let p3t = $t01392814045._8 | |
435 | - | let m = $t01392814045._9 | |
430 | + | let $t01457114713 = $Tuple11(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10]) | |
431 | + | let a1 = $t01457114713._1 | |
432 | + | let p1 = $t01457114713._2 | |
433 | + | let p1t = $t01457114713._3 | |
434 | + | let a2 = $t01457114713._4 | |
435 | + | let p2 = $t01457114713._5 | |
436 | + | let p2t = $t01457114713._6 | |
437 | + | let p3 = $t01457114713._7 | |
438 | + | let p3t = $t01457114713._8 | |
439 | + | let m = $t01457114713._9 | |
440 | + | let m1 = $t01457114713._10 | |
441 | + | let m2 = $t01457114713._11 | |
436 | 442 | let minim = parseIntValue(m) | |
443 | + | let minim1 = parseIntValue(m1) | |
444 | + | let minim2 = parseIntValue(m2) | |
437 | 445 | let a1_bef = myBalance(getAssetBytes(a1)) | |
438 | 446 | if ((a1_bef == a1_bef)) | |
439 | 447 | then { | |
440 | 448 | let s1 = if ((p1t == "p")) | |
441 | 449 | then invoke(Address(fromBase58String(p1)), "swap", [a1, 1], [AttachedPayment(assetIn, amountIn)]) | |
442 | 450 | else if ((p1t == "s")) | |
443 | 451 | then invoke(Address(fromBase58String(p1)), "exchange", [1], [AttachedPayment(assetIn, amountIn)]) | |
444 | 452 | else if ((p1t == "w")) | |
445 | 453 | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a1, toString(this)], [AttachedPayment(assetIn, amountIn)]) | |
446 | 454 | else throw("Unknown pool type") | |
447 | 455 | if ((s1 == s1)) | |
448 | 456 | then { | |
449 | 457 | let nb1 = (myBalance(getAssetBytes(a1)) - a1_bef) | |
450 | 458 | if ((nb1 == nb1)) | |
451 | 459 | then { | |
452 | 460 | let a2_bef = myBalance(getAssetBytes(a2)) | |
453 | 461 | if ((a2_bef == a2_bef)) | |
454 | - | then { | |
455 | - | let s2 = if ((p2t == "p")) | |
456 | - | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
457 | - | else if ((p2t == "s")) | |
458 | - | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
459 | - | else if ((p2t == "w")) | |
460 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
461 | - | else throw("Unknown pool type") | |
462 | - | if ((s2 == s2)) | |
463 | - | then { | |
464 | - | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
465 | - | if ((nb2 == nb2)) | |
466 | - | then { | |
467 | - | let a_base_bef = myBalance(assetIn) | |
468 | - | if ((a_base_bef == a_base_bef)) | |
469 | - | then { | |
470 | - | let s3 = if ((p3t == "p")) | |
471 | - | then invoke(Address(fromBase58String(p3)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
472 | - | else if ((p3t == "s")) | |
473 | - | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
474 | - | else if ((p3t == "w")) | |
475 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
476 | - | else throw("Unknown pool type") | |
477 | - | if ((s3 == s3)) | |
462 | + | then if ((nb1 >= minim1)) | |
463 | + | then { | |
464 | + | let s2 = if ((p2t == "p")) | |
465 | + | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
466 | + | else if ((p2t == "s")) | |
467 | + | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
468 | + | else if ((p2t == "w")) | |
469 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
470 | + | else throw("Unknown pool type") | |
471 | + | if ((s2 == s2)) | |
472 | + | then { | |
473 | + | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
474 | + | if ((nb2 == nb2)) | |
475 | + | then { | |
476 | + | let a_base_bef = myBalance(assetIn) | |
477 | + | if ((a_base_bef == a_base_bef)) | |
478 | + | then if ((nb2 >= minim2)) | |
478 | 479 | then { | |
479 | - | let result = (myBalance(assetIn) - a_base_bef) | |
480 | - | if ((result == result)) | |
481 | - | then if ((result > minim)) | |
482 | - | then { | |
483 | - | let hujabra = (result - amountIn) | |
484 | - | let retu = amountIn | |
480 | + | let s3 = if ((p3t == "p")) | |
481 | + | then invoke(Address(fromBase58String(p3)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
482 | + | else if ((p3t == "s")) | |
483 | + | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
484 | + | else if ((p3t == "w")) | |
485 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
486 | + | else throw("Unknown pool type") | |
487 | + | if ((s3 == s3)) | |
488 | + | then { | |
489 | + | let result = (myBalance(assetIn) - a_base_bef) | |
490 | + | if ((result == result)) | |
491 | + | then if ((result > minim)) | |
492 | + | then { | |
493 | + | let hujabra = (result - amountIn) | |
494 | + | let retu = amountIn | |
485 | 495 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
486 | - | } | |
487 | - | else throw(((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
496 | + | } | |
497 | + | else throw(((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
498 | + | else throw("Strict value is not equal to itself.") | |
499 | + | } | |
488 | 500 | else throw("Strict value is not equal to itself.") | |
489 | 501 | } | |
490 | - | else throw(" | |
491 | - | | |
492 | - | | |
493 | - | | |
494 | - | | |
495 | - | | |
496 | - | | |
497 | - | | |
502 | + | else throw(((((((((((((("Ooops, REJECT2_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", 2: ") + toString(nb2)) + ", min2: ") + toString(minim2)) + ", out: ") + "0") + ", min: ") + toString(minim))) | |
503 | + | else throw("Strict value is not equal to itself.") | |
504 | + | } | |
505 | + | else throw("Strict value is not equal to itself.") | |
506 | + | } | |
507 | + | else throw("Strict value is not equal to itself.") | |
508 | + | } | |
509 | + | else throw(((((((((("Ooops, REJECT1_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", out: ") + "0") + ", min: ") + toString(minim))) | |
498 | 510 | else throw("Strict value is not equal to itself.") | |
499 | 511 | } | |
500 | 512 | else throw("Strict value is not equal to itself.") | |
501 | 513 | } | |
502 | 514 | else throw("Strict value is not equal to itself.") | |
503 | 515 | } | |
504 | 516 | else throw("Strict value is not equal to itself.") | |
505 | 517 | } | |
506 | 518 | } | |
507 | 519 | ||
508 | 520 | ||
509 | 521 | ||
510 | 522 | @Callable(i) | |
511 | 523 | func c (d) = { | |
512 | 524 | let callerPbk = toBase58String(i.callerPublicKey) | |
513 | 525 | if (!(vip(callerPbk))) | |
514 | 526 | then throw("No-no-no") | |
515 | 527 | else { | |
516 | 528 | let pmt = i.payments[0] | |
517 | 529 | let assetIn = getAssetId(pmt.assetId) | |
518 | 530 | let amountIn = value(pmt.amount) | |
519 | 531 | let arr = split(d, "|") | |
520 | - | let $t01687117027 = $Tuple12(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]) | |
521 | - | let a1 = $t01687117027._1 | |
522 | - | let p1 = $t01687117027._2 | |
523 | - | let p1t = $t01687117027._3 | |
524 | - | let a2 = $t01687117027._4 | |
525 | - | let p2 = $t01687117027._5 | |
526 | - | let p2t = $t01687117027._6 | |
527 | - | let a3 = $t01687117027._7 | |
528 | - | let p3 = $t01687117027._8 | |
529 | - | let p3t = $t01687117027._9 | |
530 | - | let p4 = $t01687117027._10 | |
531 | - | let p4t = $t01687117027._11 | |
532 | - | let m = $t01687117027._12 | |
532 | + | let $t01838118563 = $Tuple14(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11], arr[12], arr[13]) | |
533 | + | let a1 = $t01838118563._1 | |
534 | + | let p1 = $t01838118563._2 | |
535 | + | let p1t = $t01838118563._3 | |
536 | + | let a2 = $t01838118563._4 | |
537 | + | let p2 = $t01838118563._5 | |
538 | + | let p2t = $t01838118563._6 | |
539 | + | let a3 = $t01838118563._7 | |
540 | + | let p3 = $t01838118563._8 | |
541 | + | let p3t = $t01838118563._9 | |
542 | + | let p4 = $t01838118563._10 | |
543 | + | let p4t = $t01838118563._11 | |
544 | + | let m = $t01838118563._12 | |
545 | + | let m1 = $t01838118563._13 | |
546 | + | let m2 = $t01838118563._14 | |
533 | 547 | let minim = parseIntValue(m) | |
548 | + | let minim1 = parseIntValue(m1) | |
549 | + | let minim2 = parseIntValue(m2) | |
534 | 550 | let a1_bef = myBalance(getAssetBytes(a1)) | |
535 | 551 | if ((a1_bef == a1_bef)) | |
536 | 552 | then { | |
537 | 553 | let s1 = if ((p1t == "p")) | |
538 | 554 | then invoke(Address(fromBase58String(p1)), "swap", [a1, 1], [AttachedPayment(assetIn, amountIn)]) | |
539 | 555 | else if ((p1t == "s")) | |
540 | 556 | then invoke(Address(fromBase58String(p1)), "exchange", [1], [AttachedPayment(assetIn, amountIn)]) | |
541 | 557 | else if ((p1t == "w")) | |
542 | 558 | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a1, toString(this)], [AttachedPayment(assetIn, amountIn)]) | |
543 | 559 | else throw("Unknown pool type") | |
544 | 560 | if ((s1 == s1)) | |
545 | 561 | then { | |
546 | 562 | let nb1 = (myBalance(getAssetBytes(a1)) - a1_bef) | |
547 | 563 | if ((nb1 == nb1)) | |
548 | 564 | then { | |
549 | 565 | let a2_bef = myBalance(getAssetBytes(a2)) | |
550 | 566 | if ((a2_bef == a2_bef)) | |
551 | - | then { | |
552 | - | let s2 = if ((p2t == "p")) | |
553 | - | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
554 | - | else if ((p2t == "s")) | |
555 | - | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
556 | - | else if ((p2t == "w")) | |
557 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
558 | - | else throw("Unknown pool type") | |
559 | - | if ((s2 == s2)) | |
560 | - | then { | |
561 | - | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
562 | - | if ((nb2 == nb2)) | |
563 | - | then { | |
564 | - | let a3_bef = myBalance(getAssetBytes(a3)) | |
565 | - | if ((a3_bef == a3_bef)) | |
566 | - | then { | |
567 | - | let s3 = if ((p3t == "p")) | |
568 | - | then invoke(Address(fromBase58String(p3)), "swap", [a3, 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
569 | - | else if ((p3t == "s")) | |
570 | - | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
571 | - | else if ((p3t == "w")) | |
572 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a3, toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
573 | - | else throw("Unknown pool type") | |
574 | - | if ((s3 == s3)) | |
567 | + | then if ((nb1 >= minim1)) | |
568 | + | then { | |
569 | + | let s2 = if ((p2t == "p")) | |
570 | + | then invoke(Address(fromBase58String(p2)), "swap", [a2, 1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
571 | + | else if ((p2t == "s")) | |
572 | + | then invoke(Address(fromBase58String(p2)), "exchange", [1], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
573 | + | else if ((p2t == "w")) | |
574 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a2, toString(this)], [AttachedPayment(getAssetBytes(a1), nb1)]) | |
575 | + | else throw("Unknown pool type") | |
576 | + | if ((s2 == s2)) | |
577 | + | then { | |
578 | + | let nb2 = (myBalance(getAssetBytes(a2)) - a2_bef) | |
579 | + | if ((nb2 == nb2)) | |
580 | + | then { | |
581 | + | let a3_bef = myBalance(getAssetBytes(a3)) | |
582 | + | if ((a3_bef == a3_bef)) | |
583 | + | then if ((nb2 >= minim2)) | |
575 | 584 | then { | |
576 | - | let nb3 = (myBalance(getAssetBytes(a3)) - a3_bef) | |
577 | - | if ((nb3 == nb3)) | |
585 | + | let s3 = if ((p3t == "p")) | |
586 | + | then invoke(Address(fromBase58String(p3)), "swap", [a3, 1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
587 | + | else if ((p3t == "s")) | |
588 | + | then invoke(Address(fromBase58String(p3)), "exchange", [1], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
589 | + | else if ((p3t == "w")) | |
590 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, a3, toString(this)], [AttachedPayment(getAssetBytes(a2), nb2)]) | |
591 | + | else throw("Unknown pool type") | |
592 | + | if ((s3 == s3)) | |
578 | 593 | then { | |
579 | - | let | |
580 | - | if (( | |
594 | + | let nb3 = (myBalance(getAssetBytes(a3)) - a3_bef) | |
595 | + | if ((nb3 == nb3)) | |
581 | 596 | then { | |
582 | - | let s4 = if ((p4t == "p")) | |
583 | - | then invoke(Address(fromBase58String(p4)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
584 | - | else if ((p4t == "s")) | |
585 | - | then invoke(Address(fromBase58String(p4)), "exchange", [1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
586 | - | else if ((p4t == "w")) | |
587 | - | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
588 | - | else throw("Unknown pool type") | |
589 | - | if ((s4 == s4)) | |
597 | + | let a_base_bef = myBalance(assetIn) | |
598 | + | if ((a_base_bef == a_base_bef)) | |
590 | 599 | then { | |
591 | - | let result = (myBalance(assetIn) - a_base_bef) | |
592 | - | if ((result == result)) | |
593 | - | then if ((result > minim)) | |
594 | - | then { | |
595 | - | let hujabra = (result - amountIn) | |
596 | - | let retu = amountIn | |
600 | + | let s4 = if ((p4t == "p")) | |
601 | + | then invoke(Address(fromBase58String(p4)), "swap", [getAssetString(assetIn), 1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
602 | + | else if ((p4t == "s")) | |
603 | + | then invoke(Address(fromBase58String(p4)), "exchange", [1], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
604 | + | else if ((p4t == "w")) | |
605 | + | then invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, getAssetString(assetIn), toString(this)], [AttachedPayment(getAssetBytes(a3), nb3)]) | |
606 | + | else throw("Unknown pool type") | |
607 | + | if ((s4 == s4)) | |
608 | + | then { | |
609 | + | let result = (myBalance(assetIn) - a_base_bef) | |
610 | + | if ((result == result)) | |
611 | + | then if ((result > minim)) | |
612 | + | then { | |
613 | + | let hujabra = (result - amountIn) | |
614 | + | let retu = amountIn | |
597 | 615 | [ScriptTransfer(i.caller, retu, assetIn), ScriptTransfer(addressFromPublicKey(abracadbra), hujabra, assetIn)] | |
598 | - | } | |
599 | - | else throw(((((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", 3: ") + toString(nb3)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
616 | + | } | |
617 | + | else throw(((((((((((("Ooops, in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", 2: ") + toString(nb2)) + ", 3: ") + toString(nb3)) + ", out: ") + toString(result)) + ", min: ") + toString(minim))) | |
618 | + | else throw("Strict value is not equal to itself.") | |
619 | + | } | |
600 | 620 | else throw("Strict value is not equal to itself.") | |
601 | 621 | } | |
602 | 622 | else throw("Strict value is not equal to itself.") | |
603 | 623 | } | |
604 | 624 | else throw("Strict value is not equal to itself.") | |
605 | 625 | } | |
606 | 626 | else throw("Strict value is not equal to itself.") | |
607 | 627 | } | |
608 | - | else throw(" | |
609 | - | | |
610 | - | | |
611 | - | | |
612 | - | | |
613 | - | | |
614 | - | | |
615 | - | | |
628 | + | else throw(((((((((((((((("Ooops, REJECT2_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", 2: ") + toString(nb2)) + ", min2: ") + toString(minim2)) + ", 3: ") + "0") + ", out: ") + "0") + ", min: ") + toString(minim))) | |
629 | + | else throw("Strict value is not equal to itself.") | |
630 | + | } | |
631 | + | else throw("Strict value is not equal to itself.") | |
632 | + | } | |
633 | + | else throw("Strict value is not equal to itself.") | |
634 | + | } | |
635 | + | else throw(((((((((((((("Ooops, REJECT1_in: " + toString(amountIn)) + ", 1: ") + toString(nb1)) + ", min1: ") + toString(minim1)) + ", 2: ") + "0") + ", 3: ") + "0") + ", out: ") + "0") + ", min: ") + toString(minim))) | |
616 | 636 | else throw("Strict value is not equal to itself.") | |
617 | 637 | } | |
618 | 638 | else throw("Strict value is not equal to itself.") | |
619 | 639 | } | |
620 | 640 | else throw("Strict value is not equal to itself.") | |
621 | 641 | } | |
622 | 642 | else throw("Strict value is not equal to itself.") | |
623 | 643 | } | |
624 | 644 | } | |
625 | 645 | ||
626 | 646 | ||
627 | 647 | @Verifier(tx) | |
628 | 648 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
629 | 649 |
github/deemru/w8io/786bc32 118.34 ms ◑