2022.02.23 17:12 [3001489] smart account 3PB6dcUYwDt6WHq6sma4ed7iUvEKvuP4b6B > SELF 0.00000000 Waves

{ "type": 13, "id": "3B4i5Si1MKNLct7Y1Xdde3kGCf9RVDBvTd9uy27LJT6Z", "fee": 1000000, "feeAssetId": null, "timestamp": 1645625632495, "version": 2, "chainId": 87, "sender": "3PB6dcUYwDt6WHq6sma4ed7iUvEKvuP4b6B", "senderPublicKey": "ATp1V1XASFYPLCynegeF7tXkZQCQ7wUxGU94d9iADA9x", "proofs": [ "5RuZ1QUE6HLacgV21uaim1UGGJbYMeH4QnZozXiVYGKqhqyVLgtsVffDgQn4WMFggCDkLjN8g5yj9qQGaX8KtHiA" ], "script": "base64:AAIFAAAAAAAAABYIAhIAEgQKAgEEEgMKAQQSAwoBCBIAAAAAGwAAAAALa2V5TUFjY1BLZXkCAAAACW1hc3Rlcl9wawEAAAAMZ2V0Q0ZBZGRyZXNzAAAAAAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwIAAAAKQ0ZfQUREUkVTUwAAAAAIbUFjY1BLZXkJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAADGdldENGQWRkcmVzcwAAAAAFAAAAC2tleU1BY2NQS2V5AAAAAAhtQWNjQWRkcgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAIbUFjY1BLZXkAAAAAEGtleVRvdGFsQ29tcG91bmQCAAAADnRvdGFsX2NvbXBvdW5kAAAAABFrZXlTdGFrZWRDb21wb3VuZAIAAAAPc3Rha2VkX2NvbXBvdW5kAAAAAAlrZXlMYXN0VlACAAAAEmxhc3RfdmlydHVhbF9wcmljZQAAAAAHVlBTY2FsZQAAAAAABfXhAAEAAAAVa2V5U3Rha2VkQ29tcG91bmRVc2VyAAAAAQAAAAR1c2VyCQABLAAAAAIJAAEsAAAAAgkABCUAAAABBQAAAAR1c2VyAgAAAAFfBQAAABFrZXlTdGFrZWRDb21wb3VuZAEAAAAQY2FsY1ZpcnR1YWxQcmljZQAAAAIAAAALdG90YWxTdGFrZWQAAAAFdG90YWwDCQAAAAAAAAIFAAAABXRvdGFsAAAAAAAAAAAAAAAAAAAAAAABAwkAAAAAAAACBQAAAAt0b3RhbFN0YWtlZAAAAAAAAAAAAAAAAAAAAAAAAQkAAGsAAAADBQAAAAV0b3RhbAUAAAAHVlBTY2FsZQUAAAALdG90YWxTdGFrZWQAAAAABVNjYWxlAAAAAAAF9eEAAQAAAA9rZXlTdGFrZWRBbW91bnQAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgkABCUAAAABBQAAAAdhZGRyZXNzAgAAAAxfZmFybV9zdGFrZWQBAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAQAAAAdhZGRyZXNzCQABLAAAAAIJAAQlAAAAAQUAAAAHYWRkcmVzcwIAAAATX2xhc3RDaGVja19pbnRlcmVzdAEAAAANa2V5RWdnQ2xhaW1lZAAAAAEAAAAHYWRkcmVzcwkAASwAAAACCQAEJQAAAAEFAAAAB2FkZHJlc3MCAAAACF9jbGFpbWVkAAAAABVrZXlHbG9iYWxMYXN0SW50ZXJlc3QCAAAAGWdsb2JhbF9sYXN0Q2hlY2tfaW50ZXJlc3QAAAAAD2tleUdsb2JhbFN0YWtlZAIAAAANZ2xvYmFsX3N0YWtlZAAAAAASa2V5R2xvYmFsRWdnRWFybmVkAgAAAA9nbG9iYWxfZWFybmluZ3MAAAAAEmtMb2NrZWRJbnZlc3RtZW50cwIAAAASbG9ja2VkX2ludmVzdG1lbnRzAQAAABZpc0NvbGxlY3RpdmVGYXJtTG9ja2VkAAAAAAQAAAAHJG1hdGNoMAkABBsAAAACCQEAAAAMZ2V0Q0ZBZGRyZXNzAAAAAAUAAAASa0xvY2tlZEludmVzdG1lbnRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiBwEAAAAIZ2V0RWdnSWQAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAACG1BY2NBZGRyAgAAAAxFR0dfQVNTRVRfSUQBAAAAF3NldENGQWRkcmVzc0FuZEluaXRpYXRlAAAAAQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAACkNGX0FERFJFU1MFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAAAAAAAAAAAAQUAAAADbmlsAQAAAA9nZXRTaGFyZUFzc2V0SWQAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAxnZXRDRkFkZHJlc3MAAAAAAgAAAA5TSEFSRV9BU1NFVF9JRAEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAABJjbGFpbVN0YWtpbmdSZXN1bHQAAAABAAAAB2FkZHJlc3MEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABVrZXlHbG9iYWxMYXN0SW50ZXJlc3QEAAAAEWxhc3RDaGVja0ludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAEFAAAAB2FkZHJlc3MEAAAADHN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAPa2V5U3Rha2VkQW1vdW50AAAAAQUAAAAHYWRkcmVzcwQAAAAGcmV3YXJkAwkAAGYAAAACBQAAABFsYXN0Q2hlY2tJbnRlcmVzdAAAAAAAAAAAAAkAAGsAAAADCQAAZQAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAARbGFzdENoZWNrSW50ZXJlc3QFAAAADHN0YWtlZEFtb3VudAUAAAAFU2NhbGUAAAAAAAAAAAAEAAAACHRyYW5zZmVyAwkAAGYAAAACBQAAAAZyZXdhcmQAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAHYWRkcmVzcwUAAAAGcmV3YXJkCQEAAAAIZ2V0RWdnSWQAAAAABQAAAANuaWwFAAAAA25pbAkABE4AAAACBQAAAAh0cmFuc2ZlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAQUAAAAHYWRkcmVzcwUAAAAPY3VycmVudEludGVyZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5RWdnQ2xhaW1lZAAAAAEFAAAAB2FkZHJlc3MJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAANa2V5RWdnQ2xhaW1lZAAAAAEFAAAAB2FkZHJlc3MFAAAABnJld2FyZAUAAAADbmlsAQAAABNoYW5kbGVDb21wb3VuZFRvcFVwAAAAAQAAAAZhbW91bnQEAAAABXRvdGFsCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAQa2V5VG90YWxDb21wb3VuZAUAAAAGYW1vdW50BAAAAAZzdGFrZWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAARa2V5U3Rha2VkQ29tcG91bmQEAAAAAnZwCQEAAAAQY2FsY1ZpcnR1YWxQcmljZQAAAAIFAAAABnN0YWtlZAUAAAAFdG90YWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGtleVRvdGFsQ29tcG91bmQFAAAABXRvdGFsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrZXlMYXN0VlAFAAAAAnZwBQAAAANuaWwBAAAAEmhhbmRsZVN0YWtpbmdUb3BVcAAAAAEAAAAGYW1vdW50BAAAAA9jdXJyZW50SW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0BAAAABF0b3RhbFN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAA9rZXlHbG9iYWxTdGFrZWQEAAAADWludGVyZXN0RGVsdGEDCQAAZgAAAAIFAAAAEXRvdGFsU3Rha2VkQW1vdW50AAAAAAAAAAAACQAAawAAAAMFAAAABmFtb3VudAUAAAAFU2NhbGUFAAAAEXRvdGFsU3Rha2VkQW1vdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlHbG9iYWxFZ2dFYXJuZWQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABJrZXlHbG9iYWxFZ2dFYXJuZWQFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0CQAAZAAAAAIFAAAAD2N1cnJlbnRJbnRlcmVzdAUAAAANaW50ZXJlc3REZWx0YQUAAAADbmlsAAAABQAAAAFpAQAAAAt0b3BVcFJld2FyZAAAAAAEAAAACmVnZ0Fzc2V0SWQJAQAAAAhnZXRFZ2dJZAAAAAAEAAAADHNoYXJlVG9rZW5JZAkBAAAAD2dldFNoYXJlQXNzZXRJZAAAAAADCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAplZ2dBc3NldElkCQAAAgAAAAECAAAAKldyb25nIGFzc2V0SWQsIGZpcnN0IHBheW1lbnQgc2hvdWxkIGJlIEVHRwMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQFAAAADHNoYXJlVG9rZW5JZAkAAAIAAAABAgAAADNXcm9uZyBhc3NldElkLCBzZWNvbmQgcGF5bWVudCBzaG91bGQgYmUgZmFybSB0b2tlbnMEAAAAEHJlc0hhbmRsZVN0YWtpbmcJAQAAABJoYW5kbGVTdGFraW5nVG9wVXAAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAEXJlc0hhbmRsZUNvbXBvdW5kCQEAAAATaGFuZGxlQ29tcG91bmRUb3BVcAAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAkABRQAAAACCQAETgAAAAIFAAAAEXJlc0hhbmRsZUNvbXBvdW5kBQAAABByZXNIYW5kbGVTdGFraW5nBgAAAAFpAQAAABJ3aXRoZHJhd0Zhcm1Ub2tlbnMAAAACAAAABmFtb3VudAAAAAhjb21wb3VuZAMJAABmAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABlQbGVhc2UgZG9uJ3QgYWRkIHBheW1lbnRzBAAAAAxzaGFyZVRva2VuSWQJAQAAAA9nZXRTaGFyZUFzc2V0SWQAAAAAAwUAAAAIY29tcG91bmQEAAAABnN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABFrZXlTdGFrZWRDb21wb3VuZAQAAAAFdG90YWwJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAQa2V5VG90YWxDb21wb3VuZAQAAAACdnAJAQAAABBjYWxjVmlydHVhbFByaWNlAAAAAgUAAAAGc3Rha2VkBQAAAAV0b3RhbAQAAAASa2V5U3Rha2VkQ29tcG91bmRVCQEAAAAVa2V5U3Rha2VkQ29tcG91bmRVc2VyAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA5wZXJzb25hbFN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABJrZXlTdGFrZWRDb21wb3VuZFUEAAAACXZpcnR1YWxXZAMJAAAAAAAAAgUAAAAGYW1vdW50AP//////////BQAAAA5wZXJzb25hbFN0YWtlZAkAAGsAAAADBQAAAAZhbW91bnQFAAAAB1ZQU2NhbGUFAAAAAnZwBAAAAAhhbW91bnRXZAMJAAAAAAAAAgUAAAAGYW1vdW50AP//////////CQAAawAAAAMFAAAACXZpcnR1YWxXZAUAAAACdnAFAAAAB1ZQU2NhbGUFAAAABmFtb3VudAMJAABmAAAAAgUAAAAJdmlydHVhbFdkBQAAAA5wZXJzb25hbFN0YWtlZAkAAAIAAAABAgAAAChZb3UgZG9uJ3QgaGF2ZSBzbyBtdWNoIGZ1bmRzIHRvIHdpdGhkcmF3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlTdGFrZWRDb21wb3VuZFUJAABlAAAAAgUAAAAOcGVyc29uYWxTdGFrZWQFAAAACXZpcnR1YWxXZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5U3Rha2VkQ29tcG91bmQJAABlAAAAAgUAAAAGc3Rha2VkBQAAAAl2aXJ0dWFsV2QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGtleVRvdGFsQ29tcG91bmQJAABlAAAAAgUAAAAFdG90YWwFAAAACGFtb3VudFdkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAIYW1vdW50V2QFAAAADHNoYXJlVG9rZW5JZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa2V5TGFzdFZQBQAAAAJ2cAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAVbGFzdF92aXJ0X2NvbXBvdW5kX3dkBQAAAAl2aXJ0dWFsV2QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAF2xhc3RfYW1vdW50X2NvbXBvdW5kX3dkBQAAAAhhbW91bnRXZAUAAAADbmlsBAAAAAphZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAMc3Rha2VkQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAA9rZXlTdGFrZWRBbW91bnQAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACHdkQW1vdW50AwkAAAAAAAACBQAAAAZhbW91bnQA//////////8FAAAADHN0YWtlZEFtb3VudAUAAAAGYW1vdW50AwkAAGYAAAACBQAAAAh3ZEFtb3VudAUAAAAMc3Rha2VkQW1vdW50CQAAAgAAAAECAAAAH3lvdSBkb24ndCBoYXZlIHRva2VucyBhdmFpbGFibGUJAAROAAAAAgkBAAAAEmNsYWltU3Rha2luZ1Jlc3VsdAAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVN0YWtlZEFtb3VudAAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAGUAAAACBQAAAAxzdGFrZWRBbW91bnQFAAAACHdkQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rZXlHbG9iYWxTdGFrZWQJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAA9rZXlHbG9iYWxTdGFrZWQFAAAACHdkQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAId2RBbW91bnQFAAAADHNoYXJlVG9rZW5JZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAPbGFzdF9zdGFraW5nX3dkBQAAAAh3ZEFtb3VudAUAAAADbmlsAAAAAWkBAAAAD3N0YWtlRmFybVRva2VucwAAAAEAAAAIY29tcG91bmQEAAAADHNoYXJlVG9rZW5JZAkBAAAAD2dldFNoYXJlQXNzZXRJZAAAAAADCQAAZgAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAWVG8gbWFueSBwYXltZW50cyBhZGRlZAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAADHNoYXJlVG9rZW5JZAkAAAIAAAABAgAAAA1Xcm9uZyBhc3NldElkAwUAAAAIY29tcG91bmQEAAAACGlzTG9ja2VkCQEAAAAWaXNDb2xsZWN0aXZlRmFybUxvY2tlZAAAAAADBQAAAAhpc0xvY2tlZAkAAAIAAAABAgAAADVUaGUgZmFybSBpcyBjbG9zZWQgZm9yIGludmVzdG1lbnRzLCBpdCBjYW4ndCBjb21wb3VuZAQAAAASa2V5U3Rha2VkQ29tcG91bmRVCQEAAAAVa2V5U3Rha2VkQ29tcG91bmRVc2VyAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA1hbHJlYWR5U3Rha2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAAEmtleVN0YWtlZENvbXBvdW5kVQQAAAAFdG90YWwJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAQa2V5VG90YWxDb21wb3VuZAQAAAAGc3Rha2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAAEWtleVN0YWtlZENvbXBvdW5kBAAAAAJ2cAkBAAAAEGNhbGNWaXJ0dWFsUHJpY2UAAAACBQAAAAZzdGFrZWQFAAAABXRvdGFsBAAAAA5yYXdTdGFrZUFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAABBleGFjdFN0YWtlQW1vdW50CQAAawAAAAMFAAAADnJhd1N0YWtlQW1vdW50BQAAAAdWUFNjYWxlBQAAAAJ2cAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5U3Rha2VkQ29tcG91bmRVCQAAZAAAAAIFAAAADWFscmVhZHlTdGFrZWQFAAAAEGV4YWN0U3Rha2VBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGtleVRvdGFsQ29tcG91bmQJAABkAAAAAgUAAAAFdG90YWwFAAAADnJhd1N0YWtlQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrZXlTdGFrZWRDb21wb3VuZAkAAGQAAAACBQAAAAZzdGFrZWQFAAAAEGV4YWN0U3Rha2VBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtleUxhc3RWUAUAAAACdnAFAAAAA25pbAQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABF0b3RhbFN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABBQAAAA9rZXlHbG9iYWxTdGFrZWQDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAxzaGFyZVRva2VuSWQJAAACAAAAAQIAAAAUd3JvbmcgYXNzZXQgYXR0YWNoZWQJAAROAAAAAgkBAAAAEmNsYWltU3Rha2luZ1Jlc3VsdAAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa2V5R2xvYmFsU3Rha2VkCQAAZAAAAAIFAAAAEXRvdGFsU3Rha2VkQW1vdW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlTdGFrZWRBbW91bnQAAAABCAUAAAABaQAAAAZjYWxsZXIJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAPa2V5U3Rha2VkQW1vdW50AAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAxpbml0aWF0ZURhcHAAAAABAAAAB2FkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAmQ2FuIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBkYXBwLWFjY291bnQJAQAAABdzZXRDRkFkZHJlc3NBbmRJbml0aWF0ZQAAAAEFAAAAB2FkZHJlc3MAAAABaQEAAAALY2xhaW1SZXdhcmQAAAAAAwkAAGYAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAGVBsZWFzZSBkb24ndCBhZGQgcGF5bWVudHMJAQAAABJjbGFpbVN0YWtpbmdSZXN1bHQAAAABCAUAAAABaQAAAAZjYWxsZXIAAAAAoBSqdg==", "height": 3001489, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 65S88EHCQYN1HdWaQ3K2vfx7sCzxMXvYVgHMsKWLuhr6 Next: 7AczCZXrRwpogzB1SuCxCc7mcW8s2edNmKD9CBVEAyJs Diff:
OldNewDifferences
5858 func getEggId () = fromBase58String(getStringValue(mAccAddr, "EGG_ASSET_ID"))
5959
6060
61-func setCFAddress (address) = [StringEntry("CF_ADDRESS", address)]
61+func setCFAddressAndInitiate (address) = [StringEntry("CF_ADDRESS", address), IntegerEntry(keyGlobalLastInterest, 1)]
6262
6363
6464 func getShareAssetId () = fromBase58String(getStringValue(getCFAddress(), "SHARE_ASSET_ID"))
203203 @Callable(i)
204204 func initiateDapp (address) = if ((i.caller != this))
205205 then throw("Can be called only by the dapp-account")
206- else setCFAddress(address)
206+ else setCFAddressAndInitiate(address)
207207
208208
209209
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyMAccPKey = "master_pk"
55
66 func getCFAddress () = addressFromStringValue(getStringValue(this, "CF_ADDRESS"))
77
88
99 let mAccPKey = fromBase58String(getStringValue(getCFAddress(), keyMAccPKey))
1010
1111 let mAccAddr = addressFromPublicKey(mAccPKey)
1212
1313 let keyTotalCompound = "total_compound"
1414
1515 let keyStakedCompound = "staked_compound"
1616
1717 let keyLastVP = "last_virtual_price"
1818
1919 let VPScale = 100000000
2020
2121 func keyStakedCompoundUser (user) = ((toString(user) + "_") + keyStakedCompound)
2222
2323
2424 func calcVirtualPrice (totalStaked,total) = if ((total == 0))
2525 then 1
2626 else if ((totalStaked == 0))
2727 then 1
2828 else fraction(total, VPScale, totalStaked)
2929
3030
3131 let Scale = 100000000
3232
3333 func keyStakedAmount (address) = (toString(address) + "_farm_staked")
3434
3535
3636 func keyLastCheckInterest (address) = (toString(address) + "_lastCheck_interest")
3737
3838
3939 func keyEggClaimed (address) = (toString(address) + "_claimed")
4040
4141
4242 let keyGlobalLastInterest = "global_lastCheck_interest"
4343
4444 let keyGlobalStaked = "global_staked"
4545
4646 let keyGlobalEggEarned = "global_earnings"
4747
4848 let kLockedInvestments = "locked_investments"
4949
5050 func isCollectiveFarmLocked () = match getBoolean(getCFAddress(), kLockedInvestments) {
5151 case b: Boolean =>
5252 b
5353 case _ =>
5454 false
5555 }
5656
5757
5858 func getEggId () = fromBase58String(getStringValue(mAccAddr, "EGG_ASSET_ID"))
5959
6060
61-func setCFAddress (address) = [StringEntry("CF_ADDRESS", address)]
61+func setCFAddressAndInitiate (address) = [StringEntry("CF_ADDRESS", address), IntegerEntry(keyGlobalLastInterest, 1)]
6262
6363
6464 func getShareAssetId () = fromBase58String(getStringValue(getCFAddress(), "SHARE_ASSET_ID"))
6565
6666
6767 func tryGetInteger (key) = match getInteger(this, key) {
6868 case b: Int =>
6969 b
7070 case _ =>
7171 0
7272 }
7373
7474
7575 func tryGetString (key) = match getString(this, key) {
7676 case a: String =>
7777 a
7878 case _ =>
7979 ""
8080 }
8181
8282
8383 func claimStakingResult (address) = {
8484 let currentInterest = tryGetInteger(keyGlobalLastInterest)
8585 let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address))
8686 let stakedAmount = tryGetInteger(keyStakedAmount(address))
8787 let reward = if ((lastCheckInterest > 0))
8888 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
8989 else 0
9090 let transfer = if ((reward > 0))
9191 then [ScriptTransfer(address, reward, getEggId())]
9292 else nil
9393 (transfer ++ [IntegerEntry(keyLastCheckInterest(address), currentInterest), IntegerEntry(keyEggClaimed(address), (tryGetInteger(keyEggClaimed(address)) + reward))])
9494 }
9595
9696
9797 func handleCompoundTopUp (amount) = {
9898 let total = (tryGetInteger(keyTotalCompound) + amount)
9999 let staked = tryGetInteger(keyStakedCompound)
100100 let vp = calcVirtualPrice(staked, total)
101101 [IntegerEntry(keyTotalCompound, total), IntegerEntry(keyLastVP, vp)]
102102 }
103103
104104
105105 func handleStakingTopUp (amount) = {
106106 let currentInterest = tryGetInteger(keyGlobalLastInterest)
107107 let totalStakedAmount = tryGetInteger(keyGlobalStaked)
108108 let interestDelta = if ((totalStakedAmount > 0))
109109 then fraction(amount, Scale, totalStakedAmount)
110110 else 0
111111 [IntegerEntry(keyGlobalEggEarned, (tryGetInteger(keyGlobalEggEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))]
112112 }
113113
114114
115115 @Callable(i)
116116 func topUpReward () = {
117117 let eggAssetId = getEggId()
118118 let shareTokenId = getShareAssetId()
119119 if ((i.payments[0].assetId != eggAssetId))
120120 then throw("Wrong assetId, first payment should be EGG")
121121 else if ((i.payments[1].assetId != shareTokenId))
122122 then throw("Wrong assetId, second payment should be farm tokens")
123123 else {
124124 let resHandleStaking = handleStakingTopUp(i.payments[0].amount)
125125 let resHandleCompound = handleCompoundTopUp(i.payments[1].amount)
126126 $Tuple2((resHandleCompound ++ resHandleStaking), true)
127127 }
128128 }
129129
130130
131131
132132 @Callable(i)
133133 func withdrawFarmTokens (amount,compound) = if ((size(i.payments) > 0))
134134 then throw("Please don't add payments")
135135 else {
136136 let shareTokenId = getShareAssetId()
137137 if (compound)
138138 then {
139139 let staked = tryGetInteger(keyStakedCompound)
140140 let total = tryGetInteger(keyTotalCompound)
141141 let vp = calcVirtualPrice(staked, total)
142142 let keyStakedCompoundU = keyStakedCompoundUser(i.caller)
143143 let personalStaked = tryGetInteger(keyStakedCompoundU)
144144 let virtualWd = if ((amount == -1))
145145 then personalStaked
146146 else fraction(amount, VPScale, vp)
147147 let amountWd = if ((amount == -1))
148148 then fraction(virtualWd, vp, VPScale)
149149 else amount
150150 if ((virtualWd > personalStaked))
151151 then throw("You don't have so much funds to withdraw")
152152 else [IntegerEntry(keyStakedCompoundU, (personalStaked - virtualWd)), IntegerEntry(keyStakedCompound, (staked - virtualWd)), IntegerEntry(keyTotalCompound, (total - amountWd)), ScriptTransfer(i.caller, amountWd, shareTokenId), IntegerEntry(keyLastVP, vp), IntegerEntry("last_virt_compound_wd", virtualWd), IntegerEntry("last_amount_compound_wd", amountWd)]
153153 }
154154 else {
155155 let addressStr = toString(i.caller)
156156 let stakedAmount = tryGetInteger(keyStakedAmount(i.caller))
157157 let wdAmount = if ((amount == -1))
158158 then stakedAmount
159159 else amount
160160 if ((wdAmount > stakedAmount))
161161 then throw("you don't have tokens available")
162162 else (claimStakingResult(i.caller) ++ [IntegerEntry(keyStakedAmount(i.caller), (stakedAmount - wdAmount)), IntegerEntry(keyGlobalStaked, (tryGetInteger(keyGlobalStaked) - wdAmount)), ScriptTransfer(i.caller, wdAmount, shareTokenId), IntegerEntry("last_staking_wd", wdAmount)])
163163 }
164164 }
165165
166166
167167
168168 @Callable(i)
169169 func stakeFarmTokens (compound) = {
170170 let shareTokenId = getShareAssetId()
171171 if ((size(i.payments) > 1))
172172 then throw("To many payments added")
173173 else if ((i.payments[0].assetId != shareTokenId))
174174 then throw("Wrong assetId")
175175 else if (compound)
176176 then {
177177 let isLocked = isCollectiveFarmLocked()
178178 if (isLocked)
179179 then throw("The farm is closed for investments, it can't compound")
180180 else {
181181 let keyStakedCompoundU = keyStakedCompoundUser(i.caller)
182182 let alreadyStaked = tryGetInteger(keyStakedCompoundU)
183183 let total = tryGetInteger(keyTotalCompound)
184184 let staked = tryGetInteger(keyStakedCompound)
185185 let vp = calcVirtualPrice(staked, total)
186186 let rawStakeAmount = i.payments[0].amount
187187 let exactStakeAmount = fraction(rawStakeAmount, VPScale, vp)
188188 [IntegerEntry(keyStakedCompoundU, (alreadyStaked + exactStakeAmount)), IntegerEntry(keyTotalCompound, (total + rawStakeAmount)), IntegerEntry(keyStakedCompound, (staked + exactStakeAmount)), IntegerEntry(keyLastVP, vp)]
189189 }
190190 }
191191 else {
192192 let amount = i.payments[0].amount
193193 let addressStr = toString(i.caller)
194194 let totalStakedAmount = tryGetInteger(keyGlobalStaked)
195195 if ((i.payments[0].assetId != shareTokenId))
196196 then throw("wrong asset attached")
197197 else (claimStakingResult(i.caller) ++ [IntegerEntry(keyGlobalStaked, (totalStakedAmount + amount)), IntegerEntry(keyStakedAmount(i.caller), (tryGetInteger(keyStakedAmount(i.caller)) + amount))])
198198 }
199199 }
200200
201201
202202
203203 @Callable(i)
204204 func initiateDapp (address) = if ((i.caller != this))
205205 then throw("Can be called only by the dapp-account")
206- else setCFAddress(address)
206+ else setCFAddressAndInitiate(address)
207207
208208
209209
210210 @Callable(i)
211211 func claimReward () = if ((size(i.payments) > 0))
212212 then throw("Please don't add payments")
213213 else claimStakingResult(i.caller)
214214
215215

github/deemru/w8io/786bc32 
40.66 ms