tx · AA9EwSwRWMdm5VjUeMZCFeEXxaJx7yJ6kVfboKvYAGJj

3PQV9AUMU36fdDYMmMZw6urSYG3BuMahQuk:  -0.01100000 Waves

2022.07.27 14:25 [3223660] smart account 3PQV9AUMU36fdDYMmMZw6urSYG3BuMahQuk > SELF 0.00000000 Waves

{ "type": 13, "id": "AA9EwSwRWMdm5VjUeMZCFeEXxaJx7yJ6kVfboKvYAGJj", "fee": 1100000, "feeAssetId": null, "timestamp": 1658921151612, "version": 2, "chainId": 87, "sender": "3PQV9AUMU36fdDYMmMZw6urSYG3BuMahQuk", "senderPublicKey": "8bMNZV1S5S2hfim2ZPy5hsSdC1AHBwPHUEXPBhdEF2Mk", "proofs": [ "5ycNtqcsnbyg5CqHjJvm16xnoAPZ7exgXWbb8PFnC9oGcATnT4gyfh9eDLhPWUJcwsXfenyxk3iLFD5nJyM9U6Ca" ], "script": "base64:BgLmCggCEgASABIAEgASABIAEgASABIAEgASABIAIgp1c2R0VXNkbkxQIg11c2R0VXNkbkxQVENJIgh3eFVzZG5MUCILd3hVc2RuTFBUQ0kiCnVzZGNVc2RuTFAiDXVzZGNVc2RuTFBUQ0kiCnVzZGNVc2R0TFAiDXVzZGNVc2R0TFBUQ0kiDHB1enpsZVVzZG5MUCIPcHV6emxlVXNkbkxQVENJIgR3eElkIg5rZXlTcG9uc29yc2hpcCIJaXNTdG9wcGVkIglrZXlTdGFrZWQiC2tleUNvbXBvdW5kIhFrZXl3eFVzZG5Db21wb3VuZCIJa2V5V1hVU0ROIhNrZXlVc2RjVXNkbkNvbXBvdW5kIgtrZXlVU0RDVVNETiITa2V5VXNkY1VzZHRDb21wb3VuZCILa2V5VVNEQ1VTRFQiFWtleVB1enpsZVVzZG5Db21wb3VuZCINa2V5UFVaWkxFVVNETiIDZGVmIgdmZWVQZXJjIgJ0dyIGb3JhY2xlIgxjaGVja0FkZHJlc3MiBmNhbGxlciIBaSIDcG10IglwbXRBbW91bnQiCHRrU3Rha2VkIgt0b3RhbElzc3VlZCIHJG1hdGNoMCIFYXNzZXQiA29uZSIHdG9Jc3N1ZSILdXBkYXRlU3RhdGUiB0xQc3Rha2UiB0xQSXNzdWUiCHRyYW5zZmVyIgxmcm9tQ29tcG91bmQiBmZvck9uZSIHcGF5bWVudCICYW0iAmlkIglUQ0lBbW91bnQiAXEiDnVzZG5Vc2R0U3Rha2VkIgxmb3JTaW5nbGVUQ0kiEHVzZG5McFRvV2l0aGRyYXciA2ZlZSIRdW5zdGFrZVVzZHRVc2RuTFAiEXVzZG5McGZlZVRyYW5zZmVyIhJ1cGRhdGVVc2RuTHBTdGFrZWQiA2JybiIHd3hUY2lBbSIMd3hVc2RuU3Rha2VkIgpzaW5nbGVXWExQIg53eExwVG9XaXRoZHJhdyIPdW5zdGFrZVd4VXNkbkxQIg93eExwRmVlVHJhbnNmZXIiDHd4THBUcmFuc2ZlciIQdXBkYXRlV3hMcFN0YWtlZCILYnVybld4THBUY2kiC3VzZGNVc2RuVENJIg51c2RjVXNkblN0YWtlZCIMc2luZ2xlVXNkY0xQIhR1c2RjVXNkbkxwVG9XaXRoZHJhdyIRdW5zdGFrZVVzZGNVc2Ru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BQFaBQJhYQUBYQQCYWQJAQxJbnRlZ2VyRW50cnkCBQFuCQBlAgUBWAUBWgQCYWUJAQRCdXJuAgUBYgUBVAMJAAACBQJhZQUCYWUJAMwIAgUCYWMJAMwIAgUBUAkAzAgCBQJhZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFAVUFAWQEAmFmBAFJCQDsBwEFAWQDCQABAgUBSQIFQXNzZXQEAVcFAUkIBQFXCHF1YW50aXR5AAAEAmFnCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAXEAAAQCYWgJAGsDBQJhZwUBeAUCYWYEAmFpCQBrAwUCYWgFAVQFAXgEAmFhCQBrAwUCYWkFAXgFAXkEAmFqCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCB3Vuc3Rha2UJAMwIAgIsRjJBS2tBNTEzazV5SEVKa0xzVTZ2V3hDWVlrODExR3BqTGh3RXYyV0d3WjkJAMwIAgUCYWkFA25pbAUDbmlsAwkAAAIFAmFqBQJhagQCYWsJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUBegUCYWEFAWMEAmFsCQEOU2NyaXB0VHJhbnNmZXIDCAUBRAZjYWxsZXIJAGUCBQJhaQUCYWEFAWMEAmFtCQEMSW50ZWdlckVudHJ5AgUBcQkAZQIFAmFnBQJhaQQCYW4JAQRCdXJuAgUBYwUBVAMJAAACBQJhbgUCYW4JAMwIAgUCYWsJAMwIAgUCYWwJAMwIAgUCYW0FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQFVBQFmBAJhbwQBSQkA7AcBBQFmAwkAAQIFAUkCBUFzc2V0BAFXBQFJCAUBVwhxdWFudGl0eQAABAJhcAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFzAAAEAmFxCQBrAwUCYXAFAXgFAmFvBAJhcgkAawMFAmFxBQFUBQF4BAJhYQkAawMFAmFyBQF4BQF5BAJhcwkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgd1bnN0YWtlCQDMCAICK0VLNk43UzM4eGJ0QlQzU3hBcW9HZERMQ2lYNnJvalg2RzE2OUNuU3l1RTUJAMwIAgUCYXIFA25pbAUDbmlsAwkAAAIFAmFzBQJhcwQCYXQJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUBegUCYWEFAWUEAmF1CQEOU2NyaXB0VHJhbnNmZXIDCAUBRAZjYWxsZXIJAGUCBQJhcgUCYWEFAWUEAmF2CQEMSW50ZWdlckVudHJ5AgUBcwkAZQIFAmFwBQJhcgQCYXcJAQRCdXJuAgUBZgUBVAMJAAACBQJhdwUCYXcJAMwIAgUCYXQJAMwIAgUCYXUJAMwIAgUCYXYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQFVBQFoBAJheAQBSQkA7AcBBQFmAwkAAQIFAUkCBUFzc2V0BAFXBQFJCAUBVwhxdWFudGl0eQAABAJheQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQF1AAAEAmF6CQBrAwUCYXkFAXgFAmF4BAJhQQkAawMFAmF6BQFUBQF4BAJhYQkAawMFAmFBBQF4BQF5BAJhQgkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgd1bnN0YWtlCQDMCAICLEVQaGRFZm1RYU5jSHl2RG1SR2huTGhnY0p0S1oyYTRrM1pCbUtXdEFFV3lICQDMCAIFAmFBBQNuaWwFA25pbAMJAAACBQJhQgUCYUIEAmFDCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFAXoFAmFhBQFnBAJhRAkBDlNjcmlwdFRyYW5zZmVyAwgFAUQGY2FsbGVyCQBlAgUCYUEFAmFhBQFnBAJhRQkBDEludGVnZXJFbnRyeQIFAXUJAGUCBQJheQUCYUEEAmFuCQEEQnVybgIFAWYFAVQDCQAAAgUCYW4FAmFuCQDMCAIFAmFDCQDMCAIFAmFECQDMCAIFAmFFBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUBVQUBagQCYUYEAUkJAOwHAQUBagMJAAECBQFJAgVBc3NldAQBVwUBSQgFAVcIcXVhbnRpdHkAAAQCYUcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBdwAABAJhSAkAawMFAmFHBQF4BQJhRgQCYUkJAGsDBQJhSAUBVAUBeAQCYWEJAGsDBQJhSQUBeAUBeQQCYUoJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIHdW5zdGFrZQkAzAgCAixFOHpIdTMzR2ZjTnlHTHlwWDc3Z1ppVVhmdnVaUWVhWW1pRWZzeTdWWU53UAkAzAgCBQJhSQUDbmlsBQNuaWwDCQAAAgUCYUoFAmFKBAJhSwkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQF6BQJhYQUBaQQCYUwJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFEBmNhbGxlcgkAZQIFAmFJBQJhYQUBaQQCYU0JAQxJbnRlZ2VyRW50cnkCBQF3CQBlAgUCYUcFAmFJBAJhTgkBBEJ1cm4CBQFqBQFUAwkAAAIFAmFOBQJhTgkAzAgCBQJhSwkAzAgCBQJhTAkAzAgCBQJhTQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQINSW52YWxpZCBhc3NldAFEARBjb21wb3VuZFd4VXNkbkxQAAQCYU8JAQV2YWx1ZQEJAJEDAggFAUQIcGF5bWVudHMAAAQCYVAIBQJhTwZhbW91bnQEAmFRCQEBQgEICAUBRAZjYWxsZXIFYnl0ZXMDCQECIT0CCAUCYU8HYXNzZXRJZAUBYwkAAgECG2F0dGFjaCBXWFVTRE5MUCB0b2tlbnMgb25seQMJAQEhAQUCYVEJAAIBAixZb3UgYXJlIG5vdCBhdXRob3RpemVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgQBUQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFwAAAEAmFSCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAXEAAAQCYVMJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIFc3Rha2UFA25pbAkAzAgCBQJhTwUDbmlsAwkAAAIFAmFTBQJhUwQBTQkBDEludGVnZXJFbnRyeQIFAXEJAGQCBQJhUgUCYVAEAmFUCQEMSW50ZWdlckVudHJ5AgUBcAkAZAIFAVEFAmFQCQDMCAIFAU0JAMwIAgUCYVQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFEARJjb21wb3VuZFVzZHRVc2RuTFAABAJhTwkBBXZhbHVlAQkAkQMCCAUBRAhwYXltZW50cwAABAJhUAgFAmFPBmFtb3VudAQCYVEJAQFCAQgIBQFEBmNhbGxlcgVieXRlcwMJAQIhPQIIBQJhTwdhc3NldElkBQFhCQACAQIdYXR0YWNoIFVTRFRVU0ROTFAgdG9rZW5zIG9ubHkDCQEBIQEFAmFRCQACAQIsWW91IGFyZSBub3QgYXV0aG90aXplZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24EAVEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBbwAABAJhUgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFuAAAEAmFTCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUCYU8FA25pbAMJAAACBQJhUwUCYVMEAU0JAQxJbnRlZ2VyRW50cnkCBQFuCQBkAgUCYVIFAmFQBAJhVAkBDEludGVnZXJFbnRyeQIFAW8JAGQCBQFRBQJhUAkAzAgCBQFNCQDMCAIFAmFUBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BRAESY29tcG91bmRVc2RjVXNkbkxQAAQCYU8JAQV2YWx1ZQEJAJEDAggFAUQIcGF5bWVudHMAAAQCYVAIBQJhTwZhbW91bnQEAmFRCQEBQgEICAUBRAZjYWxsZXIFYnl0ZXMDCQECIT0CCAUCYU8HYXNzZXRJZAUBZQkAAgECHWF0dGFjaCBVU0RDVVNETkxQIHRva2VucyBvbmx5AwkBASEBBQJhUQkAAgECLFlvdSBhcmUgbm90IGF1dGhvdGl6ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uBAFRCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAXIAAAQCYVIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBcwAABAJhUwkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFAmFPBQNuaWwDCQAAAgUCYVMFAmFTBAFNCQEMSW50ZWdlckVudHJ5AgUBcwkAZAIFAmFSBQJhUAQCYVQJAQxJbnRlZ2VyRW50cnkCBQFyCQBkAgUBUQUCYVAJAMwIAgUBTQkAzAgCBQJhVAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAUQBEmNvbXBvdW5kVXNkY1VzZHRMUAAEAmFPCQEFdmFsdWUBCQCRAwIIBQFECHBheW1lbnRzAAAEAmFQCAUCYU8GYW1vdW50BAJhUQkBAUIBCAgFAUQGY2FsbGVyBWJ5dGVzAwkBAiE9AggFAmFPB2Fzc2V0SWQFAWcJAAIBAh1hdHRhY2ggVVNEQ1VTRFRMUCB0b2tlbnMgb25seQMJAQEhAQUCYVEJAAIBAixZb3UgYXJlIG5vdCBhdXRob3RpemVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgQBUQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQF0AAAEAmFSCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAXUAAAQCYVMJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIFc3Rha2UFA25pbAkAzAgCBQJhTwUDbmlsAwkAAAIFAmFTBQJhUwQBTQkBDEludGVnZXJFbnRyeQIFAXUJAGQCBQJhUgUCYVAEAmFUCQEMSW50ZWdlckVudHJ5AgUBdAkAZAIFAVEFAmFQCQDMCAIFAU0JAMwIAgUCYVQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFEARRjb21wb3VuZFB1enpsZVVzZG5MUAAEAmFPCQEFdmFsdWUBCQCRAwIIBQFECHBheW1lbnRzAAAEAmFQCAUCYU8GYW1vdW50BAJhUQkBAUIBCAgFAUQGY2FsbGVyBWJ5dGVzAwkBAiE9AggFAmFPB2Fzc2V0SWQFAWkJAAIBAh9hdHRhY2ggUFVaWkxFVVNETkxQIHRva2VucyBvbmx5AwkBASEBBQJhUQkAAgECLFlvdSBhcmUgbm90IGF1dGhvdGl6ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uBAFRCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAXYAAAQCYVIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBdwAABAJhUwkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFAmFPBQNuaWwDCQAAAgUCYVMFAmFTBAFNCQEMSW50ZWdlckVudHJ5AgUBdwkAZAIFAmFSBQJhUAQCYVQJAQxJbnRlZ2VyRW50cnkCBQF2CQBkAgUBUQUCYVAJAMwIAgUBTQkAzAgCBQJhVAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAUQBDHNwb25zb3JCb29zdAAEAmFVCQEFdmFsdWUBCQCRAwIIBQFECHBheW1lbnRzAAAEAmFWAGQDCQECIT0CCAUCYVUHYXNzZXRJZAUBawkAAgECBUVycm9yBAJhVwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFsAAAEAmFYCQD8BwQJAQdBZGRyZXNzAQEaAVez5uZVGBFpsOQzD4hRQ6ScrtbVSwNLEVgCDGluY3JlYXNlTG9jawkAzAgCBQJhVgUDbmlsCQDMCAIFAmFVBQNuaWwDCQAAAgUCYVgFAmFYBAJhWQkBDEludGVnZXJFbnRyeQIFAWwJAGQCCAUCYVUGYW1vdW50BQJhVwkAzAgCBQJhWQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJhWgECYmEACQD0AwMIBQJhWglib2R5Qnl0ZXMJAJEDAggFAmFaBnByb29mcwAACAUCYVoPc2VuZGVyUHVibGljS2V5xV/3Vw==", "height": 3223660, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AU1Z3PQoMtyKfmycrDZNuYvjESVwfh2jrNrmDQ9Cmy1y Next: 3PWq1F2wk2ckL6qTDsRK6AkVTx2ewqcjrzCR4jjn4Wz4 Diff:
OldNewDifferences
4646 let keyPuzzleUsdnCompound = "PUZZLE_USDN_compound"
4747
4848 let keyPUZZLEUSDN = "PUZZLE_USDN"
49+
50+let def = 100000000
51+
52+let feePerc = 10000000000
53+
54+let tw = base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm'
4955
5056 let oracle = base58'3P6phwFZFQtZFuc9dvdXsgvtg8JEFVgECPA'
5157
219225
220226
221227 @Callable(i)
228+func withdraw () = {
229+ let payment = value(i.payments[0])
230+ let am = payment.amount
231+ let id = payment.assetId
232+ if ((id == usdtUsdnLP))
233+ then {
234+ let TCIAmount = match assetInfo(usdtUsdnLPTCI) {
235+ case q: Asset =>
236+ q.quantity
237+ case _ =>
238+ 0
239+ }
240+ let usdnUsdtStaked = valueOrElse(getInteger(this, keyStaked), 0)
241+ let forSingleTCI = fraction(usdnUsdtStaked, def, TCIAmount)
242+ let usdnLpToWithdraw = fraction(forSingleTCI, am, def)
243+ let fee = fraction(usdnLpToWithdraw, def, feePerc)
244+ let unstakeUsdtUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf", usdnLpToWithdraw], nil)
245+ if ((unstakeUsdtUsdnLP == unstakeUsdtUsdnLP))
246+ then {
247+ let usdnLpfeeTransfer = ScriptTransfer(Address(tw), fee, usdtUsdnLP)
248+ let transfer = ScriptTransfer(i.caller, (usdnLpToWithdraw - fee), usdtUsdnLP)
249+ let updateUsdnLpStaked = IntegerEntry(keyStaked, (usdnUsdtStaked - usdnLpToWithdraw))
250+ let brn = Burn(usdtUsdnLPTCI, am)
251+ if ((brn == brn))
252+ then [usdnLpfeeTransfer, transfer, updateUsdnLpStaked]
253+ else throw("Strict value is not equal to itself.")
254+ }
255+ else throw("Strict value is not equal to itself.")
256+ }
257+ else if ((id == wxUsdnLPTCI))
258+ then {
259+ let wxTciAm = match assetInfo(wxUsdnLPTCI) {
260+ case q: Asset =>
261+ q.quantity
262+ case _ =>
263+ 0
264+ }
265+ let wxUsdnStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
266+ let singleWXLP = fraction(wxUsdnStaked, def, wxTciAm)
267+ let wxLpToWithdraw = fraction(singleWXLP, am, def)
268+ let fee = fraction(wxLpToWithdraw, def, feePerc)
269+ let unstakeWxUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", wxLpToWithdraw], nil)
270+ if ((unstakeWxUsdnLP == unstakeWxUsdnLP))
271+ then {
272+ let wxLpFeeTransfer = ScriptTransfer(Address(tw), fee, wxUsdnLP)
273+ let wxLpTransfer = ScriptTransfer(i.caller, (wxLpToWithdraw - fee), wxUsdnLP)
274+ let updateWxLpStaked = IntegerEntry(keyWXUSDN, (wxUsdnStaked - wxLpToWithdraw))
275+ let burnWxLpTci = Burn(wxUsdnLP, am)
276+ if ((burnWxLpTci == burnWxLpTci))
277+ then [wxLpFeeTransfer, wxLpTransfer, updateWxLpStaked]
278+ else throw("Strict value is not equal to itself.")
279+ }
280+ else throw("Strict value is not equal to itself.")
281+ }
282+ else if ((id == usdcUsdnLPTCI))
283+ then {
284+ let usdcUsdnTCI = match assetInfo(usdcUsdnLPTCI) {
285+ case q: Asset =>
286+ q.quantity
287+ case _ =>
288+ 0
289+ }
290+ let usdcUsdnStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
291+ let singleUsdcLP = fraction(usdcUsdnStaked, def, usdcUsdnTCI)
292+ let usdcUsdnLpToWithdraw = fraction(singleUsdcLP, am, def)
293+ let fee = fraction(usdcUsdnLpToWithdraw, def, feePerc)
294+ let unstakeUsdcUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5", usdcUsdnLpToWithdraw], nil)
295+ if ((unstakeUsdcUsdnLP == unstakeUsdcUsdnLP))
296+ then {
297+ let usdcUsdnLPFee = ScriptTransfer(Address(tw), fee, usdcUsdnLP)
298+ let usdcUsdnTransfer = ScriptTransfer(i.caller, (usdcUsdnLpToWithdraw - fee), usdcUsdnLP)
299+ let updateUsdcUsdnLpStaked = IntegerEntry(keyUSDCUSDN, (usdcUsdnStaked - usdcUsdnLpToWithdraw))
300+ let burnUsdcUsdnLpTci = Burn(usdcUsdnLPTCI, am)
301+ if ((burnUsdcUsdnLpTci == burnUsdcUsdnLpTci))
302+ then [usdcUsdnLPFee, usdcUsdnTransfer, updateUsdcUsdnLpStaked]
303+ else throw("Strict value is not equal to itself.")
304+ }
305+ else throw("Strict value is not equal to itself.")
306+ }
307+ else if ((id == usdcUsdtLPTCI))
308+ then {
309+ let usdcUsdtTci = match assetInfo(usdcUsdnLPTCI) {
310+ case q: Asset =>
311+ q.quantity
312+ case _ =>
313+ 0
314+ }
315+ let usdcUsdtStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
316+ let singleUsdcUsdt = fraction(usdcUsdtStaked, def, usdcUsdtTci)
317+ let usdcUsdtLpToWithdraw = fraction(singleUsdcUsdt, am, def)
318+ let fee = fraction(usdcUsdtLpToWithdraw, def, feePerc)
319+ let unstakeUsdcUsdtLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH", usdcUsdtLpToWithdraw], nil)
320+ if ((unstakeUsdcUsdtLP == unstakeUsdcUsdtLP))
321+ then {
322+ let usdcUsdtLPFee = ScriptTransfer(Address(tw), fee, usdcUsdtLP)
323+ let usdcUsdtTransfer = ScriptTransfer(i.caller, (usdcUsdtLpToWithdraw - fee), usdcUsdtLP)
324+ let updateUsdcUsdtLpStaked = IntegerEntry(keyUSDCUSDT, (usdcUsdtStaked - usdcUsdtLpToWithdraw))
325+ let burnWxLpTci = Burn(usdcUsdnLPTCI, am)
326+ if ((burnWxLpTci == burnWxLpTci))
327+ then [usdcUsdtLPFee, usdcUsdtTransfer, updateUsdcUsdtLpStaked]
328+ else throw("Strict value is not equal to itself.")
329+ }
330+ else throw("Strict value is not equal to itself.")
331+ }
332+ else if ((id == puzzleUsdnLPTCI))
333+ then {
334+ let puzzleUsdnTci = match assetInfo(puzzleUsdnLPTCI) {
335+ case q: Asset =>
336+ q.quantity
337+ case _ =>
338+ 0
339+ }
340+ let puzzleLPStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
341+ let singlePuzzleUsdn = fraction(puzzleLPStaked, def, puzzleUsdnTci)
342+ let puzzleUsdnWithdraw = fraction(singlePuzzleUsdn, am, def)
343+ let fee = fraction(puzzleUsdnWithdraw, def, feePerc)
344+ let unstakePuzzleUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP", puzzleUsdnWithdraw], nil)
345+ if ((unstakePuzzleUsdnLP == unstakePuzzleUsdnLP))
346+ then {
347+ let puzzleUsdnLPFee = ScriptTransfer(Address(tw), fee, puzzleUsdnLP)
348+ let puzzleUsdnTransfer = ScriptTransfer(i.caller, (puzzleUsdnWithdraw - fee), puzzleUsdnLP)
349+ let updatePuzzleUsdnLpStaked = IntegerEntry(keyPUZZLEUSDN, (puzzleLPStaked - puzzleUsdnWithdraw))
350+ let burnPuzzleTCI = Burn(puzzleUsdnLPTCI, am)
351+ if ((burnPuzzleTCI == burnPuzzleTCI))
352+ then [puzzleUsdnLPFee, puzzleUsdnTransfer, updatePuzzleUsdnLpStaked]
353+ else throw("Strict value is not equal to itself.")
354+ }
355+ else throw("Strict value is not equal to itself.")
356+ }
357+ else throw("Invalid asset")
358+ }
359+
360+
361+
362+@Callable(i)
222363 func compoundWxUsdnLP () = {
223364 let compound = value(i.payments[0])
224365 let ca = compound.amount
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let usdtUsdnLP = base58'97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf'
55
66 let usdtUsdnLPTCI = base58'2CD44HANZzsdU7yqRsmz7L9eA2Foh4YYMC4azMbaZEj6'
77
88 let wxUsdnLP = base58'F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9'
99
1010 let wxUsdnLPTCI = base58'FuUobp3DcfARzDLcvtVW37i7FvMPvCCpgdcvWke8sBuh'
1111
1212 let usdcUsdnLP = base58'EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5'
1313
1414 let usdcUsdnLPTCI = base58'HZKFpNfyPG5gt4D6Nfy1zQSg2Ptmqv932GjNTCyBEeKP'
1515
1616 let usdcUsdtLP = base58'EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH'
1717
1818 let usdcUsdtLPTCI = base58'BqPYkaiz7Le6fFu1rjZ54anrpT57EpvyugZCUqrsjXj'
1919
2020 let puzzleUsdnLP = base58'E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP'
2121
2222 let puzzleUsdnLPTCI = base58'Dh9QXSSABE5V6aRfu3mCbDAUokbpE7ER7pbZV6cvyg1A'
2323
2424 let wxId = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on'
2525
2626 let keySponsorship = "Sponsorship_in_lock"
2727
2828 let isStopped = false
2929
3030 let keyStaked = "STAKED_LP"
3131
3232 let keyCompound = "From_Compound"
3333
3434 let keywxUsdnCompound = "WX_USDN_compound"
3535
3636 let keyWXUSDN = "WX_USDN"
3737
3838 let keyUsdcUsdnCompound = "USDC_USDN_compound"
3939
4040 let keyUSDCUSDN = "USDC_USDN"
4141
4242 let keyUsdcUsdtCompound = "USDC_USDT_compound"
4343
4444 let keyUSDCUSDT = "USDC_USDT"
4545
4646 let keyPuzzleUsdnCompound = "PUZZLE_USDN_compound"
4747
4848 let keyPUZZLEUSDN = "PUZZLE_USDN"
49+
50+let def = 100000000
51+
52+let feePerc = 10000000000
53+
54+let tw = base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm'
4955
5056 let oracle = base58'3P6phwFZFQtZFuc9dvdXsgvtg8JEFVgECPA'
5157
5258 func checkAddress (caller) = if ((caller != oracle))
5359 then false
5460 else true
5561
5662
5763 @Callable(i)
5864 func depositWxUsdnLP () = {
5965 let pmt = value(i.payments[0])
6066 let pmtAmount = pmt.amount
6167 if ((pmt.assetId != wxUsdnLP))
6268 then throw("attach WXUSDNLP tokens only")
6369 else if (isStopped)
6470 then throw("smart contract is on lock")
6571 else {
6672 let tkStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
6773 let totalIssued = match assetInfo(wxUsdnLPTCI) {
6874 case asset: Asset =>
6975 asset.quantity
7076 case _ =>
7177 throw("Can't find asset")
7278 }
7379 let one = fraction(totalIssued, 100000000, tkStaked)
7480 let toIssue = fraction(pmtAmount, one, 100000000)
7581 let updateState = IntegerEntry(keyWXUSDN, (tkStaked + pmtAmount))
7682 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
7783 if ((LPstake == LPstake))
7884 then {
7985 let LPIssue = Reissue(wxUsdnLPTCI, toIssue, true)
8086 let transfer = ScriptTransfer(i.caller, toIssue, wxUsdnLPTCI)
8187 [LPIssue, transfer, updateState]
8288 }
8389 else throw("Strict value is not equal to itself.")
8490 }
8591 }
8692
8793
8894
8995 @Callable(i)
9096 func depositUsdtUsdnLP () = {
9197 let pmt = value(i.payments[0])
9298 let pmtAmount = pmt.amount
9399 if ((pmt.assetId != usdtUsdnLP))
94100 then throw("attach USDTUSDNLP tokens only")
95101 else if (isStopped)
96102 then throw("smart contract is on lock")
97103 else {
98104 let tkStaked = valueOrElse(getInteger(this, keyStaked), 0)
99105 let totalIssued = match assetInfo(usdtUsdnLPTCI) {
100106 case asset: Asset =>
101107 asset.quantity
102108 case _ =>
103109 throw("Can't find asset")
104110 }
105111 let fromCompound = valueOrElse(getInteger(this, keyCompound), 0)
106112 let forOne = fraction(totalIssued, 100000000, tkStaked)
107113 let toIssue = fraction(pmtAmount, forOne, 100000000)
108114 let updateState = IntegerEntry(keyStaked, (tkStaked + pmtAmount))
109115 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
110116 if ((LPstake == LPstake))
111117 then {
112118 let LPIssue = Reissue(usdtUsdnLPTCI, toIssue, true)
113119 let transfer = ScriptTransfer(i.caller, toIssue, usdtUsdnLPTCI)
114120 [LPIssue, transfer, updateState]
115121 }
116122 else throw("Strict value is not equal to itself.")
117123 }
118124 }
119125
120126
121127
122128 @Callable(i)
123129 func depositUsdcUsdnLP () = {
124130 let pmt = value(i.payments[0])
125131 let pmtAmount = pmt.amount
126132 if ((pmt.assetId != usdcUsdnLP))
127133 then throw("attach USDCUSDNLP tokens only")
128134 else if (isStopped)
129135 then throw("smart contract is on lock")
130136 else {
131137 let tkStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
132138 let totalIssued = match assetInfo(usdcUsdnLPTCI) {
133139 case asset: Asset =>
134140 asset.quantity
135141 case _ =>
136142 throw("Can't find asset")
137143 }
138144 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdnCompound), 0)
139145 let forOne = fraction(totalIssued, 100000000, tkStaked)
140146 let toIssue = fraction(pmtAmount, forOne, 100000000)
141147 let updateState = IntegerEntry(keyUSDCUSDN, (tkStaked + pmtAmount))
142148 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
143149 if ((LPstake == LPstake))
144150 then {
145151 let LPIssue = Reissue(usdcUsdnLPTCI, toIssue, true)
146152 let transfer = ScriptTransfer(i.caller, toIssue, usdcUsdnLPTCI)
147153 [LPIssue, transfer, updateState]
148154 }
149155 else throw("Strict value is not equal to itself.")
150156 }
151157 }
152158
153159
154160
155161 @Callable(i)
156162 func depositUsdcUsdtLP () = {
157163 let pmt = value(i.payments[0])
158164 let pmtAmount = pmt.amount
159165 if ((pmt.assetId != usdcUsdtLP))
160166 then throw("attach USDCUSDTLP tokens only")
161167 else if (isStopped)
162168 then throw("smart contract is on lock")
163169 else {
164170 let tkStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
165171 let totalIssued = match assetInfo(usdcUsdtLPTCI) {
166172 case asset: Asset =>
167173 asset.quantity
168174 case _ =>
169175 throw("Can't find asset")
170176 }
171177 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdtCompound), 0)
172178 let forOne = fraction(totalIssued, 100000000, tkStaked)
173179 let toIssue = fraction(pmtAmount, forOne, 100000000)
174180 let updateState = IntegerEntry(keyUSDCUSDT, (tkStaked + pmtAmount))
175181 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
176182 if ((LPstake == LPstake))
177183 then {
178184 let LPIssue = Reissue(usdcUsdtLPTCI, toIssue, true)
179185 let transfer = ScriptTransfer(i.caller, toIssue, usdcUsdtLPTCI)
180186 [LPIssue, transfer, updateState]
181187 }
182188 else throw("Strict value is not equal to itself.")
183189 }
184190 }
185191
186192
187193
188194 @Callable(i)
189195 func depositPuzzleUsdnLP () = {
190196 let pmt = value(i.payments[0])
191197 let pmtAmount = pmt.amount
192198 if ((pmt.assetId != puzzleUsdnLP))
193199 then throw("attach PUZZLEUDSNLP tokens only")
194200 else if (isStopped)
195201 then throw("smart contract is on lock")
196202 else {
197203 let tkStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
198204 let totalIssued = match assetInfo(puzzleUsdnLPTCI) {
199205 case asset: Asset =>
200206 asset.quantity
201207 case _ =>
202208 throw("Can't find asset")
203209 }
204210 let fromCompound = valueOrElse(getInteger(this, keyPuzzleUsdnCompound), 0)
205211 let forOne = fraction(totalIssued, 100000000, tkStaked)
206212 let toIssue = fraction(pmtAmount, forOne, 100000000)
207213 let updateState = IntegerEntry(keyPUZZLEUSDN, (tkStaked + pmtAmount))
208214 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
209215 if ((LPstake == LPstake))
210216 then {
211217 let LPIssue = Reissue(puzzleUsdnLPTCI, toIssue, true)
212218 let transfer = ScriptTransfer(i.caller, toIssue, puzzleUsdnLPTCI)
213219 [LPIssue, transfer, updateState]
214220 }
215221 else throw("Strict value is not equal to itself.")
216222 }
217223 }
218224
219225
220226
221227 @Callable(i)
228+func withdraw () = {
229+ let payment = value(i.payments[0])
230+ let am = payment.amount
231+ let id = payment.assetId
232+ if ((id == usdtUsdnLP))
233+ then {
234+ let TCIAmount = match assetInfo(usdtUsdnLPTCI) {
235+ case q: Asset =>
236+ q.quantity
237+ case _ =>
238+ 0
239+ }
240+ let usdnUsdtStaked = valueOrElse(getInteger(this, keyStaked), 0)
241+ let forSingleTCI = fraction(usdnUsdtStaked, def, TCIAmount)
242+ let usdnLpToWithdraw = fraction(forSingleTCI, am, def)
243+ let fee = fraction(usdnLpToWithdraw, def, feePerc)
244+ let unstakeUsdtUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf", usdnLpToWithdraw], nil)
245+ if ((unstakeUsdtUsdnLP == unstakeUsdtUsdnLP))
246+ then {
247+ let usdnLpfeeTransfer = ScriptTransfer(Address(tw), fee, usdtUsdnLP)
248+ let transfer = ScriptTransfer(i.caller, (usdnLpToWithdraw - fee), usdtUsdnLP)
249+ let updateUsdnLpStaked = IntegerEntry(keyStaked, (usdnUsdtStaked - usdnLpToWithdraw))
250+ let brn = Burn(usdtUsdnLPTCI, am)
251+ if ((brn == brn))
252+ then [usdnLpfeeTransfer, transfer, updateUsdnLpStaked]
253+ else throw("Strict value is not equal to itself.")
254+ }
255+ else throw("Strict value is not equal to itself.")
256+ }
257+ else if ((id == wxUsdnLPTCI))
258+ then {
259+ let wxTciAm = match assetInfo(wxUsdnLPTCI) {
260+ case q: Asset =>
261+ q.quantity
262+ case _ =>
263+ 0
264+ }
265+ let wxUsdnStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
266+ let singleWXLP = fraction(wxUsdnStaked, def, wxTciAm)
267+ let wxLpToWithdraw = fraction(singleWXLP, am, def)
268+ let fee = fraction(wxLpToWithdraw, def, feePerc)
269+ let unstakeWxUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", wxLpToWithdraw], nil)
270+ if ((unstakeWxUsdnLP == unstakeWxUsdnLP))
271+ then {
272+ let wxLpFeeTransfer = ScriptTransfer(Address(tw), fee, wxUsdnLP)
273+ let wxLpTransfer = ScriptTransfer(i.caller, (wxLpToWithdraw - fee), wxUsdnLP)
274+ let updateWxLpStaked = IntegerEntry(keyWXUSDN, (wxUsdnStaked - wxLpToWithdraw))
275+ let burnWxLpTci = Burn(wxUsdnLP, am)
276+ if ((burnWxLpTci == burnWxLpTci))
277+ then [wxLpFeeTransfer, wxLpTransfer, updateWxLpStaked]
278+ else throw("Strict value is not equal to itself.")
279+ }
280+ else throw("Strict value is not equal to itself.")
281+ }
282+ else if ((id == usdcUsdnLPTCI))
283+ then {
284+ let usdcUsdnTCI = match assetInfo(usdcUsdnLPTCI) {
285+ case q: Asset =>
286+ q.quantity
287+ case _ =>
288+ 0
289+ }
290+ let usdcUsdnStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
291+ let singleUsdcLP = fraction(usdcUsdnStaked, def, usdcUsdnTCI)
292+ let usdcUsdnLpToWithdraw = fraction(singleUsdcLP, am, def)
293+ let fee = fraction(usdcUsdnLpToWithdraw, def, feePerc)
294+ let unstakeUsdcUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5", usdcUsdnLpToWithdraw], nil)
295+ if ((unstakeUsdcUsdnLP == unstakeUsdcUsdnLP))
296+ then {
297+ let usdcUsdnLPFee = ScriptTransfer(Address(tw), fee, usdcUsdnLP)
298+ let usdcUsdnTransfer = ScriptTransfer(i.caller, (usdcUsdnLpToWithdraw - fee), usdcUsdnLP)
299+ let updateUsdcUsdnLpStaked = IntegerEntry(keyUSDCUSDN, (usdcUsdnStaked - usdcUsdnLpToWithdraw))
300+ let burnUsdcUsdnLpTci = Burn(usdcUsdnLPTCI, am)
301+ if ((burnUsdcUsdnLpTci == burnUsdcUsdnLpTci))
302+ then [usdcUsdnLPFee, usdcUsdnTransfer, updateUsdcUsdnLpStaked]
303+ else throw("Strict value is not equal to itself.")
304+ }
305+ else throw("Strict value is not equal to itself.")
306+ }
307+ else if ((id == usdcUsdtLPTCI))
308+ then {
309+ let usdcUsdtTci = match assetInfo(usdcUsdnLPTCI) {
310+ case q: Asset =>
311+ q.quantity
312+ case _ =>
313+ 0
314+ }
315+ let usdcUsdtStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
316+ let singleUsdcUsdt = fraction(usdcUsdtStaked, def, usdcUsdtTci)
317+ let usdcUsdtLpToWithdraw = fraction(singleUsdcUsdt, am, def)
318+ let fee = fraction(usdcUsdtLpToWithdraw, def, feePerc)
319+ let unstakeUsdcUsdtLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH", usdcUsdtLpToWithdraw], nil)
320+ if ((unstakeUsdcUsdtLP == unstakeUsdcUsdtLP))
321+ then {
322+ let usdcUsdtLPFee = ScriptTransfer(Address(tw), fee, usdcUsdtLP)
323+ let usdcUsdtTransfer = ScriptTransfer(i.caller, (usdcUsdtLpToWithdraw - fee), usdcUsdtLP)
324+ let updateUsdcUsdtLpStaked = IntegerEntry(keyUSDCUSDT, (usdcUsdtStaked - usdcUsdtLpToWithdraw))
325+ let burnWxLpTci = Burn(usdcUsdnLPTCI, am)
326+ if ((burnWxLpTci == burnWxLpTci))
327+ then [usdcUsdtLPFee, usdcUsdtTransfer, updateUsdcUsdtLpStaked]
328+ else throw("Strict value is not equal to itself.")
329+ }
330+ else throw("Strict value is not equal to itself.")
331+ }
332+ else if ((id == puzzleUsdnLPTCI))
333+ then {
334+ let puzzleUsdnTci = match assetInfo(puzzleUsdnLPTCI) {
335+ case q: Asset =>
336+ q.quantity
337+ case _ =>
338+ 0
339+ }
340+ let puzzleLPStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
341+ let singlePuzzleUsdn = fraction(puzzleLPStaked, def, puzzleUsdnTci)
342+ let puzzleUsdnWithdraw = fraction(singlePuzzleUsdn, am, def)
343+ let fee = fraction(puzzleUsdnWithdraw, def, feePerc)
344+ let unstakePuzzleUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP", puzzleUsdnWithdraw], nil)
345+ if ((unstakePuzzleUsdnLP == unstakePuzzleUsdnLP))
346+ then {
347+ let puzzleUsdnLPFee = ScriptTransfer(Address(tw), fee, puzzleUsdnLP)
348+ let puzzleUsdnTransfer = ScriptTransfer(i.caller, (puzzleUsdnWithdraw - fee), puzzleUsdnLP)
349+ let updatePuzzleUsdnLpStaked = IntegerEntry(keyPUZZLEUSDN, (puzzleLPStaked - puzzleUsdnWithdraw))
350+ let burnPuzzleTCI = Burn(puzzleUsdnLPTCI, am)
351+ if ((burnPuzzleTCI == burnPuzzleTCI))
352+ then [puzzleUsdnLPFee, puzzleUsdnTransfer, updatePuzzleUsdnLpStaked]
353+ else throw("Strict value is not equal to itself.")
354+ }
355+ else throw("Strict value is not equal to itself.")
356+ }
357+ else throw("Invalid asset")
358+ }
359+
360+
361+
362+@Callable(i)
222363 func compoundWxUsdnLP () = {
223364 let compound = value(i.payments[0])
224365 let ca = compound.amount
225366 let isOracle = checkAddress(i.caller.bytes)
226367 if ((compound.assetId != wxUsdnLP))
227368 then throw("attach WXUSDNLP tokens only")
228369 else if (!(isOracle))
229370 then throw("You are not authotized to call this function")
230371 else {
231372 let fromCompound = valueOrElse(getInteger(this, keywxUsdnCompound), 0)
232373 let totalStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
233374 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
234375 if ((stakeC == stakeC))
235376 then {
236377 let updateState = IntegerEntry(keyWXUSDN, (totalStaked + ca))
237378 let tc = IntegerEntry(keywxUsdnCompound, (fromCompound + ca))
238379 [updateState, tc]
239380 }
240381 else throw("Strict value is not equal to itself.")
241382 }
242383 }
243384
244385
245386
246387 @Callable(i)
247388 func compoundUsdtUsdnLP () = {
248389 let compound = value(i.payments[0])
249390 let ca = compound.amount
250391 let isOracle = checkAddress(i.caller.bytes)
251392 if ((compound.assetId != usdtUsdnLP))
252393 then throw("attach USDTUSDNLP tokens only")
253394 else if (!(isOracle))
254395 then throw("You are not authotized to call this function")
255396 else {
256397 let fromCompound = valueOrElse(getInteger(this, keyCompound), 0)
257398 let totalStaked = valueOrElse(getInteger(this, keyStaked), 0)
258399 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
259400 if ((stakeC == stakeC))
260401 then {
261402 let updateState = IntegerEntry(keyStaked, (totalStaked + ca))
262403 let tc = IntegerEntry(keyCompound, (fromCompound + ca))
263404 [updateState, tc]
264405 }
265406 else throw("Strict value is not equal to itself.")
266407 }
267408 }
268409
269410
270411
271412 @Callable(i)
272413 func compoundUsdcUsdnLP () = {
273414 let compound = value(i.payments[0])
274415 let ca = compound.amount
275416 let isOracle = checkAddress(i.caller.bytes)
276417 if ((compound.assetId != usdcUsdnLP))
277418 then throw("attach USDCUSDNLP tokens only")
278419 else if (!(isOracle))
279420 then throw("You are not authotized to call this function")
280421 else {
281422 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdnCompound), 0)
282423 let totalStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
283424 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
284425 if ((stakeC == stakeC))
285426 then {
286427 let updateState = IntegerEntry(keyUSDCUSDN, (totalStaked + ca))
287428 let tc = IntegerEntry(keyUsdcUsdnCompound, (fromCompound + ca))
288429 [updateState, tc]
289430 }
290431 else throw("Strict value is not equal to itself.")
291432 }
292433 }
293434
294435
295436
296437 @Callable(i)
297438 func compoundUsdcUsdtLP () = {
298439 let compound = value(i.payments[0])
299440 let ca = compound.amount
300441 let isOracle = checkAddress(i.caller.bytes)
301442 if ((compound.assetId != usdcUsdtLP))
302443 then throw("attach USDCUSDTLP tokens only")
303444 else if (!(isOracle))
304445 then throw("You are not authotized to call this function")
305446 else {
306447 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdtCompound), 0)
307448 let totalStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
308449 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
309450 if ((stakeC == stakeC))
310451 then {
311452 let updateState = IntegerEntry(keyUSDCUSDT, (totalStaked + ca))
312453 let tc = IntegerEntry(keyUsdcUsdtCompound, (fromCompound + ca))
313454 [updateState, tc]
314455 }
315456 else throw("Strict value is not equal to itself.")
316457 }
317458 }
318459
319460
320461
321462 @Callable(i)
322463 func compoundPuzzleUsdnLP () = {
323464 let compound = value(i.payments[0])
324465 let ca = compound.amount
325466 let isOracle = checkAddress(i.caller.bytes)
326467 if ((compound.assetId != puzzleUsdnLP))
327468 then throw("attach PUZZLEUSDNLP tokens only")
328469 else if (!(isOracle))
329470 then throw("You are not authotized to call this function")
330471 else {
331472 let fromCompound = valueOrElse(getInteger(this, keyPuzzleUsdnCompound), 0)
332473 let totalStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
333474 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
334475 if ((stakeC == stakeC))
335476 then {
336477 let updateState = IntegerEntry(keyPUZZLEUSDN, (totalStaked + ca))
337478 let tc = IntegerEntry(keyPuzzleUsdnCompound, (fromCompound + ca))
338479 [updateState, tc]
339480 }
340481 else throw("Strict value is not equal to itself.")
341482 }
342483 }
343484
344485
345486
346487 @Callable(i)
347488 func sponsorBoost () = {
348489 let pm = value(i.payments[0])
349490 let lockPeriod = 100
350491 if ((pm.assetId != wxId))
351492 then throw("Error")
352493 else {
353494 let sponsored = valueOrElse(getInteger(this, keySponsorship), 0)
354495 let lock = invoke(Address(base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP'), "increaseLock", [lockPeriod], [pm])
355496 if ((lock == lock))
356497 then {
357498 let s = IntegerEntry(keySponsorship, (pm.amount + sponsored))
358499 [s]
359500 }
360501 else throw("Strict value is not equal to itself.")
361502 }
362503 }
363504
364505
365506 @Verifier(tx)
366507 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
367508

github/deemru/w8io/3ef1775 
66.33 ms