tx · BFzx49t152TxbUarQ1Ygo85cBgSh1P7y8CuD6MEbXTAN

3ND9uQikdMjKiF3ezqBfa5sKKqp5rJ3ekCB:  -0.01400000 Waves

2019.10.04 14:24 [704912] smart account 3ND9uQikdMjKiF3ezqBfa5sKKqp5rJ3ekCB > SELF 0.00000000 Waves

{ "type": 13, "id": "BFzx49t152TxbUarQ1Ygo85cBgSh1P7y8CuD6MEbXTAN", "fee": 1400000, "feeAssetId": null, "timestamp": 1570188307796, "version": 1, "sender": "3ND9uQikdMjKiF3ezqBfa5sKKqp5rJ3ekCB", "senderPublicKey": "Asd7Ne84RczS6Fag55bmJp4iRZEzpcib9qUmwUu8N7n1", "proofs": [ "3m4A7ep9ZMvWZSNnbxZgKt8W4M6HiZHrgPcJnTJ6W5MYmGyG8NzidA6aLaSKs96eL47HiZEBJ1xXvGioBahEBiPa" ], "script": "base64:AAIDAAAAAAAAAAAAAAAmAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAAAAAAAD0xJU1RTUExJVFNZTUJPTAIAAAABXwAAAAAPUEVSQ0VOVEFDQ1VSQUNZAAAAAAAAACcQAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAAA5Cb25kQXNzZXRJZEtleQIAAAANYm9uZF9hc3NldF9pZAAAAAATTmV1dHJpbm9Db250cmFjdEtleQIAAAARbmV1dHJpbm9fY29udHJhY3QAAAAACkJhbGFuY2VLZXkCAAAAC3JwZF9iYWxhbmNlAAAAAAxTeW5jSW5kZXhLZXkCAAAADnJwZF9zeW5jX2luZGV4AAAAAAlQcm9maXRLZXkCAAAACnJwZF9wcm9maXQAAAAAEUJhbGFuY2VIaXN0b3J5S2V5AgAAAA9iYWxhbmNlX2hpc3RvcnkAAAAADElzQ2xhaW1lZEtleQIAAAAKaXNfY2xhaW1lZAEAAAAYZ2V0VXNlckJhbGFuY2VIaXN0b3J5S2V5AAAAAQAAAAVvd25lcgkAASwAAAACCQABLAAAAAIFAAAAEUJhbGFuY2VIaXN0b3J5S2V5AgAAAAFfBQAAAAVvd25lcgEAAAARZ2V0VXNlckJhbGFuY2VLZXkAAAACAAAABW93bmVyAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAKQmFsYW5jZUtleQIAAAABXwUAAAAHYXNzZXRJZAIAAAABXwUAAAAFb3duZXIBAAAAGGdldFVzZXJCYWxhbmNlS2V5QnlDb3VudAAAAAMAAAAFb3duZXIAAAAFY291bnQAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAABW93bmVyBQAAAAdhc3NldElkAgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAAA9nZXRJc0NsYWltZWRLZXkAAAACAAAABW93bmVyAAAABWNvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADElzQ2xhaW1lZEtleQIAAAABXwUAAAAFb3duZXICAAAAAV8JAAGkAAAAAQUAAAAFY291bnQBAAAAFWdldENvbnRyYWN0QmFsYW5jZUtleQAAAAEAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAACkJhbGFuY2VLZXkCAAAAAV8FAAAAB2Fzc2V0SWQBAAAAHWdldFNuYXBzaG90Q29udHJhY3RCYWxhbmNlS2V5AAAAAgAAAAVjb3VudAAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACkJhbGFuY2VLZXkCAAAAAV8FAAAAB2Fzc2V0SWQCAAAAAV8JAAGkAAAAAQUAAAAFY291bnQBAAAADGdldFByb2ZpdEtleQAAAAEAAAAFY291bnQJAAEsAAAAAgkAASwAAAACBQAAAAlQcm9maXRLZXkCAAAAAV8JAAGkAAAAAQUAAAAFY291bnQAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAE05ldXRyaW5vQ29udHJhY3RLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAOQm9uZEFzc2V0SWRLZXkAAAAACXN5bmNJbmRleAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADFN5bmNJbmRleEtleQEAAAASZ2V0Q29udHJhY3RCYWxhbmNlAAAAAQAAAAdhc3NldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAAHYXNzZXRJZAEAAAAaZ2V0U25hcHNob3RDb250cmFjdEJhbGFuY2UAAAACAAAABWNvdW50AAAAB2Fzc2V0SWQJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAdZ2V0U25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACBQAAAAVjb3VudAUAAAAHYXNzZXRJZAEAAAAJZ2V0UHJvZml0AAAAAQAAAAVjb3VudAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAAxnZXRQcm9maXRLZXkAAAABBQAAAAVjb3VudAEAAAAOZ2V0VXNlckJhbGFuY2UAAAACAAAABW93bmVyAAAAB2Fzc2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAABW93bmVyBQAAAAdhc3NldElkAQAAABVnZXRVc2VyQmFsYW5jZUJ5Q291bnQAAAADAAAABW93bmVyAAAABWNvdW50AAAAB2Fzc2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABhnZXRVc2VyQmFsYW5jZUtleUJ5Q291bnQAAAADBQAAAAVvd25lcgUAAAAFY291bnQFAAAAB2Fzc2V0SWQBAAAAFWdldFVzZXJCYWxhbmNlSGlzdG9yeQAAAAEAAAAFb3duZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABhnZXRVc2VyQmFsYW5jZUhpc3RvcnlLZXkAAAABBQAAAAVvd25lcgEAAAAJaXNDbGFpbWVkAAAAAgAAAAVvd25lcgAAAAVjb3VudAkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAAA9nZXRJc0NsYWltZWRLZXkAAAACBQAAAAVvd25lcgUAAAAFY291bnQBAAAAEWdldEhpc3RvcnlFbGVtZW50AAAAAQAAAAVjb3VudAkAASwAAAACCQABpAAAAAEFAAAABWNvdW50BQAAAA9MSVNUU1BMSVRTWU1CT0wBAAAAEWFkZEJhbGFuY2VIaXN0b3J5AAAAAgAAAAdoaXN0b3J5AAAAB2VsZW1lbnQJAAEsAAAAAgUAAAAHaGlzdG9yeQUAAAAHZWxlbWVudAEAAAAVY29udmVydE5ldXRyaW5vVG9Cb25kAAAAAQAAAAZhbW91bnQJAABpAAAAAgUAAAAGYW1vdW50BQAAAAdXQVZFTEVUAQAAABVjb252ZXJ0Qm9uZFRvTmV1dHJpbm8AAAABAAAABmFtb3VudAkAAGgAAAACBQAAAAZhbW91bnQFAAAAB1dBVkVMRVQAAAADAAAAAWkBAAAADGxvY2tOZXV0cmlubwAAAAAEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50AwMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAC2JvbmRBc3NldElkBwkAAAIAAAABAgAAAB1jYW4gdXNlIG5ldXRyaW5vIG9yIGJvbmQgb25seQQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADWFzc2V0SWRTdHJpbmcJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAdiYWxhbmNlCQAAZAAAAAIJAQAAAA5nZXRVc2VyQmFsYW5jZQAAAAIFAAAAB2FjY291bnQFAAAADWFzc2V0SWRTdHJpbmcIBQAAAANwbXQAAAAGYW1vdW50BAAAAA1oaXN0b3J5U3RyaW5nCQEAAAAVZ2V0VXNlckJhbGFuY2VIaXN0b3J5AAAAAQUAAAAHYWNjb3VudAQAAAAHaGlzdG9yeQkABLUAAAACBQAAAA1oaXN0b3J5U3RyaW5nBQAAAA9MSVNUU1BMSVRTWU1CT0wEAAAABWluZGV4CQAAZQAAAAIJAAGQAAAAAQUAAAAHaGlzdG9yeQAAAAAAAAAAAgQAAAAKbmV3SGlzdG9yeQMDCQEAAAACIT0AAAACBQAAAA1oaXN0b3J5U3RyaW5nAgAAAAAJAAAAAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAB2hpc3RvcnkFAAAABWluZGV4BQAAAAlzeW5jSW5kZXgHBQAAAA1oaXN0b3J5U3RyaW5nCQEAAAARYWRkQmFsYW5jZUhpc3RvcnkAAAACBQAAAA1oaXN0b3J5U3RyaW5nCQEAAAARZ2V0SGlzdG9yeUVsZW1lbnQAAAABBQAAAAlzeW5jSW5kZXgJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAA1hc3NldElkU3RyaW5nCQAAZAAAAAIJAQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABBQAAAA1hc3NldElkU3RyaW5nCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwUAAAAHYmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldFVzZXJCYWxhbmNlS2V5QnlDb3VudAAAAAMFAAAAB2FjY291bnQFAAAACXN5bmNJbmRleAUAAAANYXNzZXRJZFN0cmluZwUAAAAHYmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldFVzZXJCYWxhbmNlSGlzdG9yeUtleQAAAAEFAAAAB2FjY291bnQFAAAACm5ld0hpc3RvcnkFAAAAA25pbAAAAAFpAQAAAA51bmxvY2tOZXV0cmlubwAAAAIAAAAMdW5sb2NrQW1vdW50AAAADWFzc2V0SWRTdHJpbmcEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAdhc3NldElkCQACWQAAAAEFAAAADWFzc2V0SWRTdHJpbmcEAAAAB2JhbGFuY2UJAABlAAAAAgkBAAAADmdldFVzZXJCYWxhbmNlAAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwUAAAAMdW5sb2NrQW1vdW50AwkAAGYAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAADmludmFsaWQgYW1vdW50AwMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQFAAAAD25ldXRyaW5vQXNzZXRJZAkBAAAAAiE9AAAAAgUAAAAHYXNzZXRJZAUAAAALYm9uZEFzc2V0SWQHCQAAAgAAAAECAAAAHWNhbiB1c2UgbmV1dHJpbm8gb3IgYm9uZCBvbmx5BAAAAA1oaXN0b3J5U3RyaW5nCQEAAAAVZ2V0VXNlckJhbGFuY2VIaXN0b3J5AAAAAQUAAAAHYWNjb3VudAQAAAAHaGlzdG9yeQkABLUAAAACBQAAAA1oaXN0b3J5U3RyaW5nBQAAAA9MSVNUU1BMSVRTWU1CT0wEAAAABWluZGV4CQAAZQAAAAIJAAGQAAAAAQUAAAAHaGlzdG9yeQAAAAAAAAAAAgQAAAAKbmV3SGlzdG9yeQMDCQEAAAACIT0AAAACBQAAAA1oaXN0b3J5U3RyaW5nAgAAAAAJAAAAAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAB2hpc3RvcnkFAAAABWluZGV4BQAAAAlzeW5jSW5kZXgHBQAAAA1oaXN0b3J5U3RyaW5nCQEAAAARYWRkQmFsYW5jZUhpc3RvcnkAAAACBQAAAA1oaXN0b3J5U3RyaW5nCQEAAAARZ2V0SGlzdG9yeUVsZW1lbnQAAAABBQAAAAlzeW5jSW5kZXgJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAApCYWxhbmNlS2V5CQAAZQAAAAIJAQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABBQAAAA1hc3NldElkU3RyaW5nBQAAAAx1bmxvY2tBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAAB2FjY291bnQFAAAADWFzc2V0SWRTdHJpbmcFAAAAB2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRVc2VyQmFsYW5jZUtleUJ5Q291bnQAAAADBQAAAAdhY2NvdW50BQAAAAlzeW5jSW5kZXgFAAAADWFzc2V0SWRTdHJpbmcFAAAAB2JhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRVc2VyQmFsYW5jZUhpc3RvcnlLZXkAAAABBQAAAAdhY2NvdW50BQAAAApuZXdIaXN0b3J5BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50BQAAAAx1bmxvY2tBbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAA9wcm9maXRTeW5jSW5kZXgAAAAMaGlzdG9yeUluZGV4BAAAAAdhY2NvdW50CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANaGlzdG9yeVN0cmluZwkBAAAAFWdldFVzZXJCYWxhbmNlSGlzdG9yeQAAAAEFAAAAB2FjY291bnQEAAAAB2hpc3RvcnkJAAS1AAAAAgUAAAANaGlzdG9yeVN0cmluZwUAAAAPTElTVFNQTElUU1lNQk9MBAAAAApsb2NrQWN0dWFsCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAHaGlzdG9yeQUAAAAMaGlzdG9yeUluZGV4AwkBAAAACWlzQ2xhaW1lZAAAAAIFAAAAB2FjY291bnQFAAAAD3Byb2ZpdFN5bmNJbmRleAkAAAIAAAABCQABLAAAAAICAAAAHWFjY291bnQgaXMgY2xhaW1lZCBycGRfY291bnQ6CQABpAAAAAEFAAAAD3Byb2ZpdFN5bmNJbmRleAMDCQAAZgAAAAIFAAAAD3Byb2ZpdFN5bmNJbmRleAUAAAAKbG9ja0FjdHVhbAYDCQAAZgAAAAIJAAGQAAAAAQUAAAAHaGlzdG9yeQkAAGQAAAACBQAAAAxoaXN0b3J5SW5kZXgAAAAAAAAAAAIJAABmAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAB2hpc3RvcnkJAABkAAAAAgUAAAAMaGlzdG9yeUluZGV4AAAAAAAAAAABBQAAAA9wcm9maXRTeW5jSW5kZXgHCQAAAgAAAAECAAAAFWludmFsaWQgaGlzdG9yeSBpbmRleAQAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nCQACWAAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAQAAAARYm9uZEFzc2V0SWRTdHJpbmcJAAJYAAAAAQUAAAALYm9uZEFzc2V0SWQEAAAAB2JhbGFuY2UJAABkAAAAAgkBAAAAFWdldFVzZXJCYWxhbmNlQnlDb3VudAAAAAMFAAAAB2FjY291bnQFAAAACmxvY2tBY3R1YWwFAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAAFWNvbnZlcnRCb25kVG9OZXV0cmlubwAAAAEJAQAAABVnZXRVc2VyQmFsYW5jZUJ5Q291bnQAAAADBQAAAAdhY2NvdW50BQAAAApsb2NrQWN0dWFsBQAAABFib25kQXNzZXRJZFN0cmluZwQAAAAMc2hhcmVQZXJjZW50CQAAaQAAAAIJAABoAAAAAgkAAGgAAAACBQAAAAdiYWxhbmNlBQAAAA9QRVJDRU5UQUNDVVJBQ1kAAAAAAAAAAGQJAABkAAAAAgkBAAAAGmdldFNuYXBzaG90Q29udHJhY3RCYWxhbmNlAAAAAgUAAAAPcHJvZml0U3luY0luZGV4BQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcJAQAAABVjb252ZXJ0Qm9uZFRvTmV1dHJpbm8AAAABCQEAAAAaZ2V0U25hcHNob3RDb250cmFjdEJhbGFuY2UAAAACBQAAAA9wcm9maXRTeW5jSW5kZXgFAAAAEWJvbmRBc3NldElkU3RyaW5nBAAAAAZwcm9maXQJAABpAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAADHNoYXJlUGVyY2VudAkBAAAACWdldFByb2ZpdAAAAAEFAAAAD3Byb2ZpdFN5bmNJbmRleAAAAAAAAAAAZAUAAAAPUEVSQ0VOVEFDQ1VSQUNZCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAD2dldElzQ2xhaW1lZEtleQAAAAIFAAAAB2FjY291bnQFAAAAD3Byb2ZpdFN5bmNJbmRleAYFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQFAAAABnByb2ZpdAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAAAULjCHw==", "chainId": 84, "height": 704912, "spentComplexity": 0 } View: original | compacted Prev: none Next: E1YT4dtWrgomznF8CwkBqrAwaKzdbsSNzXqhfgmdzfhn Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func getNumberByKey (key) = match getInteger(this, key) {
5+ case a: Int =>
6+ a
7+ case _ =>
8+ 0
9+}
10+
11+
12+func getStringByKey (key) = match getString(this, key) {
13+ case a: String =>
14+ a
15+ case _ =>
16+ ""
17+}
18+
19+
20+func getBoolByKey (key) = match getBoolean(this, key) {
21+ case a: Boolean =>
22+ a
23+ case _ =>
24+ false
25+}
26+
27+
28+func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
29+ case a: Int =>
30+ a
31+ case _ =>
32+ 0
33+}
34+
35+
36+func getStringByAddressAndKey (address,key) = match getString(addressFromStringValue(address), key) {
37+ case a: String =>
38+ a
39+ case _ =>
40+ ""
41+}
42+
43+
44+let LISTSPLITSYMBOL = "_"
45+
46+let PERCENTACCURACY = 10000
47+
48+let WAVELET = 100000000
49+
50+let NeutrinoAssetIdKey = "neutrino_asset_id"
51+
52+let BondAssetIdKey = "bond_asset_id"
53+
54+let NeutrinoContractKey = "neutrino_contract"
55+
56+let BalanceKey = "rpd_balance"
57+
58+let SyncIndexKey = "rpd_sync_index"
59+
60+let ProfitKey = "rpd_profit"
61+
62+let BalanceHistoryKey = "balance_history"
63+
64+let IsClaimedKey = "is_claimed"
65+
66+func getUserBalanceHistoryKey (owner) = ((BalanceHistoryKey + "_") + owner)
67+
68+
69+func getUserBalanceKey (owner,assetId) = ((((BalanceKey + "_") + assetId) + "_") + owner)
70+
71+
72+func getUserBalanceKeyByCount (owner,count,assetId) = ((getUserBalanceKey(owner, assetId) + "_") + toString(count))
73+
74+
75+func getIsClaimedKey (owner,count) = ((((IsClaimedKey + "_") + owner) + "_") + toString(count))
76+
77+
78+func getContractBalanceKey (assetId) = ((BalanceKey + "_") + assetId)
79+
80+
81+func getSnapshotContractBalanceKey (count,assetId) = ((((BalanceKey + "_") + assetId) + "_") + toString(count))
82+
83+
84+func getProfitKey (count) = ((ProfitKey + "_") + toString(count))
85+
86+
87+let neutrinoContract = getStringByKey(NeutrinoContractKey)
88+
89+let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
90+
91+let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
92+
93+let syncIndex = getNumberByAddressAndKey(neutrinoContract, SyncIndexKey)
94+
95+func getContractBalance (assetId) = getNumberByKey(getContractBalanceKey(assetId))
96+
97+
98+func getSnapshotContractBalance (count,assetId) = getNumberByAddressAndKey(neutrinoContract, getSnapshotContractBalanceKey(count, assetId))
99+
100+
101+func getProfit (count) = getNumberByAddressAndKey(neutrinoContract, getProfitKey(count))
102+
103+
104+func getUserBalance (owner,assetId) = getNumberByKey(getUserBalanceKey(owner, assetId))
105+
106+
107+func getUserBalanceByCount (owner,count,assetId) = getNumberByKey(getUserBalanceKeyByCount(owner, count, assetId))
108+
109+
110+func getUserBalanceHistory (owner) = getStringByKey(getUserBalanceHistoryKey(owner))
111+
112+
113+func isClaimed (owner,count) = getBoolByKey(getIsClaimedKey(owner, count))
114+
115+
116+func getHistoryElement (count) = (toString(count) + LISTSPLITSYMBOL)
117+
118+
119+func addBalanceHistory (history,element) = (history + element)
120+
121+
122+func convertNeutrinoToBond (amount) = (amount / WAVELET)
123+
124+
125+func convertBondToNeutrino (amount) = (amount * WAVELET)
126+
127+
128+@Callable(i)
129+func lockNeutrino () = {
130+ let pmt = extract(i.payment)
131+ if (if ((pmt.assetId != neutrinoAssetId))
132+ then (pmt.assetId != bondAssetId)
133+ else false)
134+ then throw("can use neutrino or bond only")
135+ else {
136+ let account = toString(i.caller)
137+ let assetIdString = toBase58String(value(pmt.assetId))
138+ let balance = (getUserBalance(account, assetIdString) + pmt.amount)
139+ let historyString = getUserBalanceHistory(account)
140+ let history = split(historyString, LISTSPLITSYMBOL)
141+ let index = (size(history) - 2)
142+ let newHistory = if (if ((historyString != ""))
143+ then (parseIntValue(history[index]) == syncIndex)
144+ else false)
145+ then historyString
146+ else addBalanceHistory(historyString, getHistoryElement(syncIndex))
147+ WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), DataEntry(getUserBalanceKey(account, assetIdString), balance), DataEntry(getUserBalanceKeyByCount(account, syncIndex, assetIdString), balance), DataEntry(getUserBalanceHistoryKey(account), newHistory)])
148+ }
149+ }
150+
151+
152+
153+@Callable(i)
154+func unlockNeutrino (unlockAmount,assetIdString) = {
155+ let account = toString(i.caller)
156+ let assetId = fromBase58String(assetIdString)
157+ let balance = (getUserBalance(account, assetIdString) - unlockAmount)
158+ if ((0 > balance))
159+ then throw("invalid amount")
160+ else if (if ((assetId != neutrinoAssetId))
161+ then (assetId != bondAssetId)
162+ else false)
163+ then throw("can use neutrino or bond only")
164+ else {
165+ let historyString = getUserBalanceHistory(account)
166+ let history = split(historyString, LISTSPLITSYMBOL)
167+ let index = (size(history) - 2)
168+ let newHistory = if (if ((historyString != ""))
169+ then (parseIntValue(history[index]) == syncIndex)
170+ else false)
171+ then historyString
172+ else addBalanceHistory(historyString, getHistoryElement(syncIndex))
173+ ScriptResult(WriteSet([DataEntry(BalanceKey, (getContractBalance(assetIdString) - unlockAmount)), DataEntry(getUserBalanceKey(account, assetIdString), balance), DataEntry(getUserBalanceKeyByCount(account, syncIndex, assetIdString), balance), DataEntry(getUserBalanceHistoryKey(account), newHistory)]), TransferSet([ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]))
174+ }
175+ }
176+
177+
178+
179+@Callable(i)
180+func withdraw (profitSyncIndex,historyIndex) = {
181+ let account = toString(i.caller)
182+ let historyString = getUserBalanceHistory(account)
183+ let history = split(historyString, LISTSPLITSYMBOL)
184+ let lockActual = parseIntValue(history[historyIndex])
185+ if (isClaimed(account, profitSyncIndex))
186+ then throw(("account is claimed rpd_count:" + toString(profitSyncIndex)))
187+ else if (if ((profitSyncIndex > lockActual))
188+ then true
189+ else if ((size(history) > (historyIndex + 2)))
190+ then (parseIntValue(history[(historyIndex + 1)]) > profitSyncIndex)
191+ else false)
192+ then throw("invalid history index")
193+ else {
194+ let neutrinoAssetIdString = toBase58String(neutrinoAssetId)
195+ let bondAssetIdString = toBase58String(bondAssetId)
196+ let balance = (getUserBalanceByCount(account, lockActual, neutrinoAssetIdString) + convertBondToNeutrino(getUserBalanceByCount(account, lockActual, bondAssetIdString)))
197+ let sharePercent = (((balance * PERCENTACCURACY) * 100) / (getSnapshotContractBalance(profitSyncIndex, neutrinoAssetIdString) + convertBondToNeutrino(getSnapshotContractBalance(profitSyncIndex, bondAssetIdString))))
198+ let profit = (((sharePercent * getProfit(profitSyncIndex)) / 100) / PERCENTACCURACY)
199+ ScriptResult(WriteSet([DataEntry(getIsClaimedKey(account, profitSyncIndex), true)]), TransferSet([ScriptTransfer(addressFromStringValue(account), profit, neutrinoAssetId)]))
200+ }
201+ }
202+
203+

github/deemru/w8io/169f3d6 
19.41 ms