tx · CiGQmwzGbbqvXQQSW4gkFamMfbQWYDLTJrp3WXtPuxNu 3MyRvoZJL2s56N6TK8RX1iJZcCXZkc77hcX: -0.01600000 Waves 2023.11.23 20:34 [2856334] smart account 3MyRvoZJL2s56N6TK8RX1iJZcCXZkc77hcX > SELF 0.00000000 Waves
{ "type": 13, "id": "CiGQmwzGbbqvXQQSW4gkFamMfbQWYDLTJrp3WXtPuxNu", "fee": 1600000, "feeAssetId": null, "timestamp": 1700760837620, "version": 2, "chainId": 84, "sender": "3MyRvoZJL2s56N6TK8RX1iJZcCXZkc77hcX", "senderPublicKey": "Bj1Bhn537ibh7az2kjDvbHshLHPXpyCyHm3t4bFQQ73k", "proofs": [ "2x31YiaJvDyde1oDrjUreyg5sJfHC6irW47hNmrLC3aYvWqjHydxiVfPpT7tkA5hW3NjyywPZcEtAk44u7Tmx4uz" ], "script": "base64:BgIHCAISAwoBCEoAA3JleAIjM1BHRkh6VkdUNE5UaWd3Q0tQMU5jd29Ya29kVlp3dkJ1dVUADXN3b3BmaV9vcmFjbGUCIzNQRWJxVmlFUkNvS25tY1NVTGg2bjJhaU12VWRTUWRDc29tAAhwbF9wcm94eQIjM1BKRVNWRFRIUnY4aTgzWGJtSHJSR1FoRGM1cmdSM2F6UXMABG9yY2wCIzNQOGQxRTFCTEtvRDUyeTNiUUoxYkRUZDJURDFncGFMbjl0AApLX2FtX2FzX2lkAg8lc19fYW1vdW50QXNzZXQACktfcHJfYXNfaWQCDiVzX19wcmljZUFzc2V0AAVLX2FtcAIHJXNfX2FtcAAHS19zaGFyZQJEJXMlc19fc2hhcmVBc3NldEJhbGFuY2VfX1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcACEtfc3Rha2VkAholcyVzX19zdGFrZWRCYWxhbmNlX19XQVZFUwAJS19hX2FzX2lkAgpBX2Fzc2V0X2lkAAlLX2JfYXNfaWQCCkJfYXNzZXRfaWQACktfYV9hc19iYWwCD0FfYXNzZXRfYmFsYW5jZQAKS19iX2FzX2JhbAIPQl9hc3NldF9iYWxhbmNlAAVLX2ZlZQIKY29tbWlzc2lvbgALS19hc3NldF9pZHMCD3N0YXRpY190b2tlbklkcwAJS19mZWVfcHV6AgpzdGF0aWNfZmVlAApLX2ZlZVRva2VuAg9zdGF0aWNfZmVlVG9rZW4AC3Rzbl9zd2FwcGVyAiMzUEt6NWpuSkxvaEYyR2pTaFE3Ykc1SDRCZWJkb0E5OHpaMgAQdHNuX3N3YXBwZXJfYWRkcgkBB0FkZHJlc3MBCQDZBAEFC3Rzbl9zd2FwcGVyAAVrX2ZlZQIFa19mZWUACGtfcmViYXRlAghrX3JlYmF0ZQAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAD2tfZXhjZXNzQmFsYW5jZQIPa19leGNlc3NCYWxhbmNlAA1rX2ZyZWVCYWxhbmNlAg1rX2ZyZWVCYWxhbmNlABRrX21heFNwb3RVdGlsaXphdGlvbgIUa19tYXhTcG90VXRpbGl6YXRpb24ADWtfdG90YWxTdXBwbHkCDWtfdG90YWxTdXBwbHkABmtfcmF0ZQIGa19yYXRlAAhrX2JzQXN0UgIIa19ic0FzdFIACGtfYnNBc3RXAghrX2JzQXN0VwAIa19xdEFzdFICCGtfcXRBc3RSAAhrX3F0QXN0VwIIa19xdEFzdFcAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAQpnZXRfZG9tYWluAQtwb29sQWRkcmVzcwQHJG1hdGNoMAULcG9vbEFkZHJlc3MDCQAAAgIjM1A0dUE1ZXRuWmk0QW1CYWJLaW5xMmJNaVdVOEtjbkhaZEgFByRtYXRjaDACATECATABCWtfcGxUb2tlbgIIYXNzZXRfaWQGZG9tYWluCQCsAgIJAKwCAgkArAICAglzZXR1cF9wbF8FCGFzc2V0X2lkAgFfBQZkb21haW4BEGtfdG90YWxfc3VwcGxpZWQBCGFzc2V0X2lkCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUIYXNzZXRfaWQBB2tfc1JhdGUBCGFzc2V0X2lkCQCsAgIFCGFzc2V0X2lkAgZfc1JhdGUBEGtfdG90YWxfYm9ycm93ZWQBCGFzc2V0X2lkCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUIYXNzZXRfaWQBB2tfYlJhdGUBCGFzc2V0X2lkCQCsAgIFCGFzc2V0X2lkAgZfYlJhdGUBC2tfbWF4U3VwcGx5AQhhc3NldF9pZAkArAICAhBzZXR1cF9tYXhTdXBwbHlfBQhhc3NldF9pZAAQa19sYXN0UmF0ZUhlaWdodAIObGFzdFJhdGVIZWlnaHQBEGdldFB1ekJhbGFuY2VLZXkBB2Fzc2V0SWQJAKwCAgkArAICAgdnbG9iYWxfBQdhc3NldElkAghfYmFsYW5jZQEPZ2V0UHV6V2VpZ2h0S2V5AQdhc3NldElkCQCsAgIJAKwCAgIHc3RhdGljXwUHYXNzZXRJZAIHX3dlaWdodAEHZ2V0QlBBSwEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhBfc3RhdGljQXNzZXRzSWRzAQx0cnlHZXRTdHJpbmcCA2tleQdhZGRyZXNzBAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEKdHJ5R2V0Qm9vbAIDa2V5B2FkZHJlc3MEByRtYXRjaDAJAJsIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQ10cnlHZXRJbnRlZ2VyAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABFHRyeUdldEludGVnZXJXaXRoRGVmAwNrZXkHYWRkcmVzcwNkZWYEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgUDZGVmAQ9nZXRBc3NldEJhbGFuY2UCB2FkZHJlc3MHYXNzZXRJZAQBYQkA8AcCBQdhZGRyZXNzBQdhc3NldElkBQFhAQ9nZXRXYXZlc0JhbGFuY2UBB2FkZHJlc3MEAXcICQDvBwEFB2FkZHJlc3MJYXZhaWxhYmxlBQF3AQpnZXRCYWxhbmNlAgZyZXN1bHQHYXNzZXRJZAQHYWRkcmVzcwkArwICBQZyZXN1bHQAIwQEYWRkcgkBB0FkZHJlc3MBCQDZBAEFB2FkZHJlc3MEB2JhbGFuY2UDCQAAAgUHYXNzZXRJZAIFV0FWRVMJAQ9nZXRXYXZlc0JhbGFuY2UBBQRhZGRyBANhSWQJANkEAQUHYXNzZXRJZAkBD2dldEFzc2V0QmFsYW5jZQIFBGFkZHIFA2FJZAQDbGVuCQCxAgEFBnJlc3VsdAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MJALACAgUGcmVzdWx0ACMFB2Fzc2V0SWQCAToJAKQDAQUHYmFsYW5jZQIBLAERZ2V0QWRkcmVzc0JhbGFuY2UCBGFkZHIHYXNzZXRJZAQHYmFsYW5jZQMJAAACBQdhc3NldElkAgVXQVZFUwkBD2dldFdhdmVzQmFsYW5jZQEFBGFkZHIEA2FJZAkA2QQBBQdhc3NldElkCQEPZ2V0QXNzZXRCYWxhbmNlAgUEYWRkcgUDYUlkBQdiYWxhbmNlARBnZXRBc3NldERlY2ltYWxzAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMFCGRlY2ltYWxzAQlnZXRXeERhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAhhbW91bnRJZAkBDHRyeUdldFN0cmluZwIFCktfYW1fYXNfaWQFBGFkZHIEB3ByaWNlSWQJAQx0cnlHZXRTdHJpbmcCBQpLX3ByX2FzX2lkBQRhZGRyBANhbXAJAQx0cnlHZXRTdHJpbmcCBQVLX2FtcAUEYWRkcgQFc2hhcmUJAQ10cnlHZXRJbnRlZ2VyAgUHS19zaGFyZQUEYWRkcgQFc3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgUIS19zdGFrZWQFBGFkZHIJAJQKAgkArAICCQCsAgIFCGFtb3VudElkAgEsBQdwcmljZUlkCQCsAgIJAKwCAgkArAICCQCsAgIFA2FtcAIBLAkApAMBBQVzaGFyZQIBLAkApAMBBQVzdGFrZQEJZ2V0U3dEYXRhAQdhZGRyZXNzBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQEQV9pZAkBDHRyeUdldFN0cmluZwIFCUtfYV9hc19pZAUEYWRkcgQEQl9pZAkBDHRyeUdldFN0cmluZwIFCUtfYl9hc19pZAUEYWRkcgQJQV9iYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFCktfYV9hc19iYWwFBGFkZHIECUJfYmFsYW5jZQkBDXRyeUdldEludGVnZXICBQpLX2JfYXNfYmFsBQRhZGRyBANmZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMFBUtfZmVlBQRhZGRyAPAuBApkZXByZWNhdGVkCQEKdHJ5R2V0Qm9vbAIJAKwCAgILZGVwcmVjYXRlZF8FB2FkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQ1zd29wZmlfb3JhY2xlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBEFfaWQCAToJAKQDAQUJQV9iYWxhbmNlAgEsBQRCX2lkAgE6CQCkAwEFCUJfYmFsYW5jZQIBLAkApAMBBQNmZWUCASwJAKUDAQUKZGVwcmVjYXRlZAEUY29sbGVjdFB1ekFzc2V0c0RhdGECBnJlc3VsdAdhc3NldElkBANsZW4JAJADAQUGcmVzdWx0BAdhZGRyZXNzCQCRAwIFBnJlc3VsdAkAZQIFA2xlbgABBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQKYmFsYW5jZUtleQkBEGdldFB1ekJhbGFuY2VLZXkBBQdhc3NldElkBAl3ZWlnaHRLZXkJAQ9nZXRQdXpXZWlnaHRLZXkBBQdhc3NldElkBAdiYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFCmJhbGFuY2VLZXkFBGFkZHIEBndlaWdodAkBDXRyeUdldEludGVnZXICBQl3ZWlnaHRLZXkFBGFkZHIEC3JlYWxCYWxhbmNlCQERZ2V0QWRkcmVzc0JhbGFuY2UCBQRhZGRyBQdhc3NldElkBANyZXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2Fzc2V0SWQCASwJAKQDAQUHYmFsYW5jZQIBLAkApAMBBQZ3ZWlnaHQCASwJAKQDAQULcmVhbEJhbGFuY2UJAMwIAgUDcmVzBQZyZXN1bHQBCWdldFB6RGF0YQEHYWRkcmVzcwQEYWRkcgkBB0FkZHJlc3MBCQDZBAEFB2FkZHJlc3MEBGZlZTEJAQ10cnlHZXRJbnRlZ2VyAgUJS19mZWVfcHV6BQRhZGRyBAhmZWVUb2tlbgkBDHRyeUdldFN0cmluZwIFCktfZmVlVG9rZW4FBGFkZHIECmFzc2V0c1N0cjEJAQx0cnlHZXRTdHJpbmcCBQtLX2Fzc2V0X2lkcwUEYWRkcgQLJHQwNjE3MTYzMjQDCQAAAgUKYXNzZXRzU3RyMQIACQCUCgIJAQx0cnlHZXRTdHJpbmcCCQEHZ2V0QlBBSwEFB2FkZHJlc3MFBHRoaXMAyAEJAJQKAgUKYXNzZXRzU3RyMQUEZmVlMQQJYXNzZXRzU3RyCAULJHQwNjE3MTYzMjQCXzEEA2ZlZQgFCyR0MDYxNzE2MzI0Al8yBAZhc3NldHMJALUJAgUJYXNzZXRzU3RyAgEsBAphc3NldHNEYXRhCgACJGwFBmFzc2V0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAMwIAgUHYWRkcmVzcwUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARRjb2xsZWN0UHV6QXNzZXRzRGF0YQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQDbGVuCQCQAwEFCmFzc2V0c0RhdGEECWFzc2V0c0FycgkA0QgCBQphc3NldHNEYXRhCQBlAgUDbGVuAAEEDWFzc2V0c0RhdGFTdHIJALoJAgUJYXNzZXRzQXJyAgE7CQCVCgMFA2ZlZQUIZmVlVG9rZW4FDWFzc2V0c0RhdGFTdHIBCmdldFRzbkRhdGECB2FkZHJlc3MIYXNzZXRfaWQEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAZic0FzdFIJAQ10cnlHZXRJbnRlZ2VyAgUIa19ic0FzdFIFBGFkZHIEBmJzQXN0VwkBDXRyeUdldEludGVnZXICBQhrX2JzQXN0VwUEYWRkcgQGcXRBc3RSCQENdHJ5R2V0SW50ZWdlcgIFCGtfcXRBc3RSBQRhZGRyBAZxdEFzdFcJAQ10cnlHZXRJbnRlZ2VyAgUIa19xdEFzdFcFBGFkZHIEDm1heFByaWNlSW1wYWN0CQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4UHJpY2VJbXBhY3QFBGFkZHIEDm1heFByaWNlU3ByZWFkCQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4UHJpY2VTcHJlYWQFBGFkZHIEEXRvdGFsUG9zaXRpb25TaXplCQENdHJ5R2V0SW50ZWdlcgIFE2tfdG90YWxQb3NpdGlvblNpemUFBGFkZHIEDG9yYWNsZVN0cmluZwkBDHRyeUdldFN0cmluZwIFDGtfYmFzZU9yYWNsZQUEYWRkcgQDYXJyCQC1CQIFDG9yYWNsZVN0cmluZwIBLAQLJHQwNzIyMTcyNjkJAJQKAgkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQQNb3JhY2xlQWRkcmVzcwgFCyR0MDcyMjE3MjY5Al8xBAhwcmljZUtleQgFCyR0MDcyMjE3MjY5Al8yBApvcmFjbGVBZGRyCQEHQWRkcmVzcwEJANkEAQUNb3JhY2xlQWRkcmVzcwQLb3JhY2xlUHJpY2UJAQ10cnlHZXRJbnRlZ2VyAgUIcHJpY2VLZXkFCm9yYWNsZUFkZHIEBXZhdWx0CQEMdHJ5R2V0U3RyaW5nAgkArAICAg5rX2Fzc2V0X3ZhdWx0XwUIYXNzZXRfaWQFEHRzbl9zd2FwcGVyX2FkZHIECnZhdWx0X2FkZHIJAQdBZGRyZXNzAQkA2QQBBQV2YXVsdAQNZXhjZXNzQmFsYW5jZQkBDXRyeUdldEludGVnZXICBQ9rX2V4Y2Vzc0JhbGFuY2UFCnZhdWx0X2FkZHIEC2ZyZWVCYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFDWtfZnJlZUJhbGFuY2UFCnZhdWx0X2FkZHIEEm1heFNwb3RVdGlsaXphdGlvbgkBDXRyeUdldEludGVnZXICBRRrX21heFNwb3RVdGlsaXphdGlvbgUKdmF1bHRfYWRkcgQLdG90YWxTdXBwbHkJAQ10cnlHZXRJbnRlZ2VyAgUNa190b3RhbFN1cHBseQUKdmF1bHRfYWRkcgQEcmF0ZQkBDXRyeUdldEludGVnZXICBQZrX3JhdGUFCnZhdWx0X2FkZHIJAJ8KDQUGYnNBc3RSBQZic0FzdFcFBnF0QXN0UgUGcXRBc3RXBRF0b3RhbFBvc2l0aW9uU2l6ZQUObWF4UHJpY2VJbXBhY3QFDm1heFByaWNlU3ByZWFkBQtvcmFjbGVQcmljZQUNZXhjZXNzQmFsYW5jZQULZnJlZUJhbGFuY2UFEm1heFNwb3RVdGlsaXphdGlvbgULdG90YWxTdXBwbHkFBHJhdGUBCGdldFByaWNlAQdhc3NldElkBAVwcmljZQkBDXRyeUdldEludGVnZXICCQCsAgIFB2Fzc2V0SWQCB190d2FwNUIJAQdBZGRyZXNzAQkA2QQBBQRvcmNsBQVwcmljZQEJZ2V0UExEYXRhAgxwb29sX2FkZHJlc3MIYXNzZXRfaWQEBmRvbWFpbgkBCmdldF9kb21haW4BBQxwb29sX2FkZHJlc3MEB3Bvb2xBZHIJAQdBZGRyZXNzAQkA2QQBBQxwb29sX2FkZHJlc3MECXBsVG9rZW5JZAkBDHRyeUdldFN0cmluZwIJAQlrX3BsVG9rZW4CBQhhc3NldF9pZAUGZG9tYWluCQEHQWRkcmVzcwEJANkEAQUIcGxfcHJveHkEBXNSYXRlCQENdHJ5R2V0SW50ZWdlcgIJAQdrX3NSYXRlAQUIYXNzZXRfaWQFB3Bvb2xBZHIEBWJSYXRlCQENdHJ5R2V0SW50ZWdlcgIJAQdrX2JSYXRlAQUIYXNzZXRfaWQFB3Bvb2xBZHIEDXRvdGFsU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAgkBEGtfdG90YWxfc3VwcGxpZWQBBQhhc3NldF9pZAUHcG9vbEFkcgQNdG90YWxCb3Jyb3dlZAkBDXRyeUdldEludGVnZXICCQEQa190b3RhbF9ib3Jyb3dlZAEFCGFzc2V0X2lkBQdwb29sQWRyBAltYXhTdXBwbHkJAQx0cnlHZXRTdHJpbmcCCQELa19tYXhTdXBwbHkBBQhhc3NldF9pZAUHcG9vbEFkcgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXICBRBrX2xhc3RSYXRlSGVpZ2h0BQdwb29sQWRyBAljdXJIZWlnaHQFBmhlaWdodAQFcHJpY2UJAQhnZXRQcmljZQEFCGFzc2V0X2lkBAhkZWNpbWFscwkBEGdldEFzc2V0RGVjaW1hbHMBBQhhc3NldF9pZAkAnQoLBQhhc3NldF9pZAUJcGxUb2tlbklkBQVzUmF0ZQUFYlJhdGUFDXRvdGFsU3VwcGxpZWQFDXRvdGFsQm9ycm93ZWQFCW1heFN1cHBseQUKbGFzdEhlaWdodAUJY3VySGVpZ2h0BQVwcmljZQUIZGVjaW1hbHMBCXRlc3RfbG9vcAIGcmVzdWx0A2VsZQkAzAgCBQNlbGUFBnJlc3VsdAEOZ2V0QmFsYW5jZXNTdHICCWFzc2V0c1N0cgdhZGRyZXNzBAZhc3NldHMJALwJAgUJYXNzZXRzU3RyAgEsBANyZXMKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUHYWRkcmVzcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZ2V0QmFsYW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIECGJhbGFuY2VzCQCwAgIFA3JlcwAjBARiYWxzCQCzAgIFCGJhbGFuY2VzAAEFBGJhbHMBCXByb2Nlc3NXWAIGcmVzdWx0B2FkZHJlc3MECyR0MDk0NjU5NTA4CQEJZ2V0V3hEYXRhAQUHYWRkcmVzcwQJYXNzZXRzU3RyCAULJHQwOTQ2NTk1MDgCXzEEBWRhdGFzCAULJHQwOTQ2NTk1MDgCXzIEDGFzc2V0c1N0cmluZwkBDmdldEJhbGFuY2VzU3RyAgUJYXNzZXRzU3RyBQdhZGRyZXNzBAdyZXNJdGVtCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAS8FDGFzc2V0c1N0cmluZwIBLwUFZGF0YXMJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzU1cCBnJlc3VsdAdhZGRyZXNzBAxhc3NldHNTdHJpbmcJAQlnZXRTd0RhdGEBBQdhZGRyZXNzBAdyZXNJdGVtCQCsAgIJAKwCAgUHYWRkcmVzcwIBLwUMYXNzZXRzU3RyaW5nCQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEJcHJvY2Vzc1BaAgZyZXN1bHQHYWRkcmVzcwQLJHQwOTkwODk5NjIJAQlnZXRQekRhdGEBBQdhZGRyZXNzBANmZWUIBQskdDA5OTA4OTk2MgJfMQQIZmVlVG9rZW4IBQskdDA5OTA4OTk2MgJfMgQMYXNzZXRzU3RyaW5nCAULJHQwOTkwODk5NjICXzMEB3Jlc0l0ZW0JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAS8JAKQDAQUDZmVlAgEvBQhmZWVUb2tlbgIBLwUMYXNzZXRzU3RyaW5nCQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEKcHJvY2Vzc1RTTgIGcmVzdWx0BWxhYmVsBANhcnIJALUJAgUFbGFiZWwCAV8EDSR0MDEwMTc5MTAyMjEJAJQKAgkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQQHYWRkcmVzcwgFDSR0MDEwMTc5MTAyMjECXzEECGFzc2V0X2lkCAUNJHQwMTAxNzkxMDIyMQJfMgQNJHQwMTAyMjcxMDQyNgkBCmdldFRzbkRhdGECBQdhZGRyZXNzBQhhc3NldF9pZAQGYnNBc3RSCAUNJHQwMTAyMjcxMDQyNgJfMQQGYnNBc3RXCAUNJHQwMTAyMjcxMDQyNgJfMgQGcXRBc3RSCAUNJHQwMTAyMjcxMDQyNgJfMwQGcXRBc3RXCAUNJHQwMTAyMjcxMDQyNgJfNAQRdG90YWxQb3NpdGlvblNpemUIBQ0kdDAxMDIyNzEwNDI2Al81BA5tYXhQcmljZUltcGFjdAgFDSR0MDEwMjI3MTA0MjYCXzYEDm1heFByaWNlU3ByZWFkCAUNJHQwMTAyMjcxMDQyNgJfNwQLb3JhY2xlUHJpY2UIBQ0kdDAxMDIyNzEwNDI2Al84BA1leGNlc3NCYWxhbmNlCAUNJHQwMTAyMjcxMDQyNgJfOQQLZnJlZUJhbGFuY2UIBQ0kdDAxMDIyNzEwNDI2A18xMAQSbWF4U3BvdFV0aWxpemF0aW9uCAUNJHQwMTAyMjcxMDQyNgNfMTEEC3RvdGFsU3VwcGx5CAUNJHQwMTAyMjcxMDQyNgNfMTIEBHJhdGUIBQ0kdDAxMDIyNzEwNDI2A18xMwQOYXNzZXRfZGVjaW1hbHMDCQAAAgUIYXNzZXRfaWQCBVdBVkVTAAgICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQhhc3NldF9pZAkArAICAg1JdmFsaWQgYXNzZXQgBQhhc3NldF9pZAhkZWNpbWFscwQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBLAUIYXNzZXRfaWQCASwJAKQDAQUOYXNzZXRfZGVjaW1hbHMCASwJAKQDAQUGYnNBc3RSAgEsCQCkAwEFBmJzQXN0VwIBLAkApAMBBQZxdEFzdFICASwJAKQDAQUGcXRBc3RXAgEsCQCkAwEFEXRvdGFsUG9zaXRpb25TaXplAgEsCQCkAwEFDm1heFByaWNlSW1wYWN0AgEsCQCkAwEFDm1heFByaWNlU3ByZWFkAgEsCQCkAwEFC29yYWNsZVByaWNlAgEsCQCkAwEFDWV4Y2Vzc0JhbGFuY2UCASwJAKQDAQULZnJlZUJhbGFuY2UCASwJAKQDAQUSbWF4U3BvdFV0aWxpemF0aW9uAgEsCQCkAwEFC3RvdGFsU3VwcGx5AgEsCQCkAwEFBHJhdGUJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzUEwCBnJlc3VsdAVsYWJlbAQDYXJyCQC1CQIFBWxhYmVsAgEtBA0kdDAxMTIyMzExMjcwCQCUCgIJAJEDAgUDYXJyAAAJAJEDAgUDYXJyAAEEDHBvb2xfYWRkcmVzcwgFDSR0MDExMjIzMTEyNzACXzEECGFzc2V0X2lkCAUNJHQwMTEyMjMxMTI3MAJfMgQNJHQwMTEyNzYxMTQzMwkBCWdldFBMRGF0YQIFDHBvb2xfYWRkcmVzcwUIYXNzZXRfaWQECWFzc2V0X2lkZAgFDSR0MDExMjc2MTE0MzMCXzEECXBsVG9rZW5JZAgFDSR0MDExMjc2MTE0MzMCXzIEBXNSYXRlCAUNJHQwMTEyNzYxMTQzMwJfMwQFYlJhdGUIBQ0kdDAxMTI3NjExNDMzAl80BA10b3RhbFN1cHBsaWVkCAUNJHQwMTEyNzYxMTQzMwJfNQQNdG90YWxCb3Jyb3dlZAgFDSR0MDExMjc2MTE0MzMCXzYECW1heFN1cHBseQgFDSR0MDExMjc2MTE0MzMCXzcECmxhc3RIZWlnaHQIBQ0kdDAxMTI3NjExNDMzAl84BAljdXJIZWlnaHQIBQ0kdDAxMTI3NjExNDMzAl85BAVwcmljZQgFDSR0MDExMjc2MTE0MzMDXzEwBAhkZWNpbWFscwgFDSR0MDExMjc2MTE0MzMDXzExBAdyZXNJdGVtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkA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cmVzdWx0CQC7CQIFBnJlc0FycgIBfAUGcmVzdWx0AQZnZXRUU04BBnBhcmFtcwQNdmF1bHRzX2xhYmVscwkAtQkCBQZwYXJhbXMCASwEBnJlc0FycgoAAiRsBQ12YXVsdHNfbGFiZWxzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpwcm9jZXNzVFNOAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAZyZXN1bHQJALoJAgUGcmVzQXJyAgF8BANmZWUJAQ10cnlHZXRJbnRlZ2VyAgUFa19mZWUFEHRzbl9zd2FwcGVyX2FkZHIEBnJlYmF0ZQkBDXRyeUdldEludGVnZXICBQhrX3JlYmF0ZQUQdHNuX3N3YXBwZXJfYWRkcgQTZmVlVG9TdGFrZXJzUGVyY2VudAkBDXRyeUdldEludGVnZXICBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFEHRzbl9zd2FwcGVyX2FkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUDZmVlAgEsCQCkAwEFBnJlYmF0ZQIBLAkApAMBBRNmZWVUb1N0YWtlcnNQZXJjZW50AgEvBQZyZXN1bHQBBWdldFBMAQZwYXJhbXMEBXBvb2xzCQC1CQIFBnBhcmFtcwIBLAQGcmVzQXJyCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlwcm9jZXNzUEwCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEBnJlc3VsdAkAugkCBQZyZXNBcnICAXwFBnJlc3VsdAEBaQEEdGVzdAEBcwQBcgkBCnRyeUdldEJvb2wCAi5kZXByZWNhdGVkXzNQMjg2VGtUSEFSdHJKenhVaFBvSFhhcmR2dXRDMzdhOXJNCQEHQWRkcmVzcwEJANkEAQUNc3dvcGZpX29yYWNsZQkAAgEJAKUDAQUBcgDlk+77", "height": 2856334, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FLsVwa6FbPRYBnCWnKMn2x3oeRqd2D3jAJzhrVTDmxbH Next: J5g3KKLs3WMX772PxSgyL9Ryp7Fpu7DGfPyjkaWN6DdS Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let | |
4 | + | let rex = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU" | |
5 | 5 | ||
6 | - | let | |
6 | + | let swopfi_oracle = "3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom" | |
7 | 7 | ||
8 | - | let | |
8 | + | let pl_proxy = "3PJESVDTHRv8i83XbmHrRGQhDc5rgR3azQs" | |
9 | 9 | ||
10 | - | func func3 (caller,origin) = if (true) | |
11 | - | then throw(((("caller: " + caller) + ", origin: ") + origin)) | |
12 | - | else 0 | |
10 | + | let orcl = "3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t" | |
11 | + | ||
12 | + | let K_am_as_id = "%s__amountAsset" | |
13 | + | ||
14 | + | let K_pr_as_id = "%s__priceAsset" | |
15 | + | ||
16 | + | let K_amp = "%s__amp" | |
17 | + | ||
18 | + | let K_share = "%s%s__shareAssetBalance__YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" | |
19 | + | ||
20 | + | let K_staked = "%s%s__stakedBalance__WAVES" | |
21 | + | ||
22 | + | let K_a_as_id = "A_asset_id" | |
23 | + | ||
24 | + | let K_b_as_id = "B_asset_id" | |
25 | + | ||
26 | + | let K_a_as_bal = "A_asset_balance" | |
27 | + | ||
28 | + | let K_b_as_bal = "B_asset_balance" | |
29 | + | ||
30 | + | let K_fee = "commission" | |
31 | + | ||
32 | + | let K_asset_ids = "static_tokenIds" | |
33 | + | ||
34 | + | let K_fee_puz = "static_fee" | |
35 | + | ||
36 | + | let K_feeToken = "static_feeToken" | |
37 | + | ||
38 | + | let tsn_swapper = "3PKz5jnJLohF2GjShQ7bG5H4BebdoA98zZ2" | |
39 | + | ||
40 | + | let tsn_swapper_addr = Address(fromBase58String(tsn_swapper)) | |
41 | + | ||
42 | + | let k_fee = "k_fee" | |
43 | + | ||
44 | + | let k_rebate = "k_rebate" | |
45 | + | ||
46 | + | let k_feeToStakersPercent = "k_feeToStakersPercent" | |
47 | + | ||
48 | + | let k_excessBalance = "k_excessBalance" | |
49 | + | ||
50 | + | let k_freeBalance = "k_freeBalance" | |
51 | + | ||
52 | + | let k_maxSpotUtilization = "k_maxSpotUtilization" | |
53 | + | ||
54 | + | let k_totalSupply = "k_totalSupply" | |
55 | + | ||
56 | + | let k_rate = "k_rate" | |
57 | + | ||
58 | + | let k_bsAstR = "k_bsAstR" | |
59 | + | ||
60 | + | let k_bsAstW = "k_bsAstW" | |
61 | + | ||
62 | + | let k_qtAstR = "k_qtAstR" | |
63 | + | ||
64 | + | let k_qtAstW = "k_qtAstW" | |
65 | + | ||
66 | + | let k_maxPriceImpact = "k_maxPriceImpact" | |
67 | + | ||
68 | + | let k_maxPriceSpread = "k_maxPriceSpread" | |
69 | + | ||
70 | + | let k_totalPositionSize = "k_totalPositionSize" | |
71 | + | ||
72 | + | let k_baseOracle = "k_baseOracle" | |
73 | + | ||
74 | + | func get_domain (poolAddress) = match poolAddress { | |
75 | + | case _ => | |
76 | + | if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0)) | |
77 | + | then "1" | |
78 | + | else "0" | |
79 | + | } | |
80 | + | ||
81 | + | ||
82 | + | func k_plToken (asset_id,domain) = ((("setup_pl_" + asset_id) + "_") + domain) | |
83 | + | ||
84 | + | ||
85 | + | func k_total_supplied (asset_id) = ("total_supplied_" + asset_id) | |
86 | + | ||
87 | + | ||
88 | + | func k_sRate (asset_id) = (asset_id + "_sRate") | |
89 | + | ||
90 | + | ||
91 | + | func k_total_borrowed (asset_id) = ("total_borrowed_" + asset_id) | |
92 | + | ||
93 | + | ||
94 | + | func k_bRate (asset_id) = (asset_id + "_bRate") | |
95 | + | ||
96 | + | ||
97 | + | func k_maxSupply (asset_id) = ("setup_maxSupply_" + asset_id) | |
98 | + | ||
99 | + | ||
100 | + | let k_lastRateHeight = "lastRateHeight" | |
101 | + | ||
102 | + | func getPuzBalanceKey (assetId) = (("global_" + assetId) + "_balance") | |
103 | + | ||
104 | + | ||
105 | + | func getPuzWeightKey (assetId) = (("static_" + assetId) + "_weight") | |
106 | + | ||
107 | + | ||
108 | + | func getBPAK (address) = (address + "_staticAssetsIds") | |
109 | + | ||
110 | + | ||
111 | + | func tryGetString (key,address) = match getString(address, key) { | |
112 | + | case b: String => | |
113 | + | b | |
114 | + | case _ => | |
115 | + | "" | |
116 | + | } | |
117 | + | ||
118 | + | ||
119 | + | func tryGetBool (key,address) = match getBoolean(address, key) { | |
120 | + | case b: Boolean => | |
121 | + | b | |
122 | + | case _ => | |
123 | + | false | |
124 | + | } | |
125 | + | ||
126 | + | ||
127 | + | func tryGetInteger (key,address) = match getInteger(address, key) { | |
128 | + | case b: Int => | |
129 | + | b | |
130 | + | case _ => | |
131 | + | 0 | |
132 | + | } | |
133 | + | ||
134 | + | ||
135 | + | func tryGetIntegerWithDef (key,address,def) = match getInteger(address, key) { | |
136 | + | case b: Int => | |
137 | + | b | |
138 | + | case _ => | |
139 | + | def | |
140 | + | } | |
141 | + | ||
142 | + | ||
143 | + | func getAssetBalance (address,assetId) = { | |
144 | + | let a = assetBalance(address, assetId) | |
145 | + | a | |
146 | + | } | |
147 | + | ||
148 | + | ||
149 | + | func getWavesBalance (address) = { | |
150 | + | let w = wavesBalance(address).available | |
151 | + | w | |
152 | + | } | |
153 | + | ||
154 | + | ||
155 | + | func getBalance (result,assetId) = { | |
156 | + | let address = take(result, 35) | |
157 | + | let addr = Address(fromBase58String(address)) | |
158 | + | let balance = if ((assetId == "WAVES")) | |
159 | + | then getWavesBalance(addr) | |
160 | + | else { | |
161 | + | let aId = fromBase58String(assetId) | |
162 | + | getAssetBalance(addr, aId) | |
163 | + | } | |
164 | + | let len = size(result) | |
165 | + | (((((address + drop(result, 35)) + assetId) + ":") + toString(balance)) + ",") | |
166 | + | } | |
167 | + | ||
168 | + | ||
169 | + | func getAddressBalance (addr,assetId) = { | |
170 | + | let balance = if ((assetId == "WAVES")) | |
171 | + | then getWavesBalance(addr) | |
172 | + | else { | |
173 | + | let aId = fromBase58String(assetId) | |
174 | + | getAssetBalance(addr, aId) | |
175 | + | } | |
176 | + | balance | |
177 | + | } | |
178 | + | ||
179 | + | ||
180 | + | func getAssetDecimals (assetIdStr) = { | |
181 | + | let decimals = if ((assetIdStr == "WAVES")) | |
182 | + | then 8 | |
183 | + | else value(assetInfo(fromBase58String(assetIdStr))).decimals | |
184 | + | decimals | |
185 | + | } | |
186 | + | ||
187 | + | ||
188 | + | func getWxData (address) = { | |
189 | + | let addr = Address(fromBase58String(address)) | |
190 | + | let amountId = tryGetString(K_am_as_id, addr) | |
191 | + | let priceId = tryGetString(K_pr_as_id, addr) | |
192 | + | let amp = tryGetString(K_amp, addr) | |
193 | + | let share = tryGetInteger(K_share, addr) | |
194 | + | let stake = tryGetInteger(K_staked, addr) | |
195 | + | $Tuple2(((amountId + ",") + priceId), ((((amp + ",") + toString(share)) + ",") + toString(stake))) | |
196 | + | } | |
197 | + | ||
198 | + | ||
199 | + | func getSwData (address) = { | |
200 | + | let addr = Address(fromBase58String(address)) | |
201 | + | let A_id = tryGetString(K_a_as_id, addr) | |
202 | + | let B_id = tryGetString(K_b_as_id, addr) | |
203 | + | let A_balance = tryGetInteger(K_a_as_bal, addr) | |
204 | + | let B_balance = tryGetInteger(K_b_as_bal, addr) | |
205 | + | let fee = tryGetIntegerWithDef(K_fee, addr, 6000) | |
206 | + | let deprecated = tryGetBool(("deprecated_" + address), Address(fromBase58String(swopfi_oracle))) | |
207 | + | ((((((((((A_id + ":") + toString(A_balance)) + ",") + B_id) + ":") + toString(B_balance)) + ",") + toString(fee)) + ",") + toString(deprecated)) | |
208 | + | } | |
209 | + | ||
210 | + | ||
211 | + | func collectPuzAssetsData (result,assetId) = { | |
212 | + | let len = size(result) | |
213 | + | let address = result[(len - 1)] | |
214 | + | let addr = Address(fromBase58String(address)) | |
215 | + | let balanceKey = getPuzBalanceKey(assetId) | |
216 | + | let weightKey = getPuzWeightKey(assetId) | |
217 | + | let balance = tryGetInteger(balanceKey, addr) | |
218 | + | let weight = tryGetInteger(weightKey, addr) | |
219 | + | let realBalance = getAddressBalance(addr, assetId) | |
220 | + | let res = ((((((assetId + ",") + toString(balance)) + ",") + toString(weight)) + ",") + toString(realBalance)) | |
221 | + | res :: result | |
222 | + | } | |
223 | + | ||
224 | + | ||
225 | + | func getPzData (address) = { | |
226 | + | let addr = Address(fromBase58String(address)) | |
227 | + | let fee1 = tryGetInteger(K_fee_puz, addr) | |
228 | + | let feeToken = tryGetString(K_feeToken, addr) | |
229 | + | let assetsStr1 = tryGetString(K_asset_ids, addr) | |
230 | + | let $t061716324 = if ((assetsStr1 == "")) | |
231 | + | then $Tuple2(tryGetString(getBPAK(address), this), 200) | |
232 | + | else $Tuple2(assetsStr1, fee1) | |
233 | + | let assetsStr = $t061716324._1 | |
234 | + | let fee = $t061716324._2 | |
235 | + | let assets = split(assetsStr, ",") | |
236 | + | let assetsData = { | |
237 | + | let $l = assets | |
238 | + | let $s = size($l) | |
239 | + | let $acc0 = [address] | |
240 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
241 | + | then $a | |
242 | + | else collectPuzAssetsData($a, $l[$i]) | |
243 | + | ||
244 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
245 | + | then $a | |
246 | + | else throw("List size exceeds 10") | |
247 | + | ||
248 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
249 | + | } | |
250 | + | let len = size(assetsData) | |
251 | + | let assetsArr = removeByIndex(assetsData, (len - 1)) | |
252 | + | let assetsDataStr = makeString_2C(assetsArr, ";") | |
253 | + | $Tuple3(fee, feeToken, assetsDataStr) | |
254 | + | } | |
255 | + | ||
256 | + | ||
257 | + | func getTsnData (address,asset_id) = { | |
258 | + | let addr = Address(fromBase58String(address)) | |
259 | + | let bsAstR = tryGetInteger(k_bsAstR, addr) | |
260 | + | let bsAstW = tryGetInteger(k_bsAstW, addr) | |
261 | + | let qtAstR = tryGetInteger(k_qtAstR, addr) | |
262 | + | let qtAstW = tryGetInteger(k_qtAstW, addr) | |
263 | + | let maxPriceImpact = tryGetInteger(k_maxPriceImpact, addr) | |
264 | + | let maxPriceSpread = tryGetInteger(k_maxPriceSpread, addr) | |
265 | + | let totalPositionSize = tryGetInteger(k_totalPositionSize, addr) | |
266 | + | let oracleString = tryGetString(k_baseOracle, addr) | |
267 | + | let arr = split(oracleString, ",") | |
268 | + | let $t072217269 = $Tuple2(arr[0], arr[1]) | |
269 | + | let oracleAddress = $t072217269._1 | |
270 | + | let priceKey = $t072217269._2 | |
271 | + | let oracleAddr = Address(fromBase58String(oracleAddress)) | |
272 | + | let oraclePrice = tryGetInteger(priceKey, oracleAddr) | |
273 | + | let vault = tryGetString(("k_asset_vault_" + asset_id), tsn_swapper_addr) | |
274 | + | let vault_addr = Address(fromBase58String(vault)) | |
275 | + | let excessBalance = tryGetInteger(k_excessBalance, vault_addr) | |
276 | + | let freeBalance = tryGetInteger(k_freeBalance, vault_addr) | |
277 | + | let maxSpotUtilization = tryGetInteger(k_maxSpotUtilization, vault_addr) | |
278 | + | let totalSupply = tryGetInteger(k_totalSupply, vault_addr) | |
279 | + | let rate = tryGetInteger(k_rate, vault_addr) | |
280 | + | $Tuple13(bsAstR, bsAstW, qtAstR, qtAstW, totalPositionSize, maxPriceImpact, maxPriceSpread, oraclePrice, excessBalance, freeBalance, maxSpotUtilization, totalSupply, rate) | |
281 | + | } | |
282 | + | ||
283 | + | ||
284 | + | func getPrice (assetId) = { | |
285 | + | let price = tryGetInteger((assetId + "_twap5B"), Address(fromBase58String(orcl))) | |
286 | + | price | |
287 | + | } | |
288 | + | ||
289 | + | ||
290 | + | func getPLData (pool_address,asset_id) = { | |
291 | + | let domain = get_domain(pool_address) | |
292 | + | let poolAdr = Address(fromBase58String(pool_address)) | |
293 | + | let plTokenId = tryGetString(k_plToken(asset_id, domain), Address(fromBase58String(pl_proxy))) | |
294 | + | let sRate = tryGetInteger(k_sRate(asset_id), poolAdr) | |
295 | + | let bRate = tryGetInteger(k_bRate(asset_id), poolAdr) | |
296 | + | let totalSupplied = tryGetInteger(k_total_supplied(asset_id), poolAdr) | |
297 | + | let totalBorrowed = tryGetInteger(k_total_borrowed(asset_id), poolAdr) | |
298 | + | let maxSupply = tryGetString(k_maxSupply(asset_id), poolAdr) | |
299 | + | let lastHeight = tryGetInteger(k_lastRateHeight, poolAdr) | |
300 | + | let curHeight = height | |
301 | + | let price = getPrice(asset_id) | |
302 | + | let decimals = getAssetDecimals(asset_id) | |
303 | + | $Tuple11(asset_id, plTokenId, sRate, bRate, totalSupplied, totalBorrowed, maxSupply, lastHeight, curHeight, price, decimals) | |
304 | + | } | |
305 | + | ||
306 | + | ||
307 | + | func test_loop (result,ele) = ele :: result | |
308 | + | ||
309 | + | ||
310 | + | func getBalancesStr (assetsStr,address) = { | |
311 | + | let assets = split_4C(assetsStr, ",") | |
312 | + | let res = { | |
313 | + | let $l = assets | |
314 | + | let $s = size($l) | |
315 | + | let $acc0 = address | |
316 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
317 | + | then $a | |
318 | + | else getBalance($a, $l[$i]) | |
319 | + | ||
320 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
321 | + | then $a | |
322 | + | else throw("List size exceeds 2") | |
323 | + | ||
324 | + | $f0_2($f0_1($f0_1($acc0, 0), 1), 2) | |
325 | + | } | |
326 | + | let balances = drop(res, 35) | |
327 | + | let bals = dropRight(balances, 1) | |
328 | + | bals | |
329 | + | } | |
330 | + | ||
331 | + | ||
332 | + | func processWX (result,address) = { | |
333 | + | let $t094659508 = getWxData(address) | |
334 | + | let assetsStr = $t094659508._1 | |
335 | + | let datas = $t094659508._2 | |
336 | + | let assetsString = getBalancesStr(assetsStr, address) | |
337 | + | let resItem = ((((address + "/") + assetsString) + "/") + datas) | |
338 | + | resItem :: result | |
339 | + | } | |
340 | + | ||
341 | + | ||
342 | + | func processSW (result,address) = { | |
343 | + | let assetsString = getSwData(address) | |
344 | + | let resItem = ((address + "/") + assetsString) | |
345 | + | resItem :: result | |
346 | + | } | |
347 | + | ||
348 | + | ||
349 | + | func processPZ (result,address) = { | |
350 | + | let $t099089962 = getPzData(address) | |
351 | + | let fee = $t099089962._1 | |
352 | + | let feeToken = $t099089962._2 | |
353 | + | let assetsString = $t099089962._3 | |
354 | + | let resItem = ((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) | |
355 | + | resItem :: result | |
356 | + | } | |
357 | + | ||
358 | + | ||
359 | + | func processTSN (result,label) = { | |
360 | + | let arr = split(label, "_") | |
361 | + | let $t01017910221 = $Tuple2(arr[0], arr[1]) | |
362 | + | let address = $t01017910221._1 | |
363 | + | let asset_id = $t01017910221._2 | |
364 | + | let $t01022710426 = getTsnData(address, asset_id) | |
365 | + | let bsAstR = $t01022710426._1 | |
366 | + | let bsAstW = $t01022710426._2 | |
367 | + | let qtAstR = $t01022710426._3 | |
368 | + | let qtAstW = $t01022710426._4 | |
369 | + | let totalPositionSize = $t01022710426._5 | |
370 | + | let maxPriceImpact = $t01022710426._6 | |
371 | + | let maxPriceSpread = $t01022710426._7 | |
372 | + | let oraclePrice = $t01022710426._8 | |
373 | + | let excessBalance = $t01022710426._9 | |
374 | + | let freeBalance = $t01022710426._10 | |
375 | + | let maxSpotUtilization = $t01022710426._11 | |
376 | + | let totalSupply = $t01022710426._12 | |
377 | + | let rate = $t01022710426._13 | |
378 | + | let asset_decimals = if ((asset_id == "WAVES")) | |
379 | + | then 8 | |
380 | + | else valueOrErrorMessage(assetInfo(fromBase58String(asset_id)), ("Ivalid asset " + asset_id)).decimals | |
381 | + | let resItem = ((((((((((((((((((((((((((((((address + ",") + asset_id) + ",") + toString(asset_decimals)) + ",") + toString(bsAstR)) + ",") + toString(bsAstW)) + ",") + toString(qtAstR)) + ",") + toString(qtAstW)) + ",") + toString(totalPositionSize)) + ",") + toString(maxPriceImpact)) + ",") + toString(maxPriceSpread)) + ",") + toString(oraclePrice)) + ",") + toString(excessBalance)) + ",") + toString(freeBalance)) + ",") + toString(maxSpotUtilization)) + ",") + toString(totalSupply)) + ",") + toString(rate)) | |
382 | + | resItem :: result | |
383 | + | } | |
384 | + | ||
385 | + | ||
386 | + | func processPL (result,label) = { | |
387 | + | let arr = split(label, "-") | |
388 | + | let $t01122311270 = $Tuple2(arr[0], arr[1]) | |
389 | + | let pool_address = $t01122311270._1 | |
390 | + | let asset_id = $t01122311270._2 | |
391 | + | let $t01127611433 = getPLData(pool_address, asset_id) | |
392 | + | let asset_idd = $t01127611433._1 | |
393 | + | let plTokenId = $t01127611433._2 | |
394 | + | let sRate = $t01127611433._3 | |
395 | + | let bRate = $t01127611433._4 | |
396 | + | let totalSupplied = $t01127611433._5 | |
397 | + | let totalBorrowed = $t01127611433._6 | |
398 | + | let maxSupply = $t01127611433._7 | |
399 | + | let lastHeight = $t01127611433._8 | |
400 | + | let curHeight = $t01127611433._9 | |
401 | + | let price = $t01127611433._10 | |
402 | + | let decimals = $t01127611433._11 | |
403 | + | let resItem = ((((((((((((((((((((((label + ",") + asset_idd) + ",") + plTokenId) + ",") + toString(sRate)) + ",") + toString(bRate)) + ",") + toString(totalSupplied)) + ",") + toString(totalBorrowed)) + ",") + maxSupply) + ",") + toString(lastHeight)) + ",") + toString(curHeight)) + ",") + toString(price)) + ",") + toString(decimals)) | |
404 | + | resItem :: result | |
405 | + | } | |
406 | + | ||
407 | + | ||
408 | + | func getWX (params) = { | |
409 | + | let pools = split_51C(params, ",") | |
410 | + | let resArr = { | |
411 | + | let $l = pools | |
412 | + | let $s = size($l) | |
413 | + | let $acc0 = nil | |
414 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
415 | + | then $a | |
416 | + | else processWX($a, $l[$i]) | |
417 | + | ||
418 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
419 | + | then $a | |
420 | + | else throw("List size exceeds 120") | |
421 | + | ||
422 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120) | |
423 | + | } | |
424 | + | let result = makeString_11C(resArr, "|") | |
425 | + | result | |
426 | + | } | |
427 | + | ||
428 | + | ||
429 | + | func getSW (params) = { | |
430 | + | let pools = split_4C(params, ",") | |
431 | + | let resArr = { | |
432 | + | let $l = pools | |
433 | + | let $s = size($l) | |
434 | + | let $acc0 = nil | |
435 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
436 | + | then $a | |
437 | + | else processSW($a, $l[$i]) | |
438 | + | ||
439 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
440 | + | then $a | |
441 | + | else throw("List size exceeds 100") | |
442 | + | ||
443 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
444 | + | } | |
445 | + | let result = makeString_11C(resArr, "|") | |
446 | + | result | |
447 | + | } | |
448 | + | ||
449 | + | ||
450 | + | func getPZ (params) = { | |
451 | + | let pools = split_4C(params, ",") | |
452 | + | let resArr = { | |
453 | + | let $l = pools | |
454 | + | let $s = size($l) | |
455 | + | let $acc0 = nil | |
456 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
457 | + | then $a | |
458 | + | else processPZ($a, $l[$i]) | |
459 | + | ||
460 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
461 | + | then $a | |
462 | + | else throw("List size exceeds 100") | |
463 | + | ||
464 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
465 | + | } | |
466 | + | let result = makeString_11C(resArr, "|") | |
467 | + | result | |
468 | + | } | |
469 | + | ||
470 | + | ||
471 | + | func getTSN (params) = { | |
472 | + | let vaults_labels = split(params, ",") | |
473 | + | let resArr = { | |
474 | + | let $l = vaults_labels | |
475 | + | let $s = size($l) | |
476 | + | let $acc0 = nil | |
477 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
478 | + | then $a | |
479 | + | else processTSN($a, $l[$i]) | |
480 | + | ||
481 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
482 | + | then $a | |
483 | + | else throw("List size exceeds 10") | |
484 | + | ||
485 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
486 | + | } | |
487 | + | let result = makeString_2C(resArr, "|") | |
488 | + | let fee = tryGetInteger(k_fee, tsn_swapper_addr) | |
489 | + | let rebate = tryGetInteger(k_rebate, tsn_swapper_addr) | |
490 | + | let feeToStakersPercent = tryGetInteger(k_feeToStakersPercent, tsn_swapper_addr) | |
491 | + | ((((((toString(fee) + ",") + toString(rebate)) + ",") + toString(feeToStakersPercent)) + "/") + result) | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | func getPL (params) = { | |
496 | + | let pools = split(params, ",") | |
497 | + | let resArr = { | |
498 | + | let $l = pools | |
499 | + | let $s = size($l) | |
500 | + | let $acc0 = nil | |
501 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
502 | + | then $a | |
503 | + | else processPL($a, $l[$i]) | |
504 | + | ||
505 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
506 | + | then $a | |
507 | + | else throw("List size exceeds 10") | |
508 | + | ||
509 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
510 | + | } | |
511 | + | let result = makeString_2C(resArr, "|") | |
512 | + | result | |
513 | + | } | |
13 | 514 | ||
14 | 515 | ||
15 | 516 | @Callable(i) | |
16 | - | func func2 () = { | |
17 | - | let caller = toString(i.caller) | |
18 | - | let origin = toString(i.originCaller) | |
19 | - | if (true) | |
20 | - | then throw(((("caller: " + caller) + ", origin: ") + origin)) | |
21 | - | else nil | |
22 | - | } | |
23 | - | ||
24 | - | ||
25 | - | ||
26 | - | @Callable(i) | |
27 | - | func func1 () = { | |
28 | - | let nn = invoke(Address(fromBase58String(pool2)), "func2", nil, nil) | |
29 | - | if ((nn == nn)) | |
30 | - | then nil | |
31 | - | else throw("Strict value is not equal to itself.") | |
517 | + | func test (s) = { | |
518 | + | let r = tryGetBool("deprecated_3P286TkTHARtrJzxUhPoHXardvutC37a9rM", Address(fromBase58String(swopfi_oracle))) | |
519 | + | throw(toString(r)) | |
32 | 520 | } | |
33 | 521 | ||
34 | 522 |
github/deemru/w8io/169f3d6 42.13 ms ◑![]()