tx · Bzvnm4nKsAVRrZoVedajFDmDqyc7h9zTRweYdJe4CrK4

3N4r7DNT8t9WqaQWr8or1Hakm4AJfVDk6mS:  -0.01000000 Waves

2023.11.10 15:49 [2837269] smart account 3N4r7DNT8t9WqaQWr8or1Hakm4AJfVDk6mS > SELF 0.00000000 Waves

{ "type": 13, "id": "Bzvnm4nKsAVRrZoVedajFDmDqyc7h9zTRweYdJe4CrK4", "fee": 1000000, "feeAssetId": null, "timestamp": 1699620582539, "version": 2, "chainId": 84, "sender": "3N4r7DNT8t9WqaQWr8or1Hakm4AJfVDk6mS", "senderPublicKey": "CMMtdSwXAf6tvNvyJDrdC5VGmRkcXU5CqmsapxKNPhLu", "proofs": [ "2x64ye3m7wqS57V4dpM3ZgzYYNa4HQo2tvo7Wa4LmGoecAEzJr3Y9zNGh1i5q5WTu4ucLkHfGvgYJhPrUiRuDrwF" ], "script": "base64:BgI0CAISBgoECAgBARIAEgASBAoCCAgSAwoBCBIDCgEIEgMKAQESAwoBARIAEgMKAQESAwoBCBkAA1NFUAICX18AB2ZlZVJhbmsAkE4ACXd4QXNzZXRJZAEgem0CwypAHTesH/u7a8MttNFWRQzQ3dvWhSiS4BwdmuMACnNidEFzc2V0SWQBIO2+dVxOfGjKfZY/biORRp55f/QR5jvt+01UQdyJuXLZAA13YXZlc0V4Y2hhbmdlARoBVPw7LnORaTcVsJi6fmMlYfqveDpM6HfAHwAVY2xhaW1XeFJld2FyZENvbnRyYWN0ARoBV6al3Fpb40hngYwQyvTFWQUu9rO8ZhsXzQAQaXNDb25zdHJ1Y3RlZEtleQIOaXNfY29uc3RydWN0ZWQAD2FkbWluQWRkcmVzc0tleQINYWRtaW5fYWRkcmVzcwAOc2JXeEFzc2V0SWRLZXkCDnNiX3d4X2Fzc2V0X2lkAApscFBvb2xzS2V5AghscF9wb29scwAXYWRkaXRpb25hbFJld2FyZFBvb2xLZXkCFmFkZGl0aW9uYWxfcmV3YXJkX3Bvb2wAGmFkZGl0aW9uYWxSZXdhcmRQb29sRmVlS2V5AhphZGRpdGlvbmFsX3Jld2FyZF9wb29sX2ZlZQAPc2J0U3Rha2VQb29sS2V5Ag5zYnRfc3Rha2VfcG9vbAASc2J0U3Rha2VQb29sRmVlS2V5AhJzYnRfc3Rha2VfcG9vbF9mZWUAG3NidFN0YWtlUG9vbFRvdGFsQ2xhaW1lZEtleQIcc2J0X3N0YWtlX3Bvb2xfdG90YWxfY2xhaW1lZAAQdG90YWxXWExvY2tlZEtleQIPdG90YWxfd3hfbG9ja2VkABlpbml0aWFsU0JUVG9rZW5zQW1vdW50S2V5Ahlpbml0aWFsX1NCVF90b2tlbnNfYW1vdW50ACZiYXNlU0JUVG9rZW5BbW91bnRGb3JPbmVSZXdhcmRUb2tlbktleQIqYmFzZV9TQlRfdG9rZW5fYW1vdW50X2Zvcl9vbmVfcmV3YXJkX3Rva2VuAQlhc1BheW1lbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIPQXR0YWNoZWRQYXltZW50BAFwBQckbWF0Y2gwBQFwCQACAQIhZmFpbCB0byBjYXN0IGludG8gQXR0YWNoZWRQYXltZW50AQxhc0J5dGVWZWN0b3IBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBcAUHJG1hdGNoMAUBcAkAAgECHGZhaWwgdG8gY2FzdCBpbnRvIEJ5dGVWZWN0b3IBBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9hc0FkZHJlc3NTdHJpbmcBB2FkZHJlc3MEByRtYXRjaDAJAKYIAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwCQClCAEFAWEJAAIBAiBmYWlsIHRvIGNhc3QgaW50byBBZGRyZXNzIFN0cmluZwEfY2FsY3VsYXRlQ3VycmVudFJld2FyZFNCVEFtb3VudAEQcmV3YXJkVG9rZW5Db3VudAQjYmFzZVNCVFRva2VuQW1vdW50Rm9yT25lUmV3YXJkVG9rZW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFJmJhc2VTQlRUb2tlbkFtb3VudEZvck9uZVJld2FyZFRva2VuS2V5BBZpbml0aWFsU0JUVG9rZW5zQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRlpbml0aWFsU0JUVG9rZW5zQW1vdW50S2V5BBdjdXJyZW50U0JUVG9rZW5zQmFsYW5jZQkA8AcCBQR0aGlzBQpzYnRBc3NldElkAwkAAAIFF2N1cnJlbnRTQlRUb2tlbnNCYWxhbmNlAAAAAAQmY3VycmVudFNCVFRva2VuQW1vdW50Rm9yT25lUmV3YXJkVG9rZW4JAGsDBSNiYXNlU0JUVG9rZW5BbW91bnRGb3JPbmVSZXdhcmRUb2tlbgUXY3VycmVudFNCVFRva2Vuc0JhbGFuY2UFFmluaXRpYWxTQlRUb2tlbnNBbW91bnQECWFtb3VudFNCVAkAaAIFEHJld2FyZFRva2VuQ291bnQFJmN1cnJlbnRTQlRUb2tlbkFtb3VudEZvck9uZVJld2FyZFRva2VuAwkAZgIFCWFtb3VudFNCVAUXY3VycmVudFNCVFRva2Vuc0JhbGFuY2UFF2N1cnJlbnRTQlRUb2tlbnNCYWxhbmNlBQlhbW91bnRTQlQBEGlzQXV0aG9yaXplZFBvb2wBBHBvb2wEC2NoZWNrZWRQb29sCQEPYXNBZGRyZXNzU3RyaW5nAQUEcG9vbAQHbHBQb29scwkBEUBleHRyTmF0aXZlKDEwNTgpAQUKbHBQb29sc0tleQkBCGNvbnRhaW5zAgUHbHBQb29scwULY2hlY2tlZFBvb2wBC2dldFBvb2xEYXRhAQRwb29sAwkBASEBCQEQaXNBdXRob3JpemVkUG9vbAEFBHBvb2wJAAIBAhNOb3QgYXV0aG9yaXplZCBwb29sBAtwb29sTHBUb2tlbgkBEUBleHRyTmF0aXZlKDEwNTMpAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAIFdG9rZW4EGHdhdmVzRXhjaGFuZ2VQb29sQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUEcG9vbAkAlAoCBQtwb29sTHBUb2tlbgUYd2F2ZXNFeGNoYW5nZVBvb2xBZGRyZXNzCwFpAQtjb25zdHJ1Y3RvcgQMYWRtaW5BZGRyZXNzDHNidFN0YWtlUG9vbBZpbml0aWFsU0JUVG9rZW5zQW1vdW50GnNidFRva2Vuc0Zvck9uZVJld2FyZFRva2VuAwkBCWlzRGVmaW5lZAEJAKAIAQUQaXNDb25zdHJ1Y3RlZEtleQkAAgECIkNvbnN0cnVjdG9yIGNhbiBiZSBjYWxsZWQgb25lIHRpbWUEBHNiV3gJAMMIBwIIdGVzdFNiV1gCAAAAAAgGBQR1bml0AAAEB2Fzc2V0SWQJALgIAQUEc2JXeAkAzAgCBQRzYld4CQDMCAIJAQtTdHJpbmdFbnRyeQIFDnNiV3hBc3NldElkS2V5CQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPYWRtaW5BZGRyZXNzS2V5CQEPYXNBZGRyZXNzU3RyaW5nAQUMYWRtaW5BZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFD3NidFN0YWtlUG9vbEtleQkBD2FzQWRkcmVzc1N0cmluZwEFDHNidFN0YWtlUG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSc2J0U3Rha2VQb29sRmVlS2V5APgKCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtzYnRTdGFrZVBvb2xUb3RhbENsYWltZWRLZXkAAAkAzAgCCQELU3RyaW5nRW50cnkCBQpscFBvb2xzS2V5AgAJAMwIAgkBC1N0cmluZ0VudHJ5AgUXYWRkaXRpb25hbFJld2FyZFBvb2xLZXkCAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUaYWRkaXRpb25hbFJld2FyZFBvb2xGZWVLZXkA2AQJAMwIAgkBDEJvb2xlYW5FbnRyeQIFEGlzQ29uc3RydWN0ZWRLZXkGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRB0b3RhbFdYTG9ja2VkS2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFGWluaXRpYWxTQlRUb2tlbnNBbW91bnRLZXkFFmluaXRpYWxTQlRUb2tlbnNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFJmJhc2VTQlRUb2tlbkFtb3VudEZvck9uZVJld2FyZFRva2VuS2V5BRpzYnRUb2tlbnNGb3JPbmVSZXdhcmRUb2tlbgUDbmlsAWkBCG1pbnRTYld4AAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECFE9uZSBQYXltZW50IGV4cGVjdGVkBAdwYXltZW50CQEJYXNQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQIBQdwYXltZW50BmFtb3VudAMDCQECIT0CCAUHcGF5bWVudAdhc3NldElkBQl3eEFzc2V0SWQGCQBnAgAABQZhbW91bnQJAAIBAhhXcm9uZyBBc3NldCBpZCBvciBhbW91bnQEDXRvdGFsV1hMb2NrZWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFEHRvdGFsV1hMb2NrZWRLZXkEC3NiV3hBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1OCkBBQ5zYld4QXNzZXRJZEtleQQRd2F2ZXNFeGNoYW5nZUluZm8JAPwHBAkBB0FkZHJlc3MBBQ13YXZlc0V4Y2hhbmdlAhd1c2VyTWF4RHVyYXRpb25SRUFET05MWQUDbmlsBQNuaWwDCQAAAgURd2F2ZXNFeGNoYW5nZUluZm8FEXdhdmVzRXhjaGFuZ2VJbmZvBAckbWF0Y2gwBRF3YXZlc0V4Y2hhbmdlSW5mbwMJAAECBQckbWF0Y2gwAg0oU3RyaW5nLCBJbnQpBAV0dXBsZQUHJG1hdGNoMAQMZnVuY3Rpb25OYW1lCAUFdHVwbGUCXzEED21heExvY2tEdXJhdGlvbggFBXR1cGxlAl8yBAZyZXN1bHQJAPwHBAkBB0FkZHJlc3MBBQ13YXZlc0V4Y2hhbmdlBQxmdW5jdGlvbk5hbWUJAMwIAgUPbWF4TG9ja0R1cmF0aW9uBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFBnJlc3VsdAUGcmVzdWx0BARzYld4CQDZBAEFC3NiV3hBc3NldElkCQDMCAIJAQdSZWlzc3VlAwUEc2JXeAUGYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEICAUBaQZjYWxsZXIFYnl0ZXMFBmFtb3VudAUEc2JXeAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQdG90YWxXWExvY2tlZEtleQkAZAIFDXRvdGFsV1hMb2NrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIYRkFUQUw6IEluY29uc2lzdGVudCBkYXRhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFWNsYWltV3hTdGFraW5nUmV3YXJkcwAEE2N1cnJlbnRXeE9uQ29udHJhY3QJAPAHAgUEdGhpcwUJd3hBc3NldElkAwkAAAIFE2N1cnJlbnRXeE9uQ29udHJhY3QFE2N1cnJlbnRXeE9uQ29udHJhY3QEC2NsYWltUmVzdWx0CQD8BwQJAQdBZGRyZXNzAQUVY2xhaW1XeFJld2FyZENvbnRyYWN0AgtjbGFpbVJld2FyZAUDbmlsBQNuaWwDCQAAAgULY2xhaW1SZXN1bHQFC2NsYWltUmVzdWx0BA9uZXdXeE9uQ29udHJhY3QJAPAHAgUEdGhpcwUJd3hBc3NldElkBAdjbGFpbWVkCQBlAgUPbmV3V3hPbkNvbnRyYWN0BRNjdXJyZW50V3hPbkNvbnRyYWN0AwkAAAIFB2NsYWltZWQAAAkAAgECEE5vdGhpbmcgdG8gY2xhaW0EGHNidFN0YWtlUG9vbFRvdGFsQ2xhaW1lZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUbc2J0U3Rha2VQb29sVG90YWxDbGFpbWVkS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtzYnRTdGFrZVBvb2xUb3RhbENsYWltZWRLZXkJAGQCBRhzYnRTdGFrZVBvb2xUb3RhbENsYWltZWQFB2NsYWltZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUPc2J0U3Rha2VQb29sS2V5BQdjbGFpbWVkBQl3eEFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdhZGRQb29sAgdhZGRyZXNzGHdhdmVzRXhjaGFuZ2VQb29sQWRkcmVzcwMJAQIhPQIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkBEUBleHRyTmF0aXZlKDEwNTgpAQUPYWRtaW5BZGRyZXNzS2V5CQACAQIhT25seSBBZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAdscFBvb2xzCQERQGV4dHJOYXRpdmUoMTA1OCkBBQpscFBvb2xzS2V5AwkBEGlzQXV0aG9yaXplZFBvb2wBBQdhZGRyZXNzCQACAQISUG9vbCBhbHJlYWR5IGFkZGVkBAhuZXdQb29scwMJAAACCQCxAgEFB2xwUG9vbHMAAAUHYWRkcmVzcwkArAICCQCsAgIFB2xwUG9vbHMFA1NFUAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCBQpscFBvb2xzS2V5BQhuZXdQb29scwkAzAgCCQELU3RyaW5nRW50cnkCCQEPYXNBZGRyZXNzU3RyaW5nAQUHYWRkcmVzcwkBD2FzQWRkcmVzc1N0cmluZwEFGHdhdmVzRXhjaGFuZ2VQb29sQWRkcmVzcwUDbmlsAWkBCnJlbW92ZVBvb2wBB2FkZHJlc3MDCQECIT0CCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2FkbWluQWRkcmVzc0tleQkAAgECIU9ubHkgQWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQHbHBQb29scwkBEUBleHRyTmF0aXZlKDEwNTgpAQUKbHBQb29sc0tleQMJAQEhAQkBEGlzQXV0aG9yaXplZFBvb2wBBQdhZGRyZXNzCQACAQIOUG9vbCBub3QgZm91bmQECnBvb2xzQXJyYXkJALwJAgUHbHBQb29scwUDU0VQBAlwb29sSW5kZXgJAQVhc0ludAEJAM8IAgUKcG9vbHNBcnJheQUHYWRkcmVzcwQIbmV3UG9vbHMJALoJAgkA0QgCBQpwb29sc0FycmF5BQlwb29sSW5kZXgFA1NFUAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCmxwUG9vbHNLZXkFCG5ld1Bvb2xzCQDMCAIJAQtEZWxldGVFbnRyeQEFB2FkZHJlc3MFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1OCkBBRdhZGRpdGlvbmFsUmV3YXJkUG9vbEtleQUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCBRdhZGRpdGlvbmFsUmV3YXJkUG9vbEtleQIABQNuaWwFA25pbAFpARhzZXRBZGRpdGlvbmFsUmV3YXJkc1Bvb2wBB2FkZHJlc3MDCQECIT0CCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2FkbWluQWRkcmVzc0tleQkAAgECIU9ubHkgQWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQEhAQkBEGlzQXV0aG9yaXplZFBvb2wBBQdhZGRyZXNzCQACAQI7T25seSBhdXRob3JpemVkIHBvb2wgY2FuIGJlIGFkZGVkIGFzIGFkZGl0aW9uYWwgcmV3YXJkIHBvb2wJAMwIAgkBC1N0cmluZ0VudHJ5AgUXYWRkaXRpb25hbFJld2FyZFBvb2xLZXkFB2FkZHJlc3MFA25pbAFpARtzZXRBZGRpdGlvbmFsUmV3YXJkc1Bvb2xGZWUBA2ZlZQMJAQIhPQIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkBEUBleHRyTmF0aXZlKDEwNTgpAQUPYWRtaW5BZGRyZXNzS2V5CQACAQIhT25seSBBZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwkAZgIFA2ZlZQDQDwkAAgECHEZlZSBjYW4ndCBiZSBiaWdnZXIgdGhhbiAyMCUDCQBmAgAABQNmZWUJAAIBAhVGZWUgY2FuJ3QgYmUgbmVnYXRpdmUJAMwIAgkBDEludGVnZXJFbnRyeQIFGmFkZGl0aW9uYWxSZXdhcmRQb29sRmVlS2V5BQNmZWUFA25pbAFpAQ1zZXRTYnRQb29sRmVlAQNmZWUDCQECIT0CCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2FkbWluQWRkcmVzc0tleQkAAgECIU9ubHkgQWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAGYCBQNmZWUA0A8JAAIBAhxGZWUgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gMjAlAwkAZgIAAAUDZmVlCQACAQIVRmVlIGNhbid0IGJlIG5lZ2F0aXZlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJzYnRTdGFrZVBvb2xGZWVLZXkFA2ZlZQUDbmlsAWkBDHN0YWtlUG9vbExwcwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgUGF5bWVudCBleHBlY3RlZAQIcG9vbERhdGEJAQtnZXRQb29sRGF0YQEJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQLcG9vbExwVG9rZW4IBQhwb29sRGF0YQJfMQQYd2F2ZXNFeGNoYW5nZVBvb2xBZGRyZXNzCAUIcG9vbERhdGECXzIEB3BheW1lbnQJAQlhc1BheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAADAwkBAiE9AggFB3BheW1lbnQHYXNzZXRJZAkA2QQBBQtwb29sTHBUb2tlbgYJAGcCAAAIBQdwYXltZW50BmFtb3VudAkAAgECG1dyb25nIExQIEFzc2V0IGlkIG9yIGFtb3VudAQGcmVzdWx0CQD8BwQFGHdhdmVzRXhjaGFuZ2VQb29sQWRkcmVzcwIFc3Rha2UFA25pbAkAzAgCBQdwYXltZW50BQNuaWwDCQAAAgUGcmVzdWx0BQZyZXN1bHQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ93aXRoZHJhd1Bvb2xMcHMBBmFtb3VudAQIcG9vbERhdGEJAQtnZXRQb29sRGF0YQEJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQLcG9vbExwVG9rZW4IBQhwb29sRGF0YQJfMQQYd2F2ZXNFeGNoYW5nZVBvb2xBZGRyZXNzCAUIcG9vbERhdGECXzIEBnJlc3VsdAkA/AcEBRh3YXZlc0V4Y2hhbmdlUG9vbEFkZHJlc3MCB3Vuc3Rha2UJAMwIAgULcG9vbExwVG9rZW4JAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQZyZXN1bHQFBnJlc3VsdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEICAUBaQZjYWxsZXIFYnl0ZXMFBmFtb3VudAkA2QQBBQtwb29sTHBUb2tlbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGNsYWltUG9vbFJld2FyZHMBBHBvb2wEC3Bvb2xBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBAhwb29sRGF0YQkBC2dldFBvb2xEYXRhAQUEcG9vbAQLcG9vbExwVG9rZW4IBQhwb29sRGF0YQJfMQQYd2F2ZXNFeGNoYW5nZVBvb2xBZGRyZXNzCAUIcG9vbERhdGECXzIEE2N1cnJlbnRXWE9uQ29udHJhY3QJAPAHAgUEdGhpcwUJd3hBc3NldElkAwkAAAIFE2N1cnJlbnRXWE9uQ29udHJhY3QFE2N1cnJlbnRXWE9uQ29udHJhY3QEC2NsYWltUmVzdWx0CQD8BwQFGHdhdmVzRXhjaGFuZ2VQb29sQWRkcmVzcwIHY2xhaW1XWAkAzAgCBQtwb29sTHBUb2tlbgUDbmlsBQNuaWwDCQAAAgULY2xhaW1SZXN1bHQFC2NsYWltUmVzdWx0BA9uZXdXWE9uQ29udHJhY3QJAPAHAgUEdGhpcwUJd3hBc3NldElkBAdjbGFpbWVkCQBlAgUPbmV3V1hPbkNvbnRyYWN0BRNjdXJyZW50V1hPbkNvbnRyYWN0AwkAAAIFB2NsYWltZWQAAAkAAgECEE5vdGhpbmcgdG8gY2xhaW0ED3NidFJld2FyZEFtb3VudAkBH2NhbGN1bGF0ZUN1cnJlbnRSZXdhcmRTQlRBbW91bnQBBQdjbGFpbWVkBBBzYnRSZXdhcmRBY3Rpb25zAwkAAAIFD3NidFJld2FyZEFtb3VudAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULcG9vbEFkZHJlc3MFD3NidFJld2FyZEFtb3VudAUKc2J0QXNzZXRJZAUDbmlsBAxzYnRTdGFrZVBvb2wJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD3NidFN0YWtlUG9vbEtleQQPc2J0U3Rha2VQb29sRmVlCQERQGV4dHJOYXRpdmUoMTA1NSkBBRJzYnRTdGFrZVBvb2xGZWVLZXkEGHNidFN0YWtlUG9vbFRvdGFsQ2xhaW1lZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUbc2J0U3Rha2VQb29sVG90YWxDbGFpbWVkS2V5BBJzYnRTdGFrZVBvb2xBbW91bnQJAG4EBQdjbGFpbWVkBQ9zYnRTdGFrZVBvb2xGZWUFB2ZlZVJhbmsFBkhBTEZVUAQTc2J0U3Rha2VQb29sQWN0aW9ucwMJAAACBRJzYnRTdGFrZVBvb2xBbW91bnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDHNidFN0YWtlUG9vbAUSc2J0U3Rha2VQb29sQW1vdW50BQl3eEFzc2V0SWQFA25pbAQUYWRkaXRpb25hbFJld2FyZFBvb2wJARFAZXh0ck5hdGl2ZSgxMDU4KQEFF2FkZGl0aW9uYWxSZXdhcmRQb29sS2V5BBhhZGRpdGlvbmFsUmV3YXJkUG9vbEZyZWUJARFAZXh0ck5hdGl2ZSgxMDU1KQEFGmFkZGl0aW9uYWxSZXdhcmRQb29sRmVlS2V5BBphZGRpdGlvbmFsUmV3YXJkUG9vbEFtb3VudAMJAAACCQCxAgEFFGFkZGl0aW9uYWxSZXdhcmRQb29sAAAAAAMJAQIhPQIFFGFkZGl0aW9uYWxSZXdhcmRQb29sBQRwb29sCQBuBAUHY2xhaW1lZAUYYWRkaXRpb25hbFJld2FyZFBvb2xGcmVlBQdmZWVSYW5rBQZIQUxGVVAAAAQcYWRkaXRpb25hbFJld2FyZHNQb29sQWN0aW9ucwMJAAACBRphZGRpdGlvbmFsUmV3YXJkUG9vbEFtb3VudAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUUYWRkaXRpb25hbFJld2FyZFBvb2wFGmFkZGl0aW9uYWxSZXdhcmRQb29sQW1vdW50BQl3eEFzc2V0SWQFA25pbAQLcG9vbENsYWltZWQJAGUCCQBlAgUHY2xhaW1lZAUSc2J0U3Rha2VQb29sQW1vdW50BRphZGRpdGlvbmFsUmV3YXJkUG9vbEFtb3VudAkAzggCCQDOCAIJAM4IAgUQc2J0UmV3YXJkQWN0aW9ucwUTc2J0U3Rha2VQb29sQWN0aW9ucwUcYWRkaXRpb25hbFJld2FyZHNQb29sQWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUbc2J0U3Rha2VQb29sVG90YWxDbGFpbWVkS2V5CQBkAgUYc2J0U3Rha2VQb29sVG90YWxDbGFpbWVkBRJzYnRTdGFrZVBvb2xBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULcG9vbEFkZHJlc3MFC3Bvb2xDbGFpbWVkBQl3eEFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgDXoCpl", "height": 2837269, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FtsnacRqpiawrdHdKnq21M7nDFskb7CVNJJHorTJhvhh Next: 2vEt6ShmPrHdpMYcndhbUHtAKLch7hXdam5nVxhBpZ9z Diff:
OldNewDifferences
99
1010 let sbtAssetId = base58'H144sePa8bNCDFTzZNkUnk6QMz387T2ruKPMQ5DJ3DyS'
1111
12-let wavesExchange = base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP'
12+let wavesExchange = base58'3NCukxG6cc7pqKoEwTZsr1CRrHMHfvGM7ok'
1313
1414 let claimWxRewardContract = base58'3PH83bJCZraJoEzFefz4p8UXZD9YazNnj1n'
1515
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let feeRank = 10000
77
88 let wxAssetId = base58'9Eu9de5GPPgLzY16bevCaxF4rFr4jA9wqyTfqcjksU82'
99
1010 let sbtAssetId = base58'H144sePa8bNCDFTzZNkUnk6QMz387T2ruKPMQ5DJ3DyS'
1111
12-let wavesExchange = base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP'
12+let wavesExchange = base58'3NCukxG6cc7pqKoEwTZsr1CRrHMHfvGM7ok'
1313
1414 let claimWxRewardContract = base58'3PH83bJCZraJoEzFefz4p8UXZD9YazNnj1n'
1515
1616 let isConstructedKey = "is_constructed"
1717
1818 let adminAddressKey = "admin_address"
1919
2020 let sbWxAssetIdKey = "sb_wx_asset_id"
2121
2222 let lpPoolsKey = "lp_pools"
2323
2424 let additionalRewardPoolKey = "additional_reward_pool"
2525
2626 let additionalRewardPoolFeeKey = "additional_reward_pool_fee"
2727
2828 let sbtStakePoolKey = "sbt_stake_pool"
2929
3030 let sbtStakePoolFeeKey = "sbt_stake_pool_fee"
3131
3232 let sbtStakePoolTotalClaimedKey = "sbt_stake_pool_total_claimed"
3333
3434 let totalWXLockedKey = "total_wx_locked"
3535
3636 let initialSBTTokensAmountKey = "initial_SBT_tokens_amount"
3737
3838 let baseSBTTokenAmountForOneRewardTokenKey = "base_SBT_token_amount_for_one_reward_token"
3939
4040 func asPayment (v) = match v {
4141 case p: AttachedPayment =>
4242 p
4343 case _ =>
4444 throw("fail to cast into AttachedPayment")
4545 }
4646
4747
4848 func asByteVector (v) = match v {
4949 case p: ByteVector =>
5050 p
5151 case _ =>
5252 throw("fail to cast into ByteVector")
5353 }
5454
5555
5656 func asInt (val) = match val {
5757 case valInt: Int =>
5858 valInt
5959 case _ =>
6060 throw("fail to cast into Int")
6161 }
6262
6363
6464 func asAddressString (address) = match addressFromString(address) {
6565 case a: Address =>
6666 toString(a)
6767 case _ =>
6868 throw("fail to cast into Address String")
6969 }
7070
7171
7272 func calculateCurrentRewardSBTAmount (rewardTokenCount) = {
7373 let baseSBTTokenAmountForOneRewardToken = getIntegerValue(this, baseSBTTokenAmountForOneRewardTokenKey)
7474 let initialSBTTokensAmount = getIntegerValue(this, initialSBTTokensAmountKey)
7575 let currentSBTTokensBalance = assetBalance(this, sbtAssetId)
7676 if ((currentSBTTokensBalance == 0))
7777 then 0
7878 else {
7979 let currentSBTTokenAmountForOneRewardToken = fraction(baseSBTTokenAmountForOneRewardToken, currentSBTTokensBalance, initialSBTTokensAmount)
8080 let amountSBT = (rewardTokenCount * currentSBTTokenAmountForOneRewardToken)
8181 if ((amountSBT > currentSBTTokensBalance))
8282 then currentSBTTokensBalance
8383 else amountSBT
8484 }
8585 }
8686
8787
8888 func isAuthorizedPool (pool) = {
8989 let checkedPool = asAddressString(pool)
9090 let lpPools = getStringValue(lpPoolsKey)
9191 contains(lpPools, checkedPool)
9292 }
9393
9494
9595 func getPoolData (pool) = if (!(isAuthorizedPool(pool)))
9696 then throw("Not authorized pool")
9797 else {
9898 let poolLpToken = getStringValue(addressFromStringValue(pool), "token")
9999 let wavesExchangePoolAddress = addressFromStringValue(getStringValue(pool))
100100 $Tuple2(poolLpToken, wavesExchangePoolAddress)
101101 }
102102
103103
104104 @Callable(i)
105105 func constructor (adminAddress,sbtStakePool,initialSBTTokensAmount,sbtTokensForOneRewardToken) = if (isDefined(getBoolean(isConstructedKey)))
106106 then throw("Constructor can be called one time")
107107 else {
108108 let sbWx = Issue("testSbWX", "", 0, 8, true, unit, 0)
109109 let assetId = calculateAssetId(sbWx)
110110 [sbWx, StringEntry(sbWxAssetIdKey, toBase58String(assetId)), StringEntry(adminAddressKey, asAddressString(adminAddress)), StringEntry(sbtStakePoolKey, asAddressString(sbtStakePool)), IntegerEntry(sbtStakePoolFeeKey, 1400), IntegerEntry(sbtStakePoolTotalClaimedKey, 0), StringEntry(lpPoolsKey, ""), StringEntry(additionalRewardPoolKey, ""), IntegerEntry(additionalRewardPoolFeeKey, 600), BooleanEntry(isConstructedKey, true), IntegerEntry(totalWXLockedKey, 0), IntegerEntry(initialSBTTokensAmountKey, initialSBTTokensAmount), IntegerEntry(baseSBTTokenAmountForOneRewardTokenKey, sbtTokensForOneRewardToken)]
111111 }
112112
113113
114114
115115 @Callable(i)
116116 func mintSbWx () = if ((size(i.payments) != 1))
117117 then throw("One Payment expected")
118118 else {
119119 let payment = asPayment(i.payments[0])
120120 let amount = payment.amount
121121 if (if ((payment.assetId != wxAssetId))
122122 then true
123123 else (0 >= amount))
124124 then throw("Wrong Asset id or amount")
125125 else {
126126 let totalWXLocked = getIntegerValue(totalWXLockedKey)
127127 let sbWxAssetId = getStringValue(sbWxAssetIdKey)
128128 let wavesExchangeInfo = invoke(Address(wavesExchange), "userMaxDurationREADONLY", nil, nil)
129129 if ((wavesExchangeInfo == wavesExchangeInfo))
130130 then match wavesExchangeInfo {
131131 case tuple: (String, Int) =>
132132 let functionName = tuple._1
133133 let maxLockDuration = tuple._2
134134 let result = invoke(Address(wavesExchange), functionName, [maxLockDuration], [payment])
135135 if ((result == result))
136136 then {
137137 let sbWx = fromBase58String(sbWxAssetId)
138138 [Reissue(sbWx, amount, true), ScriptTransfer(Address(i.caller.bytes), amount, sbWx), IntegerEntry(totalWXLockedKey, (totalWXLocked + amount))]
139139 }
140140 else throw("Strict value is not equal to itself.")
141141 case _ =>
142142 throw("FATAL: Inconsistent data")
143143 }
144144 else throw("Strict value is not equal to itself.")
145145 }
146146 }
147147
148148
149149
150150 @Callable(i)
151151 func claimWxStakingRewards () = {
152152 let currentWxOnContract = assetBalance(this, wxAssetId)
153153 if ((currentWxOnContract == currentWxOnContract))
154154 then {
155155 let claimResult = invoke(Address(claimWxRewardContract), "claimReward", nil, nil)
156156 if ((claimResult == claimResult))
157157 then {
158158 let newWxOnContract = assetBalance(this, wxAssetId)
159159 let claimed = (newWxOnContract - currentWxOnContract)
160160 if ((claimed == 0))
161161 then throw("Nothing to claim")
162162 else {
163163 let sbtStakePoolTotalClaimed = getIntegerValue(sbtStakePoolTotalClaimedKey)
164164 [IntegerEntry(sbtStakePoolTotalClaimedKey, (sbtStakePoolTotalClaimed + claimed)), ScriptTransfer(addressFromStringValue(getStringValue(sbtStakePoolKey)), claimed, wxAssetId)]
165165 }
166166 }
167167 else throw("Strict value is not equal to itself.")
168168 }
169169 else throw("Strict value is not equal to itself.")
170170 }
171171
172172
173173
174174 @Callable(i)
175175 func addPool (address,wavesExchangePoolAddress) = if ((toBase58String(i.caller.bytes) != getStringValue(adminAddressKey)))
176176 then throw("Only Admin can call this function")
177177 else {
178178 let lpPools = getStringValue(lpPoolsKey)
179179 if (isAuthorizedPool(address))
180180 then throw("Pool already added")
181181 else {
182182 let newPools = if ((size(lpPools) == 0))
183183 then address
184184 else ((lpPools + SEP) + address)
185185 [StringEntry(lpPoolsKey, newPools), StringEntry(asAddressString(address), asAddressString(wavesExchangePoolAddress))]
186186 }
187187 }
188188
189189
190190
191191 @Callable(i)
192192 func removePool (address) = if ((toBase58String(i.caller.bytes) != getStringValue(adminAddressKey)))
193193 then throw("Only Admin can call this function")
194194 else {
195195 let lpPools = getStringValue(lpPoolsKey)
196196 if (!(isAuthorizedPool(address)))
197197 then throw("Pool not found")
198198 else {
199199 let poolsArray = split_4C(lpPools, SEP)
200200 let poolIndex = asInt(indexOf(poolsArray, address))
201201 let newPools = makeString_2C(removeByIndex(poolsArray, poolIndex), SEP)
202202 ([StringEntry(lpPoolsKey, newPools), DeleteEntry(address)] ++ (if ((getStringValue(additionalRewardPoolKey) == address))
203203 then [StringEntry(additionalRewardPoolKey, "")]
204204 else nil))
205205 }
206206 }
207207
208208
209209
210210 @Callable(i)
211211 func setAdditionalRewardsPool (address) = if ((toBase58String(i.caller.bytes) != getStringValue(adminAddressKey)))
212212 then throw("Only Admin can call this function")
213213 else if (!(isAuthorizedPool(address)))
214214 then throw("Only authorized pool can be added as additional reward pool")
215215 else [StringEntry(additionalRewardPoolKey, address)]
216216
217217
218218
219219 @Callable(i)
220220 func setAdditionalRewardsPoolFee (fee) = if ((toBase58String(i.caller.bytes) != getStringValue(adminAddressKey)))
221221 then throw("Only Admin can call this function")
222222 else if ((fee > 2000))
223223 then throw("Fee can't be bigger than 20%")
224224 else if ((0 > fee))
225225 then throw("Fee can't be negative")
226226 else [IntegerEntry(additionalRewardPoolFeeKey, fee)]
227227
228228
229229
230230 @Callable(i)
231231 func setSbtPoolFee (fee) = if ((toBase58String(i.caller.bytes) != getStringValue(adminAddressKey)))
232232 then throw("Only Admin can call this function")
233233 else if ((fee > 2000))
234234 then throw("Fee can't be bigger than 20%")
235235 else if ((0 > fee))
236236 then throw("Fee can't be negative")
237237 else [IntegerEntry(sbtStakePoolFeeKey, fee)]
238238
239239
240240
241241 @Callable(i)
242242 func stakePoolLps () = if ((size(i.payments) != 1))
243243 then throw("One Payment expected")
244244 else {
245245 let poolData = getPoolData(toBase58String(i.caller.bytes))
246246 let poolLpToken = poolData._1
247247 let wavesExchangePoolAddress = poolData._2
248248 let payment = asPayment(i.payments[0])
249249 if (if ((payment.assetId != fromBase58String(poolLpToken)))
250250 then true
251251 else (0 >= payment.amount))
252252 then throw("Wrong LP Asset id or amount")
253253 else {
254254 let result = invoke(wavesExchangePoolAddress, "stake", nil, [payment])
255255 if ((result == result))
256256 then nil
257257 else throw("Strict value is not equal to itself.")
258258 }
259259 }
260260
261261
262262
263263 @Callable(i)
264264 func withdrawPoolLps (amount) = {
265265 let poolData = getPoolData(toBase58String(i.caller.bytes))
266266 let poolLpToken = poolData._1
267267 let wavesExchangePoolAddress = poolData._2
268268 let result = invoke(wavesExchangePoolAddress, "unstake", [poolLpToken, amount], nil)
269269 if ((result == result))
270270 then [ScriptTransfer(Address(i.caller.bytes), amount, fromBase58String(poolLpToken))]
271271 else throw("Strict value is not equal to itself.")
272272 }
273273
274274
275275
276276 @Callable(i)
277277 func claimPoolRewards (pool) = {
278278 let poolAddress = addressFromStringValue(pool)
279279 let poolData = getPoolData(pool)
280280 let poolLpToken = poolData._1
281281 let wavesExchangePoolAddress = poolData._2
282282 let currentWXOnContract = assetBalance(this, wxAssetId)
283283 if ((currentWXOnContract == currentWXOnContract))
284284 then {
285285 let claimResult = invoke(wavesExchangePoolAddress, "claimWX", [poolLpToken], nil)
286286 if ((claimResult == claimResult))
287287 then {
288288 let newWXOnContract = assetBalance(this, wxAssetId)
289289 let claimed = (newWXOnContract - currentWXOnContract)
290290 if ((claimed == 0))
291291 then throw("Nothing to claim")
292292 else {
293293 let sbtRewardAmount = calculateCurrentRewardSBTAmount(claimed)
294294 let sbtRewardActions = if ((sbtRewardAmount == 0))
295295 then nil
296296 else [ScriptTransfer(poolAddress, sbtRewardAmount, sbtAssetId)]
297297 let sbtStakePool = addressFromStringValue(getStringValue(sbtStakePoolKey))
298298 let sbtStakePoolFee = getIntegerValue(sbtStakePoolFeeKey)
299299 let sbtStakePoolTotalClaimed = getIntegerValue(sbtStakePoolTotalClaimedKey)
300300 let sbtStakePoolAmount = fraction(claimed, sbtStakePoolFee, feeRank, HALFUP)
301301 let sbtStakePoolActions = if ((sbtStakePoolAmount == 0))
302302 then nil
303303 else [ScriptTransfer(sbtStakePool, sbtStakePoolAmount, wxAssetId)]
304304 let additionalRewardPool = getStringValue(additionalRewardPoolKey)
305305 let additionalRewardPoolFree = getIntegerValue(additionalRewardPoolFeeKey)
306306 let additionalRewardPoolAmount = if ((size(additionalRewardPool) == 0))
307307 then 0
308308 else if ((additionalRewardPool != pool))
309309 then fraction(claimed, additionalRewardPoolFree, feeRank, HALFUP)
310310 else 0
311311 let additionalRewardsPoolActions = if ((additionalRewardPoolAmount == 0))
312312 then nil
313313 else [ScriptTransfer(addressFromStringValue(additionalRewardPool), additionalRewardPoolAmount, wxAssetId)]
314314 let poolClaimed = ((claimed - sbtStakePoolAmount) - additionalRewardPoolAmount)
315315 (((sbtRewardActions ++ sbtStakePoolActions) ++ additionalRewardsPoolActions) ++ [IntegerEntry(sbtStakePoolTotalClaimedKey, (sbtStakePoolTotalClaimed + sbtStakePoolAmount)), ScriptTransfer(poolAddress, poolClaimed, wxAssetId)])
316316 }
317317 }
318318 else throw("Strict value is not equal to itself.")
319319 }
320320 else throw("Strict value is not equal to itself.")
321321 }
322322
323323

github/deemru/w8io/3ef1775 
53.03 ms