2023.11.17 12:12 [3913005] smart account 3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp > SELF 0.00000000 Waves

{ "type": 13, "id": "AqamNYe7nt9a8Hou2mBJnx9qfbZPTWGzJxvWYMcCpgC5", "fee": 1100000, "feeAssetId": null, "timestamp": 1700212410948, "version": 2, "chainId": 87, "sender": "3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp", "senderPublicKey": "GTY8yEJ2S4heRompxyvbJoBN1Td5BM5Pp4JgVbj9tmCw", "proofs": [ "", "4bFAqWPyfexf7WVtXf9AroFwQt8XCtLtDpumP8Je7USYF23udNFcRkAPSEr9gZXzRq4Gqt8PvbK79NSaUtxH681Z", "4dDVHxMLGuzv1y6Q8cJSMst5oSbEdar6gcwXMFJeWuwiPDGaXMZkjiEbQ7gFRnaDj4yC5jbiBbhN6XDNyngvGVkH" ], "script": "base64:BgILCAISBwoFGAQICAEcAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAMa0Zhcm1BZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MAD2tTdXJ2ZXlzQWRkcmVzcwIPc3VydmV5c19hZGRyZXNzAAxrUm91dGluZ0FkZHICD3JvdXRpbmdfYWRkcmVzcwAHa1NXT1BpZAIHU1dPUF9pZAAPa1ByZWZpeFBvb2xOYW1lAgVwb29sXwETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwALYWRtaW5JbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5ABFnb3Zlcm5hbmNlQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtGYXJtQWRkcmVzcwAOc3VydmV5c0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rU3VydmV5c0FkZHJlc3MADnJvdXRpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1JvdXRpbmdBZGRyAAZzd29wSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUOZmFybWluZ0FkZHJlc3MFB2tTV09QaWQBCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEJbGlzdFRvSW50AgFhBGl0ZW0JAM0IAgUBYQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgEQZGlyZWN0U3dvcGZpQ1BNTQEFckFyZ3MEBGRBcHAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUFckFyZ3MAAQQDcG10BARwbXRQCQC1CQIJAJEDAgUFckFyZ3MAAgIBfAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBCQCRAwIFBHBtdFAAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBHBtdFAAAQUDbmlsBAttaW5Ub1JlY2l2ZQkAkQMCBQVyQXJncwADCQD8BwQFBGRBcHACDGNhbGxGdW5jdGlvbgkAzAgCAghleGNoYW5nZQkAzAgCCQDMCAIFC21pblRvUmVjaXZlBQNuaWwFA25pbAUDcG10ARNkaXJlY3RSb3V0aW5nU3dvcGZpAQVyQXJncwQEZEFwcAkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQVyQXJncwABBANwbXQEBHBtdFAJALUJAgkAkQMCBQVyQXJncwACAgF8CQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUEcG10UAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEcG10UAABBQNuaWwEBGFyZ3MEBWVBcmdzCQC1CQIJAJEDAgUFckFyZ3MAAwIBfAQKZXhjaGFuZ2VycwkAtQkCCQCRAwIFBWVBcmdzAAACASwEDmV4Y2hhbmdlcnNUeXBlCQC1CQIJAJEDAgUFZUFyZ3MAAQIBLAQFYXJnczEKAAIkbAkAtQkCCQCRAwIFBWVBcmdzAAICASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWxpc3RUb0ludAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwQFYXJnczIKAAIkbAkAtQkCCQCRAwIFBWVBcmdzAAMCASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWxpc3RUb0ludAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwQRcm91dGluZ0Fzc2V0c0tleXMJALUJAgkAkQMCBQVlQXJncwAEAgEsBAttaW5Ub1JlY2l2ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWVBcmdzAAUJAMwIAgUKZXhjaGFuZ2VycwkAzAgCBQ5leGNoYW5nZXJzVHlwZQkAzAgCBQVhcmdzMQkAzAgCBQVhcmdzMgkAzAgCBRFyb3V0aW5nQXNzZXRzS2V5cwkAzAgCBQttaW5Ub1JlY2l2ZQUDbmlsCQD8BwQFBGRBcHACDHJvdXRpbmdUcmFkZQUEYXJncwUDcG10ARFidXlTd29wRm9yQWlyZHJvcAMEcG9vbA90b2tlblRvRXhjaGFuZ2URYW1vdW50VG9MZWZ0Rm9yVHgEB3Rva2VuSWQJAQ5hc3NldElkRnJvbVN0cgEFD3Rva2VuVG9FeGNoYW5nZQQMdG9rZW5CYWxhbmNlCQEOYWNjb3VudEJhbGFuY2UBBQd0b2tlbklkAwkAAAIFDHRva2VuQmFsYW5jZQUMdG9rZW5CYWxhbmNlBBBhbW91bnRUb0V4Y2hhbmdlCQBlAgUMdG9rZW5CYWxhbmNlBRFhbW91bnRUb0xlZnRGb3JUeAMJAGcCAAAFEGFtb3VudFRvRXhjaGFuZ2UJAAIBAh9Ob3RoaW5nIHRvIGV4Y2hhbmdlIGZvciBhaXJkcm9wBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgABBQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdG9rZW5JZAUQYW1vdW50VG9FeGNoYW5nZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQFpAQ5leGNoYW5nZVRva2VucwUGcm91dGVzB2FpcmRyb3AEcG9vbA90b2tlblRvRXhjaGFuZ2URYW1vdW50VG9MZWZ0Rm9yVHgJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQoBDWV4Y2hhbmdlVG9rZW4CAXIFcm91dGUEBXJBcmdzCQC1CQIFBXJvdXRlAgJfXwMJAAACCQCRAwIFBXJBcmdzAAACEGRpcmVjdFN3b3BmaUNQTU0EA2ludgkBEGRpcmVjdFN3b3BmaUNQTU0BBQVyQXJncwMJAAACBQNpbnYFA2ludgkAzQgCBQFyBQNpbnYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgkAkQMCBQVyQXJncwAAAg1yb3V0aW5nU3dvcGZpBANpbnYJARNkaXJlY3RSb3V0aW5nU3dvcGZpAQUFckFyZ3MDCQAAAgUDaW52BQNpbnYJAM0IAgUBcgUDaW52CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQISVW5rbm93biByb3V0ZSB0eXBlBANyZXMKAAIkbAUGcm91dGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1leGNoYW5nZVRva2VuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAMJAAACBQNyZXMFA3JlcwMJAQEhAQUHYWlyZHJvcAUDbmlsBANpbnYJARFidXlTd29wRm9yQWlyZHJvcAMFBHBvb2wFD3Rva2VuVG9FeGNoYW5nZQURYW1vdW50VG9MZWZ0Rm9yVHgDCQAAAgUDaW52BQNpbnYEC3N3b3BCYWxhbmNlCQEOYWNjb3VudEJhbGFuY2UBBQZzd29wSWQDCQAAAgULc3dvcEJhbGFuY2UFC3N3b3BCYWxhbmNlBARhSW52CQD8BwQFEWdvdmVybmFuY2VBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBnN3b3BJZAULc3dvcEJhbGFuY2UFA25pbAMJAAACBQRhSW52BQRhSW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBAppc1JpZ2h0RmVlAwkAAAIIBQNpbnYDZmVlAKD3NgkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcEDWlzUm91dGluZ0NhbGwDCQAAAggFA2ludgRkQXBwBQ5yb3V0aW5nQWRkcmVzcwkAAAIIBQNpbnYIZnVuY3Rpb24CDHJvdXRpbmdUcmFkZQcEEmlzRXhjaGFuZ2VDYWxsQ1BNTQMDCQEJaXNEZWZpbmVkAQkAnQgCBQZvcmFjbGUJAKwCAgUPa1ByZWZpeFBvb2xOYW1lCQClCAEJAKQIAQgFA2ludgRkQXBwCQAAAggFA2ludghmdW5jdGlvbgIMY2FsbEZ1bmN0aW9uBwkAAAIJAJEDAggFA2ludgRhcmdzAAACCGV4Y2hhbmdlBwQOaXNFeGNoYW5nZUNhbGwDCQEJaXNEZWZpbmVkAQkAnQgCBQZvcmFjbGUJAKwCAgUPa1ByZWZpeFBvb2xOYW1lCQClCAEJAKQIAQgFA2ludgRkQXBwCQAAAggFA2ludghmdW5jdGlvbgIIZXhjaGFuZ2UHBA1pc0FpcmRyb3BDYWxsCQAAAggFA2ludghmdW5jdGlvbgIOZXhjaGFuZ2VUb2tlbnMEE2lzVXBkYXRlV2VpZ2h0c0NhbGwDCQAAAggFA2ludgRkQXBwBRFnb3Zlcm5hbmNlQWRkcmVzcwkAAAIIBQNpbnYIZnVuY3Rpb24CDXVwZGF0ZVdlaWdodHMHBBZpc1Rha2VuSW50b0FjY291bnRDUE1NAwMJAQlpc0RlZmluZWQBCQCdCAIFBm9yYWNsZQkArAICBQ9rUHJlZml4UG9vbE5hbWUJAKUIAQkApAgBCAUDaW52BGRBcHAJAAACCAUDaW52CGZ1bmN0aW9uAgxjYWxsRnVuY3Rpb24HCQAAAgkAkQMCCAUDaW52BGFyZ3MAAAIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEEmlzVGFrZW5JbnRvQWNjb3VudAMJAQlpc0RlZmluZWQBCQCdCAIFBm9yYWNsZQkArAICBQ9rUHJlZml4UG9vbE5hbWUJAKUIAQkApAgBCAUDaW52BGRBcHAJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQMaXNXcml0ZVRvdGFsAwkAAAIIBQNpbnYEZEFwcAUOc3VydmV5c0FkZHJlc3MJAAACCAUDaW52CGZ1bmN0aW9uAgt3cml0ZVRvdGFscwcEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwABAAAEF2FkbWluUHViS2V5SW52b2tlU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAULYWRtaW5JbnZva2UAAQAABBBzaWduZWRCeU9uZUFkbWluCQBnAgkAZAIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAUXYWRtaW5QdWJLZXlJbnZva2VTaWduZWQAAQMDAwMDAwMFDmlzRXhjaGFuZ2VDYWxsBgUSaXNFeGNoYW5nZUNhbGxDUE1NBgUNaXNBaXJkcm9wQ2FsbAYFDWlzUm91dGluZ0NhbGwJAAACCQCQAwEIBQNpbnYIcGF5bWVudHMAAQcGAwMDAwUTaXNVcGRhdGVXZWlnaHRzQ2FsbAYFEmlzVGFrZW5JbnRvQWNjb3VudAYFFmlzVGFrZW5JbnRvQWNjb3VudENQTU0GBQxpc1dyaXRlVG90YWwJAAACCQCQAwEIBQNpbnYIcGF5bWVudHMAAAcFEHNpZ25lZEJ5T25lQWRtaW4HBQppc1JpZ2h0RmVlBwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACQDLV9g==", "height": 3913005, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GkSJdHJ915cB9pLCyzvuDvK5VocFHKWeHFrrt1zbcYfm Next: 2ZN9D1h4NHKRqURwvjLGJp7w83BWfHxgwVRRMA2X7vhU Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
5-
6-func getBase58FromOracle (key) = match getString(oracle, key) {
7- case string: String =>
8- fromBase58String(string)
9- case nothing =>
10- throw((key + "is empty"))
11-}
12-
135
146 let kAdminPubKey1 = "admin_pub_1"
157
2719
2820 let kRoutingAddr = "routing_address"
2921
22+let kSWOPid = "SWOP_id"
23+
24+let kPrefixPoolName = "pool_"
25+
26+func getBase58FromOracle (key) = match getString(oracle, key) {
27+ case string: String =>
28+ fromBase58String(string)
29+ case nothing =>
30+ throw((key + "is empty"))
31+}
32+
33+
3034 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
3135
3236 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
4347
4448 let routingAddress = Address(getBase58FromOracle(kRoutingAddr))
4549
46-let keyPrefixPoolName = "pool_"
50+let swopId = fromBase58String(getStringValue(farmingAddress, kSWOPid))
51+
52+func isSelfCall (i) = if ((i.caller == this))
53+ then unit
54+ else throw("Only contract itself can call this function")
55+
56+
57+func listToInt (a,item) = (a :+ parseIntValue(item))
58+
59+
60+func assetIdFromStr (assetId) = if ((assetId == "WAVES"))
61+ then unit
62+ else fromBase58String(assetId)
63+
64+
65+func accountBalance (assetId) = match assetId {
66+ case id: ByteVector =>
67+ assetBalance(this, id)
68+ case waves: Unit =>
69+ wavesBalance(this).available
70+ case _ =>
71+ throw("Match error")
72+}
73+
74+
75+func directSwopfiCPMM (rArgs) = {
76+ let dApp = addressFromStringValue(rArgs[1])
77+ let pmt = {
78+ let pmtP = split(rArgs[2], "|")
79+[AttachedPayment(fromBase58String(pmtP[0]), parseIntValue(pmtP[1]))]
80+ }
81+ let minToRecive = rArgs[3]
82+ invoke(dApp, "callFunction", ["exchange", [minToRecive]], pmt)
83+ }
84+
85+
86+func directRoutingSwopfi (rArgs) = {
87+ let dApp = addressFromStringValue(rArgs[1])
88+ let pmt = {
89+ let pmtP = split(rArgs[2], "|")
90+[AttachedPayment(fromBase58String(pmtP[0]), parseIntValue(pmtP[1]))]
91+ }
92+ let args = {
93+ let eArgs = split(rArgs[3], "|")
94+ let exchangers = split(eArgs[0], ",")
95+ let exchangersType = split(eArgs[1], ",")
96+ let args1 = {
97+ let $l = split(eArgs[2], ",")
98+ let $s = size($l)
99+ let $acc0 = nil
100+ func $f0_1 ($a,$i) = if (($i >= $s))
101+ then $a
102+ else listToInt($a, $l[$i])
103+
104+ func $f0_2 ($a,$i) = if (($i >= $s))
105+ then $a
106+ else throw("List size exceeds 3")
107+
108+ $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
109+ }
110+ let args2 = {
111+ let $l = split(eArgs[3], ",")
112+ let $s = size($l)
113+ let $acc0 = nil
114+ func $f1_1 ($a,$i) = if (($i >= $s))
115+ then $a
116+ else listToInt($a, $l[$i])
117+
118+ func $f1_2 ($a,$i) = if (($i >= $s))
119+ then $a
120+ else throw("List size exceeds 3")
121+
122+ $f1_2($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3)
123+ }
124+ let routingAssetsKeys = split(eArgs[4], ",")
125+ let minToRecive = parseIntValue(eArgs[5])
126+[exchangers, exchangersType, args1, args2, routingAssetsKeys, minToRecive]
127+ }
128+ invoke(dApp, "routingTrade", args, pmt)
129+ }
130+
131+
132+func buySwopForAirdrop (pool,tokenToExchange,amountToLeftForTx) = {
133+ let tokenId = assetIdFromStr(tokenToExchange)
134+ let tokenBalance = accountBalance(tokenId)
135+ if ((tokenBalance == tokenBalance))
136+ then {
137+ let amountToExchange = (tokenBalance - amountToLeftForTx)
138+ if ((0 >= amountToExchange))
139+ then throw("Nothing to exchange for airdrop")
140+ else {
141+ let poolAddr = addressFromStringValue(pool)
142+ invoke(poolAddr, "callFunction", ["exchange", [1]], [AttachedPayment(tokenId, amountToExchange)])
143+ }
144+ }
145+ else throw("Strict value is not equal to itself.")
146+ }
147+
148+
149+@Callable(i)
150+func exchangeTokens (routes,airdrop,pool,tokenToExchange,amountToLeftForTx) = valueOrElse(isSelfCall(i), {
151+ func exchangeToken (r,route) = {
152+ let rArgs = split(route, "__")
153+ if ((rArgs[0] == "directSwopfiCPMM"))
154+ then {
155+ let inv = directSwopfiCPMM(rArgs)
156+ if ((inv == inv))
157+ then (r :+ inv)
158+ else throw("Strict value is not equal to itself.")
159+ }
160+ else if ((rArgs[0] == "routingSwopfi"))
161+ then {
162+ let inv = directRoutingSwopfi(rArgs)
163+ if ((inv == inv))
164+ then (r :+ inv)
165+ else throw("Strict value is not equal to itself.")
166+ }
167+ else throw("Unknown route type")
168+ }
169+
170+ let res = {
171+ let $l = routes
172+ let $s = size($l)
173+ let $acc0 = nil
174+ func $f0_1 ($a,$i) = if (($i >= $s))
175+ then $a
176+ else exchangeToken($a, $l[$i])
177+
178+ func $f0_2 ($a,$i) = if (($i >= $s))
179+ then $a
180+ else throw("List size exceeds 12")
181+
182+ $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
183+ }
184+ if ((res == res))
185+ then if (!(airdrop))
186+ then nil
187+ else {
188+ let inv = buySwopForAirdrop(pool, tokenToExchange, amountToLeftForTx)
189+ if ((inv == inv))
190+ then {
191+ let swopBalance = accountBalance(swopId)
192+ if ((swopBalance == swopBalance))
193+ then {
194+ let aInv = invoke(governanceAddress, "airDrop", nil, [AttachedPayment(swopId, swopBalance)])
195+ if ((aInv == aInv))
196+ then nil
197+ else throw("Strict value is not equal to itself.")
198+ }
199+ else throw("Strict value is not equal to itself.")
200+ }
201+ else throw("Strict value is not equal to itself.")
202+ }
203+ else throw("Strict value is not equal to itself.")
204+ })
47205
48206
49207 @Verifier(tx)
55213 let isRoutingCall = if ((inv.dApp == routingAddress))
56214 then (inv.function == "routingTrade")
57215 else false
58- let isExchangeCallCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
216+ let isExchangeCallCPMM = if (if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
59217 then (inv.function == "callFunction")
60218 else false)
61219 then (inv.args[0] == "exchange")
62220 else false
63- let isExchangeCall = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
221+ let isExchangeCall = if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
64222 then (inv.function == "exchange")
65223 else false
66- let isAirdropCall = if ((inv.dApp == governanceAddress))
67- then (inv.function == "airDrop")
68- else false
224+ let isAirdropCall = (inv.function == "exchangeTokens")
69225 let isUpdateWeightsCall = if ((inv.dApp == governanceAddress))
70226 then (inv.function == "updateWeights")
71227 else false
72- let isTakenIntoAccountCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
228+ let isTakenIntoAccountCPMM = if (if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
73229 then (inv.function == "callFunction")
74230 else false)
75231 then (inv.args[0] == "takeIntoAccountExtraFunds")
76232 else false
77- let isTakenIntoAccount = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
233+ let isTakenIntoAccount = if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
78234 then (inv.function == "takeIntoAccountExtraFunds")
79235 else false
80236 let isWriteTotal = if ((inv.dApp == surveysAddress))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
5-
6-func getBase58FromOracle (key) = match getString(oracle, key) {
7- case string: String =>
8- fromBase58String(string)
9- case nothing =>
10- throw((key + "is empty"))
11-}
12-
135
146 let kAdminPubKey1 = "admin_pub_1"
157
168 let kAdminPubKey2 = "admin_pub_2"
179
1810 let kAdminPubKey3 = "admin_pub_3"
1911
2012 let kAdminInvokePubKey = "admin_invoke_pub"
2113
2214 let kGovAddress = "governance_address"
2315
2416 let kFarmAddress = "farming_address"
2517
2618 let kSurveysAddress = "surveys_address"
2719
2820 let kRoutingAddr = "routing_address"
2921
22+let kSWOPid = "SWOP_id"
23+
24+let kPrefixPoolName = "pool_"
25+
26+func getBase58FromOracle (key) = match getString(oracle, key) {
27+ case string: String =>
28+ fromBase58String(string)
29+ case nothing =>
30+ throw((key + "is empty"))
31+}
32+
33+
3034 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
3135
3236 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
3337
3438 let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
3539
3640 let adminInvoke = getBase58FromOracle(kAdminInvokePubKey)
3741
3842 let governanceAddress = Address(getBase58FromOracle(kGovAddress))
3943
4044 let farmingAddress = Address(getBase58FromOracle(kFarmAddress))
4145
4246 let surveysAddress = Address(getBase58FromOracle(kSurveysAddress))
4347
4448 let routingAddress = Address(getBase58FromOracle(kRoutingAddr))
4549
46-let keyPrefixPoolName = "pool_"
50+let swopId = fromBase58String(getStringValue(farmingAddress, kSWOPid))
51+
52+func isSelfCall (i) = if ((i.caller == this))
53+ then unit
54+ else throw("Only contract itself can call this function")
55+
56+
57+func listToInt (a,item) = (a :+ parseIntValue(item))
58+
59+
60+func assetIdFromStr (assetId) = if ((assetId == "WAVES"))
61+ then unit
62+ else fromBase58String(assetId)
63+
64+
65+func accountBalance (assetId) = match assetId {
66+ case id: ByteVector =>
67+ assetBalance(this, id)
68+ case waves: Unit =>
69+ wavesBalance(this).available
70+ case _ =>
71+ throw("Match error")
72+}
73+
74+
75+func directSwopfiCPMM (rArgs) = {
76+ let dApp = addressFromStringValue(rArgs[1])
77+ let pmt = {
78+ let pmtP = split(rArgs[2], "|")
79+[AttachedPayment(fromBase58String(pmtP[0]), parseIntValue(pmtP[1]))]
80+ }
81+ let minToRecive = rArgs[3]
82+ invoke(dApp, "callFunction", ["exchange", [minToRecive]], pmt)
83+ }
84+
85+
86+func directRoutingSwopfi (rArgs) = {
87+ let dApp = addressFromStringValue(rArgs[1])
88+ let pmt = {
89+ let pmtP = split(rArgs[2], "|")
90+[AttachedPayment(fromBase58String(pmtP[0]), parseIntValue(pmtP[1]))]
91+ }
92+ let args = {
93+ let eArgs = split(rArgs[3], "|")
94+ let exchangers = split(eArgs[0], ",")
95+ let exchangersType = split(eArgs[1], ",")
96+ let args1 = {
97+ let $l = split(eArgs[2], ",")
98+ let $s = size($l)
99+ let $acc0 = nil
100+ func $f0_1 ($a,$i) = if (($i >= $s))
101+ then $a
102+ else listToInt($a, $l[$i])
103+
104+ func $f0_2 ($a,$i) = if (($i >= $s))
105+ then $a
106+ else throw("List size exceeds 3")
107+
108+ $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
109+ }
110+ let args2 = {
111+ let $l = split(eArgs[3], ",")
112+ let $s = size($l)
113+ let $acc0 = nil
114+ func $f1_1 ($a,$i) = if (($i >= $s))
115+ then $a
116+ else listToInt($a, $l[$i])
117+
118+ func $f1_2 ($a,$i) = if (($i >= $s))
119+ then $a
120+ else throw("List size exceeds 3")
121+
122+ $f1_2($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3)
123+ }
124+ let routingAssetsKeys = split(eArgs[4], ",")
125+ let minToRecive = parseIntValue(eArgs[5])
126+[exchangers, exchangersType, args1, args2, routingAssetsKeys, minToRecive]
127+ }
128+ invoke(dApp, "routingTrade", args, pmt)
129+ }
130+
131+
132+func buySwopForAirdrop (pool,tokenToExchange,amountToLeftForTx) = {
133+ let tokenId = assetIdFromStr(tokenToExchange)
134+ let tokenBalance = accountBalance(tokenId)
135+ if ((tokenBalance == tokenBalance))
136+ then {
137+ let amountToExchange = (tokenBalance - amountToLeftForTx)
138+ if ((0 >= amountToExchange))
139+ then throw("Nothing to exchange for airdrop")
140+ else {
141+ let poolAddr = addressFromStringValue(pool)
142+ invoke(poolAddr, "callFunction", ["exchange", [1]], [AttachedPayment(tokenId, amountToExchange)])
143+ }
144+ }
145+ else throw("Strict value is not equal to itself.")
146+ }
147+
148+
149+@Callable(i)
150+func exchangeTokens (routes,airdrop,pool,tokenToExchange,amountToLeftForTx) = valueOrElse(isSelfCall(i), {
151+ func exchangeToken (r,route) = {
152+ let rArgs = split(route, "__")
153+ if ((rArgs[0] == "directSwopfiCPMM"))
154+ then {
155+ let inv = directSwopfiCPMM(rArgs)
156+ if ((inv == inv))
157+ then (r :+ inv)
158+ else throw("Strict value is not equal to itself.")
159+ }
160+ else if ((rArgs[0] == "routingSwopfi"))
161+ then {
162+ let inv = directRoutingSwopfi(rArgs)
163+ if ((inv == inv))
164+ then (r :+ inv)
165+ else throw("Strict value is not equal to itself.")
166+ }
167+ else throw("Unknown route type")
168+ }
169+
170+ let res = {
171+ let $l = routes
172+ let $s = size($l)
173+ let $acc0 = nil
174+ func $f0_1 ($a,$i) = if (($i >= $s))
175+ then $a
176+ else exchangeToken($a, $l[$i])
177+
178+ func $f0_2 ($a,$i) = if (($i >= $s))
179+ then $a
180+ else throw("List size exceeds 12")
181+
182+ $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
183+ }
184+ if ((res == res))
185+ then if (!(airdrop))
186+ then nil
187+ else {
188+ let inv = buySwopForAirdrop(pool, tokenToExchange, amountToLeftForTx)
189+ if ((inv == inv))
190+ then {
191+ let swopBalance = accountBalance(swopId)
192+ if ((swopBalance == swopBalance))
193+ then {
194+ let aInv = invoke(governanceAddress, "airDrop", nil, [AttachedPayment(swopId, swopBalance)])
195+ if ((aInv == aInv))
196+ then nil
197+ else throw("Strict value is not equal to itself.")
198+ }
199+ else throw("Strict value is not equal to itself.")
200+ }
201+ else throw("Strict value is not equal to itself.")
202+ }
203+ else throw("Strict value is not equal to itself.")
204+ })
47205
48206
49207 @Verifier(tx)
50208 func verify () = match tx {
51209 case inv: InvokeScriptTransaction =>
52210 let isRightFee = if ((inv.fee == 900000))
53211 then (inv.feeAssetId == unit)
54212 else false
55213 let isRoutingCall = if ((inv.dApp == routingAddress))
56214 then (inv.function == "routingTrade")
57215 else false
58- let isExchangeCallCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
216+ let isExchangeCallCPMM = if (if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
59217 then (inv.function == "callFunction")
60218 else false)
61219 then (inv.args[0] == "exchange")
62220 else false
63- let isExchangeCall = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
221+ let isExchangeCall = if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
64222 then (inv.function == "exchange")
65223 else false
66- let isAirdropCall = if ((inv.dApp == governanceAddress))
67- then (inv.function == "airDrop")
68- else false
224+ let isAirdropCall = (inv.function == "exchangeTokens")
69225 let isUpdateWeightsCall = if ((inv.dApp == governanceAddress))
70226 then (inv.function == "updateWeights")
71227 else false
72- let isTakenIntoAccountCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
228+ let isTakenIntoAccountCPMM = if (if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
73229 then (inv.function == "callFunction")
74230 else false)
75231 then (inv.args[0] == "takeIntoAccountExtraFunds")
76232 else false
77- let isTakenIntoAccount = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
233+ let isTakenIntoAccount = if (isDefined(getString(oracle, (kPrefixPoolName + toString(addressFromRecipient(inv.dApp))))))
78234 then (inv.function == "takeIntoAccountExtraFunds")
79235 else false
80236 let isWriteTotal = if ((inv.dApp == surveysAddress))
81237 then (inv.function == "writeTotals")
82238 else false
83239 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
84240 then 1
85241 else 0
86242 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
87243 then 1
88244 else 0
89245 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
90246 then 1
91247 else 0
92248 let adminPubKeyInvokeSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke))
93249 then 1
94250 else 0
95251 let signedByOneAdmin = ((((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) + adminPubKeyInvokeSigned) >= 1)
96252 if (if (if (if (if (if (if (isExchangeCall)
97253 then true
98254 else isExchangeCallCPMM)
99255 then true
100256 else isAirdropCall)
101257 then true
102258 else isRoutingCall)
103259 then (size(inv.payments) == 1)
104260 else false)
105261 then true
106262 else if (if (if (if (isUpdateWeightsCall)
107263 then true
108264 else isTakenIntoAccount)
109265 then true
110266 else isTakenIntoAccountCPMM)
111267 then true
112268 else isWriteTotal)
113269 then (size(inv.payments) == 0)
114270 else false)
115271 then signedByOneAdmin
116272 else false)
117273 then isRightFee
118274 else false
119275 case _ =>
120276 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
121277 then 1
122278 else 0
123279 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
124280 then 1
125281 else 0
126282 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
127283 then 1
128284 else 0
129285 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
130286 }
131287

github/deemru/w8io/786bc32 
50.65 ms