tx · 6xM9sHS42tVuSd4iGvQt9rYDFZ6wEniAzUuiRG1gkvJB

3PANnmCGrufT8SZY5u6BZUgZq4QTh5XdPMa:  -0.01100000 Waves

2024.01.27 16:23 [4015751] smart account 3PANnmCGrufT8SZY5u6BZUgZq4QTh5XdPMa > SELF 0.00000000 Waves

{ "type": 13, "id": "6xM9sHS42tVuSd4iGvQt9rYDFZ6wEniAzUuiRG1gkvJB", "fee": 1100000, "feeAssetId": null, "timestamp": 1706361337394, "version": 2, "chainId": 87, "sender": "3PANnmCGrufT8SZY5u6BZUgZq4QTh5XdPMa", "senderPublicKey": "EfRKQWb1FWaWmo9fkorRwMA4BrSzUWNAVhXqB9vLmv7g", "proofs": [ "4q23d5qoDH4JUz23QNDjkSM47JZGWcB5e7rMFr5sFL1xfANUMc7JdLY8LJsrCMaaEMEbCcP9PXip5xBNn896WFse" ], "script": "base64:BgIHCAISAwoBCC4ADGNvbnRyYWN0RmlsZQIObDJtcF9zd2FwLnJpZGUAA1NFUAICX18ABnNjYWxlOACAwtcvAAdzY2FsZTE4AICAkLu61q3wDQASQUREUkVTU19CWVRFU19TSVpFABoADUJMT0NLU19JTl9EQVkAoAsBB3dyYXBFcnIBA21zZwkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFA21zZwEIdGhyb3dFcnIBA21zZwkAAgEJAQd3cmFwRXJyAQUDbXNnAAxrZXlBc3NldEluSWQJALkJAgkAzAgCAgIlcwkAzAgCAglhc3NldEluSWQFA25pbAUDU0VQAA1rZXlBc3NldE91dElkCQC5CQIJAMwIAgICJXMJAMwIAgIKYXNzZXRPdXRJZAUDbmlsBQNTRVAAEGtleUFzc2V0T3V0UHJpY2UJALkJAgkAzAgCAgIlcwkAzAgCAg1hc3NldE91dFByaWNlBQNuaWwFA1NFUAARa2V5U3Rha2luZ0FkZHJlc3MJALkJAgkAzAgCAgIlcwkAzAgCAg5zdGFraW5nQWRkcmVzcwUDbmlsBQNTRVAAD2tleVN0YXRzVG90YWxJbgkAuQkCCQDMCAICBCVzJXMJAMwIAgIFc3RhdHMJAMwIAgIHdG90YWxJbgUDbmlsBQNTRVAAEGtleVN0YXRzVG90YWxPdXQJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICCHRvdGFsT3V0BQNuaWwFA1NFUAARa2V5QWxsb3dlZEFkZHJlc3MJALkJAgkAzAgCAgIlcwkAzAgCAg5hbGxvd2VkQWRkcmVzcwUDbmlsBQNTRVABGGtleVN0YXRzVG90YWxJbkJ5QWRkcmVzcwEHYWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgVzdGF0cwkAzAgCAgd0b3RhbEluCQDMCAIJAKUIAQUHYWRkcmVzcwUDbmlsBQNTRVABGWtleVN0YXRzVG90YWxPdXRCeUFkZHJlc3MBB2FkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIFc3RhdHMJAMwIAgIIdG90YWxPdXQJAMwIAgkApQgBBQdhZGRyZXNzBQNuaWwFA1NFUAEKa2V5SGlzdG9yeQIHYWRkcmVzcwR0eElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICB2hpc3RvcnkJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAIJANgEAQUEdHhJZAUDbmlsBQNTRVABDWZvcm1hdEhpc3RvcnkDCGFtb3VudEluCWFtb3VudE91dAVzdGFrZQkAuQkCCQDMCAICBiVkJWQlZAkAzAgCCQCkAwEFCGFtb3VudEluCQDMCAIJAKQDAQUJYW1vdW50T3V0CQDMCAIJAKUDAQUFc3Rha2UFA25pbAUDU0VQAAlhc3NldEluSWQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtleUFzc2V0SW5JZAkBB3dyYXBFcnIBAhFpbnZhbGlkIGFzc2V0SW5JZAALYXNzZXRJbkluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQlhc3NldEluSWQJAQd3cmFwRXJyAQITaW52YWxpZCBhc3NldEluSW5mbwAKYXNzZXRPdXRJZAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUNa2V5QXNzZXRPdXRJZAkBB3dyYXBFcnIBAhFpbnZhbGlkIGFzc2V0SW5JZAAMYXNzZXRPdXRJbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUKYXNzZXRPdXRJZAkBB3dyYXBFcnIBAhRpbnZhbGlkIGFzc2V0T3V0SW5mbwANYXNzZXRPdXRQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEGtleUFzc2V0T3V0UHJpY2UJAQd3cmFwRXJyAQIVaW52YWxpZCBhc3NldE91dFByaWNlABRzdGFraW5nQWRkcmVzc09wdGlvbgQHJG1hdGNoMAkAnQgCBQR0aGlzBRFrZXlTdGFraW5nQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IADnN0YWtpbmdBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIFFHN0YWtpbmdBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECFmludmFsaWQgc3Rha2luZ0FkZHJlc3MAFGFsbG93ZWRBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMFEWtleUFsbG93ZWRBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAOYWxsb3dlZEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUUYWxsb3dlZEFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIWaW52YWxpZCBhbGxvd2VkQWRkcmVzcwAPQURNSU5fTElTVF9TSVpFAAUABlFVT1JVTQADABFUWElEX0JZVEVTX0xFTkdUSAAgARhrZXlBbGxvd2VkVHhJZFZvdGVQcmVmaXgBBHR4SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIJYWxsb3dUeElkCQDMCAIFBHR4SWQFA25pbAUDU0VQARBrZXlGdWxsQWRtaW5Wb3RlAgZwcmVmaXgMYWRtaW5BZGRyZXNzCQC5CQIJAMwIAgUGcHJlZml4CQDMCAIFDGFkbWluQWRkcmVzcwUDbmlsBQNTRVABE2tleUFkbWluQWRkcmVzc0xpc3QACQC5CQIJAMwIAgICJXMJAMwIAgIQYWRtaW5BZGRyZXNzTGlzdAUDbmlsBQNTRVABDmtleUFsbG93ZWRUeElkAAkAuQkCCQDMCAICAiVzCQDMCAICBHR4SWQFA25pbAUDU0VQAQxnZXRBZG1pblZvdGUCBnByZWZpeAVhZG1pbgQHdm90ZUtleQkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFBWFkbWluCQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAENZ2V0QWRtaW5zTGlzdAAEByRtYXRjaDAJAJ0IAgUEdGhpcwkBE2tleUFkbWluQWRkcmVzc0xpc3QAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAtQkCBQFzBQNTRVAFA25pbAENaXNJbkFkbWluTGlzdAEHYWRkcmVzcwkBD2NvbnRhaW5zRWxlbWVudAIJAQ1nZXRBZG1pbnNMaXN0AAUHYWRkcmVzcwESZ2VuVm90ZXNLZXlzSGVscGVyAgFhDGFkbWluQWRkcmVzcwQLJHQwMzMyMjMzNDYFAWEEBnJlc3VsdAgFCyR0MDMzMjIzMzQ2Al8xBAZwcmVmaXgIBQskdDAzMzIyMzM0NgJfMgkAlAoCCQDNCAIFBnJlc3VsdAkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFDGFkbWluQWRkcmVzcwUGcHJlZml4AQxnZW5Wb3Rlc0tleXMBCWtleVByZWZpeAQJYWRtaW5MaXN0CQETa2V5QWRtaW5BZGRyZXNzTGlzdAAECyR0MDM0OTMzNTc3CgACJGwJAQ1nZXRBZG1pbnNMaXN0AAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQlrZXlQcmVmaXgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEmdlblZvdGVzS2V5c0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUEBnJlc3VsdAgFCyR0MDM0OTMzNTc3Al8xBAZwcmVmaXgIBQskdDAzNDkzMzU3NwJfMgUGcmVzdWx0ARBjb3VudFZvdGVzSGVscGVyAgZyZXN1bHQHdm90ZUtleQkAZAIFBnJlc3VsdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd2b3RlS2V5AAABCmNvdW50Vm90ZXMBBnByZWZpeAQFdm90ZXMJAQxnZW5Wb3Rlc0tleXMBBQZwcmVmaXgKAAIkbAUFdm90ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNvdW50Vm90ZXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFARBjbGVhclZvdGVzSGVscGVyAgZyZXN1bHQDa2V5CQDNCAIFBnJlc3VsdAkBC0RlbGV0ZUVudHJ5AQUDa2V5ARNnZXRDbGVhclZvdGVFbnRyaWVzAQZwcmVmaXgEBXZvdGVzCQEMZ2VuVm90ZXNLZXlzAQUGcHJlZml4CgACJGwFBXZvdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARBjbGVhclZvdGVzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQEMdm90ZUlOVEVSTkFMBBNjYWxsZXJBZGRyZXNzU3RyaW5nCWtleVByZWZpeAhtaW5Wb3Rlcwp2b3RlUmVzdWx0BAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQQYWRtaW5DdXJyZW50Vm90ZQkBDGdldEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQDZXJyAwkBASEBCQENaXNJbkFkbWluTGlzdAEFE2NhbGxlckFkZHJlc3NTdHJpbmcJAQh0aHJvd0VycgEJAKwCAgkArAICAglBZGRyZXNzOiAFE2NhbGxlckFkZHJlc3NTdHJpbmcCEiBub3QgaW4gQWRtaW4gbGlzdAMJAAACBRBhZG1pbkN1cnJlbnRWb3RlAAEJAQh0aHJvd0VycgEJAKwCAgUHdm90ZUtleQISIHlvdSBhbHJlYWR5IHZvdGVkBQR1bml0AwkAAAIFA2VycgUDZXJyBAV2b3RlcwkBCmNvdW50Vm90ZXMBBQlrZXlQcmVmaXgDCQBnAgkAZAIFBXZvdGVzAAEFCG1pblZvdGVzBBBjbGVhclZvdGVFbnRyaWVzCQETZ2V0Q2xlYXJWb3RlRW50cmllcwEFCWtleVByZWZpeAkAzggCBRBjbGVhclZvdGVFbnRyaWVzBQp2b3RlUmVzdWx0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd2b3RlS2V5AAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZ2V0U3dhcEFjdGlvbnMDAWkFc3Rha2ULc3Rha2luZ05vZGUEC3VzZXJBZGRyZXNzCAUBaQZjYWxsZXIEE3BheW1lbnRTaXplRXhwZWN0ZWQAAQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMFE3BheW1lbnRTaXplRXhwZWN0ZWQJAQh0aHJvd0VycgECEGludmFsaWQgcGF5bWVudHMEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFCWFzc2V0SW5JZAkBCHRocm93RXJyAQIXaW52YWxpZCBwYXltZW50IGFzc2V0SWQDCQAAAgUNYXNzZXRPdXRQcmljZQAACQEIdGhyb3dFcnIBAhVpbnZhbGlkIGFzc2V0T3V0UHJpY2UEDWFzc2V0SW5BbW91bnQIBQdwYXltZW50BmFtb3VudAQOYXNzZXRPdXRBbW91bnQJAGsDBQ1hc3NldEluQW1vdW50BQZzY2FsZTgFDWFzc2V0T3V0UHJpY2UDCQAAAgUOYXNzZXRPdXRBbW91bnQAAAkBCHRocm93RXJyAQIWaW52YWxpZCBhc3NldE91dEFtb3VudAQIc3Rha2VJbnYDBQVzdGFrZQkA/AcEBQ5zdGFraW5nQWRkcmVzcwISc3Rha2VGb3JTd2FwSEVMUEVSCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgULc3Rha2luZ05vZGUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKYXNzZXRPdXRJZAUOYXNzZXRPdXRBbW91bnQFA25pbAUEdW5pdAMJAAACBQhzdGFrZUludgUIc3Rha2VJbnYJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rZXlTdGF0c1RvdGFsSW4JAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tleVN0YXRzVG90YWxJbgAABQ1hc3NldEluQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlTdGF0c1RvdGFsT3V0CQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRBrZXlTdGF0c1RvdGFsT3V0AAAFDmFzc2V0T3V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5U3RhdHNUb3RhbEluQnlBZGRyZXNzAQULdXNlckFkZHJlc3MJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARhrZXlTdGF0c1RvdGFsSW5CeUFkZHJlc3MBBQt1c2VyQWRkcmVzcwAABQ1hc3NldEluQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZa2V5U3RhdHNUb3RhbE91dEJ5QWRkcmVzcwEFC3VzZXJBZGRyZXNzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEZa2V5U3RhdHNUb3RhbE91dEJ5QWRkcmVzcwEFC3VzZXJBZGRyZXNzAAAFDmFzc2V0T3V0QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlIaXN0b3J5AgULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQJAQ1mb3JtYXRIaXN0b3J5AwUNYXNzZXRJbkFtb3VudAUOYXNzZXRPdXRBbW91bnQFBXN0YWtlBQNuaWwDBQVzdGFrZQUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQ5hc3NldE91dEFtb3VudAUKYXNzZXRPdXRJZAUDbmlsBQ5hc3NldE91dEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEBaQELdm90ZUZvclR4SWQBBHR4SWQEE2NhbGxlckFkZHJlc3NTdHJpbmcJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJa2V5UHJlZml4CQEYa2V5QWxsb3dlZFR4SWRWb3RlUHJlZml4AQUEdHhJZAQGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlBbGxvd2VkVHhJZAAFBHR4SWQFA25pbAQRYWxsb3dlZFR4SWRPcHRpb24JAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAQDZXJyCQDMCAIDCQAAAgkAyAEBCQDZBAEFBHR4SWQFEVRYSURfQllURVNfTEVOR1RIBgkBCHRocm93RXJyAQkArAICBQR0eElkAhIgaXMgbm90IHZhbGlkIHR4SWQJAMwIAgMDCQAAAgURYWxsb3dlZFR4SWRPcHRpb24FBHVuaXQGCQECIT0CCQEFdmFsdWUBBRFhbGxvd2VkVHhJZE9wdGlvbgUEdHhJZAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAITIGlzIGFscmVhZHkgYWxsb3dlZAUDbmlsAwkAAAIFA2VycgUDZXJyCQEMdm90ZUlOVEVSTkFMBAUTY2FsbGVyQWRkcmVzc1N0cmluZwUJa2V5UHJlZml4BQZRVU9SVU0FBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECGJ5QWRtaW5zCQAAAggFAnR4AmlkCQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAIABAdieU93bmVyAwkAZwIJAJADAQkBDWdldEFkbWluc0xpc3QABQZRVU9SVU0HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwUIYnlBZG1pbnMGBQdieU93bmVy5zbVvw==", "height": 4015751, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9tMipfJYcfBeiLzfin7eamK1fcGNaHd26NmBVR3h4FEt Next: 4zUs3ZnRaQmcbkv1S677JPTMgxprceeqd6sTuTbgwarE Diff:
OldNewDifferences
236236
237237
238238 @Callable(i)
239-func swap (stake) = getSwapActions(i, stake, "")
240-
241-
242-
243-@Callable(i)
244-func swapAndSetStakingNode (stake,stakingNode) = getSwapActions(i, stake, stakingNode)
245-
246-
247-
248-@Callable(i)
249-func claim () = {
250- let checkCaller = if ((i.caller == allowedAddress))
251- then true
252- else throwErr("permission denied")
253- if ((checkCaller == checkCaller))
254- then $Tuple2([ScriptTransfer(allowedAddress, assetBalance(this, assetInId), assetInId)], unit)
255- else throw("Strict value is not equal to itself.")
256- }
257-
258-
259-
260-@Callable(i)
261239 func voteForTxId (txId) = {
262240 let callerAddressString = toBase58String(i.caller.bytes)
263241 let keyPrefix = keyAllowedTxIdVotePrefix(txId)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "l2mp_swap.ride"
55
66 let SEP = "__"
77
88 let scale8 = 100000000
99
1010 let scale18 = 1000000000000000000
1111
1212 let ADDRESS_BYTES_SIZE = 26
1313
1414 let BLOCKS_IN_DAY = 1440
1515
1616 func wrapErr (msg) = ((contractFile + ": ") + msg)
1717
1818
1919 func throwErr (msg) = throw(wrapErr(msg))
2020
2121
2222 let keyAssetInId = makeString(["%s", "assetInId"], SEP)
2323
2424 let keyAssetOutId = makeString(["%s", "assetOutId"], SEP)
2525
2626 let keyAssetOutPrice = makeString(["%s", "assetOutPrice"], SEP)
2727
2828 let keyStakingAddress = makeString(["%s", "stakingAddress"], SEP)
2929
3030 let keyStatsTotalIn = makeString(["%s%s", "stats", "totalIn"], SEP)
3131
3232 let keyStatsTotalOut = makeString(["%s%s", "stats", "totalOut"], SEP)
3333
3434 let keyAllowedAddress = makeString(["%s", "allowedAddress"], SEP)
3535
3636 func keyStatsTotalInByAddress (address) = makeString(["%s%s%s", "stats", "totalIn", toString(address)], SEP)
3737
3838
3939 func keyStatsTotalOutByAddress (address) = makeString(["%s%s%s", "stats", "totalOut", toString(address)], SEP)
4040
4141
4242 func keyHistory (address,txId) = makeString(["%s%s%s", "history", toString(address), toBase58String(txId)], SEP)
4343
4444
4545 func formatHistory (amountIn,amountOut,stake) = makeString(["%d%d%d", toString(amountIn), toString(amountOut), toString(stake)], SEP)
4646
4747
4848 let assetInId = fromBase58String(valueOrErrorMessage(getString(this, keyAssetInId), wrapErr("invalid assetInId")))
4949
5050 let assetInInfo = valueOrErrorMessage(assetInfo(assetInId), wrapErr("invalid assetInInfo"))
5151
5252 let assetOutId = fromBase58String(valueOrErrorMessage(getString(this, keyAssetOutId), wrapErr("invalid assetInId")))
5353
5454 let assetOutInfo = valueOrErrorMessage(assetInfo(assetOutId), wrapErr("invalid assetOutInfo"))
5555
5656 let assetOutPrice = valueOrErrorMessage(getInteger(this, keyAssetOutPrice), wrapErr("invalid assetOutPrice"))
5757
5858 let stakingAddressOption = match getString(this, keyStakingAddress) {
5959 case s: String =>
6060 addressFromString(s)
6161 case _: Unit =>
6262 unit
6363 case _ =>
6464 throw("Match error")
6565 }
6666
6767 let stakingAddress = valueOrErrorMessage(stakingAddressOption, wrapErr("invalid stakingAddress"))
6868
6969 let allowedAddressOption = match getString(this, keyAllowedAddress) {
7070 case s: String =>
7171 addressFromString(s)
7272 case _: Unit =>
7373 unit
7474 case _ =>
7575 throw("Match error")
7676 }
7777
7878 let allowedAddress = valueOrErrorMessage(allowedAddressOption, wrapErr("invalid allowedAddress"))
7979
8080 let ADMIN_LIST_SIZE = 5
8181
8282 let QUORUM = 3
8383
8484 let TXID_BYTES_LENGTH = 32
8585
8686 func keyAllowedTxIdVotePrefix (txId) = makeString(["%s%s%s", "allowTxId", txId], SEP)
8787
8888
8989 func keyFullAdminVote (prefix,adminAddress) = makeString([prefix, adminAddress], SEP)
9090
9191
9292 func keyAdminAddressList () = makeString(["%s", "adminAddressList"], SEP)
9393
9494
9595 func keyAllowedTxId () = makeString(["%s", "txId"], SEP)
9696
9797
9898 func getAdminVote (prefix,admin) = {
9999 let voteKey = keyFullAdminVote(prefix, admin)
100100 valueOrElse(getInteger(voteKey), 0)
101101 }
102102
103103
104104 func getAdminsList () = match getString(this, keyAdminAddressList()) {
105105 case s: String =>
106106 split(s, SEP)
107107 case _ =>
108108 nil
109109 }
110110
111111
112112 func isInAdminList (address) = containsElement(getAdminsList(), address)
113113
114114
115115 func genVotesKeysHelper (a,adminAddress) = {
116116 let $t033223346 = a
117117 let result = $t033223346._1
118118 let prefix = $t033223346._2
119119 $Tuple2((result :+ keyFullAdminVote(prefix, adminAddress)), prefix)
120120 }
121121
122122
123123 func genVotesKeys (keyPrefix) = {
124124 let adminList = keyAdminAddressList()
125125 let $t034933577 = {
126126 let $l = getAdminsList()
127127 let $s = size($l)
128128 let $acc0 = $Tuple2(nil, keyPrefix)
129129 func $f0_1 ($a,$i) = if (($i >= $s))
130130 then $a
131131 else genVotesKeysHelper($a, $l[$i])
132132
133133 func $f0_2 ($a,$i) = if (($i >= $s))
134134 then $a
135135 else throw("List size exceeds 5")
136136
137137 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
138138 }
139139 let result = $t034933577._1
140140 let prefix = $t034933577._2
141141 result
142142 }
143143
144144
145145 func countVotesHelper (result,voteKey) = (result + valueOrElse(getInteger(voteKey), 0))
146146
147147
148148 func countVotes (prefix) = {
149149 let votes = genVotesKeys(prefix)
150150 let $l = votes
151151 let $s = size($l)
152152 let $acc0 = 0
153153 func $f0_1 ($a,$i) = if (($i >= $s))
154154 then $a
155155 else countVotesHelper($a, $l[$i])
156156
157157 func $f0_2 ($a,$i) = if (($i >= $s))
158158 then $a
159159 else throw("List size exceeds 5")
160160
161161 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
162162 }
163163
164164
165165 func clearVotesHelper (result,key) = (result :+ DeleteEntry(key))
166166
167167
168168 func getClearVoteEntries (prefix) = {
169169 let votes = genVotesKeys(prefix)
170170 let $l = votes
171171 let $s = size($l)
172172 let $acc0 = nil
173173 func $f0_1 ($a,$i) = if (($i >= $s))
174174 then $a
175175 else clearVotesHelper($a, $l[$i])
176176
177177 func $f0_2 ($a,$i) = if (($i >= $s))
178178 then $a
179179 else throw("List size exceeds 5")
180180
181181 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
182182 }
183183
184184
185185 func voteINTERNAL (callerAddressString,keyPrefix,minVotes,voteResult) = {
186186 let voteKey = keyFullAdminVote(keyPrefix, callerAddressString)
187187 let adminCurrentVote = getAdminVote(keyPrefix, callerAddressString)
188188 let err = if (!(isInAdminList(callerAddressString)))
189189 then throwErr((("Address: " + callerAddressString) + " not in Admin list"))
190190 else if ((adminCurrentVote == 1))
191191 then throwErr((voteKey + " you already voted"))
192192 else unit
193193 if ((err == err))
194194 then {
195195 let votes = countVotes(keyPrefix)
196196 if (((votes + 1) >= minVotes))
197197 then {
198198 let clearVoteEntries = getClearVoteEntries(keyPrefix)
199199 (clearVoteEntries ++ voteResult)
200200 }
201201 else [IntegerEntry(voteKey, 1)]
202202 }
203203 else throw("Strict value is not equal to itself.")
204204 }
205205
206206
207207 func getSwapActions (i,stake,stakingNode) = {
208208 let userAddress = i.caller
209209 let paymentSizeExpected = 1
210210 if ((size(i.payments) != paymentSizeExpected))
211211 then throwErr("invalid payments")
212212 else {
213213 let payment = i.payments[0]
214214 if ((payment.assetId != assetInId))
215215 then throwErr("invalid payment assetId")
216216 else if ((assetOutPrice == 0))
217217 then throwErr("invalid assetOutPrice")
218218 else {
219219 let assetInAmount = payment.amount
220220 let assetOutAmount = fraction(assetInAmount, scale8, assetOutPrice)
221221 if ((assetOutAmount == 0))
222222 then throwErr("invalid assetOutAmount")
223223 else {
224224 let stakeInv = if (stake)
225225 then invoke(stakingAddress, "stakeForSwapHELPER", [toString(userAddress), stakingNode], [AttachedPayment(assetOutId, assetOutAmount)])
226226 else unit
227227 if ((stakeInv == stakeInv))
228228 then $Tuple2(([IntegerEntry(keyStatsTotalIn, (valueOrElse(getInteger(this, keyStatsTotalIn), 0) + assetInAmount)), IntegerEntry(keyStatsTotalOut, (valueOrElse(getInteger(this, keyStatsTotalOut), 0) + assetOutAmount)), IntegerEntry(keyStatsTotalInByAddress(userAddress), (valueOrElse(getInteger(this, keyStatsTotalInByAddress(userAddress)), 0) + assetInAmount)), IntegerEntry(keyStatsTotalOutByAddress(userAddress), (valueOrElse(getInteger(this, keyStatsTotalOutByAddress(userAddress)), 0) + assetOutAmount)), StringEntry(keyHistory(userAddress, i.transactionId), formatHistory(assetInAmount, assetOutAmount, stake))] ++ (if (stake)
229229 then nil
230230 else [ScriptTransfer(userAddress, assetOutAmount, assetOutId)])), assetOutAmount)
231231 else throw("Strict value is not equal to itself.")
232232 }
233233 }
234234 }
235235 }
236236
237237
238238 @Callable(i)
239-func swap (stake) = getSwapActions(i, stake, "")
240-
241-
242-
243-@Callable(i)
244-func swapAndSetStakingNode (stake,stakingNode) = getSwapActions(i, stake, stakingNode)
245-
246-
247-
248-@Callable(i)
249-func claim () = {
250- let checkCaller = if ((i.caller == allowedAddress))
251- then true
252- else throwErr("permission denied")
253- if ((checkCaller == checkCaller))
254- then $Tuple2([ScriptTransfer(allowedAddress, assetBalance(this, assetInId), assetInId)], unit)
255- else throw("Strict value is not equal to itself.")
256- }
257-
258-
259-
260-@Callable(i)
261239 func voteForTxId (txId) = {
262240 let callerAddressString = toBase58String(i.caller.bytes)
263241 let keyPrefix = keyAllowedTxIdVotePrefix(txId)
264242 let result = [StringEntry(keyAllowedTxId(), txId)]
265243 let allowedTxIdOption = getString(this, keyAllowedTxId())
266244 let err = [if ((size(fromBase58String(txId)) == TXID_BYTES_LENGTH))
267245 then true
268246 else throwErr((txId + " is not valid txId")), if (if ((allowedTxIdOption == unit))
269247 then true
270248 else (value(allowedTxIdOption) != txId))
271249 then true
272250 else throwErr((txId + " is already allowed"))]
273251 if ((err == err))
274252 then voteINTERNAL(callerAddressString, keyPrefix, QUORUM, result)
275253 else throw("Strict value is not equal to itself.")
276254 }
277255
278256
279257 @Verifier(tx)
280258 func verify () = {
281259 let byAdmins = (tx.id == fromBase58String(valueOrElse(getString(this, keyAllowedTxId()), "")))
282260 let byOwner = if ((size(getAdminsList()) >= QUORUM))
283261 then false
284262 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
285263 if (byAdmins)
286264 then true
287265 else byOwner
288266 }
289267

github/deemru/w8io/6500d08 
36.24 ms