tx · 6FCyipF43Q6NCdDLAwLW9ctw6F6mxEZc24AjgSoczFw5 3N5mwuqT6dXpbqwT5VKDXzGJJ6c14rKqxS7: -0.01400000 Waves 2019.11.12 10:03 [761490] smart account 3N5mwuqT6dXpbqwT5VKDXzGJJ6c14rKqxS7 > SELF 0.00000000 Waves
{ "type": 13, "id": "6FCyipF43Q6NCdDLAwLW9ctw6F6mxEZc24AjgSoczFw5", "fee": 1400000, "feeAssetId": null, "timestamp": 1573542092419, "version": 1, "sender": "3N5mwuqT6dXpbqwT5VKDXzGJJ6c14rKqxS7", "senderPublicKey": "Gxi9GKByT2CYHqPr6ZTohMDmHRGAgE8uBM6R4QXfvtxK", "proofs": [ "4EVecvkruDwKRQbZ5RMcA3ziX6QGPiKhuN6SjBeoNeaLXpq16AmQkKxEtx8vXgmq26P49tdJW2UF2yP4hRXf1W2K" ], "script": "base64:AAIDAAAAAAAAABMIARIDCgEIEgMKAQESAwoBARIAAAAADgAAAAAHUlVOTklORwIAAAAHUlVOTklORwAAAAAGQ0xPU0VEAgAAAAZDTE9TRUQAAAAACENBTkNFTEVEAgAAAAhDQU5DRUxFRAAAAAAJREFQUE9XTkVSAgAAACMzTjVtd3VxVDZkWHBicXdUNVZLRFh6R0pKNmMxNHJLcXhTNwAAAAAMT1JBQ0xFV0FMTEVUAgAAACMzTkI0WTM5TFBYWFdWVjJ0TVAxZm45b3ZqeTZRS0cxclVqVgAAAAAOV0FWRVNLSVRXQUxMRVQCAAAAIzNNcVBwYldQUnNaRm9UOVg3NHFXb2NVNEJweXBHRVBoaUNuAAAAAApCVVJOV0FMTEVUAgAAACMzTXBDYkREamtTcmZTMVhrUHBtNzFpWmo1RFExUnBCUlJodAAAAAAFV0FWRVMCAAAABVdBVkVTAAAAAAROT05FAgAAAAROT05FAAAAAANGRUUAAAAAAAANu6AAAAAAA1dMVAEAAAAgXc1YMiAxtU0669iAvoWYChIkz8rePUfYvMDdGTUOq6oBAAAAC2dldE51bUJ5S2V5AAAAAQAAAANrZXkEAAAAA251bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAADbnVtAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAANzdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAABE5PTkUFAAAAA3N0cgEAAAAaZ2V0RXh0V0FWRVNVU0RDdXJyZW5jeVJhdGUAAAAABAAAAA1vcmFjbGVBZGRyZXNzCQEAAAAHZXh0cmFjdAAAAAEJAQAAABFhZGRyZXNzRnJvbVN0cmluZwAAAAEFAAAADE9SQUNMRVdBTExFVAQAAAAUV0FWRVNVU0RDdXJyZW5jeVJhdGUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAANb3JhY2xlQWRkcmVzcwIAAAALd2F2ZXNfdXNkXzMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAAUV0FWRVNVU0RDdXJyZW5jeVJhdGUAAAAEAAAAAWkBAAAAEHNldENvbnRlc3RTdGF0dXMAAAABAAAADWNvbnRlc3RTdGF0dXMEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAARY29udGVzdEN1cnJOdW1iZXIJAQAAAAtnZXROdW1CeUtleQAAAAECAAAAFWNvbnRlc3RfY3VycmVudG51bWJlcgMJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAACURBUFBPV05FUgkAAAIAAAABAgAAACdPbmx5IGRBUFAgT3duZXIgY2FuIHNldCBDb250ZXN0IFN0YXR1cy4DAwkBAAAAAiE9AAAAAgUAAAANY29udGVzdFN0YXR1cwUAAAAIQ0FOQ0VMRUQJAQAAAAIhPQAAAAIFAAAADWNvbnRlc3RTdGF0dXMFAAAABkNMT1NFRAcJAAACAAAAAQkAASwAAAACAgAAABBJbnZhbGlkIHN0YXR1czogBQAAAA1jb250ZXN0U3RhdHVzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAAB19zdGF0dXMFAAAADWNvbnRlc3RTdGF0dXMFAAAAA25pbAAAAAFpAQAAABdzZXRDb250ZXN0Q29uZmlndXJhdGlvbgAAAAEAAAAOY29udGVzdEJldENvc3QEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAARY29udGVzdEN1cnJOdW1iZXIJAQAAAAtnZXROdW1CeUtleQAAAAECAAAAFWNvbnRlc3RfY3VycmVudG51bWJlcgQAAAARY29udGVzdEN1cnJTdGF0dXMJAQAAAAtnZXRTdHJCeUtleQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAAHX3N0YXR1cwQAAAAQY29udGVzdE5ld051bWJlcgkAAGQAAAACBQAAABFjb250ZXN0Q3Vyck51bWJlcgAAAAAAAAAAAQQAAAAHYmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAAlEQVBQT1dORVIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA3T25seSBkQVBQIE93bmVyIGNhbiBDb25maWd1cmUgQ29udGVzdC4gQ2FsbGVyIGFjY291bnQ6IAUAAAAHYWNjb3VudAIAAAANIGRhcHAgb3duZXI6IAUAAAAJREFQUE9XTkVSAwkAAAAAAAACBQAAABFjb250ZXN0Q3VyclN0YXR1cwUAAAAHUlVOTklORwkAAAIAAAABCQABLAAAAAICAAAAQFlvdSBjYW5ub3QgY29uZmlndXJlIGEgbmV3IENvbnRlc3Qgd2hpbGUgb2xkIENvbnRlc3Qgc3RhdHVzIGlzOiAFAAAAEWNvbnRlc3RDdXJyU3RhdHVzBAAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAkAAGgAAAACAAAAAAAAAAAGAAAAAAAAAAWgCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAABVjb250ZXN0X2N1cnJlbnRudW1iZXIFAAAAEGNvbnRlc3ROZXdOdW1iZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABBjb250ZXN0TmV3TnVtYmVyAgAAAA1fZmluaXNoaGVpZ2h0BQAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAAQY29udGVzdE5ld051bWJlcgIAAAAHX3N0YXR1cwUAAAAHUlVOTklORwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEGNvbnRlc3ROZXdOdW1iZXICAAAAC19iZXRjb3VudGVyAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAAQY29udGVzdE5ld051bWJlcgIAAAAIX2JldGNvc3QFAAAADmNvbnRlc3RCZXRDb3N0BQAAAANuaWwAAAABaQEAAAADYmV0AAAAAQAAAA1jdXJyZW5jeVZhbHVlBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAABFjb250ZXN0Q3Vyck51bWJlcgkBAAAAC2dldE51bUJ5S2V5AAAAAQIAAAAVY29udGVzdF9jdXJyZW50bnVtYmVyBAAAABJjb250ZXN0U3RhcnRIZWlnaHQJAQAAAAtnZXROdW1CeUtleQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAAMX3N0YXJ0aGVpZ2h0BAAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQEAAAALZ2V0TnVtQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAADV9maW5pc2hoZWlnaHQEAAAAEWNvbnRlc3RDdXJyU3RhdHVzCQEAAAALZ2V0U3RyQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAAB19zdGF0dXMEAAAAEmNvbnRlc3RDdXJyQmV0Q29zdAkBAAAAC2dldE51bUJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAAhfYmV0Y29zdAQAAAANY29udGVzdFN0YXR1cwkBAAAAC2dldFN0ckJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAAdfc3RhdHVzBAAAABFhY2NvdW50QmV0c051bWJlcgkBAAAAC2dldE51bUJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAABXwUAAAAHYWNjb3VudAIAAAAFX2JldHMEAAAAEmV4aXN0aW5nQmV0QWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEYmV0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAABXwkAAaQAAAABBQAAAA1jdXJyZW5jeVZhbHVlBAAAABRjb250ZXN0Q3VyckJldHNUb3RhbAkBAAAAC2dldE51bUJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAApfYmV0c3RvdGFsAwkAAGYAAAACBQAAAAZoZWlnaHQJAABlAAAAAgUAAAATY29udGVzdEZpbmlzaEhlaWdodAkAAGgAAAACAAAAAAAAAAACAAAAAAAAAAWgCQAAAgAAAAECAAAAJllvdSBjYW5ub3QgYmV0IGFueW1vcmUgYXQgdGhpcyBoZWlnaHQuAwkBAAAAAiE9AAAAAgUAAAARY29udGVzdEN1cnJTdGF0dXMFAAAAB1JVTk5JTkcJAAACAAAAAQkAASwAAAACAgAAADdJbnZhbGlkIHN0YXR1czogeW91IGNhbm5vdCBiZXQgbm93LCBjb250ZXN0IHN0YXR1cyBpczogBQAAABFjb250ZXN0Q3VyclN0YXR1cwMDCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAA1dMVAYJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAABJjb250ZXN0Q3VyckJldENvc3QJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAOWW91IG11c3QgcGF5OiAJAAGkAAAAAQUAAAASY29udGVzdEN1cnJCZXRDb3N0AgAAABcgV0xUIHRvIGJldC4gWW91IHBhaWQ6IAkAAaQAAAABCAUAAAADcG10AAAABmFtb3VudAMDCQEAAAACIT0AAAACBQAAABJleGlzdGluZ0JldEFjY291bnQFAAAABE5PTkUJAQAAAAIhPQAAAAIFAAAAEmV4aXN0aW5nQmV0QWNjb3VudAUAAAAHYWNjb3VudAcJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADkFub3RoZXIgdXNlcjogBQAAABJleGlzdGluZ0JldEFjY291bnQCAAAAHiBkaWQgYmV0IGFscmVhZHkgb24gdGhpcyByYXRlLgMJAABnAAAAAgUAAAARYWNjb3VudEJldHNOdW1iZXIAAAAAAAAAAAEJAAACAAAAAQIAAAAZWW91IGNhbiBkbyBhdCBtb3N0IDEgYmV0LgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEYmV0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAABXwkAAaQAAAABBQAAAA1jdXJyZW5jeVZhbHVlBQAAAAdhY2NvdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAAFfBQAAAAdhY2NvdW50AgAAAAVfYmV0cwkAAGQAAAACBQAAABFhY2NvdW50QmV0c051bWJlcgAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAApfYmV0c3RvdGFsCQAAZAAAAAIFAAAAFGNvbnRlc3RDdXJyQmV0c1RvdGFsCAUAAAADcG10AAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAADGNsb3NlY29udGVzdAAAAAAEAAAADGN1cnJlbmN5UmF0ZQkBAAAAGmdldEV4dFdBVkVTVVNEQ3VycmVuY3lSYXRlAAAAAAQAAAARY29udGVzdEN1cnJOdW1iZXIJAQAAAAtnZXROdW1CeUtleQAAAAECAAAAFWNvbnRlc3RfY3VycmVudG51bWJlcgQAAAARd2lubmluZ0JldEFjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGJldF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAAAV8JAAGkAAAAAQUAAAAMY3VycmVuY3lSYXRlBAAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQEAAAALZ2V0TnVtQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAADV9maW5pc2hoZWlnaHQEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAHYmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMEAAAAEWNvbnRlc3RDdXJyU3RhdHVzCQEAAAALZ2V0U3RyQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAAB19zdGF0dXMEAAAAFGNvbnRlc3RDdXJyQmV0c1RvdGFsCQEAAAALZ2V0TnVtQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAACl9iZXRzdG90YWwDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAAlEQVBQT1dORVIJAAACAAAAAQIAAAAiT25seSBkQVBQIE93bmVyIGNhbiBDbG9zZSBDb250ZXN0LgMDBwkAAGYAAAACBQAAABNjb250ZXN0RmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQHCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFjY291bnQ6IAUAAAAHYWNjb3VudAIAAAApOiBDYW5ub3QgY2xvc2UgdGhlIGNvbnRlc3QgYmVmb3JlIGhlaWdodDoJAAGkAAAAAQUAAAATY29udGVzdEZpbmlzaEhlaWdodAMJAQAAAAIhPQAAAAIFAAAAEWNvbnRlc3RDdXJyU3RhdHVzBQAAAAdSVU5OSU5HCQAAAgAAAAEJAAEsAAAAAgIAAAAiQ2Fubm90IGNsb3NlIGEgY29udGVzdCBpbiBzdGF0dXM6IAUAAAARY29udGVzdEN1cnJTdGF0dXMDCQEAAAACIT0AAAACBQAAABF3aW5uaW5nQmV0QWNjb3VudAUAAAAETk9ORQQAAAAKV0xUYmFsYW5jZQkAA+sAAAACBQAAAAR0aGlzBQAAAANXTFQEAAAACFdMVFByaXplCQAAZQAAAAIFAAAACldMVGJhbGFuY2UFAAAAFGNvbnRlc3RDdXJyQmV0c1RvdGFsBAAAABVXTFRPcmFjbGVTaGFyZVJldmVudWUJAABpAAAAAgkAAGgAAAACBQAAAAhXTFRQcml6ZQAAAAAAAAAAAgAAAAAAAAAAZAQAAAAXV0xUV2F2ZXNLaXRTaGFyZVJldmVudWUJAABpAAAAAgkAAGgAAAACBQAAAAhXTFRQcml6ZQAAAAAAAAAAAwAAAAAAAAAAZAQAAAAJV0xUV2lubmVyCQAAaQAAAAIJAABoAAAAAgUAAAAIV0xUUHJpemUAAAAAAAAAAF8AAAAAAAAAAGQEAAAAC3dpblRyYW5zZmVyCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdleHRyYWN0AAAAAQkBAAAAEWFkZHJlc3NGcm9tU3RyaW5nAAAAAQUAAAARd2lubmluZ0JldEFjY291bnQFAAAACVdMVFdpbm5lcgUAAAADV0xUCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdleHRyYWN0AAAAAQkBAAAAEWFkZHJlc3NGcm9tU3RyaW5nAAAAAQUAAAAOV0FWRVNLSVRXQUxMRVQFAAAAF1dMVFdhdmVzS2l0U2hhcmVSZXZlbnVlBQAAAANXTFQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB2V4dHJhY3QAAAABCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABBQAAAAxPUkFDTEVXQUxMRVQFAAAAFVdMVE9yYWNs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", "chainId": 84, "height": 761490, "spentComplexity": 0 } View: original | compacted Prev: 723W3wzTs4NvpZaZ9tSQQC6fivsdKgZDrch7RrpqhTnK Next: 2DT5oomd18Kj71mtCtcSWNf5PpDPWV9LjHtdbdLuc8Q3 Diff:
Old | New | Differences | |
---|---|---|---|
9 | 9 | ||
10 | 10 | let DAPPOWNER = "3N5mwuqT6dXpbqwT5VKDXzGJJ6c14rKqxS7" | |
11 | 11 | ||
12 | - | let ORACLEWALLET = " | |
12 | + | let ORACLEWALLET = "3NB4Y39LPXXWVV2tMP1fn9ovjy6QKG1rUjV" | |
13 | 13 | ||
14 | 14 | let WAVESKITWALLET = "3MqPpbWPRsZFoT9X74qWocU4BpypGEPhiCn" | |
15 | 15 | ||
47 | 47 | ||
48 | 48 | func getExtWAVESUSDCurrencyRate () = { | |
49 | 49 | let oracleAddress = extract(addressFromString(ORACLEWALLET)) | |
50 | - | let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_ | |
50 | + | let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_3") { | |
51 | 51 | case a: Int => | |
52 | 52 | a | |
53 | 53 | case _ => | |
143 | 143 | then throw(("Cannot close a contest in status: " + contestCurrStatus)) | |
144 | 144 | else if ((winningBetAccount != NONE)) | |
145 | 145 | then { | |
146 | - | let WLTOracleShareRevenue = ((assetBalance(this, WLT) * 1) / 100) | |
147 | - | let WLTWavesKitShareRevenue = ((assetBalance(this, WLT) * 4) / 100) | |
148 | - | let WLTPrize = ((assetBalance(this, WLT) * 95) / 100) | |
149 | - | let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTPrize, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT), ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)]) | |
146 | + | let WLTbalance = assetBalance(this, WLT) | |
147 | + | let WLTPrize = (WLTbalance - contestCurrBetsTotal) | |
148 | + | let WLTOracleShareRevenue = ((WLTPrize * 2) / 100) | |
149 | + | let WLTWavesKitShareRevenue = ((WLTPrize * 3) / 100) | |
150 | + | let WLTWinner = ((WLTPrize * 95) / 100) | |
151 | + | let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTWinner, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)]) | |
150 | 152 | ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_rateheight"), height), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), WLTPrize)]), winTransfer) | |
151 | 153 | } | |
152 | 154 | else ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), 0)]), TransferSet([ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)])) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let RUNNING = "RUNNING" | |
5 | 5 | ||
6 | 6 | let CLOSED = "CLOSED" | |
7 | 7 | ||
8 | 8 | let CANCELED = "CANCELED" | |
9 | 9 | ||
10 | 10 | let DAPPOWNER = "3N5mwuqT6dXpbqwT5VKDXzGJJ6c14rKqxS7" | |
11 | 11 | ||
12 | - | let ORACLEWALLET = " | |
12 | + | let ORACLEWALLET = "3NB4Y39LPXXWVV2tMP1fn9ovjy6QKG1rUjV" | |
13 | 13 | ||
14 | 14 | let WAVESKITWALLET = "3MqPpbWPRsZFoT9X74qWocU4BpypGEPhiCn" | |
15 | 15 | ||
16 | 16 | let BURNWALLET = "3MpCbDDjkSrfS1XkPpm71iZj5DQ1RpBRRht" | |
17 | 17 | ||
18 | 18 | let WAVES = "WAVES" | |
19 | 19 | ||
20 | 20 | let NONE = "NONE" | |
21 | 21 | ||
22 | 22 | let FEE = 900000 | |
23 | 23 | ||
24 | 24 | let WLT = base58'7KAXNTswj6947a6cVpGhVrh1utWpLcjwf8AFpWCtuMT7' | |
25 | 25 | ||
26 | 26 | func getNumByKey (key) = { | |
27 | 27 | let num = match getInteger(this, key) { | |
28 | 28 | case a: Int => | |
29 | 29 | a | |
30 | 30 | case _ => | |
31 | 31 | 0 | |
32 | 32 | } | |
33 | 33 | num | |
34 | 34 | } | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func getStrByKey (key) = { | |
38 | 38 | let str = match getString(this, key) { | |
39 | 39 | case a: String => | |
40 | 40 | a | |
41 | 41 | case _ => | |
42 | 42 | NONE | |
43 | 43 | } | |
44 | 44 | str | |
45 | 45 | } | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func getExtWAVESUSDCurrencyRate () = { | |
49 | 49 | let oracleAddress = extract(addressFromString(ORACLEWALLET)) | |
50 | - | let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_ | |
50 | + | let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_3") { | |
51 | 51 | case a: Int => | |
52 | 52 | a | |
53 | 53 | case _ => | |
54 | 54 | 0 | |
55 | 55 | } | |
56 | 56 | WAVESUSDCurrencyRate | |
57 | 57 | } | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | @Callable(i) | |
61 | 61 | func setContestStatus (contestStatus) = { | |
62 | 62 | let account = toBase58String(i.caller.bytes) | |
63 | 63 | let contestCurrNumber = getNumByKey("contest_currentnumber") | |
64 | 64 | if ((account != DAPPOWNER)) | |
65 | 65 | then throw("Only dAPP Owner can set Contest Status.") | |
66 | 66 | else if (if ((contestStatus != CANCELED)) | |
67 | 67 | then (contestStatus != CLOSED) | |
68 | 68 | else false) | |
69 | 69 | then throw(("Invalid status: " + contestStatus)) | |
70 | 70 | else WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), contestStatus)]) | |
71 | 71 | } | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | ||
75 | 75 | @Callable(i) | |
76 | 76 | func setContestConfiguration (contestBetCost) = { | |
77 | 77 | let account = toBase58String(i.caller.bytes) | |
78 | 78 | let contestCurrNumber = getNumByKey("contest_currentnumber") | |
79 | 79 | let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status")) | |
80 | 80 | let contestNewNumber = (contestCurrNumber + 1) | |
81 | 81 | let balance = wavesBalance(this) | |
82 | 82 | if ((account != DAPPOWNER)) | |
83 | 83 | then throw(((("Only dAPP Owner can Configure Contest. Caller account: " + account) + " dapp owner: ") + DAPPOWNER)) | |
84 | 84 | else if ((contestCurrStatus == RUNNING)) | |
85 | 85 | then throw(("You cannot configure a new Contest while old Contest status is: " + contestCurrStatus)) | |
86 | 86 | else { | |
87 | 87 | let contestFinishHeight = (height + (6 * 1440)) | |
88 | 88 | WriteSet([DataEntry("contest_currentnumber", contestNewNumber), DataEntry((("contest_" + toString(contestNewNumber)) + "_finishheight"), contestFinishHeight), DataEntry((("contest_" + toString(contestNewNumber)) + "_status"), RUNNING), DataEntry((("contest_" + toString(contestNewNumber)) + "_betcounter"), 0), DataEntry((("contest_" + toString(contestNewNumber)) + "_betcost"), contestBetCost)]) | |
89 | 89 | } | |
90 | 90 | } | |
91 | 91 | ||
92 | 92 | ||
93 | 93 | ||
94 | 94 | @Callable(i) | |
95 | 95 | func bet (currencyValue) = { | |
96 | 96 | let account = toBase58String(i.caller.bytes) | |
97 | 97 | let pmt = extract(i.payment) | |
98 | 98 | let contestCurrNumber = getNumByKey("contest_currentnumber") | |
99 | 99 | let contestStartHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_startheight")) | |
100 | 100 | let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight")) | |
101 | 101 | let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status")) | |
102 | 102 | let contestCurrBetCost = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betcost")) | |
103 | 103 | let contestStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status")) | |
104 | 104 | let accountBetsNumber = getNumByKey((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets")) | |
105 | 105 | let existingBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue))) | |
106 | 106 | let contestCurrBetsTotal = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betstotal")) | |
107 | 107 | if ((height > (contestFinishHeight - (2 * 1440)))) | |
108 | 108 | then throw("You cannot bet anymore at this height.") | |
109 | 109 | else if ((contestCurrStatus != RUNNING)) | |
110 | 110 | then throw(("Invalid status: you cannot bet now, contest status is: " + contestCurrStatus)) | |
111 | 111 | else if (if ((pmt.assetId != WLT)) | |
112 | 112 | then true | |
113 | 113 | else (pmt.amount != contestCurrBetCost)) | |
114 | 114 | then throw(((("You must pay: " + toString(contestCurrBetCost)) + " WLT to bet. You paid: ") + toString(pmt.amount))) | |
115 | 115 | else if (if ((existingBetAccount != NONE)) | |
116 | 116 | then (existingBetAccount != account) | |
117 | 117 | else false) | |
118 | 118 | then throw((("Another user: " + existingBetAccount) + " did bet already on this rate.")) | |
119 | 119 | else if ((accountBetsNumber >= 1)) | |
120 | 120 | then throw("You can do at most 1 bet.") | |
121 | 121 | else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account), DataEntry((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"), (accountBetsNumber + 1)), DataEntry((("contest_" + toString(contestCurrNumber)) + "_betstotal"), (contestCurrBetsTotal + pmt.amount))]) | |
122 | 122 | } | |
123 | 123 | ||
124 | 124 | ||
125 | 125 | ||
126 | 126 | @Callable(i) | |
127 | 127 | func closecontest () = { | |
128 | 128 | let currencyRate = getExtWAVESUSDCurrencyRate() | |
129 | 129 | let contestCurrNumber = getNumByKey("contest_currentnumber") | |
130 | 130 | let winningBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyRate))) | |
131 | 131 | let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight")) | |
132 | 132 | let account = toBase58String(i.caller.bytes) | |
133 | 133 | let balance = wavesBalance(this) | |
134 | 134 | let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status")) | |
135 | 135 | let contestCurrBetsTotal = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betstotal")) | |
136 | 136 | if ((account != DAPPOWNER)) | |
137 | 137 | then throw("Only dAPP Owner can Close Contest.") | |
138 | 138 | else if (if (false) | |
139 | 139 | then (contestFinishHeight > height) | |
140 | 140 | else false) | |
141 | 141 | then throw(((("account: " + account) + ": Cannot close the contest before height:") + toString(contestFinishHeight))) | |
142 | 142 | else if ((contestCurrStatus != RUNNING)) | |
143 | 143 | then throw(("Cannot close a contest in status: " + contestCurrStatus)) | |
144 | 144 | else if ((winningBetAccount != NONE)) | |
145 | 145 | then { | |
146 | - | let WLTOracleShareRevenue = ((assetBalance(this, WLT) * 1) / 100) | |
147 | - | let WLTWavesKitShareRevenue = ((assetBalance(this, WLT) * 4) / 100) | |
148 | - | let WLTPrize = ((assetBalance(this, WLT) * 95) / 100) | |
149 | - | let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTPrize, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT), ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)]) | |
146 | + | let WLTbalance = assetBalance(this, WLT) | |
147 | + | let WLTPrize = (WLTbalance - contestCurrBetsTotal) | |
148 | + | let WLTOracleShareRevenue = ((WLTPrize * 2) / 100) | |
149 | + | let WLTWavesKitShareRevenue = ((WLTPrize * 3) / 100) | |
150 | + | let WLTWinner = ((WLTPrize * 95) / 100) | |
151 | + | let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTWinner, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)]) | |
150 | 152 | ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_rateheight"), height), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), WLTPrize)]), winTransfer) | |
151 | 153 | } | |
152 | 154 | else ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), 0)]), TransferSet([ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)])) | |
153 | 155 | } | |
154 | 156 | ||
155 | 157 | ||
156 | 158 | @Verifier(tx) | |
157 | 159 | func verify () = match tx { | |
158 | 160 | case _: SetScriptTransaction|DataTransaction => | |
159 | 161 | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
160 | 162 | case _: InvokeScriptTransaction => | |
161 | 163 | true | |
162 | 164 | case _ => | |
163 | 165 | true | |
164 | 166 | } | |
165 | 167 |
github/deemru/w8io/169f3d6 74.29 ms ◑