tx · ENhpdGXWkxmAFgW6MXcm48mYyc2aqYsYp8Sp4MWnQXdA

3P3VTtUiwJ91Ly7vwtRVKv5NkNNiPoWe7oP:  -0.00800000 Waves

2022.11.25 15:38 [3398082] smart account 3P3VTtUiwJ91Ly7vwtRVKv5NkNNiPoWe7oP > SELF 0.00000000 Waves

{ "type": 13, "id": "ENhpdGXWkxmAFgW6MXcm48mYyc2aqYsYp8Sp4MWnQXdA", "fee": 800000, "feeAssetId": null, "timestamp": 1669379889571, "version": 1, "sender": "3P3VTtUiwJ91Ly7vwtRVKv5NkNNiPoWe7oP", "senderPublicKey": "5q25v77G7b2qAcdzH88H2Y7mxXnddbN9ZYKCn3Q8W6Pi", "proofs": [ "3Qw8ByxyZkdRZzeX8o3KznUkmd3JDWCqL5bqxC55cEX2NmH8UCudo1P5h189zBqmP4Q3esBfXdoTHKTZ1YiuibMp" ], "script": "base64:BgIlCAISBgoECAgICBIAEgMKAQgSABIECgIICBIFCgMICAESAwoBCCIBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQENd3JpdGVDb25zdEludAIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEId3JpdGVJbnQCA2tleQV2YWx1ZQMJAGYCAAAFBXZhbHVlCQACAQkArAICCQCsAgIJAKwCAgIXd3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSAJAKQDAQUFdmFsdWUCCSBmb3Iga2V5IAUDa2V5CQEMSW50ZWdlckVudHJ5AgUDa2V5BQV2YWx1ZQEIY2hhbmdlQnkCA2tleQV2YWx1ZQkBCHdyaXRlSW50AgUDa2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAUFdmFsdWUAC2NvbmZpZ1N0b3JlAgZjb25maWcADWNvbmZpZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFC2NvbmZpZ1N0b3JlABJtYXliZU9yYWNsZUFkZHJlc3MEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIOb3JhY2xlX2FkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMFBHVuaXQABkhFSUdIVAUGaGVpZ2h0AQlvcEFsbG93ZWQBAm9wBAckbWF0Y2gwCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCAgR1c2RuCQDMCAIFAm9wBQNuaWwFA25pbAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwAwUBYgYJAAIBAgtub3QgYWxsb3dlZAkAAgECIW9wQWxsb3dlZDogdW5leHBlY3RlZCByZXN1bHQgdHlwZQEIbWFpbk9ubHkBAWkDCQEIY29udGFpbnMCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1jb25maWdBZGRyZXNzAgRtYWluCQClCAEIBQFpBmNhbGxlcgYJAAIBAhBvbmx5IG1haW4gY2FuIGRvAQd0aHJvd0lmAgljb25kaXRpb24FZXJyb3IDBQljb25kaXRpb24JAAIBBQVlcnJvcgYACVRJTUVGUkFNRQCgCwAEdXNkYwkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIEdXNkYwAEdXNkdAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIEdXNkdAAEdXNkbgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIEdXNkbgERYWRkcmVzc0Fzc2V0U3RvcmUCB2FkZHJlc3MHYXNzZXRJZAkArAICCQCsAgIFB2FkZHJlc3MCAV8FB2Fzc2V0SWQBFWFkZHJlc3NBc3NldFVTRE5TdG9yZQIHYWRkcmVzcwdhc3NldElkCQCsAgIJAKwCAgkArAICBQdhZGRyZXNzAgFfBQdhc3NldElkAgVfdXNkbgEVYWRkcmVzc1RvdGFsVVNETlN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCBV91c2RuAQ90b3RhbEFzc2V0U3RvcmUBB2Fzc2V0SWQJAKwCAgIGdG90YWxfBQdhc3NldElkARF2ZXN0aW5nU3RhcnRTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAg5fdmVzdGluZ19zdGFydAESY29udmVydGVkVG9McFN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEF9jb252ZXJ0ZWRfdG9fbHABE3Zlc3RpbmdDbGFpbWVkU3RvcmUBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIIX2NsYWltZWQBGXdpdGhkcmF3bldpdGhpbkVwb2NoU3RvcmUDCmVwb2NoU3RhcnQHYWRkcmVzcwdhc3NldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBXwUHYXNzZXRJZAIBXwkApAMBBQplcG9jaFN0YXJ0Ahdfd2l0aGRyYXduX3dpdGhpbl9lcG9jaAARY3VycmVudEVwb2NoU3RhcnQJAGgCCQBpAgUGSEVJR0hUBQlUSU1FRlJBTUUFCVRJTUVGUkFNRQAQbWluaU1heENsYWltVXNkbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1jb25maWdBZGRyZXNzAhJtaW5pbWF4VmVzdGluZ1VzZG4JAGgCAOgHAMCEPQAOdG90YWxVU0ROU3RvcmUCCnRvdGFsX3VzZG4ADXZlc3RpbmdQZXJpb2QJAGgCAKALAO0CARN3aXRoZHJhd25Ub2RheVN0b3JlAQdhZGRyZXNzCQEZd2l0aGRyYXduV2l0aGluRXBvY2hTdG9yZQMFEWN1cnJlbnRFcG9jaFN0YXJ0BQdhZGRyZXNzBQR1c2RuAQ53aXRoZHJhd25Ub2RheQEHYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETd2l0aGRyYXduVG9kYXlTdG9yZQEFB2FkZHJlc3MAAAESdXNlclZlc3RpbmdCYWxhbmNlAQdhZGRyZXNzBAVjVVNETgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEVYWRkcmVzc0Fzc2V0VVNETlN0b3JlAgUHYWRkcmVzcwUEdXNkYwAABAV0VVNETgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEVYWRkcmVzc0Fzc2V0VVNETlN0b3JlAgUHYWRkcmVzcwUEdXNkdAAABAx0b3RhbFZlc3RpbmcJAGQCBQVjVVNETgUFdFVTRE4EDmFscmVhZHlDbGFpbWVkCQELdmFsdWVPckVsc2UCCQCfCAEJARN2ZXN0aW5nQ2xhaW1lZFN0b3JlAQUHYWRkcmVzcwAABA1jb252ZXJ0ZWRUb0xQCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARJjb252ZXJ0ZWRUb0xwU3RvcmUBBQdhZGRyZXNzAAAEDGNsYWltZWRUb2RheQkBDndpdGhkcmF3blRvZGF5AQUHYWRkcmVzcwQJYXZhaWxhYmxlCQBlAgkAZQIFDHRvdGFsVmVzdGluZwUOYWxyZWFkeUNsYWltZWQFDWNvbnZlcnRlZFRvTFAEByRtYXRjaDAJAJoIAgUEdGhpcwkBEXZlc3RpbmdTdGFydFN0b3JlAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgNJbnQEDHZlc3RpbmdTdGFydAUHJG1hdGNoMAQIZWxpZ2libGUDCQBmAgUGSEVJR0hUCQBkAgUMdmVzdGluZ1N0YXJ0BQ12ZXN0aW5nUGVyaW9kBQx0b3RhbFZlc3RpbmcJAGsDBQx0b3RhbFZlc3RpbmcJAGUCBQZIRUlHSFQFDHZlc3RpbmdTdGFydAUNdmVzdGluZ1BlcmlvZAQOYXZhaWxhYmxlVG9kYXkJAJcDAQkAzAgCBQlhdmFpbGFibGUJAMwIAgkAZQIFCGVsaWdpYmxlBQ5hbHJlYWR5Q2xhaW1lZAkAzAgCCQBlAgkAlgMBCQDMCAIFEG1pbmlNYXhDbGFpbVVzZG4JAMwIAgkAaQIFDHRvdGFsVmVzdGluZwDtAgUDbmlsBQxjbGFpbWVkVG9kYXkFA25pbAkAmwoJBQx0b3RhbFZlc3RpbmcFDmFscmVhZHlDbGFpbWVkBQhlbGlnaWJsZQUMdmVzdGluZ1N0YXJ0CQBkAgUMdmVzdGluZ1N0YXJ0BQ12ZXN0aW5nUGVyaW9kBQxjbGFpbWVkVG9kYXkFDmF2YWlsYWJsZVRvZGF5BQ1jb252ZXJ0ZWRUb0xQBQlhdmFpbGFibGUJAJsKCQAAAAAA////////////AQD///////////8BAP///////////wEA////////////AQD///////////8BAAAAAAEKYWR2aXNlVXNlcgEHYWRkcmVzcwQLJHQwMzg3NTQwMTcJARJ1c2VyVmVzdGluZ0JhbGFuY2UBBQdhZGRyZXNzBAx0b3RhbFZlc3RpbmcIBQskdDAzODc1NDAxNwJfMQQOYWxyZWFkeUNsYWltZWQIBQskdDAzODc1NDAxNwJfMgQIZWxpZ2libGUIBQskdDAzODc1NDAxNwJfMwQFc3RhcnQIBQskdDAzODc1NDAxNwJfNAQDZW5kCAULJHQwMzg3NTQwMTcCXzUEDGNsYWltZWRUb2RheQgFCyR0MDM4NzU0MDE3Al82BA5hdmFpbGFibGVUb2RheQgFCyR0MDM4NzU0MDE3Al83BA1jb252ZXJ0ZWRUb0xQCAULJHQwMzg3NTQwMTcCXzgECWF2YWlsYWJsZQgFCyR0MDM4NzU0MDE3Al85BAFjCQELdmFsdWVPckVsc2UCCQCfCAEJARFhZGRyZXNzQXNzZXRTdG9yZQIFB2FkZHJlc3MFBHVzZGMAAAQBdAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQERYWRkcmVzc0Fzc2V0U3RvcmUCBQdhZGRyZXNzBQR1c2R0AAAJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhZGRyZXNzOiAFB2FkZHJlc3MCECwgdG90YWxWZXN0aW5nOiAJAKQDAQUMdG90YWxWZXN0aW5nAhIsIGFscmVhZHlDbGFpbWVkOiAJAKQDAQUOYWxyZWFkeUNsYWltZWQCDCwgZWxpZ2libGU6IAkApAMBBQhlbGlnaWJsZQIPLCBzdGFydEhlaWdodDogCQCkAwEFBXN0YXJ0Ag0sIGVuZEhlaWdodDogCQCkAwEFA2VuZAINLCBub3dIZWlnaHQ6IAkApAMBBQZIRUlHSFQCESwgdXNkY19taWdyYXRlZDogCQCkAwEFAWMCESwgdXNkdF9taWdyYXRlZDogCQCkAwEFAXQCECwgdXNkY19hc3NldElkOiAFBHVzZGMCECwgdXNkdF9hc3NldElkOiAFBHVzZHQCDiwgZGFpbHlMaW1pdDogCQCkAwEJAJYDAQkAzAgCCQBpAgUMdG90YWxWZXN0aW5nAO0CCQDMCAIFEG1pbmlNYXhDbGFpbVVzZG4FA25pbAIQLCBjbGFpbWVkVG9kYXk6IAkApAMBBQxjbGFpbWVkVG9kYXkCEiwgYXZhaWxhYmxlVG9kYXk6IAkApAMBBQ5hdmFpbGFibGVUb2RheQIRLCBjb252ZXJ0ZWRUb0xQOiAJAKQDAQUNY29udmVydGVkVG9MUAEWd2l0aGRyYXdWZXN0ZWRJbnRlcm5hbAIHYWRkcmVzcwJ0bwQGY2hlY2tzCQEJb3BBbGxvd2VkAQIXbGlxdWlkYW9fd2l0aGRyYXdWZXN0ZWQDCQAAAgUGY2hlY2tzBQZjaGVja3MECyR0MDUwMTU1MTU3CQESdXNlclZlc3RpbmdCYWxhbmNlAQUHYWRkcmVzcwQMdG90YWxWZXN0aW5nCAULJHQwNTAxNTUxNTcCXzEEDmFscmVhZHlDbGFpbWVkCAULJHQwNTAxNTUxNTcCXzIECGVsaWdpYmxlCAULJHQwNTAxNTUxNTcCXzMEBXN0YXJ0CAULJHQwNTAxNTUxNTcCXzQEA2VuZAgFCyR0MDUwMTU1MTU3Al81BAxjbGFpbWVkVG9kYXkIBQskdDA1MDE1NTE1NwJfNgQOYXZhaWxhYmxlVG9kYXkIBQskdDA1MDE1NTE1NwJfNwQNY29udmVydGVkVG9MUAgFCyR0MDUwMTU1MTU3Al84BAlhdmFpbGFibGUIBQskdDA1MDE1NTE1NwJfOQMJAGYCAAAFBXN0YXJ0CQACAQISbm8gdmVzdGluZyBlbmFibGVkAwkAZwIAAAUOYXZhaWxhYmxlVG9kYXkJAAIBAhFub3RoaW5nIGF2YWlsYWJsZQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAnRvBQ5hdmFpbGFibGVUb2RheQkA2QQBBQR1c2RuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETdmVzdGluZ0NsYWltZWRTdG9yZQEFB2FkZHJlc3MJAGQCBQ5hbHJlYWR5Q2xhaW1lZAUOYXZhaWxhYmxlVG9kYXkJAMwIAgkBCGNoYW5nZUJ5AgkBE3dpdGhkcmF3blRvZGF5U3RvcmUBBQdhZGRyZXNzBQ5hdmFpbGFibGVUb2RheQUDbmlsBQ5hdmFpbGFibGVUb2RheQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEdcGFydGlhbFdpdGhkcmF3VmVzdGVkSW50ZXJuYWwDB2FkZHJlc3MCdG8DYW10BAZjaGVja3MJAQlvcEFsbG93ZWQBAhtsaXF1aWRhb193aXRoZHJhd1Zlc3RlZEFzTFADCQAAAgUGY2hlY2tzBQZjaGVja3MECyR0MDU2OTE1ODMzCQESdXNlclZlc3RpbmdCYWxhbmNlAQUHYWRkcmVzcwQMdG90YWxWZXN0aW5nCAULJHQwNTY5MTU4MzMCXzEEDmFscmVhZHlDbGFpbWVkCAULJHQwNTY5MTU4MzMCXzIECGVsaWdpYmxlCAULJHQwNTY5MTU4MzMCXzMEBXN0YXJ0CAULJHQwNTY5MTU4MzMCXzQEA2VuZAgFCyR0MDU2OTE1ODMzAl81BAxjbGFpbWVkVG9kYXkIBQskdDA1NjkxNTgzMwJfNgQOYXZhaWxhYmxlVG9kYXkIBQskdDA1NjkxNTgzMwJfNwQNY29udmVydGVkVG9MUAgFCyR0MDU2OTE1ODMzAl84BAlhdmFpbGFibGUIBQskdDA1NjkxNTgzMwJfOQMJAGYCBQNhbXQFCWF2YWlsYWJsZQkAAgECEnRvbyBtdWNoIHJlcXVlc3RlZAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAnRvBQNhbXQJANkEAQUEdXNkbgkAzAgCCQEIY2hhbmdlQnkCCQESY29udmVydGVkVG9McFN0b3JlAQUHYWRkcmVzcwUDYW10BQNuaWwFA2FtdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECc3YBB2FkZHJlc3MEBmNoZWNrcwkBCW9wQWxsb3dlZAECFWxpcXVpZGFvX3N0YXJ0VmVzdGluZwMJAAACBQZjaGVja3MFBmNoZWNrcwQKdXNlclRTdG9yZQkBEWFkZHJlc3NBc3NldFN0b3JlAgUHYWRkcmVzcwUEdXNkdAQKdXNlckNTdG9yZQkBEWFkZHJlc3NBc3NldFN0b3JlAgUHYWRkcmVzcwUEdXNkYwQKY29udmVydGVkQwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQp1c2VyQ1N0b3JlAAAECmNvbnZlcnRlZFQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUKdXNlclRTdG9yZQAAAwkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkBEXZlc3RpbmdTdGFydFN0b3JlAQUHYWRkcmVzcwUDbmlsBAckbWF0Y2gwCQCaCAIFBHRoaXMJARVhZGRyZXNzVG90YWxVU0ROU3RvcmUBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQOc3RhcnRlZFZlc3RpbmcFByRtYXRjaDAJAMwIAgkBCGNoYW5nZUJ5AgINY29tbWl0dGVkVVNETgUOc3RhcnRlZFZlc3RpbmcJAMwIAgkBDXdyaXRlQ29uc3RJbnQCCQERdmVzdGluZ1N0YXJ0U3RvcmUBBQdhZGRyZXNzBQZIRUlHSFQJAMwIAgkBCGNoYW5nZUJ5AgkBD3RvdGFsQXNzZXRTdG9yZQEFBHVzZGMJAQEtAQUKY29udmVydGVkQwkAzAgCCQELRGVsZXRlRW50cnkBBQp1c2VyQ1N0b3JlCQDMCAIJAQhjaGFuZ2VCeQIJAQ90b3RhbEFzc2V0U3RvcmUBBQR1c2R0CQEBLQEFCmNvbnZlcnRlZFQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKdXNlclRTdG9yZQUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4HAWkBBGluaXQEBGNvbmYDdElkA2NJZANuSWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhJvbmx5IHNlbGYgY2FuIGluaXQJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCBQtjb25maWdTdG9yZQUEY29uZgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBHVzZHQFA3RJZAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBHVzZGMFA2NJZAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwICBHVzZG4FA25JZAUDbmlsAWkBD3N0YXJ0VmVzdGluZ0FsbAAJAQJzdgEJAKUIAQgFAWkGY2FsbGVyAWkBEnN0YXJ0VmVzdGluZ0FsbEZvcgEHYWRkcmVzcwQHY2hlY2tzMAkBCG1haW5Pbmx5AQUBaQMJAAACBQdjaGVja3MwBQdjaGVja3MwCQECc3YBBQdhZGRyZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDndpdGhkcmF3VmVzdGVkAAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARZ3aXRoZHJhd1Zlc3RlZEludGVybmFsAgUHYWRkcmVzcwUHYWRkcmVzcwFpARN3aXRoZHJhd1Zlc3RlZEZvclRvAgNhY2MCdG8EB2NoZWNrczAJAQhtYWluT25seQEFAWkDCQAAAgUHY2hlY2tzMAUHY2hlY2tzMAkBFndpdGhkcmF3VmVzdGVkSW50ZXJuYWwCBQNhY2MFAnRvCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGnBhcnRpYWxXaXRoZHJhd1Zlc3RlZEZvclRvAwNhY2MCdG8DYW10BAdjaGVja3MwCQEIbWFpbk9ubHkBBQFpAwkAAAIFB2NoZWNrczAFB2NoZWNrczAJAR1wYXJ0aWFsV2l0aGRyYXdWZXN0ZWRJbnRlcm5hbAMFA2FjYwUCdG8FA2FtdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdhZHZpc2VVAQNhY2MJAJQKAgUDbmlsCQEKYWR2aXNlVXNlcgEFA2FjYwBVPd3g", "chainId": 87, "height": 3398082, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: c9okMe8f9WB98km9MkqULxiBt4M2WYrzNreEdzQSFY2 Next: Hj6q7hCQxNcMNDzgy4Pme8DAPsw4yd5psAPiWPe9bAVZ Diff:
OldNewDifferences
7575 func vestingStartStore (address) = (address + "_vesting_start")
7676
7777
78+func convertedToLpStore (address) = (address + "_converted_to_lp")
79+
80+
7881 func vestingClaimedStore (address) = (address + "_claimed")
7982
8083
100103 let tUSDN = valueOrElse(getInteger(addressAssetUSDNStore(address, usdt)), 0)
101104 let totalVesting = (cUSDN + tUSDN)
102105 let alreadyClaimed = valueOrElse(getInteger(vestingClaimedStore(address)), 0)
106+ let convertedToLP = valueOrElse(getInteger(this, convertedToLpStore(address)), 0)
103107 let claimedToday = withdrawnToday(address)
108+ let available = ((totalVesting - alreadyClaimed) - convertedToLP)
104109 match getInteger(this, vestingStartStore(address)) {
105110 case vestingStart: Int =>
106111 let eligible = if ((HEIGHT > (vestingStart + vestingPeriod)))
107112 then totalVesting
108113 else fraction(totalVesting, (HEIGHT - vestingStart), vestingPeriod)
109- let availableToday = min([(eligible - alreadyClaimed), (max([miniMaxClaimUsdn, (totalVesting / 365)]) - claimedToday)])
110- $Tuple7(totalVesting, alreadyClaimed, eligible, vestingStart, (vestingStart + vestingPeriod), claimedToday, availableToday)
114+ let availableToday = min([available, (eligible - alreadyClaimed), (max([miniMaxClaimUsdn, (totalVesting / 365)]) - claimedToday)])
115+ $Tuple9(totalVesting, alreadyClaimed, eligible, vestingStart, (vestingStart + vestingPeriod), claimedToday, availableToday, convertedToLP, available)
111116 case _ =>
112- $Tuple7(totalVesting, 0, -1, -1, -1, -1, -1)
117+ $Tuple9(0, 0, -1, -1, -1, -1, -1, 0, 0)
113118 }
114119 }
115120
116121
117122 func adviseUser (address) = {
118- let $t036293745 = userVestingBalance(address)
119- let totalVesting = $t036293745._1
120- let alreadyClaimed = $t036293745._2
121- let eligible = $t036293745._3
122- let start = $t036293745._4
123- let end = $t036293745._5
124- let claimedToday = $t036293745._6
125- let availableToday = $t036293745._7
123+ let $t038754017 = userVestingBalance(address)
124+ let totalVesting = $t038754017._1
125+ let alreadyClaimed = $t038754017._2
126+ let eligible = $t038754017._3
127+ let start = $t038754017._4
128+ let end = $t038754017._5
129+ let claimedToday = $t038754017._6
130+ let availableToday = $t038754017._7
131+ let convertedToLP = $t038754017._8
132+ let available = $t038754017._9
126133 let c = valueOrElse(getInteger(addressAssetStore(address, usdc)), 0)
127134 let t = valueOrElse(getInteger(addressAssetStore(address, usdt)), 0)
128- ((((((((((((((((((((((((((("address: " + address) + ", totalVesting: ") + toString(totalVesting)) + ", alreadyClaimed: ") + toString(alreadyClaimed)) + ", eligible: ") + toString(eligible)) + ", startHeight: ") + toString(start)) + ", endHeight: ") + toString(end)) + ", nowHeight: ") + toString(HEIGHT)) + ", usdc_migrated: ") + toString(c)) + ", usdt_migrated: ") + toString(t)) + ", usdc_assetId: ") + usdc) + ", usdt_assetId: ") + usdt) + ", dailyLimit: ") + toString(max([(totalVesting / 365), miniMaxClaimUsdn]))) + ", claimedToday: ") + toString(claimedToday)) + ", availableToday: ") + toString(availableToday))
135+ ((((((((((((((((((((((((((((("address: " + address) + ", totalVesting: ") + toString(totalVesting)) + ", alreadyClaimed: ") + toString(alreadyClaimed)) + ", eligible: ") + toString(eligible)) + ", startHeight: ") + toString(start)) + ", endHeight: ") + toString(end)) + ", nowHeight: ") + toString(HEIGHT)) + ", usdc_migrated: ") + toString(c)) + ", usdt_migrated: ") + toString(t)) + ", usdc_assetId: ") + usdc) + ", usdt_assetId: ") + usdt) + ", dailyLimit: ") + toString(max([(totalVesting / 365), miniMaxClaimUsdn]))) + ", claimedToday: ") + toString(claimedToday)) + ", availableToday: ") + toString(availableToday)) + ", convertedToLP: ") + toString(convertedToLP))
129136 }
130137
131138
133140 let checks = opAllowed("liquidao_withdrawVested")
134141 if ((checks == checks))
135142 then {
136- let $t046874803 = userVestingBalance(address)
137- let totalVesting = $t046874803._1
138- let alreadyClaimed = $t046874803._2
139- let eligible = $t046874803._3
140- let start = $t046874803._4
141- let end = $t046874803._5
142- let claimedToday = $t046874803._6
143- let availableToday = $t046874803._7
143+ let $t050155157 = userVestingBalance(address)
144+ let totalVesting = $t050155157._1
145+ let alreadyClaimed = $t050155157._2
146+ let eligible = $t050155157._3
147+ let start = $t050155157._4
148+ let end = $t050155157._5
149+ let claimedToday = $t050155157._6
150+ let availableToday = $t050155157._7
151+ let convertedToLP = $t050155157._8
152+ let available = $t050155157._9
144153 if ((0 > start))
145154 then throw("no vesting enabled")
146155 else if ((0 >= availableToday))
147156 then throw("nothing available")
148157 else $Tuple2([ScriptTransfer(addressFromStringValue(to), availableToday, fromBase58String(usdn)), IntegerEntry(vestingClaimedStore(address), (alreadyClaimed + availableToday)), changeBy(withdrawnTodayStore(address), availableToday)], availableToday)
158+ }
159+ else throw("Strict value is not equal to itself.")
160+ }
161+
162+
163+func partialWithdrawVestedInternal (address,to,amt) = {
164+ let checks = opAllowed("liquidao_withdrawVestedAsLP")
165+ if ((checks == checks))
166+ then {
167+ let $t056915833 = userVestingBalance(address)
168+ let totalVesting = $t056915833._1
169+ let alreadyClaimed = $t056915833._2
170+ let eligible = $t056915833._3
171+ let start = $t056915833._4
172+ let end = $t056915833._5
173+ let claimedToday = $t056915833._6
174+ let availableToday = $t056915833._7
175+ let convertedToLP = $t056915833._8
176+ let available = $t056915833._9
177+ if ((amt > available))
178+ then throw("too much requested")
179+ else $Tuple2([ScriptTransfer(addressFromStringValue(to), amt, fromBase58String(usdn)), changeBy(convertedToLpStore(address), amt)], amt)
149180 }
150181 else throw("Strict value is not equal to itself.")
151182 }
213244
214245
215246 @Callable(i)
247+func partialWithdrawVestedForTo (acc,to,amt) = {
248+ let checks0 = mainOnly(i)
249+ if ((checks0 == checks0))
250+ then partialWithdrawVestedInternal(acc, to, amt)
251+ else throw("Strict value is not equal to itself.")
252+ }
253+
254+
255+
256+@Callable(i)
216257 func adviseU (acc) = $Tuple2(nil, adviseUser(acc))
217258
218259
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
55 then StringEntry(key, value)
66 else throw(("already initialized: " + key))
77
88
99 func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key))))
1010 then IntegerEntry(key, value)
1111 else throw(("already initialized: " + key))
1212
1313
1414 func writeInt (key,value) = if ((0 > value))
1515 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
1616 else IntegerEntry(key, value)
1717
1818
1919 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
2020
2121
2222 let configStore = "config"
2323
2424 let configAddress = addressFromStringValue(getStringValue(this, configStore))
2525
2626 let maybeOracleAddress = match getString(configAddress, "oracle_address") {
2727 case s: String =>
2828 addressFromString(s)
2929 case _ =>
3030 unit
3131 }
3232
3333 let HEIGHT = height
3434
3535 func opAllowed (op) = match invoke(configAddress, "opAllowed", ["usdn", op], nil) {
3636 case b: Boolean =>
3737 if (b)
3838 then true
3939 else throw("not allowed")
4040 case _ =>
4141 throw("opAllowed: unexpected result type")
4242 }
4343
4444
4545 func mainOnly (i) = if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
4646 then true
4747 else throw("only main can do")
4848
4949
5050 func throwIf (condition,error) = if (condition)
5151 then throw(error)
5252 else true
5353
5454
5555 let TIMEFRAME = 1440
5656
5757 let usdc = getStringValue(this, "usdc")
5858
5959 let usdt = getStringValue(this, "usdt")
6060
6161 let usdn = getStringValue(this, "usdn")
6262
6363 func addressAssetStore (address,assetId) = ((address + "_") + assetId)
6464
6565
6666 func addressAssetUSDNStore (address,assetId) = (((address + "_") + assetId) + "_usdn")
6767
6868
6969 func addressTotalUSDNStore (address) = (address + "_usdn")
7070
7171
7272 func totalAssetStore (assetId) = ("total_" + assetId)
7373
7474
7575 func vestingStartStore (address) = (address + "_vesting_start")
7676
7777
78+func convertedToLpStore (address) = (address + "_converted_to_lp")
79+
80+
7881 func vestingClaimedStore (address) = (address + "_claimed")
7982
8083
8184 func withdrawnWithinEpochStore (epochStart,address,assetId) = (((((address + "_") + assetId) + "_") + toString(epochStart)) + "_withdrawn_within_epoch")
8285
8386
8487 let currentEpochStart = ((HEIGHT / TIMEFRAME) * TIMEFRAME)
8588
8689 let miniMaxClaimUsdn = valueOrElse(getInteger(configAddress, "minimaxVestingUsdn"), (1000 * 1000000))
8790
8891 let totalUSDNStore = "total_usdn"
8992
9093 let vestingPeriod = (1440 * 365)
9194
9295 func withdrawnTodayStore (address) = withdrawnWithinEpochStore(currentEpochStart, address, usdn)
9396
9497
9598 func withdrawnToday (address) = valueOrElse(getInteger(withdrawnTodayStore(address)), 0)
9699
97100
98101 func userVestingBalance (address) = {
99102 let cUSDN = valueOrElse(getInteger(addressAssetUSDNStore(address, usdc)), 0)
100103 let tUSDN = valueOrElse(getInteger(addressAssetUSDNStore(address, usdt)), 0)
101104 let totalVesting = (cUSDN + tUSDN)
102105 let alreadyClaimed = valueOrElse(getInteger(vestingClaimedStore(address)), 0)
106+ let convertedToLP = valueOrElse(getInteger(this, convertedToLpStore(address)), 0)
103107 let claimedToday = withdrawnToday(address)
108+ let available = ((totalVesting - alreadyClaimed) - convertedToLP)
104109 match getInteger(this, vestingStartStore(address)) {
105110 case vestingStart: Int =>
106111 let eligible = if ((HEIGHT > (vestingStart + vestingPeriod)))
107112 then totalVesting
108113 else fraction(totalVesting, (HEIGHT - vestingStart), vestingPeriod)
109- let availableToday = min([(eligible - alreadyClaimed), (max([miniMaxClaimUsdn, (totalVesting / 365)]) - claimedToday)])
110- $Tuple7(totalVesting, alreadyClaimed, eligible, vestingStart, (vestingStart + vestingPeriod), claimedToday, availableToday)
114+ let availableToday = min([available, (eligible - alreadyClaimed), (max([miniMaxClaimUsdn, (totalVesting / 365)]) - claimedToday)])
115+ $Tuple9(totalVesting, alreadyClaimed, eligible, vestingStart, (vestingStart + vestingPeriod), claimedToday, availableToday, convertedToLP, available)
111116 case _ =>
112- $Tuple7(totalVesting, 0, -1, -1, -1, -1, -1)
117+ $Tuple9(0, 0, -1, -1, -1, -1, -1, 0, 0)
113118 }
114119 }
115120
116121
117122 func adviseUser (address) = {
118- let $t036293745 = userVestingBalance(address)
119- let totalVesting = $t036293745._1
120- let alreadyClaimed = $t036293745._2
121- let eligible = $t036293745._3
122- let start = $t036293745._4
123- let end = $t036293745._5
124- let claimedToday = $t036293745._6
125- let availableToday = $t036293745._7
123+ let $t038754017 = userVestingBalance(address)
124+ let totalVesting = $t038754017._1
125+ let alreadyClaimed = $t038754017._2
126+ let eligible = $t038754017._3
127+ let start = $t038754017._4
128+ let end = $t038754017._5
129+ let claimedToday = $t038754017._6
130+ let availableToday = $t038754017._7
131+ let convertedToLP = $t038754017._8
132+ let available = $t038754017._9
126133 let c = valueOrElse(getInteger(addressAssetStore(address, usdc)), 0)
127134 let t = valueOrElse(getInteger(addressAssetStore(address, usdt)), 0)
128- ((((((((((((((((((((((((((("address: " + address) + ", totalVesting: ") + toString(totalVesting)) + ", alreadyClaimed: ") + toString(alreadyClaimed)) + ", eligible: ") + toString(eligible)) + ", startHeight: ") + toString(start)) + ", endHeight: ") + toString(end)) + ", nowHeight: ") + toString(HEIGHT)) + ", usdc_migrated: ") + toString(c)) + ", usdt_migrated: ") + toString(t)) + ", usdc_assetId: ") + usdc) + ", usdt_assetId: ") + usdt) + ", dailyLimit: ") + toString(max([(totalVesting / 365), miniMaxClaimUsdn]))) + ", claimedToday: ") + toString(claimedToday)) + ", availableToday: ") + toString(availableToday))
135+ ((((((((((((((((((((((((((((("address: " + address) + ", totalVesting: ") + toString(totalVesting)) + ", alreadyClaimed: ") + toString(alreadyClaimed)) + ", eligible: ") + toString(eligible)) + ", startHeight: ") + toString(start)) + ", endHeight: ") + toString(end)) + ", nowHeight: ") + toString(HEIGHT)) + ", usdc_migrated: ") + toString(c)) + ", usdt_migrated: ") + toString(t)) + ", usdc_assetId: ") + usdc) + ", usdt_assetId: ") + usdt) + ", dailyLimit: ") + toString(max([(totalVesting / 365), miniMaxClaimUsdn]))) + ", claimedToday: ") + toString(claimedToday)) + ", availableToday: ") + toString(availableToday)) + ", convertedToLP: ") + toString(convertedToLP))
129136 }
130137
131138
132139 func withdrawVestedInternal (address,to) = {
133140 let checks = opAllowed("liquidao_withdrawVested")
134141 if ((checks == checks))
135142 then {
136- let $t046874803 = userVestingBalance(address)
137- let totalVesting = $t046874803._1
138- let alreadyClaimed = $t046874803._2
139- let eligible = $t046874803._3
140- let start = $t046874803._4
141- let end = $t046874803._5
142- let claimedToday = $t046874803._6
143- let availableToday = $t046874803._7
143+ let $t050155157 = userVestingBalance(address)
144+ let totalVesting = $t050155157._1
145+ let alreadyClaimed = $t050155157._2
146+ let eligible = $t050155157._3
147+ let start = $t050155157._4
148+ let end = $t050155157._5
149+ let claimedToday = $t050155157._6
150+ let availableToday = $t050155157._7
151+ let convertedToLP = $t050155157._8
152+ let available = $t050155157._9
144153 if ((0 > start))
145154 then throw("no vesting enabled")
146155 else if ((0 >= availableToday))
147156 then throw("nothing available")
148157 else $Tuple2([ScriptTransfer(addressFromStringValue(to), availableToday, fromBase58String(usdn)), IntegerEntry(vestingClaimedStore(address), (alreadyClaimed + availableToday)), changeBy(withdrawnTodayStore(address), availableToday)], availableToday)
158+ }
159+ else throw("Strict value is not equal to itself.")
160+ }
161+
162+
163+func partialWithdrawVestedInternal (address,to,amt) = {
164+ let checks = opAllowed("liquidao_withdrawVestedAsLP")
165+ if ((checks == checks))
166+ then {
167+ let $t056915833 = userVestingBalance(address)
168+ let totalVesting = $t056915833._1
169+ let alreadyClaimed = $t056915833._2
170+ let eligible = $t056915833._3
171+ let start = $t056915833._4
172+ let end = $t056915833._5
173+ let claimedToday = $t056915833._6
174+ let availableToday = $t056915833._7
175+ let convertedToLP = $t056915833._8
176+ let available = $t056915833._9
177+ if ((amt > available))
178+ then throw("too much requested")
179+ else $Tuple2([ScriptTransfer(addressFromStringValue(to), amt, fromBase58String(usdn)), changeBy(convertedToLpStore(address), amt)], amt)
149180 }
150181 else throw("Strict value is not equal to itself.")
151182 }
152183
153184
154185 func sv (address) = {
155186 let checks = opAllowed("liquidao_startVesting")
156187 if ((checks == checks))
157188 then {
158189 let userTStore = addressAssetStore(address, usdt)
159190 let userCStore = addressAssetStore(address, usdc)
160191 let convertedC = valueOrElse(getInteger(this, userCStore), 0)
161192 let convertedT = valueOrElse(getInteger(this, userTStore), 0)
162193 if (isDefined(getInteger(this, vestingStartStore(address))))
163194 then nil
164195 else match getInteger(this, addressTotalUSDNStore(address)) {
165196 case startedVesting: Int =>
166197 [changeBy("committedUSDN", startedVesting), writeConstInt(vestingStartStore(address), HEIGHT), changeBy(totalAssetStore(usdc), -(convertedC)), DeleteEntry(userCStore), changeBy(totalAssetStore(usdt), -(convertedT)), DeleteEntry(userTStore)]
167198 case _ =>
168199 nil
169200 }
170201 }
171202 else throw("Strict value is not equal to itself.")
172203 }
173204
174205
175206 @Callable(i)
176207 func init (conf,tId,cId,nId) = if ((i.caller != this))
177208 then throw("only self can init")
178209 else [writeConstString(configStore, conf), writeConstString("usdt", tId), writeConstString("usdc", cId), writeConstString("usdn", nId)]
179210
180211
181212
182213 @Callable(i)
183214 func startVestingAll () = sv(toString(i.caller))
184215
185216
186217
187218 @Callable(i)
188219 func startVestingAllFor (address) = {
189220 let checks0 = mainOnly(i)
190221 if ((checks0 == checks0))
191222 then sv(address)
192223 else throw("Strict value is not equal to itself.")
193224 }
194225
195226
196227
197228 @Callable(i)
198229 func withdrawVested () = {
199230 let address = toString(i.caller)
200231 withdrawVestedInternal(address, address)
201232 }
202233
203234
204235
205236 @Callable(i)
206237 func withdrawVestedForTo (acc,to) = {
207238 let checks0 = mainOnly(i)
208239 if ((checks0 == checks0))
209240 then withdrawVestedInternal(acc, to)
210241 else throw("Strict value is not equal to itself.")
211242 }
212243
213244
214245
215246 @Callable(i)
247+func partialWithdrawVestedForTo (acc,to,amt) = {
248+ let checks0 = mainOnly(i)
249+ if ((checks0 == checks0))
250+ then partialWithdrawVestedInternal(acc, to, amt)
251+ else throw("Strict value is not equal to itself.")
252+ }
253+
254+
255+
256+@Callable(i)
216257 func adviseU (acc) = $Tuple2(nil, adviseUser(acc))
217258
218259

github/deemru/w8io/3ef1775 
47.38 ms