tx · Cve75rBvxj2RB3NCaVPZ72YbMX51RKB8nZtX9SW8i2rs

3PQn4BwNW1kcX1gagVHWxSP5RyQ3V9UYPT8:  -0.01200000 Waves

2024.05.22 23:08 [4183759] smart account 3PQn4BwNW1kcX1gagVHWxSP5RyQ3V9UYPT8 > SELF 0.00000000 Waves

{ "type": 13, "id": "Cve75rBvxj2RB3NCaVPZ72YbMX51RKB8nZtX9SW8i2rs", "fee": 1200000, "feeAssetId": null, "timestamp": 1716408531142, "version": 1, "sender": "3PQn4BwNW1kcX1gagVHWxSP5RyQ3V9UYPT8", "senderPublicKey": "4EGAYvzAwMC6xLvFvRhFGwE4TwWsLmYPKTM9hjMjannm", "proofs": [ "2Tw5uqwBv5QW4ccFNCgVURoZyLLybShMFKErumixt8sFcHx18gjxXHqRMTLv5WaXTJPaAYCxS69EqsofovrhbZSs" ], "script": "base64:BgIhCAISBAoCAQgSBQoDAQgIEgQKAgEIEgUKAwgIARIDCgEIIQEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAENYXNQcmljZUFuZEF2ZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwMDCQABAggFByRtYXRjaDACXzECA0ludAMJAAECCAUHJG1hdGNoMAJfMgIDSW50AwkAAQIIBQckbWF0Y2gwAl8zAgNJbnQJAAECCAUHJG1hdGNoMAJfNAIDSW50BwcHCQABAgUHJG1hdGNoMAIUKEludCwgSW50LCBJbnQsIEludCkHBARpbnQxCAUHJG1hdGNoMAJfMQQEaW50MggFByRtYXRjaDACXzIEBGludDMIBQckbWF0Y2gwAl8zBARpbnQ0CAUHJG1hdGNoMAJfNAkAlAoCBQRpbnQxBQRpbnQyCQACAQIqd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IChJbnQsIEludCwgSW50LCBJbnQpABJjb25maWdBZGRyZXNzU3RvcmUCBmNvbmZpZwANY29uZmlnQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRJjb25maWdBZGRyZXNzU3RvcmUCInRyZWFzdXJ5OiBjb25maWcgYWRkcmVzcyBub3QgZm91bmQCFmludmFsaWQgY29uZmlnIGFkZHJlc3MADXZvdGluZ1Jlc3VsdHMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIWY29udHJhY3Rfdm90aW5nX3Jlc3VsdAIZbm8gY29udHJhY3Rfdm90aW5nX3Jlc3VsdAIeaW52YWxpZCBjb250cmFjdF92b3RpbmdfcmVzdWx0AAZIRUlHSFQFBmhlaWdodAEOb3BBbGxvd2VkU3RvcmUBAm9wCQCsAgIJAKwCAgIDb3BfBQJvcAIIX2FsbG93ZWQBB2FsbG93ZWQBAm9wCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCBQJvcAUDbmlsBQNuaWwACnB3ckFzc2V0SWQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCDHBvd2VyQXNzZXRJZAIWcHdyIGFzc2V0IGlkIG5vdCBmb3VuZAAObWludGVyQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIPY29udHJhY3RfbWludGVyAhJubyBjb250cmFjdF9taW50ZXICF2ludmFsaWQgbWludGVyIGNvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIQY29udHJhY3Rfc3Rha2luZwITbm8gc3Rha2luZ19jb250cmFjdAIXaW52YWxpZCBzdGFraW5nIGFkZHJlc3MABm9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwkArAICCQClCAEFBHRoaXMCB19vcmFjbGUCIzNQS2tvaktkZDZCQnpUZjFSWGJRVmZVRHJhTkZYWEhLelFGAhZpbnZhbGlkIG9yYWNsZSBhZGRyZXNzAARzd2FwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1jb25maWdBZGRyZXNzCQCsAgIJAKUIAQUEdGhpcwIFX3N3YXACIzNQNjh6Tml1ZnN1MXZpWnB1MWFZM2NkYWhSUktjdlY1TjkzAhRpbnZhbGlkIHN3YXAgYWRkcmVzcwAKcHV6emxlU3dhcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwkArAICCQClCAEFBHRoaXMCC19wdXp6bGVTd2FwAiMzUEdGSHpWR1Q0TlRpZ3dDS1AxTmN3b1hrb2RWWnd2QnV1VQIaaW52YWxpZCBwdXp6bGVTd2FwIGFkZHJlc3MACnRvdGFsUG93ZXIJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Agp0b3RhbFBvd2VyBQNuaWwFA25pbAAYd2Vla2x5R2xvYmFsTGltaXRQZXJjZW50CQELdmFsdWVPckVsc2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkApQgBBQR0aGlzAiFfd2Vla2x5R2xvYmFsTGltaXRQZXJjZW50QmFzZTEwMDAAZAARd2Vla2x5R2xvYmFsTGltaXQJAGsDBQp0b3RhbFBvd2VyBRh3ZWVrbHlHbG9iYWxMaW1pdFBlcmNlbnQA6AcAC2N1cnJlbnRXZWVrCQBrAwUGSEVJR0hUAAEJAGgCAKALAAcAF2N1cnJlbnRHbG9iYWxMaW1pdFN0b3JlCQCsAgICDWdsb2JhbF9saW1pdF8JAKQDAQULY3VycmVudFdlZWsAEmN1cnJlbnRHbG9iYWxMaW1pdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRdjdXJyZW50R2xvYmFsTGltaXRTdG9yZQURd2Vla2x5R2xvYmFsTGltaXQADGJvbnVzUGVyY2VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1jb25maWdBZGRyZXNzCQCsAgIJAKUIAQUEdGhpcwIVX2JvbnVzUGVyY2VudEJhc2UxMDAwAPIHAA1wd3JBc3NldElkU3RyCQDYBAEFCnB3ckFzc2V0SWQAE3B3clByaWNlUGVyaW9kSG91cnMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNY29uZmlnQWRkcmVzcwkArAICCQClCAEFBHRoaXMCFF9wd3JQcmljZVBlcmlvZEhvdXJzAAQAA3h0bgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAACXVzZHRFUkMyMAIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kABmV0aFBQVAIsM1Z1VjVXVG1EejQ3RG1kbjNRcGNZanpiU2RpcGpRRTRKTWROZTF4WnBYMTMBD3JlZkJvbnVzU3RvcmFnZQEEY29kZQkArAICAgpyZWZfYm9udXNfBQRjb2RlARFyZWZBZGRyZXNzU3RvcmFnZQEEY29kZQkArAICAgxyZWZfYWRkcmVzc18FBGNvZGUBCXB3ckFtb3VudAIIYW1vdW50SW4HYXNzZXRJbgQLJHQwMzUxMzM2MTUJAQ1hc1ByaWNlQW5kQXZnAQkA/AcEBQZvcmFjbGUCCXByaWNlSW5mbwkAzAgCBRNwd3JQcmljZVBlcmlvZEhvdXJzCQDMCAICCFBXUi1VU0RUBQNuaWwFA25pbAQFcHJpY2UIBQskdDAzNTEzMzYxNQJfMQQIcHJpY2VBdmcIBQskdDAzNTEzMzYxNQJfMgQIUFdSX1VTRFQJAJYDAQkAzAgCBQVwcmljZQkAzAgCBQhwcmljZUF2ZwUDbmlsBAl1c2R0UHJpY2UDCQAAAgUHYXNzZXRJbgUJdXNkdEVSQzIwAIDC1y8DCQAAAgUHYXNzZXRJbgUGZXRoUFBUCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlAhUlcyVzX19wcmljZV9fRVRILVVTRFQCHkVUSCBwcmljZSBpcyBub3QgaW4gdGhlIE9yYWNsZQMJAAACBQdhc3NldEluAgVXQVZFUwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQIXJXMlc19fcHJpY2VfX1dBVkVTLVVTRFQCIFdBVkVTIHByaWNlIGlzIG5vdCBpbiB0aGUgT3JhY2xlAwkAAAIFB2Fzc2V0SW4FA3h0bgkAaAIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUCFiVzJXNfX3ByaWNlX19VU0ROLVVTRFQCHlhUTiBwcmljZSBpcyBub3QgaW4gdGhlIE9yYWNsZQBkCQACAQJBVG9rZW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQuIFN1cHBvcnRlZCBhcmU6IFVTRFQtRVJDMjAsIFdBVkVTLCBYVE4JAGsDCQBrAwUIYW1vdW50SW4FCXVzZHRQcmljZQUIUFdSX1VTRFQFDGJvbnVzUGVyY2VudADoBwEUYnV5UHdyUHV6emxlSW50ZXJuYWwEAWkGbWluUHdyCXJvdXRlc1N0cgdyZWZDb2RlBAZwYXVzZWQJAQdhbGxvd2VkAQIGYnV5UHdyAwkAAAIFBnBhdXNlZAUGcGF1c2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIfMSBhbmQgb25seSAxIHBheW1lbnQgaXMgYWxsb3dlZAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAXAJAJEDAggFAWkIcGF5bWVudHMAAAQRcHdyQmFsYW5jZUF0U3RhcnQJAPAHAgUEdGhpcwUKcHdyQXNzZXRJZAMJAAACBRFwd3JCYWxhbmNlQXRTdGFydAURcHdyQmFsYW5jZUF0U3RhcnQECnRlblBlcmNlbnQJAGsDCAUBcAZhbW91bnQAAQAKBA9wYXltZW50VG9CdXlQd3IJAQ9BdHRhY2hlZFBheW1lbnQCCAUBcAdhc3NldElkBQp0ZW5QZXJjZW50BAZzd2FwZWQJAPwHBAUKcHV6emxlU3dhcAIEc3dhcAkAzAgCBQlyb3V0ZXNTdHIJAMwIAgAABQNuaWwJAMwIAgUPcGF5bWVudFRvQnV5UHdyBQNuaWwDCQAAAgUGc3dhcGVkBQZzd2FwZWQEE3B3ckJhbGFuY2VBZnRlclN3YXAJAPAHAgUEdGhpcwUKcHdyQXNzZXRJZAMJAAACBRNwd3JCYWxhbmNlQWZ0ZXJTd2FwBRNwd3JCYWxhbmNlQWZ0ZXJTd2FwBApwd3JTd2FwcGVkCQBlAgUTcHdyQmFsYW5jZUFmdGVyU3dhcAURcHdyQmFsYW5jZUF0U3RhcnQDCQBnAgAABQpwd3JTd2FwcGVkCQACAQITbm90aGluZyB3YXMgc3dhcHBlZAQHYXNzZXRJbgMJAQlpc0RlZmluZWQBCAUBcAdhc3NldElkCQDYBAEJAQV2YWx1ZQEIBQFwB2Fzc2V0SWQCBVdBVkVTBAh0b3RhbFB3cgkBCXB3ckFtb3VudAIIBQFwBmFtb3VudAUHYXNzZXRJbgMJAAACBQh0b3RhbFB3cgUIdG90YWxQd3IEBWJvbnVzBA1ib251c0Jhc2UxMDAwCQCfCAEJAQ9yZWZCb251c1N0b3JhZ2UBBQdyZWZDb2RlAwMJAGcCCQCxAgEFB3JlZkNvZGUABAkBCWlzRGVmaW5lZAEFDWJvbnVzQmFzZTEwMDAHCQBrAwUIdG90YWxQd3IJAQV2YWx1ZQEFDWJvbnVzQmFzZTEwMDAA6AcAAAQJcHdyVG9NaW50CQBkAgkAZQIFCHRvdGFsUHdyBQpwd3JTd2FwcGVkCQBoAgACBQVib251cwQEbWludAkA/AcEBQ5taW50ZXJDb250cmFjdAIEbWludAkAzAgCBQlwd3JUb01pbnQFA25pbAUDbmlsAwkAAAIFBG1pbnQFBG1pbnQECG5ld0xpbWl0CQBlAgUSY3VycmVudEdsb2JhbExpbWl0BQlwd3JUb01pbnQDCQBmAgAABQhuZXdMaW1pdAkAAgEJAKwCAgIoVGhlIHJlc3Qgb2Ygd2Vla2x5IGdsb2JhbCBsaW1pdCBpczogUFdSIAkApAMBBRJjdXJyZW50R2xvYmFsTGltaXQED3B3ckJhbGFuY2VBdEVuZAkA8AcCBQR0aGlzBQpwd3JBc3NldElkBAdwd3JTb2xkCQBlAgkAZQIFD3B3ckJhbGFuY2VBdEVuZAURcHdyQmFsYW5jZUF0U3RhcnQFBWJvbnVzAwkAZgIFBm1pblB3cgUHcHdyU29sZAkAAgEJAKwCAgkArAICCQCsAgICClJlc3VsdGluZyAJAKQDAQUHcHdyU29sZAIkIFBXUmxldHMgaXMgbGVzcyB0aGVuIG1pbiByZXF1ZXN0ZWQgCQCkAwEFBm1pblB3cgQGc3Rha2VkCQD8BwQFD3N0YWtpbmdDb250cmFjdAIIc3Rha2VGb3IJAMwIAgUEdXNlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQpwd3JBc3NldElkBQdwd3JTb2xkBQNuaWwDCQAAAgUGc3Rha2VkBQZzdGFrZWQECmJvbnVzVG9SZWYDCQBmAgUFYm9udXMAAAQKcmVmQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEXJlZkFkZHJlc3NTdG9yYWdlAQUHcmVmQ29kZQQKc3Rha2VCb251cwkA/AcEBQ9zdGFraW5nQ29udHJhY3QCCHN0YWtlRm9yCQDMCAIFCnJlZkFkZHJlc3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcHdyQXNzZXRJZAUFYm9udXMFA25pbAMJAAACBQpzdGFrZUJvbnVzBQpzdGFrZUJvbnVzBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQR1bml0AwkAAAIFCmJvbnVzVG9SZWYFCmJvbnVzVG9SZWYJAJQKAgkAzAgCCQEIY2hhbmdlQnkCAgtwd3Jfc3dhcHBlZAUKcHdyU3dhcHBlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXY3VycmVudEdsb2JhbExpbWl0U3RvcmUFCG5ld0xpbWl0CQDMCAIJAQhjaGFuZ2VCeQIJAKwCAgIIYmFsYW5jZV8FB2Fzc2V0SW4JAGUCCAUBcAZhbW91bnQFCnRlblBlcmNlbnQFA25pbAUHcHdyU29sZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUBaQEVc3dhcENhbGN1bGF0ZVJFQURPTkxZAghhbW91bnRJbgdhc3NldEluCQCUCgIFA25pbAkBCXB3ckFtb3VudAIFCGFtb3VudEluBQdhc3NldEluAWkBD2J1eVB3clB1enpsZVJlZgMGbWluUHdyCXJvdXRlc1N0cgdyZWZDb2RlCQEUYnV5UHdyUHV6emxlSW50ZXJuYWwEBQFpBQZtaW5Qd3IFCXJvdXRlc1N0cgUHcmVmQ29kZQFpAQxidXlQd3JQdXp6bGUCBm1pblB3cglyb3V0ZXNTdHIJARRidXlQd3JQdXp6bGVJbnRlcm5hbAQFAWkFBm1pblB3cgUJcm91dGVzU3RyAgABaQEKbmV3UmVmQ29kZQMEY29kZQdhZGRyZXNzDWJvbnVzQkFTRTEwMDADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgZkZW5pZWQDCQBmAgAECQCxAgEFBGNvZGUJAAIBAiBjb2RlIG11c3QgYmUgYXQgbGVhc3QgNCBjaHIgbG9uZwMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUHYWRkcmVzcwkAAgECD2ludmFsaWQgYWRkcmVzcwQMYm9udXNTdG9yYWdlCQEPcmVmQm9udXNTdG9yYWdlAQUEY29kZQQOYWRkcmVzc1N0b3JhZ2UJARFyZWZBZGRyZXNzU3RvcmFnZQEFBGNvZGUDCQBmAgUNYm9udXNCQVNFMTAwMAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxib251c1N0b3JhZ2UFDWJvbnVzQkFTRTEwMDAJAMwIAgkBC1N0cmluZ0VudHJ5AgUOYWRkcmVzc1N0b3JhZ2UFB2FkZHJlc3MFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBBQxib251c1N0b3JhZ2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQUOYWRkcmVzc1N0b3JhZ2UFA25pbAFpAQRpbml0AQRjb25mCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgUSY29uZmlnQWRkcmVzc1N0b3JlBQRjb25mBQNuaWwBAnR4AQZ2ZXJpZnkABAhieVZvdGluZwQHZW5hYmxlZAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ1jb25maWdBZGRyZXNzCQEOb3BBbGxvd2VkU3RvcmUBAhNnb3Zlcm5hbmNlX2FwcGx5X3R4BgMJAQEhAQUHZW5hYmxlZAkAAgECK3R4IGFwcGxpY2F0aW9uIHRocm93IGdvdmVybmFuY2Ugbm90IGVuYWJsZWQEAmlkCQDYBAEIBQJ0eAJpZAkAZwIFBkhFSUdIVAkBEUBleHRyTmF0aXZlKDEwNTApAgUNdm90aW5nUmVzdWx0cwkArAICCQCsAgIJAKwCAgIZcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0XwkApQgBBQR0aGlzAgFfBQJpZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkGBQhieVZvdGluZ+g4Dxg=", "chainId": 87, "height": 4183759, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DWqrtvc3Pyhfb5FsEv1g95zpUC6VRaahBtfFPYM3fiP8 Next: AetBw76uPoP5peuEtfzShjc8N4rkNS9Quqx6TGRcUQnY Diff:
OldNewDifferences
173173 then {
174174 let bonusToRef = if ((bonus > 0))
175175 then {
176- let refAddress = refAddressStorage(refCode)
176+ let refAddress = getStringValue(refAddressStorage(refCode))
177177 let stakeBonus = invoke(stakingContract, "stakeFor", [refAddress], [AttachedPayment(pwrAssetId, bonus)])
178178 if ((stakeBonus == stakeBonus))
179179 then unit
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 writeInt (key,value) = if ((0 > value))
1010 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
1111 else IntegerEntry(key, value)
1212
1313
1414 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
1515
1616
1717 func asInt (value) = match value {
1818 case int: Int =>
1919 int
2020 case _ =>
2121 throw("wrong type, expected: Int")
2222 }
2323
2424
2525 func asPriceAndAvg (value) = match value {
2626 case _ =>
2727 if (if (if ($isInstanceOf($match0._1, "Int"))
2828 then if ($isInstanceOf($match0._2, "Int"))
2929 then if ($isInstanceOf($match0._3, "Int"))
3030 then $isInstanceOf($match0._4, "Int")
3131 else false
3232 else false
3333 else false)
3434 then $isInstanceOf($match0, "(Int, Int, Int, Int)")
3535 else false)
3636 then {
3737 let int1 = $match0._1
3838 let int2 = $match0._2
3939 let int3 = $match0._3
4040 let int4 = $match0._4
4141 $Tuple2(int1, int2)
4242 }
4343 else throw("wrong type, expected: (Int, Int, Int, Int)")
4444 }
4545
4646
4747 let configAddressStore = "config"
4848
4949 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "treasury: config address not found")), "invalid config address")
5050
5151 let votingResults = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_voting_result"), "no contract_voting_result")), "invalid contract_voting_result")
5252
5353 let HEIGHT = height
5454
5555 func opAllowedStore (op) = (("op_" + op) + "_allowed")
5656
5757
5858 func allowed (op) = invoke(configAddress, "opAllowed", [op], nil)
5959
6060
6161 let pwrAssetId = fromBase58String(valueOrErrorMessage(getString(configAddress, "powerAssetId"), "pwr asset id not found"))
6262
6363 let minterContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_minter"), "no contract_minter")), "invalid minter contract")
6464
6565 let stakingContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_staking"), "no staking_contract")), "invalid staking address")
6666
6767 let oracle = valueOrErrorMessage(addressFromString(valueOrElse(getString(configAddress, (toString(this) + "_oracle")), "3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF")), "invalid oracle address")
6868
6969 let swap = valueOrErrorMessage(addressFromString(valueOrElse(getString(configAddress, (toString(this) + "_swap")), "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93")), "invalid swap address")
7070
7171 let puzzleSwap = valueOrErrorMessage(addressFromString(valueOrElse(getString(configAddress, (toString(this) + "_puzzleSwap")), "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU")), "invalid puzzleSwap address")
7272
7373 let totalPower = asInt(invoke(stakingContract, "totalPower", nil, nil))
7474
7575 let weeklyGlobalLimitPercent = valueOrElse(getInteger(configAddress, (toString(this) + "_weeklyGlobalLimitPercentBase1000")), 100)
7676
7777 let weeklyGlobalLimit = fraction(totalPower, weeklyGlobalLimitPercent, 1000)
7878
7979 let currentWeek = fraction(HEIGHT, 1, (1440 * 7))
8080
8181 let currentGlobalLimitStore = ("global_limit_" + toString(currentWeek))
8282
8383 let currentGlobalLimit = valueOrElse(getInteger(this, currentGlobalLimitStore), weeklyGlobalLimit)
8484
8585 let bonusPercent = valueOrElse(getInteger(configAddress, (toString(this) + "_bonusPercentBase1000")), 1010)
8686
8787 let pwrAssetIdStr = toBase58String(pwrAssetId)
8888
8989 let pwrPricePeriodHours = valueOrElse(getInteger(configAddress, (toString(this) + "_pwrPricePeriodHours")), 4)
9090
9191 let xtn = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
9292
9393 let usdtERC20 = "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"
9494
9595 let ethPPT = "3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13"
9696
9797 func refBonusStorage (code) = ("ref_bonus_" + code)
9898
9999
100100 func refAddressStorage (code) = ("ref_address_" + code)
101101
102102
103103 func pwrAmount (amountIn,assetIn) = {
104104 let $t035133615 = asPriceAndAvg(invoke(oracle, "priceInfo", [pwrPricePeriodHours, "PWR-USDT"], nil))
105105 let price = $t035133615._1
106106 let priceAvg = $t035133615._2
107107 let PWR_USDT = max([price, priceAvg])
108108 let usdtPrice = if ((assetIn == usdtERC20))
109109 then 100000000
110110 else if ((assetIn == ethPPT))
111111 then valueOrErrorMessage(getInteger(oracle, "%s%s__price__ETH-USDT"), "ETH price is not in the Oracle")
112112 else if ((assetIn == "WAVES"))
113113 then valueOrErrorMessage(getInteger(oracle, "%s%s__price__WAVES-USDT"), "WAVES price is not in the Oracle")
114114 else if ((assetIn == xtn))
115115 then (valueOrErrorMessage(getInteger(oracle, "%s%s__price__USDN-USDT"), "XTN price is not in the Oracle") * 100)
116116 else throw("Token is not supported yet. Supported are: USDT-ERC20, WAVES, XTN")
117117 fraction(fraction(amountIn, usdtPrice, PWR_USDT), bonusPercent, 1000)
118118 }
119119
120120
121121 func buyPwrPuzzleInternal (i,minPwr,routesStr,refCode) = {
122122 let paused = allowed("buyPwr")
123123 if ((paused == paused))
124124 then if ((size(i.payments) != 1))
125125 then throw("1 and only 1 payment is allowed")
126126 else {
127127 let user = toString(i.caller)
128128 let p = i.payments[0]
129129 let pwrBalanceAtStart = assetBalance(this, pwrAssetId)
130130 if ((pwrBalanceAtStart == pwrBalanceAtStart))
131131 then {
132132 let tenPercent = fraction(p.amount, 1, 10)
133133 let paymentToBuyPwr = AttachedPayment(p.assetId, tenPercent)
134134 let swaped = invoke(puzzleSwap, "swap", [routesStr, 0], [paymentToBuyPwr])
135135 if ((swaped == swaped))
136136 then {
137137 let pwrBalanceAfterSwap = assetBalance(this, pwrAssetId)
138138 if ((pwrBalanceAfterSwap == pwrBalanceAfterSwap))
139139 then {
140140 let pwrSwapped = (pwrBalanceAfterSwap - pwrBalanceAtStart)
141141 if ((0 >= pwrSwapped))
142142 then throw("nothing was swapped")
143143 else {
144144 let assetIn = if (isDefined(p.assetId))
145145 then toBase58String(value(p.assetId))
146146 else "WAVES"
147147 let totalPwr = pwrAmount(p.amount, assetIn)
148148 if ((totalPwr == totalPwr))
149149 then {
150150 let bonus = {
151151 let bonusBase1000 = getInteger(refBonusStorage(refCode))
152152 if (if ((size(refCode) >= 4))
153153 then isDefined(bonusBase1000)
154154 else false)
155155 then fraction(totalPwr, value(bonusBase1000), 1000)
156156 else 0
157157 }
158158 let pwrToMint = ((totalPwr - pwrSwapped) + (2 * bonus))
159159 let mint = invoke(minterContract, "mint", [pwrToMint], nil)
160160 if ((mint == mint))
161161 then {
162162 let newLimit = (currentGlobalLimit - pwrToMint)
163163 if ((0 > newLimit))
164164 then throw(("The rest of weekly global limit is: PWR " + toString(currentGlobalLimit)))
165165 else {
166166 let pwrBalanceAtEnd = assetBalance(this, pwrAssetId)
167167 let pwrSold = ((pwrBalanceAtEnd - pwrBalanceAtStart) - bonus)
168168 if ((minPwr > pwrSold))
169169 then throw(((("Resulting " + toString(pwrSold)) + " PWRlets is less then min requested ") + toString(minPwr)))
170170 else {
171171 let staked = invoke(stakingContract, "stakeFor", [user], [AttachedPayment(pwrAssetId, pwrSold)])
172172 if ((staked == staked))
173173 then {
174174 let bonusToRef = if ((bonus > 0))
175175 then {
176- let refAddress = refAddressStorage(refCode)
176+ let refAddress = getStringValue(refAddressStorage(refCode))
177177 let stakeBonus = invoke(stakingContract, "stakeFor", [refAddress], [AttachedPayment(pwrAssetId, bonus)])
178178 if ((stakeBonus == stakeBonus))
179179 then unit
180180 else throw("Strict value is not equal to itself.")
181181 }
182182 else unit
183183 if ((bonusToRef == bonusToRef))
184184 then $Tuple2([changeBy("pwr_swapped", pwrSwapped), IntegerEntry(currentGlobalLimitStore, newLimit), changeBy(("balance_" + assetIn), (p.amount - tenPercent))], pwrSold)
185185 else throw("Strict value is not equal to itself.")
186186 }
187187 else throw("Strict value is not equal to itself.")
188188 }
189189 }
190190 }
191191 else throw("Strict value is not equal to itself.")
192192 }
193193 else throw("Strict value is not equal to itself.")
194194 }
195195 }
196196 else throw("Strict value is not equal to itself.")
197197 }
198198 else throw("Strict value is not equal to itself.")
199199 }
200200 else throw("Strict value is not equal to itself.")
201201 }
202202 else throw("Strict value is not equal to itself.")
203203 }
204204
205205
206206 @Callable(i)
207207 func swapCalculateREADONLY (amountIn,assetIn) = $Tuple2(nil, pwrAmount(amountIn, assetIn))
208208
209209
210210
211211 @Callable(i)
212212 func buyPwrPuzzleRef (minPwr,routesStr,refCode) = buyPwrPuzzleInternal(i, minPwr, routesStr, refCode)
213213
214214
215215
216216 @Callable(i)
217217 func buyPwrPuzzle (minPwr,routesStr) = buyPwrPuzzleInternal(i, minPwr, routesStr, "")
218218
219219
220220
221221 @Callable(i)
222222 func newRefCode (code,address,bonusBASE1000) = if ((i.caller != this))
223223 then throw("denied")
224224 else if ((4 > size(code)))
225225 then throw("code must be at least 4 chr long")
226226 else if (!(isDefined(addressFromString(address))))
227227 then throw("invalid address")
228228 else {
229229 let bonusStorage = refBonusStorage(code)
230230 let addressStorage = refAddressStorage(code)
231231 if ((bonusBASE1000 > 0))
232232 then [IntegerEntry(bonusStorage, bonusBASE1000), StringEntry(addressStorage, address)]
233233 else [DeleteEntry(bonusStorage), DeleteEntry(addressStorage)]
234234 }
235235
236236
237237
238238 @Callable(i)
239239 func init (conf) = [writeConstString(configAddressStore, conf)]
240240
241241
242242 @Verifier(tx)
243243 func verify () = {
244244 let byVoting = {
245245 let enabled = valueOrElse(getBoolean(configAddress, opAllowedStore("governance_apply_tx")), true)
246246 if (!(enabled))
247247 then throw("tx application throw governance not enabled")
248248 else {
249249 let id = toBase58String(tx.id)
250250 (HEIGHT >= getIntegerValue(votingResults, ((("proposal_allow_broadcast_" + toString(this)) + "_") + id)))
251251 }
252252 }
253253 if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
254254 then true
255255 else byVoting
256256 }
257257

github/deemru/w8io/873ac7e 
42.94 ms