tx · 9enS44iWXtev6fzyfepTQ4mP4UVUgrerHxTxzzJBh5sy

3Mu7VYYXCdKzYgHbTRTiR2GcmRjdKwpcXtx:  -0.01400000 Waves

2019.11.14 19:56 [765007] smart account 3Mu7VYYXCdKzYgHbTRTiR2GcmRjdKwpcXtx > SELF 0.00000000 Waves

{ "type": 13, "id": "9enS44iWXtev6fzyfepTQ4mP4UVUgrerHxTxzzJBh5sy", "fee": 1400000, "feeAssetId": null, "timestamp": 1573750594720, "version": 1, "sender": "3Mu7VYYXCdKzYgHbTRTiR2GcmRjdKwpcXtx", "senderPublicKey": "7hst8L8bJqbcGbPC9DbHZ5E83dQ3LXayYttNsUbgZt7r", "proofs": [ "6566JrCY6GF8Za5LJPZn76dRqfaVZ9K2gLq4SZCza72uCnj7ZyLgCfNoWpG4Q4HKk1JiJd1EXFragnk7iJsCuTqq" ], "script": "base64:AAIDAAAAAAAAAA0IARIECgICARIDCgEIAAAANQAAAAAUYnV5T3V0Y29tZVRva2VuVHhGZWUAAAAAAAAHoSAAAAAABVdBVkVTAAAAAAAF9eEAAAAAAANVU0QAAAAAAAAAAGQAAAAAFHJvb3RBY2NvdW50UHVibGljS2V5AQAAACCFBjo3Cdwv2pE70CcrVKYnXjCpIp6Vq7pf5phxzMK1dQAAAAAObGlnYUNvbW1pc3Npb24AAAAAAAAAAAAAAAAAFXRvdGFsQXNzZXRzUGVyT3V0Y29tZQAAAAAAAAAnEAAAAAAacHJlc2FsZU1heEFzc2V0c1Blck91dGNvbWUAAAAAAAAAC7gAAAAAD2V2ZW50Q3VycmVuY3lJZAEAAAAAAAAAAAxwcmVzYWxlUHJpY2UAAAAAAAAAA+gAAAAACWxpdmVQcmljZQAAAAAAAAATiAAAAAANbGl2ZVByaWNlU3RlcAAAAAAAAAAB9AAAAAATbGl2ZVByaWNlU3RlcFBlcmlvZAAAAAAAAAAAZAAAAAAJc3RhdHVzS2V5AgAAAAZzdGF0dXMAAAAAC3BhdXNlU3RhdHVzAgAAAAVwYXVzZQAAAAANcHJlc2FsZVN0YXR1cwIAAAAHcHJlc2FsZQAAAAAKbGl2ZVN0YXR1cwIAAAAEbGl2ZQAAAAAOY29tcGxldGVTdGF0dXMCAAAACGNvbXBsZXRlAAAAAAxwYXlvdXRTdGF0dXMCAAAABnBheW91dAEAAAAldGhyb3dTYWxlc0lzTm90QXZhaWxhYmxlSW5TdGF0dXNFcnJvcgAAAAEAAAAGc3RhdHVzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACBzYWxlc0lzTm90QXZhaWxhYmxlSW5TdGF0dXNFcnJvcgIAAAABLAUAAAAGc3RhdHVzAQAAACF0aHJvd05vbmV4aXN0ZW50T3V0Y29tZUFzc2V0RXJyb3IAAAABAAAADm91dGNvbWVBc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAAdbm9uZXhpc3RlbnRPdXRjb21lQXNzZXRFcnJvciwJAAJYAAAAAQUAAAAOb3V0Y29tZUFzc2V0SWQBAAAALnRocm93Tm90RW5vdWdoT3V0Y29tZUFzc2V0c0luUHJlc2FsZVN0b2NrRXJyb3IAAAACAAAAC2Ftb3VudFRvQnV5AAAAB2JhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClub3RFbm91Z2hPdXRjb21lQXNzZXRzSW5QcmVzYWxlU3RvY2tFcnJvcgIAAAABLAkAAaQAAAABBQAAAAdiYWxhbmNlAgAAAAEsCQABpAAAAAEFAAAAC2Ftb3VudFRvQnV5AQAAACt0aHJvd05vdEVub3VnaE91dGNvbWVBc3NldHNJblNhbGVTdG9ja0Vycm9yAAAAAgAAAAthbW91bnRUb0J1eQAAAAdiYWxhbmNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAmbm90RW5vdWdoT3V0Y29tZUFzc2V0c0luU2FsZVN0b2NrRXJyb3ICAAAAASwJAAGkAAAAAQUAAAAHYmFsYW5jZQIAAAABLAkAAaQAAAABBQAAAAthbW91bnRUb0J1eQEAAAAmdGhyb3dVbnN1cHBvcnRlZEV2ZW50UGF5bWVudEFzc2V0RXJyb3IAAAABAAAAD3BheW1lbnRDdXJyZW5jeQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIXVuc3VwcG9ydGVkRXZlbnRQYXltZW50QXNzZXRFcnJvcgIAAAABLAkAAlgAAAABBQAAAA9ldmVudEN1cnJlbmN5SWQCAAAAASwJAAJYAAAAAQUAAAAPcGF5bWVudEN1cnJlbmN5AQAAAB10aHJvd0luc3VmZmljaWVudFBheW1lbnRFcnJvcgAAAAIAAAAVcmVjZWl2ZWRQYXltZW50QW1vdW50AAAAFWV4cGVjdGVkUGF5bWVudEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGGluc3VmZmljaWVudFBheW1lbnRFcnJvcgIAAAABLAkAAaQAAAABBQAAABVleHBlY3RlZFBheW1lbnRBbW91bnQCAAAAASwJAAGkAAAAAQUAAAAVcmVjZWl2ZWRQYXltZW50QW1vdW50AQAAACB0aHJvd1Vuc3VwcG9ydGVkRXZlbnRTdGF0dXNFcnJvcgAAAAAJAAACAAAAAQIAAAAbdW5zdXBwb3J0ZWRFdmVudFN0YXR1c0Vy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ZAAAAAAAAAAAAgEAAAAfZ2V0UHJlc2FsZU91dGNvbWVBbW91bnRTYWxlc0tleQAAAAEAAAAOb3V0Y29tZUFzc2V0SWQJAAEsAAAAAgIAAAAacHJlc2FsZU91dGNvbWVBbW91bnRTYWxlc18JAAJYAAAAAQUAAAAOb3V0Y29tZUFzc2V0SWQBAAAAHGdldFByZXNhbGVPdXRjb21lQW1vdW50U2FsZXMAAAABAAAADm91dGNvbWVBc3NldElkBAAAABxwcmVzYWxlT3V0Y29tZUFtb3VudFNhbGVzS2V5CQEAAAAfZ2V0UHJlc2FsZU91dGNvbWVBbW91bnRTYWxlc0tleQAAAAEFAAAADm91dGNvbWVBc3NldElkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAEdGhpcwUAAAAccHJlc2FsZU91dGNvbWVBbW91bnRTYWxlc0tleQEAAAARZ2V0UmF0ZVdBVkVTSW5VU0QAAAAABAAAABVyYXRlV0FWRVNJblVTRERlZmF1bHQAAAAAAAAAADIFAAAAFXJhdGVXQVZFU0luVVNERGVmYXVsdAEAAAAfY2FsY3VsYXRlRmVlSW5FdmVudFBheW1lbnRBc3NldAAAAAAJAABpAAAAAgkAAGgAAAACBQAAABRidXlPdXRjb21lVG9rZW5UeEZlZQkBAAAAEWdldFJhdGVXQVZFU0luVVNEAAAAAAUAAAADVVNEAQAAAANzdW0AAAABAAAAAW4EAAAAAXgJAABpAAAAAgUAAAABbgUAAAATbGl2ZVByaWNlU3RlcFBlcmlvZAQAAAAHZnVsbFN1bQkBAAAAEGFyaXRobWV0aWNTZXJpZXMAAAADBQAAAAlsaXZlUHJpY2UFAAAADWxpdmVQcmljZVN0ZXAFAAAAAXgJAABkAAAAAgkAAGgAAAACBQAAAAdmdWxsU3VtBQAAABNsaXZlUHJpY2VTdGVwUGVyaW9kCQAAaAAAAAIJAABlAAAAAgkBAAAAEGFyaXRobWV0aWNTZXJpZXMAAAADBQAAAAlsaXZlUHJpY2UFAAAADWxpdmVQcmljZVN0ZXAJAABkAAAAAgUAAAABeAAAAAAAAAAAAQUAAAAHZnVsbFN1bQkAAGoAAAACBQAAAAFuBQAAABNsaXZlUHJpY2VTdGVwUGVyaW9kAQAAAAxpc1Jvb3RDYWxsZXIAAAABAAAAAWkEAAAAE2NhbGxlckFjY291bnRQdWJLZXkJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAABFyb290QWNjb3VudFB1YktleQkAAlgAAAABBQAAABRyb290QWNjb3VudFB1YmxpY0tleQMJAAAAAAAAAgUAAAATY2FsbGVyQWNjb3VudFB1YktleQUAAAARcm9vdEFjY291bnRQdWJLZXkGBwEAAAANaXNBZG1pbkNhbGxlcgAAAAEAAAABaQQAAAATY2FsbGVyQWNjb3VudFB1YktleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAEXJvb3RBY2NvdW50UHViS2V5CQACWAAAAAEFAAAAFHJvb3RBY2NvdW50UHVibGljS2V5AwkAAAAAAAACBQAAABNjYWxsZXJBY2NvdW50UHViS2V5BQAAABFyb290QWNjb3VudFB1YktleQYHAQAAAAthbW91bnRUb1BheQAAAAIAAAALYWxyZWFkeVNvbGQAAAALYW1vdW50VG9CdXkJAABlAAAAAgkBAAAAA3N1bQAAAAEJAABkAAAAAgUAAAALYWxyZWFkeVNvbGQFAAAAC2Ftb3VudFRvQnV5CQEAAAADc3VtAAAAAQUAAAALYWxyZWFkeVNvbGQBAAAAD3ByZXNhbGVTdHJhdGVneQAAAAYAAAAPY3VzdG9tZXJBZGRyZXNzAAAADm91dGNvbWVBc3NldElkAAAADXBheW1lbnRBbW91bnQAAAASb3V0Y29tZUFtb3VudFRvQnV5AAAAGW91dGNvbWVBbW91bnRFdmVudEJhbGFuY2UAAAADZmVlBAAAABhvdXRjb21lQW1vdW50QWxyZWFkeVNvbGQJAABlAAAAAgUAAAAVdG90YWxBc3NldHNQZXJPdXRjb21lBQAAABlvdXRjb21lQW1vdW50RXZlbnRCYWxhbmNlBAAAACVvdXRjb21lQW1vdW50QXZhaWxhYmxlSW5QcmVzYWxlUGVyaW9kCQAAZQAAAAIFAAAAGnByZXNhbGVNYXhBc3NldHNQZXJPdXRjb21lBQAAABhvdXRjb21lQW1vdW50QWxyZWFkeVNvbGQEAAAAHG91dGNvbWVSZXF1aXJlZFBheW1lbnRBbW91bnQJAABkAAAAAgkAAGgAAAACBQAAAAxwcmVzYWxlUHJpY2UFAAAAEm91dGNvbWVBbW91bnRUb0J1eQUAAAADZmVlAwkAAGYAAAACBQAAABJvdXRjb21lQW1vdW50VG9CdXkFAAAAJW91dGNvbWVBbW91bnRBdmFpbGFibGVJblByZXNhbGVQZXJpb2QJAQAAAC50aHJvd05vdEVub3VnaE91dGNvbWVBc3NldHNJblByZXNhbGVTdG9ja0Vycm9yAAAAAgUAAAASb3V0Y29tZUFtb3VudFRvQnV5BQAAACVvdXRjb21lQW1vdW50QXZhaWxhYmxlSW5QcmVzYWxlUGVyaW9kAwkBAAAAAiE9AAAAAgUAAAANcGF5bWVudEFtb3VudAUAAAAcb3V0Y29tZVJlcXVpcmVkUGF5bWVudEFtb3VudAkBAAAAHXRocm93SW5zdWZmaWNpZW50UGF5bWVudEVycm9yAAAAAgUAAAANcGF5bWVudEFtb3VudAUAAAAcb3V0Y29tZVJlcXVpcmVkUGF5bWVudEFtb3VudAQAAAAccHJlc2FsZU91dGNvbWVBbW91bnRTYWxlc0tleQkBAAAAH2dldFByZXNhbGVPdXRjb21lQW1vdW50U2FsZXNLZXkAAAABBQAAAA5vdXRjb21lQXNzZXRJZAQAAAAgY3VycmVudFByZXNhbGVPdXRjb21lQW1vdW50U2FsZXMJAQAAABxnZXRQcmVzYWxlT3V0Y29tZUFtb3VudFNhbGVzAAAAAQUAAAAOb3V0Y29tZUFzc2V0SWQEAAAAHG5ld1ByZXNhbGVPdXRjb21lQW1vdW50U2FsZXMJAABkAAAAAgUAAAAgY3VycmVudFByZXNhbGVPdXRjb21lQW1vdW50U2FsZXMFAAAAEm91dGNvbWVBbW91bnRUb0J1eQQAAAAId3JpdGVTZXQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAHHByZXNhbGVPdXRjb21lQW1vdW50U2FsZXNLZXkFAAAAHG5ld1ByZXNhbGVPdXRjb21lQW1vdW50U2FsZXMFAAAAA25pbAQAAAALdHJhbnNmZXJTZXQJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPY3VzdG9tZXJBZGRyZXNzBQAAABRidXlPdXRjb21lVG9rZW5UeEZlZQUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA9jdXN0b21lckFkZHJlc3MFAAAAEm91dGNvbWVBbW91bnRUb0J1eQUAAAAOb3V0Y29tZUFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIFAAAACHdyaXRlU2V0BQAAAAt0cmFuc2ZlclNldAEAAAAMc2FsZVN0cmF0ZWd5AAAABgAAAA9jdXN0b21lckFkZHJlc3MAAAAOb3V0Y29tZUFzc2V0SWQAAAANcGF5bWVudEFtb3VudAAAABJvdXRjb21lQW1vdW50VG9CdXkAAAAZb3V0Y29tZUFtb3VudEV2ZW50QmFsYW5jZQAAAANmZWUEAAAAGXByZXNhbGVPdXRjb21lQW1vdW50U2FsZXMJAQAAABxnZXRQcmVzYWxlT3V0Y29tZUFtb3VudFNhbGVzAAAAAQUAAAAOb3V0Y29tZUFzc2V0SWQEAAAAGG91dGNvbWVBbW91bnRBbHJlYWR5U29sZAkAAGUAAAACCQAAZQAAAAIFAAAAFXRvdGFsQXNzZXRzUGVyT3V0Y29tZQUAAAAZcHJlc2FsZU91dGNvbWVBbW91bnRTYWxlcwUAAAAZb3V0Y29tZUFtb3VudEV2ZW50QmFsYW5jZQQAAAAcb3V0Y29tZVJlcXVpcmVkUGF5bWVudEFtb3VudAkAAGQAAAACCQEAAAALYW1vdW50VG9QYXkAAAACBQAAABhvdXRjb21lQW1vdW50QWxyZWFkeVNvbGQFAAAAEm91dGNvbWVBbW91bnRUb0J1eQUAAAADZmVlAwkAAGYAAAACBQAAABJvdXRjb21lQW1vdW50VG9CdXkFAAAAGW91dGNvbWVBbW91bnRFdmVudEJhbGFuY2UJAQAAACt0aHJvd05vdEVub3VnaE91dGNvbWVBc3NldHNJblNhbGVTdG9ja0Vycm9yAAAAAgUAAAASb3V0Y29tZUFtb3VudFRvQnV5BQAAABlvdXRjb21lQW1vdW50RXZlbnRCYWxhbmNlAwkBAAAAAiE9AAAAAgUAAAANcGF5bWVudEFtb3VudAUAAAAcb3V0Y29tZVJlcXVpcmVkUGF5bWVudEFtb3VudAkBAAAAHXRocm93SW5zdWZmaWNpZW50UGF5bWVudEVycm9yAAAAAgUAAAANcGF5bWVudEFtb3VudAUAAAAcb3V0Y29tZVJlcXVpcmVkUGF5bWVudEFtb3VudAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA9jdXN0b21lckFkZHJlc3MFAAAAFGJ1eU91dGNvbWVUb2tlblR4RmVlBQAAAAR1bml0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD2N1c3RvbWVyQWRkcmVzcwUAAAASb3V0Y29tZUFtb3VudFRvQnV5BQAAAA5vdXRjb21lQXNzZXRJZAUAAAADbmlsAAAAAgAAAAFpAQAAAA9idXlPdXRjb21lVG9rZW4AAAACAAAADm91dGNvbWVBc3NldElkAAAAEm91dGNvbWVBbW91bnRUb0J1eQQAAAADZmVlCQEAAAAfY2FsY3VsYXRlRmVlSW5FdmVudFBheW1lbnRBc3NldAAAAAAEAAAAD2N1c3RvbWVyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAABlvdXRjb21lQW1vdW50RXZlbnRCYWxhbmNlCQAD6wAAAAIFAAAABHRoaXMFAAAADm91dGNvbWVBc3NldElkBAAAAAZzdGF0dXMJAQAAAAlnZXRTdGF0dXMAAAAABAAAAAdwYXltZW50CQEAAAAKZ2V0UGF5bWVudAAAAAEFAAAAAWkEAAAADXBheW1lbnRBbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAOcGF5bWVudEFzc2V0SWQJAQAAABFnZXRQYXltZW50QXNzZXRJZAAAAAEFAAAAB3BheW1lbnQEAAAAGmlzTm90U3VwcG9ydGVkUGF5bWVudEFzc2V0CQEAAAACIT0AAAACBQAAAA5wYXltZW50QXNzZXRJZAUAAAAPZXZlbnRDdXJyZW5jeUlkBAAAAA9pc1ByZXNhbGVTdGF0dXMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAA1wcmVzYWxlU3RhdHVzBAAAAAxpc0xpdmVTdGF0dXMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAApsaXZlU3RhdHVzBAAAABBpc1NhbGVzQXZhaWxhYmxlAwUAAAAPaXNQcmVzYWxlU3RhdHVzBgUAAAAMaXNMaXZlU3RhdHVzAwkAAAAAAAACBQAAABlvdXRjb21lQW1vdW50RXZlbnRCYWxhbmNlAAAAAAAAAAAACQEAAAAhdGhyb3dOb25leGlzdGVudE91dGNvbWVBc3NldEVycm9yAAAAAQUAAAAOb3V0Y29tZUFzc2V0SWQDBQAAABppc05vdFN1cHBvcnRlZFBheW1lbnRBc3NldAkBAAAAJnRocm93VW5zdXBwb3J0ZWRFdmVudFBheW1lbnRBc3NldEVycm9yAAAAAQUAAAAOcGF5bWVudEFzc2V0SWQDCQEAAAABIQAAAAEFAAAAEGlzU2FsZXNBdmFpbGFibGUJAQAAACV0aHJvd1NhbGVzSXNOb3RBdmFpbGFibGVJblN0YXR1c0Vycm9yAAAAAQUAAAAGc3RhdHVzAwUAAAAPaXNQcmVzYWxlU3RhdHVzCQEAAAAPcHJlc2FsZVN0cmF0ZWd5AAAABgUAAAAPY3VzdG9tZXJBZGRyZXNzBQAAAA5vdXRjb21lQXNzZXRJZAUAAAANcGF5bWVudEFtb3VudAUAAAASb3V0Y29tZUFtb3VudFRvQnV5BQAAABlvdXRjb21lQW1vdW50RXZlbnRCYWxhbmNlBQAAAANmZWUDBQAAAAxpc0xpdmVTdGF0dXMJAQAAAAxzYWxlU3RyYXRlZ3kAAAAGBQAAAA9jdXN0b21lckFkZHJlc3MFAAAADm91dGNvbWVBc3NldElkBQAAAA1wYXltZW50QW1vdW50BQAAABJvdXRjb21lQW1vdW50VG9CdXkFAAAAGW91dGNvbWVBbW91bnRFdmVudEJhbGFuY2UFAAAAA2ZlZQkBAAAAE3Rocm93VW5kZWZpbmVkRXJyb3IAAAAAAAAAAWkBAAAADGNoYW5nZVN0YXR1cwAAAAEAAAAJbmV3U3RhdHVzAwkBAAAAASEAAAABCQEAAAARaXNTdXBwb3J0ZWRTdGF0dXMAAAABBQAAAAluZXdTdGF0dXMJAQAAACB0aHJvd1Vuc3VwcG9ydGVkRXZlbnRTdGF0dXNFcnJvcgAAAAADCQEAAAABIQAAAAEJAQAAAAxpc1Jvb3RDYWxsZXIAAAABBQAAAAFpCQEAAAAZdGhyb3dJc05vdFJvb3RDYWxsZXJFcnJvcgAAAAAJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACXNldFN0YXR1cwAAAAEFAAAACW5ld1N0YXR1cwUAAAADbmlsAAAAAPHO1zY=", "chainId": 84, "height": 765007, "spentComplexity": 0 } View: original | compacted Prev: Hzsd1tXJyPBs8dXgaNtReBinGMQ7Gn9s4XhwXszUutCb Next: 2RZqycgFwpiMsQxrUt6SyWTboi6g8eZB5od6VxD8FLcu Diff:
OldNewDifferences
77
88 let USD = 100
99
10-let rootAccountPublicKey = base58''
10+let rootAccountPublicKey = base58'9xGjRFrZQ7GSPzYd69mDiZQQuy97kVW6Qux5Zrkqbx2G'
1111
1212 let ligaCommission = 0
1313
14-let totalAssetsPerOutcome = 0
14+let totalAssetsPerOutcome = 10000
1515
16-let presaleMaxAssetsPerOutcome = 0
16+let presaleMaxAssetsPerOutcome = 3000
1717
1818 let eventCurrencyId = base58''
1919
20-let presalePrice = 0
20+let presalePrice = 1000
2121
22-let livePrice = 0
22+let livePrice = 5000
2323
24-let livePriceStep = 0
24+let livePriceStep = 500
2525
26-let livePriceStepPeriod = 0
26+let livePriceStepPeriod = 100
2727
2828 let statusKey = "status"
2929
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let buyOutcomeTokenTxFee = 500000
55
66 let WAVES = 100000000
77
88 let USD = 100
99
10-let rootAccountPublicKey = base58''
10+let rootAccountPublicKey = base58'9xGjRFrZQ7GSPzYd69mDiZQQuy97kVW6Qux5Zrkqbx2G'
1111
1212 let ligaCommission = 0
1313
14-let totalAssetsPerOutcome = 0
14+let totalAssetsPerOutcome = 10000
1515
16-let presaleMaxAssetsPerOutcome = 0
16+let presaleMaxAssetsPerOutcome = 3000
1717
1818 let eventCurrencyId = base58''
1919
20-let presalePrice = 0
20+let presalePrice = 1000
2121
22-let livePrice = 0
22+let livePrice = 5000
2323
24-let livePriceStep = 0
24+let livePriceStep = 500
2525
26-let livePriceStepPeriod = 0
26+let livePriceStepPeriod = 100
2727
2828 let statusKey = "status"
2929
3030 let pauseStatus = "pause"
3131
3232 let presaleStatus = "presale"
3333
3434 let liveStatus = "live"
3535
3636 let completeStatus = "complete"
3737
3838 let payoutStatus = "payout"
3939
4040 func throwSalesIsNotAvailableInStatusError (status) = throw((("salesIsNotAvailableInStatusError" + ",") + status))
4141
4242
4343 func throwNonexistentOutcomeAssetError (outcomeAssetId) = throw(("nonexistentOutcomeAssetError," + toBase58String(outcomeAssetId)))
4444
4545
4646 func throwNotEnoughOutcomeAssetsInPresaleStockError (amountToBuy,balance) = throw((((("notEnoughOutcomeAssetsInPresaleStockError" + ",") + toString(balance)) + ",") + toString(amountToBuy)))
4747
4848
4949 func throwNotEnoughOutcomeAssetsInSaleStockError (amountToBuy,balance) = throw((((("notEnoughOutcomeAssetsInSaleStockError" + ",") + toString(balance)) + ",") + toString(amountToBuy)))
5050
5151
5252 func throwUnsupportedEventPaymentAssetError (paymentCurrency) = throw((((("unsupportedEventPaymentAssetError" + ",") + toBase58String(eventCurrencyId)) + ",") + toBase58String(paymentCurrency)))
5353
5454
5555 func throwInsufficientPaymentError (receivedPaymentAmount,expectedPaymentAmount) = throw((((("insufficientPaymentError" + ",") + toString(expectedPaymentAmount)) + ",") + toString(receivedPaymentAmount)))
5656
5757
5858 func throwUnsupportedEventStatusError () = throw("unsupportedEventStatusError")
5959
6060
6161 func throwIsNotRootCallerError () = throw("isNotRootCallerError")
6262
6363
6464 let noPaymentError = "noPaymentError"
6565
6666 func throwUndefinedError () = throw("undefinedError")
6767
6868
6969 func getIntOr (key,default) = if (isDefined(getInteger(this, key)))
7070 then getIntegerValue(this, key)
7171 else default
7272
7373
7474 func getStringOr (key,default) = if (isDefined(getInteger(this, key)))
7575 then getStringValue(this, key)
7676 else default
7777
7878
7979 func getInt (key) = getIntegerValue(this, key)
8080
8181
8282 func setInt (key,value) = DataEntry(key, value)
8383
8484
8585 func getStr (key) = getStringValue(this, key)
8686
8787
8888 func setStr (key,value) = DataEntry(key, value)
8989
9090
9191 func setBytes (key,value) = DataEntry(key, value)
9292
9393
9494 func getBytes (key) = getBinaryValue(this, key)
9595
9696
9797 func isSupportedStatus (status) = if (if (if (if ((status == pauseStatus))
9898 then true
9999 else (status == presaleStatus))
100100 then true
101101 else (status == liveStatus))
102102 then true
103103 else (status == completeStatus))
104104 then true
105105 else (status == payoutStatus)
106106
107107
108108 func getStatus () = getStr(statusKey)
109109
110110
111111 func setStatus (status) = setStr(statusKey, status)
112112
113113
114114 func getPayment (i) = valueOrErrorMessage(i.payment, noPaymentError)
115115
116116
117117 func getPaymentAssetId (payment) = match payment.assetId {
118118 case assetId: ByteVector =>
119119 assetId
120120 case assetId: Unit =>
121121 fromBase58String("WAVES")
122122 case _ =>
123123 throw()
124124 }
125125
126126
127127 func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
128128 case i: Int =>
129129 i
130130 case _ =>
131131 0
132132 }
133133
134134
135135 func arithmeticSeries (a,d,n) = ((n * ((2 * a) + ((n - 1) * d))) / 2)
136136
137137
138138 func getPresaleOutcomeAmountSalesKey (outcomeAssetId) = ("presaleOutcomeAmountSales_" + toBase58String(outcomeAssetId))
139139
140140
141141 func getPresaleOutcomeAmountSales (outcomeAssetId) = {
142142 let presaleOutcomeAmountSalesKey = getPresaleOutcomeAmountSalesKey(outcomeAssetId)
143143 getIntegerFromAccount(this, presaleOutcomeAmountSalesKey)
144144 }
145145
146146
147147 func getRateWAVESInUSD () = {
148148 let rateWAVESInUSDDefault = 50
149149 rateWAVESInUSDDefault
150150 }
151151
152152
153153 func calculateFeeInEventPaymentAsset () = ((buyOutcomeTokenTxFee * getRateWAVESInUSD()) / USD)
154154
155155
156156 func sum (n) = {
157157 let x = (n / livePriceStepPeriod)
158158 let fullSum = arithmeticSeries(livePrice, livePriceStep, x)
159159 ((fullSum * livePriceStepPeriod) + ((arithmeticSeries(livePrice, livePriceStep, (x + 1)) - fullSum) * (n % livePriceStepPeriod)))
160160 }
161161
162162
163163 func isRootCaller (i) = {
164164 let callerAccountPubKey = toBase58String(i.callerPublicKey)
165165 let rootAccountPubKey = toBase58String(rootAccountPublicKey)
166166 if ((callerAccountPubKey == rootAccountPubKey))
167167 then true
168168 else false
169169 }
170170
171171
172172 func isAdminCaller (i) = {
173173 let callerAccountPubKey = toBase58String(i.callerPublicKey)
174174 let rootAccountPubKey = toBase58String(rootAccountPublicKey)
175175 if ((callerAccountPubKey == rootAccountPubKey))
176176 then true
177177 else false
178178 }
179179
180180
181181 func amountToPay (alreadySold,amountToBuy) = (sum((alreadySold + amountToBuy)) - sum(alreadySold))
182182
183183
184184 func presaleStrategy (customerAddress,outcomeAssetId,paymentAmount,outcomeAmountToBuy,outcomeAmountEventBalance,fee) = {
185185 let outcomeAmountAlreadySold = (totalAssetsPerOutcome - outcomeAmountEventBalance)
186186 let outcomeAmountAvailableInPresalePeriod = (presaleMaxAssetsPerOutcome - outcomeAmountAlreadySold)
187187 let outcomeRequiredPaymentAmount = ((presalePrice * outcomeAmountToBuy) + fee)
188188 if ((outcomeAmountToBuy > outcomeAmountAvailableInPresalePeriod))
189189 then throwNotEnoughOutcomeAssetsInPresaleStockError(outcomeAmountToBuy, outcomeAmountAvailableInPresalePeriod)
190190 else if ((paymentAmount != outcomeRequiredPaymentAmount))
191191 then throwInsufficientPaymentError(paymentAmount, outcomeRequiredPaymentAmount)
192192 else {
193193 let presaleOutcomeAmountSalesKey = getPresaleOutcomeAmountSalesKey(outcomeAssetId)
194194 let currentPresaleOutcomeAmountSales = getPresaleOutcomeAmountSales(outcomeAssetId)
195195 let newPresaleOutcomeAmountSales = (currentPresaleOutcomeAmountSales + outcomeAmountToBuy)
196196 let writeSet = WriteSet([DataEntry(presaleOutcomeAmountSalesKey, newPresaleOutcomeAmountSales)])
197197 let transferSet = TransferSet([ScriptTransfer(customerAddress, buyOutcomeTokenTxFee, unit), ScriptTransfer(customerAddress, outcomeAmountToBuy, outcomeAssetId)])
198198 ScriptResult(writeSet, transferSet)
199199 }
200200 }
201201
202202
203203 func saleStrategy (customerAddress,outcomeAssetId,paymentAmount,outcomeAmountToBuy,outcomeAmountEventBalance,fee) = {
204204 let presaleOutcomeAmountSales = getPresaleOutcomeAmountSales(outcomeAssetId)
205205 let outcomeAmountAlreadySold = ((totalAssetsPerOutcome - presaleOutcomeAmountSales) - outcomeAmountEventBalance)
206206 let outcomeRequiredPaymentAmount = (amountToPay(outcomeAmountAlreadySold, outcomeAmountToBuy) + fee)
207207 if ((outcomeAmountToBuy > outcomeAmountEventBalance))
208208 then throwNotEnoughOutcomeAssetsInSaleStockError(outcomeAmountToBuy, outcomeAmountEventBalance)
209209 else if ((paymentAmount != outcomeRequiredPaymentAmount))
210210 then throwInsufficientPaymentError(paymentAmount, outcomeRequiredPaymentAmount)
211211 else TransferSet([ScriptTransfer(customerAddress, buyOutcomeTokenTxFee, unit), ScriptTransfer(customerAddress, outcomeAmountToBuy, outcomeAssetId)])
212212 }
213213
214214
215215 @Callable(i)
216216 func buyOutcomeToken (outcomeAssetId,outcomeAmountToBuy) = {
217217 let fee = calculateFeeInEventPaymentAsset()
218218 let customerAddress = i.caller
219219 let outcomeAmountEventBalance = assetBalance(this, outcomeAssetId)
220220 let status = getStatus()
221221 let payment = getPayment(i)
222222 let paymentAmount = payment.amount
223223 let paymentAssetId = getPaymentAssetId(payment)
224224 let isNotSupportedPaymentAsset = (paymentAssetId != eventCurrencyId)
225225 let isPresaleStatus = (status == presaleStatus)
226226 let isLiveStatus = (status == liveStatus)
227227 let isSalesAvailable = if (isPresaleStatus)
228228 then true
229229 else isLiveStatus
230230 if ((outcomeAmountEventBalance == 0))
231231 then throwNonexistentOutcomeAssetError(outcomeAssetId)
232232 else if (isNotSupportedPaymentAsset)
233233 then throwUnsupportedEventPaymentAssetError(paymentAssetId)
234234 else if (!(isSalesAvailable))
235235 then throwSalesIsNotAvailableInStatusError(status)
236236 else if (isPresaleStatus)
237237 then presaleStrategy(customerAddress, outcomeAssetId, paymentAmount, outcomeAmountToBuy, outcomeAmountEventBalance, fee)
238238 else if (isLiveStatus)
239239 then saleStrategy(customerAddress, outcomeAssetId, paymentAmount, outcomeAmountToBuy, outcomeAmountEventBalance, fee)
240240 else throwUndefinedError()
241241 }
242242
243243
244244
245245 @Callable(i)
246246 func changeStatus (newStatus) = if (!(isSupportedStatus(newStatus)))
247247 then throwUnsupportedEventStatusError()
248248 else if (!(isRootCaller(i)))
249249 then throwIsNotRootCallerError()
250250 else WriteSet([setStatus(newStatus)])
251251
252252

github/deemru/w8io/026f985 
41.08 ms