tx · 2xsfJgHDmL8p8ipMhrRJpHdQHedjeVJBnits357JDE1G 3N8kvmPeoj7z8PGPDMGmBZT5GvfjxzXP36E: -0.01000000 Waves 2023.09.28 07:54 [2774809] smart account 3N8kvmPeoj7z8PGPDMGmBZT5GvfjxzXP36E > SELF 0.00000000 Waves
{ "type": 13, "id": "2xsfJgHDmL8p8ipMhrRJpHdQHedjeVJBnits357JDE1G", "fee": 1000000, "feeAssetId": null, "timestamp": 1695876930952, "version": 2, "chainId": 84, "sender": "3N8kvmPeoj7z8PGPDMGmBZT5GvfjxzXP36E", "senderPublicKey": "7o6RgieyGuTpujJ7p7Ms7XPWGVMWzinzLwbSpikKMWQE", "proofs": [ "44fKYswCEoE5KZx5cKzm1J6SGbKhv6o75LyrmMmwtSA92JPxam39TycV1LYdjpghnY51zz8ug41KAyuq1ZD9DWt4" ], "script": "base64:BgIYCAISBwoFCAgBCAgSABIDCgEBEgASABIADgAGTVVMVDEwAIDIr6AlAANTRVACAl9fABBpc0NvbnN0cnVjdGVkS2V5Ag5pc19jb25zdHJ1Y3RlZAAXd2l0aGRyYXdhbExvY2tQZXJpb2RLZXkCFndpdGhkcmF3YWxfbG9ja19wZXJpb2QAEHJld2FyZEFzc2V0SWRLZXkCD3Jld2FyZF9hc3NldF9pZAATcG9vbFN0YWtlQXNzZXRJZEtleQITcG9vbF9zdGFrZV9hc3NldF9pZAAWcm9vdENvbnRyYWN0QWRkcmVzc0tleQIVcm9vdF9jb250cmFjdF9hZGRyZXNzAA9hZG1pbkFkZHJlc3NLZXkCEWFkbWluX2FkZHJlc3Nfa2V5ABJ0b3RhbFBvb2xTdGFrZWRLZXkCEnRvdGFsX3Bvb2xfX3N0YWtlZAASdG90YWxQb29sRWFybmVkS2V5AhF0b3RhbF9wb29sX2Vhcm5lZAAVcG9vbEN1cnJlbnRDbGFpbUlkS2V5AhVwb29sX2N1cnJlbnRfY2xhaW1faWQAKHBvb2xDdXJyZW50VW5jbGFpbWVkQWRkaXRpb25hbFJld2FyZHNLZXkCKXBvb2xfY3VycmVudF91bmNsYWltZWRfYWRkaXRpb25hbF9yZXdhcmRzAQlhc1BheW1lbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIPQXR0YWNoZWRQYXltZW50BAFwBQckbWF0Y2gwBQFwCQACAQIhZmFpbCB0byBjYXN0IGludG8gQXR0YWNoZWRQYXltZW50ARppc1VzZXJIYXZlVW5jbGFpbWVkUmV3YXJkcwEHYWRkcmVzcwMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQUHYWRkcmVzcwcEEmN1cnJlbnRQb29sQ2xhaW1JZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUVcG9vbEN1cnJlbnRDbGFpbUlkS2V5BAh1c2VyRGF0YQkAtQkCCQERQGV4dHJOYXRpdmUoMTA1OCkBBQdhZGRyZXNzBQNTRVAEI3VzZXJMYXN0Q2xhaW1lZFJld2FyZHNBdFBvb2xDbGFpbUlkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIdXNlckRhdGEAAgkAZgIFEmN1cnJlbnRQb29sQ2xhaW1JZAUjdXNlckxhc3RDbGFpbWVkUmV3YXJkc0F0UG9vbENsYWltSWQGAWkBC2NvbnN0cnVjdG9yBQ1yZXdhcmRBc3NldElkEHBvb2xTdGFrZUFzc2V0SWQUd2l0aGRyYXdhbExvY2tQZXJpb2QMcm9vdENvbnRyYWN0DWFkbWluQ29udHJhY3QDCQEJaXNEZWZpbmVkAQkAoAgBBRBpc0NvbnN0cnVjdGVkS2V5CQACAQIiQ29uc3RydWN0b3IgY2FuIGJlIGNhbGxlZCBvbmUgdGltZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUQaXNDb25zdHJ1Y3RlZEtleQYJAMwIAgkBDEludGVnZXJFbnRyeQIFKHBvb2xDdXJyZW50VW5jbGFpbWVkQWRkaXRpb25hbFJld2FyZHNLZXkAAAkAzAgCCQELU3RyaW5nRW50cnkCBRByZXdhcmRBc3NldElkS2V5BQ1yZXdhcmRBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFE3Bvb2xTdGFrZUFzc2V0SWRLZXkFEHBvb2xTdGFrZUFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUWcm9vdENvbnRyYWN0QWRkcmVzc0tleQUMcm9vdENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2FkbWluQWRkcmVzc0tleQUNYWRtaW5Db250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdG90YWxQb29sRWFybmVkS2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFFXBvb2xDdXJyZW50Q2xhaW1JZEtleQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ0b3RhbFBvb2xTdGFrZWRLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXd2l0aGRyYXdhbExvY2tQZXJpb2RLZXkFFHdpdGhkcmF3YWxMb2NrUGVyaW9kBQNuaWwBaQEFc3Rha2UAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIUT25lIFBheW1lbnQgZXhwZWN0ZWQEDWNhbGxlckFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQHcGF5bWVudAkBCWFzUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAQQcG9vbFN0YWtlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRNwb29sU3Rha2VBc3NldElkS2V5AwMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFEHBvb2xTdGFrZUFzc2V0SWQGCQBnAgAACAUHcGF5bWVudAZhbW91bnQJAAIBAiFXcm9uZyBhc3NldCBpZCBvciBuZWdhdGl2ZSBhbW91bnQDCQEaaXNVc2VySGF2ZVVuY2xhaW1lZFJld2FyZHMBBQ1jYWxsZXJBZGRyZXNzCQACAQI4WW91IGhhdmUgdW5jbGFpbWVkIHJld2FyZHMgb24gY29udHJhY3QsIGNsYWltIHRoZW0gZmlyc3QEEmN1cnJlbnRQb29sQ2xhaW1JZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUVcG9vbEN1cnJlbnRDbGFpbUlkS2V5BBZjdXJyZW50VG90YWxQb29sU3Rha2VkCQERQGV4dHJOYXRpdmUoMTA1NSkBBRJ0b3RhbFBvb2xTdGFrZWRLZXkELWN1cnJlbnRUb3RhbFBvb2xSZXdhcmRzRWFybmVkRm9yT25lU3Rha2VUb2tlbgkBEUBleHRyTmF0aXZlKDEwNTUpAQUSdG90YWxQb29sRWFybmVkS2V5BBNyb290Q29udHJhY3RBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1OCkBBRZyb290Q29udHJhY3RBZGRyZXNzS2V5BAZyZXN1bHQDCQBmAgkAsQIBBRNyb290Q29udHJhY3RBZGRyZXNzAAAJAPwHBAkBB0FkZHJlc3MBCQDZBAEFE3Jvb3RDb250cmFjdEFkZHJlc3MCDHN0YWtlUG9vbExwcwUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAUEdW5pdAMJAAACBQZyZXN1bHQFBnJlc3VsdAQLdXNlckRhdGFTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUNY2FsbGVyQWRkcmVzcwIABAh1c2VyRGF0YQMJAGYCCQCxAgEFC3VzZXJEYXRhU3RyAAAECHVzZXJEYXRhCQC1CQIFC3VzZXJEYXRhU3RyBQNTRVAEFXVzZXJUb3RhbFN0YWtlZEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHVzZXJEYXRhAAAJALkJAgkAzAgCCQCkAwEJAGQCBRV1c2VyVG90YWxTdGFrZWRBbW91bnQIBQdwYXltZW50BmFtb3VudAkAzAgCCQCRAwIFCHVzZXJEYXRhAAEJAMwIAgkAkQMCBQh1c2VyRGF0YQACCQDMCAIJAJEDAgUIdXNlckRhdGEAAwkAzAgCCQCkAwEFBmhlaWdodAUDbmlsBQNTRVAJALkJAgkAzAgCCQCkAwEIBQdwYXltZW50BmFtb3VudAkAzAgCAgEwCQDMCAIJAKQDAQUSY3VycmVudFBvb2xDbGFpbUlkCQDMCAIJAKQDAQUtY3VycmVudFRvdGFsUG9vbFJld2FyZHNFYXJuZWRGb3JPbmVTdGFrZVRva2VuCQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwFA1NFUAkAzAgCCQELU3RyaW5nRW50cnkCBQ1jYWxsZXJBZGRyZXNzBQh1c2VyRGF0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdG90YWxQb29sU3Rha2VkS2V5CQBkAgUWY3VycmVudFRvdGFsUG9vbFN0YWtlZAgFB3BheW1lbnQGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcBBmFtb3VudAMJAGcCAAAFBmFtb3VudAkAAgECF0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlBA1jYWxsZXJBZGRyZXNzCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQEaaXNVc2VySGF2ZVVuY2xhaW1lZFJld2FyZHMBBQ1jYWxsZXJBZGRyZXNzCQACAQI4WW91IGhhdmUgdW5jbGFpbWVkIHJld2FyZHMgb24gY29udHJhY3QsIGNsYWltIHRoZW0gZmlyc3QECHVzZXJEYXRhCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBBQ1jYWxsZXJBZGRyZXNzAg5Vc2VyIG5vdCBmb3VuZAUDU0VQBBV1c2VyVG90YWxTdGFrZWRBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQh1c2VyRGF0YQAAAwkAZgIFBmFtb3VudAUVdXNlclRvdGFsU3Rha2VkQW1vdW50CQACAQISSW5zdWZmaWNpZW50IGZ1bmRzBBR3aXRoZHJhd2FsTG9ja1BlcmlvZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUXd2l0aGRyYXdhbExvY2tQZXJpb2RLZXkEEnVzZXJMYXN0U3Rha2VCbG9jawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHVzZXJEYXRhAAQDAwkAZgIFFHdpdGhkcmF3YWxMb2NrUGVyaW9kAAAJAGYCBRR3aXRoZHJhd2FsTG9ja1BlcmlvZAkAZQIFBmhlaWdodAUSdXNlckxhc3RTdGFrZUJsb2NrBwkAAgEJAKwCAgkArAICAi1UaGlzIHBvb2wgaGF2ZSBsb2NrIHBlcmlvZC4gWW91IG5lZWQgdG8gd2FpdCAJAKQDAQkAZQIFFHdpdGhkcmF3YWxMb2NrUGVyaW9kCQBlAgUGaGVpZ2h0BRJ1c2VyTGFzdFN0YWtlQmxvY2sCByBibG9ja3MEE3Jvb3RDb250cmFjdEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDU4KQEFFnJvb3RDb250cmFjdEFkZHJlc3NLZXkEFmN1cnJlbnRUb3RhbFBvb2xTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSdG90YWxQb29sU3Rha2VkS2V5AAAEEHBvb2xTdGFrZUFzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEFE3Bvb2xTdGFrZUFzc2V0SWRLZXkEBnJlc3VsdAMJAGYCCQCxAgEFE3Jvb3RDb250cmFjdEFkZHJlc3MAAAkA/AcECQEHQWRkcmVzcwEJANkEAQUTcm9vdENvbnRyYWN0QWRkcmVzcwIPd2l0aGRyYXdQb29sTHBzCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUGcmVzdWx0BQZyZXN1bHQEC25ld1VzZXJEYXRhCQDMCAIJAKQDAQkAZQIFFXVzZXJUb3RhbFN0YWtlZEFtb3VudAUGYW1vdW50CQDRCAIFCHVzZXJEYXRhAAAJAM0IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdG90YWxQb29sU3Rha2VkS2V5CQBlAgUWY3VycmVudFRvdGFsUG9vbFN0YWtlZAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwUGYW1vdW50CQDZBAEFEHBvb2xTdGFrZUFzc2V0SWQFA25pbAMJAAACCQBlAgUVdXNlclRvdGFsU3Rha2VkQW1vdW50BQZhbW91bnQAAAkBC0RlbGV0ZUVudHJ5AQUNY2FsbGVyQWRkcmVzcwkBC1N0cmluZ0VudHJ5AgUNY2FsbGVyQWRkcmVzcwkAuQkCBQtuZXdVc2VyRGF0YQUDU0VQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGNsYWltUmV3YXJkcwAEDWNhbGxlckFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwMJAQEhAQkBGmlzVXNlckhhdmVVbmNsYWltZWRSZXdhcmRzAQUNY2FsbGVyQWRkcmVzcwkAAgECI05vdGhpbmcgdG8gY2xhaW0sIG9yIHVzZXIgbm90IGZvdW5kBBJwb29sQ3VycmVudENsYWltSWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFFXBvb2xDdXJyZW50Q2xhaW1JZEtleQQmdG90YWxQb29sRWFybmVkUmV3YXJkc0Zvck9uZVN0YWtlVG9rZW4JARFAZXh0ck5hdGl2ZSgxMDU1KQEFEnRvdGFsUG9vbEVhcm5lZEtleQQIdXNlckRhdGEJALUJAgkBEUBleHRyTmF0aXZlKDEwNTgpAQUNY2FsbGVyQWRkcmVzcwUDU0VQBA91c2VyVG90YWxTdGFrZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQh1c2VyRGF0YQAABBd1c2VyVG90YWxSZXdhcmRzQ2xhaW1lZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHVzZXJEYXRhAAEEGHVzZXJMYXN0Q2xhaW1Qb29sQ2xhaW1JZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHVzZXJEYXRhAAIEKXVzZXJBbHJlYWR5Q2xhaW1lZFJld2FyZHNGb3JPbmVTdGFrZVRva2VuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIdXNlckRhdGEAAwQpdXNlclVuY2xhaW1lZFBvb2xFYXJuaW5nc0Zvck9uZVN0YWtlVG9rZW4JAGUCBSZ0b3RhbFBvb2xFYXJuZWRSZXdhcmRzRm9yT25lU3Rha2VUb2tlbgUpdXNlckFscmVhZHlDbGFpbWVkUmV3YXJkc0Zvck9uZVN0YWtlVG9rZW4ECXVzZXJDbGFpbQkAawMFKXVzZXJVbmNsYWltZWRQb29sRWFybmluZ3NGb3JPbmVTdGFrZVRva2VuBQ91c2VyVG90YWxTdGFrZWQFBk1VTFQxMAQLbmV3VXNlckRhdGEJALkJAgkAzAgCCQCRAwIFCHVzZXJEYXRhAAAJAMwIAgkApAMBCQBkAgUXdXNlclRvdGFsUmV3YXJkc0NsYWltZWQFCXVzZXJDbGFpbQkAzAgCCQCkAwEFEnBvb2xDdXJyZW50Q2xhaW1JZAkAzAgCCQCkAwEJAGQCBSl1c2VyQWxyZWFkeUNsYWltZWRSZXdhcmRzRm9yT25lU3Rha2VUb2tlbgUpdXNlclVuY2xhaW1lZFBvb2xFYXJuaW5nc0Zvck9uZVN0YWtlVG9rZW4JAMwIAgkAkQMCBQh1c2VyRGF0YQAEBQNuaWwFA1NFUAQNcmV3YXJkQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRByZXdhcmRBc3NldElkS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFDWNhbGxlckFkZHJlc3MFC25ld1VzZXJEYXRhCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJdXNlckNsYWltBQ1yZXdhcmRBc3NldElkBQNuaWwBaQEQY2xhaW1Qb29sUmV3YXJkcwADCQECIT0CCAgFAWkGY2FsbGVyBWJ5dGVzCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2FkbWluQWRkcmVzc0tleQkAAgECCkFkbWluIG9ubHkED3RvdGFsUG9vbFN0YWtlZAkBEUBleHRyTmF0aXZlKDEwNTUpAQUSdG90YWxQb29sU3Rha2VkS2V5BA90b3RhbFBvb2xFYXJuZWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFEnRvdGFsUG9vbEVhcm5lZEtleQQScG9vbEN1cnJlbnRDbGFpbUlkCQERQGV4dHJOYXRpdmUoMTA1NSkBBRVwb29sQ3VycmVudENsYWltSWRLZXkEDXJld2FyZEFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUQcmV3YXJkQXNzZXRJZEtleQQTcm9vdENvbnRyYWN0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNTgpAQUWcm9vdENvbnRyYWN0QWRkcmVzc0tleQQXY3VycmVudFJld2FyZE9uQ29udHJhY3QJAPAHAgUEdGhpcwUNcmV3YXJkQXNzZXRJZAMJAAACBRdjdXJyZW50UmV3YXJkT25Db250cmFjdAUXY3VycmVudFJld2FyZE9uQ29udHJhY3QEEXJvb3RDb250cmFjdENsYWltAwkAZgIJALECAQUTcm9vdENvbnRyYWN0QWRkcmVzcwAACQD8BwQJAQdBZGRyZXNzAQkA2QQBBRNyb290Q29udHJhY3RBZGRyZXNzAhBjbGFpbVBvb2xSZXdhcmRzBQNuaWwFA25pbAUEdW5pdAMJAAACBRFyb290Q29udHJhY3RDbGFpbQURcm9vdENvbnRyYWN0Q2xhaW0EE25ld1Jld2FyZE9uQ29udHJhY3QJAPAHAgUEdGhpcwUNcmV3YXJkQXNzZXRJZAQhY3VycmVudEFkZGl0aW9uYWxVbmNsYWltZWRSZXdhcmRzCQERQGV4dHJOYXRpdmUoMTA1NSkBBShwb29sQ3VycmVudFVuY2xhaW1lZEFkZGl0aW9uYWxSZXdhcmRzS2V5BBNjbGFpbWVkUmV3YXJkQW1vdW50CQBkAgkAZQIFE25ld1Jld2FyZE9uQ29udHJhY3QFF2N1cnJlbnRSZXdhcmRPbkNvbnRyYWN0BSFjdXJyZW50QWRkaXRpb25hbFVuY2xhaW1lZFJld2FyZHMDCQAAAgUTY2xhaW1lZFJld2FyZEFtb3VudAAABQNuaWwEJmN1cnJlbnRDbGFpbUlkRWFybmluZ3NGb3JPbmVTdGFrZVRva2VuCQBrAwUTY2xhaW1lZFJld2FyZEFtb3VudAUGTVVMVDEwBQ90b3RhbFBvb2xTdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFXBvb2xDdXJyZW50Q2xhaW1JZEtleQkAZAIFEnBvb2xDdXJyZW50Q2xhaW1JZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ0b3RhbFBvb2xFYXJuZWRLZXkJAGQCBQ90b3RhbFBvb2xFYXJuZWQFJmN1cnJlbnRDbGFpbUlkRWFybmluZ3NGb3JPbmVTdGFrZVRva2VuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBShwb29sQ3VycmVudFVuY2xhaW1lZEFkZGl0aW9uYWxSZXdhcmRzS2V5AAAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARdyZWNlaXZlQWRkaXRpb25hbFJld2FyZAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgUGF5bWVudCBleHBlY3RlZAQHcGF5bWVudAkBCWFzUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAQNcmV3YXJkQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRByZXdhcmRBc3NldElkS2V5AwMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFDXJld2FyZEFzc2V0SWQGCQBnAgAACAUHcGF5bWVudAZhbW91bnQJAAIBAihXcm9uZyByZXdhcmQgYXNzZXQgaWQgb3IgbmVnYXRpdmUgYW1vdW50BCFjdXJyZW50VW5jbGFpbWVkQWRkaXRpb25hbFJld2FyZHMJARFAZXh0ck5hdGl2ZSgxMDU1KQEFKHBvb2xDdXJyZW50VW5jbGFpbWVkQWRkaXRpb25hbFJld2FyZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFKHBvb2xDdXJyZW50VW5jbGFpbWVkQWRkaXRpb25hbFJld2FyZHNLZXkJAGQCBSFjdXJyZW50VW5jbGFpbWVkQWRkaXRpb25hbFJld2FyZHMIBQdwYXltZW50BmFtb3VudAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleVL+lcc=", "height": 2774809, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let a = 10000000000 | |
5 | + | ||
6 | + | let b = "__" | |
7 | + | ||
8 | + | let c = "is_constructed" | |
9 | + | ||
10 | + | let d = "withdrawal_lock_period" | |
11 | + | ||
12 | + | let e = "reward_asset_id" | |
13 | + | ||
14 | + | let f = "pool_stake_asset_id" | |
15 | + | ||
16 | + | let g = "root_contract_address" | |
17 | + | ||
18 | + | let h = "admin_address_key" | |
19 | + | ||
20 | + | let i = "total_pool__staked" | |
21 | + | ||
22 | + | let j = "total_pool_earned" | |
23 | + | ||
24 | + | let k = "pool_current_claim_id" | |
25 | + | ||
26 | + | let l = "pool_current_unclaimed_additional_rewards" | |
27 | + | ||
28 | + | func m (n) = { | |
29 | + | let o = n | |
30 | + | if ($isInstanceOf(o, "AttachedPayment")) | |
31 | + | then { | |
32 | + | let p = o | |
33 | + | p | |
34 | + | } | |
35 | + | else throw("fail to cast into AttachedPayment") | |
36 | + | } | |
37 | + | ||
38 | + | ||
39 | + | func q (r) = if (!(isDefined(getString(r)))) | |
40 | + | then false | |
41 | + | else { | |
42 | + | let s = getIntegerValue(k) | |
43 | + | let t = split(getStringValue(r), b) | |
44 | + | let u = parseIntValue(t[2]) | |
45 | + | (s > u) | |
46 | + | } | |
47 | + | ||
48 | + | ||
49 | + | @Callable(v) | |
50 | + | func constructor (w,x,y,z,A) = if (isDefined(getBoolean(c))) | |
51 | + | then throw("Constructor can be called one time") | |
52 | + | else [BooleanEntry(c, true), IntegerEntry(l, 0), StringEntry(e, w), StringEntry(f, x), StringEntry(g, z), StringEntry(h, A), IntegerEntry(j, 0), IntegerEntry(k, 0), IntegerEntry(i, 0), IntegerEntry(d, y)] | |
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | @Callable(v) | |
57 | + | func stake () = if ((size(v.payments) != 1)) | |
58 | + | then throw("One Payment expected") | |
59 | + | else { | |
60 | + | let B = toBase58String(v.caller.bytes) | |
61 | + | let C = m(v.payments[0]) | |
62 | + | let x = fromBase58String(getStringValue(f)) | |
63 | + | if (if ((C.assetId != x)) | |
64 | + | then true | |
65 | + | else (0 >= C.amount)) | |
66 | + | then throw("Wrong asset id or negative amount") | |
67 | + | else if (q(B)) | |
68 | + | then throw("You have unclaimed rewards on contract, claim them first") | |
69 | + | else { | |
70 | + | let s = getIntegerValue(k) | |
71 | + | let D = getIntegerValue(i) | |
72 | + | let E = getIntegerValue(j) | |
73 | + | let F = getStringValue(g) | |
74 | + | let G = if ((size(F) > 0)) | |
75 | + | then invoke(Address(fromBase58String(F)), "stakePoolLps", nil, [C]) | |
76 | + | else unit | |
77 | + | if ((G == G)) | |
78 | + | then { | |
79 | + | let H = valueOrElse(getString(B), "") | |
80 | + | let t = if ((size(H) > 0)) | |
81 | + | then { | |
82 | + | let t = split(H, b) | |
83 | + | let I = parseIntValue(t[0]) | |
84 | + | makeString([toString((I + C.amount)), t[1], t[2], t[3], toString(height)], b) | |
85 | + | } | |
86 | + | else makeString([toString(C.amount), "0", toString(s), toString(E), toString(height)], b) | |
87 | + | [StringEntry(B, t), IntegerEntry(i, (D + C.amount))] | |
88 | + | } | |
89 | + | else throw("Strict value is not equal to itself.") | |
90 | + | } | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | ||
95 | + | @Callable(v) | |
96 | + | func withdraw (J) = if ((0 >= J)) | |
97 | + | then throw("Amount must be positive") | |
98 | + | else { | |
99 | + | let B = toBase58String(v.caller.bytes) | |
100 | + | if (q(B)) | |
101 | + | then throw("You have unclaimed rewards on contract, claim them first") | |
102 | + | else { | |
103 | + | let t = split(valueOrErrorMessage(getString(B), "User not found"), b) | |
104 | + | let I = parseIntValue(t[0]) | |
105 | + | if ((J > I)) | |
106 | + | then throw("Insufficient funds") | |
107 | + | else { | |
108 | + | let y = getIntegerValue(d) | |
109 | + | let K = parseIntValue(t[4]) | |
110 | + | if (if ((y > 0)) | |
111 | + | then (y > (height - K)) | |
112 | + | else false) | |
113 | + | then throw((("This pool have lock period. You need to wait " + toString((y - (height - K)))) + " blocks")) | |
114 | + | else { | |
115 | + | let F = getStringValue(g) | |
116 | + | let D = valueOrElse(getInteger(i), 0) | |
117 | + | let x = getStringValue(f) | |
118 | + | let G = if ((size(F) > 0)) | |
119 | + | then invoke(Address(fromBase58String(F)), "withdrawPoolLps", [J], nil) | |
120 | + | else unit | |
121 | + | if ((G == G)) | |
122 | + | then { | |
123 | + | let L = [toString((I - J)), removeByIndex(t, 0)] | |
124 | + | ([IntegerEntry(i, (D - J)), ScriptTransfer(Address(v.caller.bytes), J, fromBase58String(x))] :+ (if (((I - J) == 0)) | |
125 | + | then DeleteEntry(B) | |
126 | + | else StringEntry(B, makeString(L, b)))) | |
127 | + | } | |
128 | + | else throw("Strict value is not equal to itself.") | |
129 | + | } | |
130 | + | } | |
131 | + | } | |
132 | + | } | |
133 | + | ||
134 | + | ||
135 | + | ||
136 | + | @Callable(v) | |
137 | + | func claimRewards () = { | |
138 | + | let B = toBase58String(v.caller.bytes) | |
139 | + | if (!(q(B))) | |
140 | + | then throw("Nothing to claim, or user not found") | |
141 | + | else { | |
142 | + | let M = getIntegerValue(k) | |
143 | + | let N = getIntegerValue(j) | |
144 | + | let t = split(getStringValue(B), b) | |
145 | + | let O = parseIntValue(t[0]) | |
146 | + | let P = parseIntValue(t[1]) | |
147 | + | let Q = parseIntValue(t[2]) | |
148 | + | let R = parseIntValue(t[3]) | |
149 | + | let S = (N - R) | |
150 | + | let T = fraction(S, O, a) | |
151 | + | let L = makeString([t[0], toString((P + T)), toString(M), toString((R + S)), t[4]], b) | |
152 | + | let w = fromBase58String(getStringValue(e)) | |
153 | + | [StringEntry(B, L), ScriptTransfer(v.caller, T, w)] | |
154 | + | } | |
155 | + | } | |
156 | + | ||
157 | + | ||
158 | + | ||
159 | + | @Callable(v) | |
160 | + | func claimPoolRewards () = if ((v.caller.bytes != fromBase58String(getStringValue(h)))) | |
161 | + | then throw("Admin only") | |
162 | + | else { | |
163 | + | let U = getIntegerValue(i) | |
164 | + | let V = getIntegerValue(j) | |
165 | + | let M = getIntegerValue(k) | |
166 | + | let w = fromBase58String(getStringValue(e)) | |
167 | + | let F = getStringValue(g) | |
168 | + | let W = assetBalance(this, w) | |
169 | + | if ((W == W)) | |
170 | + | then { | |
171 | + | let X = if ((size(F) > 0)) | |
172 | + | then invoke(Address(fromBase58String(F)), "claimPoolRewards", nil, nil) | |
173 | + | else unit | |
174 | + | if ((X == X)) | |
175 | + | then { | |
176 | + | let Y = assetBalance(this, w) | |
177 | + | let Z = getIntegerValue(l) | |
178 | + | let aa = ((Y - W) + Z) | |
179 | + | if ((aa == 0)) | |
180 | + | then nil | |
181 | + | else { | |
182 | + | let ab = fraction(aa, a, U) | |
183 | + | [IntegerEntry(k, (M + 1)), IntegerEntry(j, (V + ab)), IntegerEntry(l, 0)] | |
184 | + | } | |
185 | + | } | |
186 | + | else throw("Strict value is not equal to itself.") | |
187 | + | } | |
188 | + | else throw("Strict value is not equal to itself.") | |
189 | + | } | |
190 | + | ||
191 | + | ||
192 | + | ||
193 | + | @Callable(v) | |
194 | + | func receiveAdditionalReward () = if ((size(v.payments) != 1)) | |
195 | + | then throw("One Payment expected") | |
196 | + | else { | |
197 | + | let C = m(v.payments[0]) | |
198 | + | let w = fromBase58String(getStringValue(e)) | |
199 | + | if (if ((C.assetId != w)) | |
200 | + | then true | |
201 | + | else (0 >= C.amount)) | |
202 | + | then throw("Wrong reward asset id or negative amount") | |
203 | + | else { | |
204 | + | let ac = getIntegerValue(l) | |
205 | + | [IntegerEntry(l, (ac + C.amount))] | |
206 | + | } | |
207 | + | } | |
208 | + | ||
209 | + | ||
210 | + | @Verifier(ad) | |
211 | + | func ae () = sigVerify(ad.bodyBytes, ad.proofs[0], ad.senderPublicKey) | |
212 | + |
github/deemru/w8io/026f985 20.62 ms ◑