tx · 5VxCdrkmizEmZUs9VPXcDnfaeVj7jPf3ZcvSPgETpoGB

3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi:  -0.02300000 Waves

2023.01.07 11:32 [2394296] smart account 3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi > SELF 0.00000000 Waves

{ "type": 13, "id": "5VxCdrkmizEmZUs9VPXcDnfaeVj7jPf3ZcvSPgETpoGB", "fee": 2300000, "feeAssetId": null, "timestamp": 1673080372862, "version": 2, "chainId": 84, "sender": "3N7LYefWk1WhvCsY5A9nTq244SbVPmhCypi", "senderPublicKey": "4qGVXRFATZNzo2RZZ5UYHXojGyJgSRBwtgJcCU8rJe5A", "proofs": [ "3CrJQdhxhkhNUmHHmqBxtYDE5G2deFGxF8vRbPU2S8CMjuUeJhqwN3QgwR3pcGQwo8Fg5D16uUBj26C4XeLhMT8B", "5gBn8cDPMy9V6YXwgbtDYoazMedHSzVzSZGbzefZJpDCu87vze8HLdQzh8z61gmZxTtVMNF4bVrYLcqZc6kQyAzA", "2jabnE16fazZXWaKVLnq61xf5qAgfqSLfsiJC8jAPv9q2FYV6HQPS16rmt3c9SRSx79DD6U6DXXxGuWhS356SZ6t" ], "script": "base64:AAIFAAAAAAAAADkIAhIFCgMICAESAwoBARIHCgUBAQEBARIDCgEBEgQKAgECEgMKAQESABIFCgMBAQESBwoFAQEBAQEAAABtAAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAlNVUxUU0NBTEUAAAAAAAAAAAgAAAAAB1NDQUxFMTYAAAAAAAAAABAAAAAAA1NFUAIAAAACX18AAAAABUhBTEY4AAAAAAAC+vCAAAAAAAhFVUxFUlgxNgkAATYAAAABAABgkqET2NV0AAAAAARUV09YCQABNgAAAAEAAAAAAAAAAAIAAAAABU1VTFQ2AAAAAAAAD0JAAAAAAAZNVUxUWDYJAAE2AAAAAQAAAAAAAA9CQAAAAAAFTVVMVDgAAAAAAAX14QAAAAAABk1VTFRYOAkAATYAAAABAAAAAAAF9eEAAAAAAAdNVUxUWDEwCQABNgAAAAEAAAAAAlQL5AAAAAAAB01VTFRYMTYJAAE2AAAAAQAAI4byb8EAAAAAAAAHV0FWRVNJRAkAAlkAAAABAgAAAAVXQVZFUwAAAAALa1Jlc3VsdElkeEEAAAAAAAAAAAAAAAAAD2tSZXN1bHRJZHhQYXVsQgAAAAAAAAAAAQAAAAAZa1Jlc3VsdElkeFdSZXNlcnZlc0luVXNkbgAAAAAAAAAAAgAAAAAQa1Jlc3VsdElkeE11bHRCUgAAAAAAAAAAAwAAAAATa1Jlc3VsdElkeE11bHRQb3dlcgAAAAAAAAAABAAAAAAba1Jlc3VsdElkeE11bHRFeHBJblBvd2VyU3RyAAAAAAAAAAAFAAAAABJrUmVzdWx0SWR4TXVsdEtTdHIAAAAAAAAAAAYAAAAAD25NZXRyaWNJZHhQcmljZQAAAAAAAAAAAAAAAAAbbk1ldHJpY0lkeFVzZG5Mb2NrZWRCYWxhbmNlAAAAAAAAAAABAAAAABxuTWV0cmljSWR4V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAAAAAACAAAAABFuTWV0cmljSWR4UmVzZXJ2ZQAAAAAAAAAAAwAAAAAXbk1ldHJpY0lkeFJlc2VydmVJblVzZG4AAAAAAAAAAAQAAAAAFG5NZXRyaWNJZHhVc2RuU3VwcGx5AAAAAAAAAAAFAAAAABFuTWV0cmljSWR4U3VycGx1cwAAAAAAAAAABgAAAAAYbk1ldHJpY0lkeFN1cnBsdXNQZXJjZW50AAAAAAAAAAAHAAAAAAxuTWV0cmljSWR4QlIAAAAAAAAAAAgAAAAAFG5NZXRyaWNJZHhOc2J0U3VwcGx5AAAAAAAAAAAJAAAAABduTWV0cmljSWR4TWF4TnNidFN1cHBseQAAAAAAAAAACgAAAAAUbk1ldHJpY0lkeFN1cmZTdXBwbHkAAAAAAAAAAAsAAAAAEm5NZXRyaWNVc2RuVXNkdFBlZwAAAAAAAAAADAAAAAAWbk1ldHJpY0N1cnJlbnRQcmljZUFkagAAAAAAAAAADQEAAAASa2V5TmV1dHJpbm9BZGRyZXNzAAAAAAIAAAAdJXMlc19fY29uZmlnX19uZXV0cmlub0FkZHJlc3MBAAAAE2tleVN3YXBBbW91bnRBUGFyYW0AAAAAAgAAABglcyVzX19jb25maWdfX3N3YXBBUGFyYW0BAAAAE2tleVN3YXBBbW91bnRCUGFyYW0AAAAAAgAAABglcyVzX19jb25maWdfX3N3YXBCUGFyYW0BAAAAF2tleVVzZG5Td2FwQW1vdW50QVBhcmFtAAAAAAIAAAAcJXMlc19fY29uZmlnX191c2RuU3dhcEFQYXJhbQEAAAAXa2V5VXNkblN3YXBBbW91bnRCUGFyYW0AAAAAAgAAABwlcyVzX19jb25maWdfX3VzZG5Td2FwQlBhcmFtAQAAABNrZXlQcmljZUFkak1pbkNvZWZmAAAAAAIAAAAeJXMlc19fcHJpY2VBZGpfX21pbkNvZWZmaWNpZW50AQAAABdrZXlQcmljZUFkakFyYlJlZ3VsYXRvcgAAAAACAAAAHCVzJXNfX3ByaWNlQWRqX19hcmJSZWd1bGF0b3IBAAAAEmtleU5ldXRyaW5vQXNzZXRJZAAAAAACAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAQAAAA5rZXlOc2J0QXNzZXRJZAAAAAACAAAADWJvbmRfYXNzZXRfaWQBAAAADmtleVN1cmZBc3NldElkAAAAAAIAAAANc3VyZl9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZl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c2J0U3Rha2luZ0RhcHAAAAAAAAAAAAgAAAAAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAAAAAAAAAAAAkAAAAAHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHAAAAAAAAAAAAoAAAAAIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAAAAAAAAAAALAAAAABdJZHhDb250cm9sQ2ZnUmVzdFYyRGFwcAAAAAAAAAAADAAAAAAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAAAAAAAAAAANAAAAABxJZHhDb250cm9sQ2ZnUGVnUHJvdmlkZXJEYXBwAAAAAAAAAAAOAQAAABFrZXlDb250cm9sQWRkcmVzcwAAAAACAAAAHCVzJXNfX2NvbmZpZ19fY29udHJvbEFkZHJlc3MBAAAADWtleUNvbnRyb2xDZmcAAAAAAgAAABElc19fY29udHJvbENvbmZpZwEAAAAUcmVhZENvbnRyb2xDZmdPckZhaWwAAAABAAAAB2NvbnRyb2wJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAB2NvbnRyb2wJAQAAAA1rZXlDb250cm9sQ2ZnAAAAAAUAAAADU0VQAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACAAAACmNvbnRyb2xDZmcAAAADaWR4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkAAZEAAAACBQAAAApjb250cm9sQ2ZnBQAAAANpZHgJAAEsAAAAAgIAAAAtQ29udHJvbCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQABpAAAAAEFAAAAA2lkeAAAAAAPY29udHJvbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAABFrZXlDb250cm9sQWRkcmVzcwAAAAACAAAAIzNONE5TN2Q0Sm85YTZGMTRMaUZVS0tZVmRVa2tmMmVQNFp4AAAAAApjb250cm9sQ2ZnCQEAAAAUcmVhZENvbnRyb2xDZmdPckZhaWwAAAABBQAAAA9jb250cm9sQ29udHJhY3QAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACBQAAAApjb250cm9sQ2ZnBQAAABlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACBQAAAApjb250cm9sQ2ZnBQAAABhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACBQAAAApjb250cm9sQ2ZnBQAAABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAAAABN1c2RuU3Rha2luZ0NvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAUSWR4Q29udHJvbENmZ1JwZERhcHAAAAAAE3BlZ1Byb3ZpZGVyQ29udHJhY3QJAQAAABhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwAAAACBQAAAApjb250cm9sQ2ZnBQAAABxJZHhDb250cm9sQ2ZnUGVnUHJvdmlkZXJEYXBwAAAAABJuZXV0cmlub0Fzc2V0SWRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEFAAAAEm5ldXRyaW5vQXNzZXRJZFN0cgAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADmtleU5zYnRBc3NldElkAAAAAAAAAAALc3VyZkFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAQAAABljYWxjVXNkbk91dE9mTWFya2V0U3VwcGx5AAAAAAQAAAAWb3V0T2ZNYXJrZXRB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YWxhbmNlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAAAAAAAAAAAAAAAAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAAAAAAAAAAAAAAAAAAB3Jlc2VydmUJAABlAAAAAggJAAPvAAAAAQUAAAAQbmV1dHJpbm9Db250cmFjdAAAAAdyZWd1bGFyBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UAAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAAB3Jlc2VydmUFAAAADGN1cnJlbnRQcmljZQAAAAAZbmV1dHJpbm9PdXRPZk1hcmtldFN1cHBseQkBAAAAGWNhbGNVc2RuT3V0T2ZNYXJrZXRTdXBwbHkAAAAAAAAAABNuZXV0cmlub1RvdGFsU3VwcGx5CQAAZQAAAAIJAABlAAAAAgkAAGQAAAACBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAAAAAhxdWFudGl0eQkAA/AAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQJAAPwAAAAAgUAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAA5uZXV0cmlub1N1cHBseQkAAGUAAAACBQAAABNuZXV0cmlub1RvdGFsU3VwcGx5BQAAABluZXV0cmlub091dE9mTWFya2V0U3VwcGx5AAAAAAJCUgMJAAAAAAAAAgUAAAAObmV1dHJpbm9TdXBwbHkAAAAAAAAAAAAAAAAAAAAAAAAJAABrAAAAAwUAAAAOcmVzZXJ2ZXNJblVzZG4FAAAABU1VTFQ2BQAAAA5uZXV0cmlub1N1cHBseQAAAAkAAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAAQc3dhcEFtb3VudEFQYXJhbQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5TmV1dHJpbm9BZGRyZXNzAAAAAAUAAAAPbmV1dHJpbm9BZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAATa2V5U3dhcEFtb3VudEFQYXJhbQAAAAAFAAAAEHN3YXBBbW91bnRBUGFyYW0FAAAAA25pbAAAAAFpAQAAABVjYWxjU3dhcExpbWl0UkVBRE9OTFkAAAABAAAAC2dOc2J0QW1vdW50BAAAABBsaW1pdFdhdmVzSW5Vc2RuAwkAAGcAAAACAAAAAAAAAAAABQAAAAtnTnNidEFtb3VudAAAAAAAAAAAAAQAAAAIYVBhcmFtWDgJAAE2AAAAAQkBAAAADGdldEludE9yRmFpbAAAAAIFAAAABHRoaXMJAQAAABNrZXlTd2FwQW1vdW50QVBhcmFtAAAAAAQAAAAJYlBhcmFtWDE2CQABNgAAAAEJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5U3dhcEFtb3VudEJQYXJhbQAAAAAEAAAACXBvd1BhcnRYOAkAAHYAAAAGCQABNgAAAAEFAAAAC2dOc2J0QW1vdW50AAAAAAAAAAAGBQAAAAliUGFyYW1YMTYAAAAAAAAAABAAAAAAAAAAAAgFAAAAB0NFSUxJTkcJAAGgAAAAAQkAATwAAAADBQAAAAhhUGFyYW1YOAUAAAAJcG93UGFydFg4BQAAAAdNVUxUWDEwBAAAAApsaW1pdFdhdmVzCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAAEGxpbWl0V2F2ZXNJblVzZG4FAAAADGN1cnJlbnRQcmljZQQAAAAJbGltaXRVc2RuAwkAAGcAAAACAAAAAAAAAAAABQAAAAtnTnNidEFtb3VudAAAAAAAAAAAAAQAAAAIYVBhcmFtWDgJAAE2AAAAAQkBAAAADGdldEludE9yRmFpbAAAAAIFAAAA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UHJpY2VYMTYJAAE8AAAAAwUAAAAIbXVsdEtYMTYFAAAADG11bHRTdGVwMlgxNgUAAAAHTVVMVFgxNgQAAAAObnNidDJ1c2RuUHJpY2UJAAGgAAAAAQkAATwAAAADBQAAABVtdWx0TnNidDJ1c2RuUHJpY2VYMTYJAAE2AAAAAQUAAAAFTVVMVDYFAAAAB01VTFRYMTYEAAAAD25zYnQyd2F2ZXNQcmljZQkAAGsAAAADBQAAAA5uc2J0MnVzZG5QcmljZQUAAAAFTVVMVDYFAAAABXByaWNlCQAFFAAAAAIFAAAAA25pbAkABEwAAAACBQAAAA5uc2J0MnVzZG5QcmljZQkABEwAAAACBQAAAA9uc2J0MndhdmVzUHJpY2UFAAAAA25pbAAAAAFpAQAAABpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQAAAAAEAAAADW5zYnRTdXBwbHlNQVgICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAC25zYnRBc3NldElkAAAACHF1YW50aXR5BAAAAApuc2J0U3VwcGx5CQAAZQAAAAIFAAAADW5zYnRTdXBwbHlNQVgJAAPwAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0BQAAAAtuc2J0QXNzZXRJZAQAAAAKc3VyZlN1cHBseQgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAALc3VyZkFzc2V0SWQAAAAIcXVhbnRpdHkJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIFAAAADGN1cnJlbnRQcmljZQkABEwAAAACBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAARMAAAAAgUAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQAETAAAAAIFAAAAB3Jlc2VydmUJAARMAAAAAgUAAAAOcmVzZXJ2ZXNJblVzZG4JAARMAAAAAgUAAAAObmV1dHJpbm9TdXBwbHkJAARMAAAAAgUAAAAZbmV1dHJpbm9PdXRPZk1hcmtldFN1cHBseQkABEwAAAACBQAAABNuZXV0cmlub1RvdGFsU3VwcGx5CQAETAAAAAIFAAAAAkJSCQAETAAAAAIFAAAACm5zYnRTdXBwbHkJAARMAAAAAgUAAAANbnNidFN1cHBseU1BWAkABEwAAAACBQAAAApzdXJmU3VwcGx5CQAETAAA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", "height": 2394296, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7aYrCD9kXqDKtmZqZEE3x51z4b8ScfMzfZBL3kRQXi6s Next: AJntcx3jaN6xUZFbDEvfFphUpr8eW19ng4Xf7KJenV1F Diff:
OldNewDifferences
6767
6868 let G = 11
6969
70-func H () = "%s%s__config__neutrinoAddress"
70+let H = 12
71+
72+let I = 13
73+
74+func J () = "%s%s__config__neutrinoAddress"
7175
7276
73-func I () = "%s%s__config__swapAParam"
77+func K () = "%s%s__config__swapAParam"
7478
7579
76-func J () = "%s%s__config__swapBParam"
80+func L () = "%s%s__config__swapBParam"
7781
7882
79-func K () = "%s%s__config__usdnSwapAParam"
83+func M () = "%s%s__config__usdnSwapAParam"
8084
8185
82-func L () = "%s%s__config__usdnSwapBParam"
86+func N () = "%s%s__config__usdnSwapBParam"
8387
8488
85-func M () = "neutrino_asset_id"
89+func O () = "%s%s__priceAdj__minCoefficient"
8690
8791
88-func N () = "bond_asset_id"
92+func P () = "%s%s__priceAdj__arbRegulator"
8993
9094
91-func O () = "surf_asset_id"
95+func Q () = "neutrino_asset_id"
9296
9397
94-func P () = "balance_lock_"
98+func R () = "bond_asset_id"
9599
96100
97-func Q () = (P() + "waves")
101+func S () = "surf_asset_id"
98102
99103
100-func R () = (P() + "neutrino")
104+func T () = "balance_lock_"
101105
102106
103-func S () = "swaps_timeframe"
107+func U () = (T() + "waves")
104108
105109
106-func T (U) = makeString(["%s%s", "userLastQuickSwapHeight", U], d)
110+func V () = (T() + "neutrino")
107111
108112
109-func V (U) = makeString(["%s%s", "quickSwapUserSpentInPeriod", U], d)
113+func W () = "swaps_timeframe"
110114
111115
112-func W () = "price"
116+func X (Y) = makeString(["%s%s", "userLastQuickSwapHeight", Y], d)
113117
114118
115-let X = "rpd_balance"
116-
117-func Y (Z,aa) = makeString([X, aa, Z], "_")
119+func Z (Y) = makeString(["%s%s", "quickSwapUserSpentInPeriod", Y], d)
118120
119121
120-func ab (ac,ad) = valueOrErrorMessage(getString(ac, ad), makeString(["mandatory ", toString(ac), ".", ad, " is not defined"], ""))
122+func aa () = "price"
121123
122124
123-func ae (ac,ad) = valueOrErrorMessage(getInteger(ac, ad), makeString(["mandatory ", toString(ac), ".", ad, " is not defined"], ""))
125+let ab = "rpd_balance"
126+
127+func ac (ad,ae) = makeString([ab, ae, ad], "_")
124128
125129
126-func af (ac,ad) = valueOrElse(getInteger(ac, ad), 0)
130+func af (ag,ah) = valueOrErrorMessage(getString(ag, ah), makeString(["mandatory ", toString(ag), ".", ah, " is not defined"], ""))
127131
128132
129-func ag (ac,ad) = valueOrErrorMessage(getBoolean(ac, ad), makeString(["mandatory ", toString(ac), ".", ad, " is not defined"], ""))
133+func ai (ag,ah) = valueOrErrorMessage(getInteger(ag, ah), makeString(["mandatory ", toString(ag), ".", ah, " is not defined"], ""))
130134
131135
132-func ah (ai,aj) = fraction(ai, j, aj)
136+func aj (ag,ah) = valueOrElse(getInteger(ag, ah), 0)
133137
134138
135-func ak (ai,aj) = fraction(ai, aj, j)
139+func ak (ag,ah) = valueOrErrorMessage(getBoolean(ag, ah), makeString(["mandatory ", toString(ag), ".", ah, " is not defined"], ""))
136140
137141
138-func al (am,an) = fraction(toBigInt(am), m, toBigInt(an))
142+func al (am,an) = fraction(am, j, an)
139143
140144
141-func ao (ap,aq) = toInt(fraction(ap, toBigInt(aq), m))
145+func ao (am,an) = fraction(am, an, j)
142146
143147
144-func ar (ap) = {
145- let as = ap
146- if ($isInstanceOf(as, "List[Any]"))
148+func ap (aq,ar) = fraction(toBigInt(aq), m, toBigInt(ar))
149+
150+
151+func as (at,au) = toInt(fraction(at, toBigInt(au), m))
152+
153+
154+func av (at) = {
155+ let aw = at
156+ if ($isInstanceOf(aw, "List[Any]"))
147157 then {
148- let at = as
149- at
158+ let ax = aw
159+ ax
150160 }
151161 else throw("fail to cast into List[Any]")
152162 }
153163
154164
155-func au (ap) = {
156- let as = ap
157- if ($isInstanceOf(as, "Int"))
165+func ay (at) = {
166+ let aw = at
167+ if ($isInstanceOf(aw, "Int"))
158168 then {
159- let av = as
160- av
169+ let az = aw
170+ az
161171 }
162172 else throw("fail to cast into Int")
163173 }
164174
165175
166-func aw (ap) = {
167- let as = ap
168- if ($isInstanceOf(as, "String"))
176+func aA (at) = {
177+ let aw = at
178+ if ($isInstanceOf(aw, "String"))
169179 then {
170- let ax = as
171- ax
180+ let aB = aw
181+ aB
172182 }
173183 else throw("fail to cast into String")
174184 }
175185
176186
177-let ay = 1
178-
179-let az = 2
180-
181-let aA = 3
182-
183-let aB = 4
184-
185-let aC = 5
186-
187-let aD = 6
188-
189-let aE = 7
190-
191-let aF = 8
192-
193-let aG = 9
194-
195-func aH () = "%s%s__config__controlAddress"
187+func aC (aD) = {
188+ let aw = aD
189+ if ($isInstanceOf(aw, "(Int, Int, Int, Int)"))
190+ then {
191+ let aE = aw
192+ aE
193+ }
194+ else throw("fail to cast into PriceSTRUCT")
195+ }
196196
197197
198-func aI () = "%s__controlConfig"
198+let aF = 1
199+
200+let aG = 2
201+
202+let aH = 3
203+
204+let aI = 4
205+
206+let aJ = 5
207+
208+let aK = 6
209+
210+let aL = 7
211+
212+let aM = 8
213+
214+let aN = 9
215+
216+let aO = 10
217+
218+let aP = 11
219+
220+let aQ = 12
221+
222+let aR = 13
223+
224+let aS = 14
225+
226+func aT () = "%s%s__config__controlAddress"
199227
200228
201-func aJ (aK) = split(ab(aK, aI()), d)
229+func aU () = "%s__controlConfig"
202230
203231
204-func aL (aM,aN) = valueOrErrorMessage(addressFromString(aM[aN]), ("Control cfg doesn't contain address at index " + toString(aN)))
232+func aV (aW) = split(af(aW, aU()), d)
205233
206234
207-let aO = addressFromStringValue(valueOrElse(getString(this, aH()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
235+func aX (aY,aZ) = valueOrErrorMessage(addressFromString(aY[aZ]), ("Control cfg doesn't contain address at index " + toString(aZ)))
208236
209-let aM = aJ(aO)
210237
211-let aP = aL(aM, ay)
238+let ba = addressFromStringValue(valueOrElse(getString(this, aT()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
212239
213-let aQ = aL(aM, az)
240+let aY = aV(ba)
214241
215-let aR = aL(aM, aC)
242+let bb = aX(aY, aF)
216243
217-let aS = aL(aM, aA)
244+let bc = aX(aY, aG)
218245
219-let aT = ab(aP, M())
246+let bd = aX(aY, aJ)
220247
221-let aU = fromBase58String(aT)
248+let be = aX(aY, aH)
222249
223-let aV = fromBase58String(getStringValue(aP, N()))
250+let bf = aX(aY, aS)
224251
225-let aW = fromBase58String(getStringValue(aQ, O()))
252+let bg = af(bb, Q())
226253
227-func aX () = {
228- let aY = valueOrElse(getString(aO, "%s%s__control__outOfMarketAddressList"), "")
229- if ((aY == ""))
254+let bh = fromBase58String(bg)
255+
256+let bi = fromBase58String(getStringValue(bb, R()))
257+
258+let bj = fromBase58String(getStringValue(bc, S()))
259+
260+func bk () = {
261+ let bl = valueOrElse(getString(ba, "%s%s__control__outOfMarketAddressList"), "")
262+ if ((bl == ""))
230263 then 0
231264 else {
232- func aZ (ba,bb) = ((ba + valueOrElse(getInteger(aS, Y(bb, aT)), 0)) + assetBalance(addressFromStringValue(bb), aU))
265+ func bm (bn,bo) = ((bn + valueOrElse(getInteger(be, ac(bo, bg)), 0)) + assetBalance(addressFromStringValue(bo), bh))
233266
234- let bc = split(aY, d)
235- let bd = size(bc)
236- let be = 0
237- func bf (bg,bh) = if ((bh >= bd))
238- then bg
239- else aZ(bg, bc[bh])
267+ let bp = split(bl, d)
268+ let bq = size(bp)
269+ let br = 0
270+ func bs (bt,bu) = if ((bu >= bq))
271+ then bt
272+ else bm(bt, bp[bu])
240273
241- func bi (bg,bh) = if ((bh >= bd))
242- then bg
243- else throw("List size exceeds 5")
274+ func bv (bt,bu) = if ((bu >= bq))
275+ then bt
276+ else throw("List size exceeds 7")
244277
245- bi(bf(bf(bf(bf(bf(be, 0), 1), 2), 3), 4), 5)
278+ bv(bs(bs(bs(bs(bs(bs(bs(br, 0), 1), 2), 3), 4), 5), 6), 7)
246279 }
247280 }
248281
249282
250-let bj = getIntegerValue(aO, W())
283+func bw () = aC(invoke(bf, "price", [4], nil))._2
251284
252-let bk = valueOrElse(getInteger(aP, R()), 0)
253285
254-let bl = valueOrElse(getInteger(aP, Q()), 0)
286+func bx (by,bz) = {
287+ let bA = valueOrElse(getInteger(this, O()), 600000)
288+ let bB = valueOrElse(getInteger(this, P()), 150000)
289+ let bC = max([bA, fraction((h + bB), bz, h)])
290+ let bD = min([bC, h])
291+ fraction(by, h, bD)
292+ }
255293
256-let bm = (wavesBalance(aP).regular - bl)
257294
258-let bn = ak(bm, bj)
295+let bE = getIntegerValue(ba, aa())
259296
260-let bo = aX()
297+let bz = bw()
261298
262-let bp = (((bk + value(assetInfo(aU)).quantity) - assetBalance(aP, aU)) - assetBalance(aR, aU))
299+let bF = bx(bE, bz)
263300
264-let bq = (bp - bo)
301+let bG = valueOrElse(getInteger(bb, V()), 0)
265302
266-let br = if ((bq == 0))
303+let bH = valueOrElse(getInteger(bb, U()), 0)
304+
305+let bI = (wavesBalance(bb).regular - bH)
306+
307+let bJ = ao(bI, bE)
308+
309+let bK = bk()
310+
311+let bL = (((bG + value(assetInfo(bh)).quantity) - assetBalance(bb, bh)) - assetBalance(bd, bh))
312+
313+let bM = (bL - bK)
314+
315+let bN = if ((bM == 0))
267316 then 0
268- else fraction(bn, h, bq)
317+ else fraction(bJ, h, bM)
269318
270-@Callable(bs)
271-func constructor (bt,bu,bv) = if ((bs.caller != this))
319+@Callable(bO)
320+func constructor (bP,bQ,bR) = if ((bO.caller != this))
272321 then throw("not authorized")
273- else [StringEntry(H(), bt), IntegerEntry(I(), bv)]
322+ else [StringEntry(J(), bP), IntegerEntry(K(), bR)]
274323
275324
276325
277-@Callable(bs)
278-func calcSwapLimitREADONLY (bw) = {
279- let bx = if ((0 >= bw))
326+@Callable(bO)
327+func calcSwapLimitREADONLY (bS) = {
328+ let bT = if ((0 >= bS))
280329 then 0
281330 else {
282- let by = toBigInt(ae(this, I()))
283- let bz = toBigInt(ae(this, J()))
284- let bA = pow(toBigInt(bw), 6, bz, 16, 8, CEILING)
285- toInt(fraction(by, bA, l))
331+ let bU = toBigInt(ai(this, K()))
332+ let bV = toBigInt(ai(this, L()))
333+ let bW = pow(toBigInt(bS), 6, bV, 16, 8, CEILING)
334+ toInt(fraction(bU, bW, l))
286335 }
287- let bB = ah(bx, bj)
288- let bC = if ((0 >= bw))
336+ let bX = al(bT, bE)
337+ let bY = if ((0 >= bS))
289338 then 0
290339 else {
291- let by = toBigInt(ae(this, K()))
292- let bz = toBigInt(ae(this, L()))
293- let bD = toBigInt(br)
294- let bA = pow(toBigInt(bw), 6, bz, 16, 8, CEILING)
295- toInt(fraction(fraction(by, bA, l), bD, i))
340+ let bU = toBigInt(ai(this, M()))
341+ let bV = toBigInt(ai(this, N()))
342+ let bZ = toBigInt(bN)
343+ let bW = pow(toBigInt(bS), 6, bV, 16, 8, CEILING)
344+ toInt(fraction(fraction(bU, bW, l), bZ, i))
296345 }
297- $Tuple2(nil, [bx, bB, bC])
346+ $Tuple2(nil, [bT, bX, bY])
298347 }
299348
300349
301350
302-@Callable(bs)
303-func calculateKREADONLY (bE,bF,aj,bG,bH) = {
304- let bI = toBigInt(2718281)
305- let bJ = 6
306- let bK = valueOrElse(getInteger(aQ, "nsbtCurveParam_a"), 3)
307- let bL = valueOrElse(getInteger(aQ, "nsbtCurveParam_b"), ((3 * h) / 10))
308- let bM = ak(bE, aj)
309- let bN = fraction(bM, j, bF)
310- if ((bN > 10678564816))
311- then throw((("BR=" + toString(bN)) + " > 10678.564816% will overflow exponent"))
351+@Callable(bO)
352+func calculateKREADONLY (ca,cb,an,cc,cd) = {
353+ let ce = toBigInt(2718281)
354+ let cf = 6
355+ let cg = valueOrElse(getInteger(bc, "nsbtCurveParam_a"), 3)
356+ let ch = valueOrElse(getInteger(bc, "nsbtCurveParam_b"), ((3 * h) / 10))
357+ let ci = ao(ca, an)
358+ let cj = fraction(ci, j, cb)
359+ if ((cj > 10678564816))
360+ then throw((("BR=" + toString(cj)) + " > 10678.564816% will overflow exponent"))
312361 else {
313- let bO = (bK * (bN - j))
314- let bP = pow(bI, bJ, toBigInt(bO), b, c, DOWN)
315- let bQ = fraction(toBigInt(bL), bP, i)
316- $Tuple2(nil, [bK, bL, bM, bN, bO, toString(bP), toString(bQ)])
362+ let ck = (cg * (cj - j))
363+ let cl = pow(ce, cf, toBigInt(ck), b, c, DOWN)
364+ let cm = fraction(toBigInt(ch), cl, i)
365+ $Tuple2(nil, [cg, ch, ci, cj, ck, toString(cl), toString(cm)])
317366 }
318367 }
319368
320369
321370
322-@Callable(bs)
323-func curveFunctionREADONLY (bR) = {
324- let bS = ar(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
325- let aj = au(bS[v])
326- let bE = au(bS[y])
327- let bF = au(bS[A])
328- let bH = au(bS[E])
329- let bG = au(bS[F])
330- let bT = ar(invoke(this, "calculateKREADONLY", [bE, bF, aj, bG, bH], nil))
331- let bQ = parseBigIntValue(aw(bT[u]))
332- let bU = ak(bR, aj)
333- let bV = toBigInt(bG)
334- let bW = toBigInt((bG - bH))
335- let bX = fraction(toBigInt(bU), m, bQ)
336- let bY = fraction(bX, bW, bV)
337- let bZ = toInt(fraction(bW, bV, (bY + bV)))
338- let ca = ((bG - bH) - bZ)
339- $Tuple2(nil, [ca, bU, bE, bF, bG, bH, au(bT[o]), au(bT[p]), au(bT[q]), aj, au(bT[r]), au(bT[s]), bT[t], bT[u], toString(bX), toString(bY), bZ])
371+@Callable(bO)
372+func curveFunctionREADONLY (cn) = {
373+ let co = av(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
374+ let an = ay(co[v])
375+ let ca = ay(co[y])
376+ let cb = ay(co[A])
377+ let cd = ay(co[E])
378+ let cc = ay(co[F])
379+ let cp = av(invoke(this, "calculateKREADONLY", [ca, cb, an, cc, cd], nil))
380+ let cm = parseBigIntValue(aA(cp[u]))
381+ let cq = ao(cn, an)
382+ let cr = toBigInt(cc)
383+ let cs = toBigInt((cc - cd))
384+ let ct = fraction(toBigInt(cq), m, cm)
385+ let cu = fraction(ct, cs, cr)
386+ let cv = toInt(fraction(cs, cr, (cu + cr)))
387+ let cw = ((cc - cd) - cv)
388+ $Tuple2(nil, [cw, cq, ca, cb, cc, cd, ay(cp[o]), ay(cp[p]), ay(cp[q]), an, ay(cp[r]), ay(cp[s]), cp[t], cp[u], toString(ct), toString(cu), cv])
340389 }
341390
342391
343392
344-@Callable(bs)
345-func surfFunctionREADONLY (ai,aa) = if ((0 > ai))
393+@Callable(bO)
394+func surfFunctionREADONLY (am,ae) = if ((0 > am))
346395 then throw("amount should be positive")
347396 else {
348- let aj = bj
349- let cb = toBigInt(aj)
350- let cc = toBigInt(bm)
351- let cd = bq
352- let ce = toBigInt(cd)
353- if ((br >= h))
354- then throw((("BR = " + toString(br)) + ", cannot buy SURF"))
397+ let an = bE
398+ let cx = toBigInt(an)
399+ let cy = toBigInt(bI)
400+ let cz = bM
401+ let cA = toBigInt(cz)
402+ if ((bN >= h))
403+ then throw((("BR = " + toString(bN)) + ", cannot buy SURF"))
355404 else {
356- let cf = (fraction(cd, j, aj) - bm)
357- let cg = (cd - fraction(bm, aj, j))
358- let ch = if ((aa == aU))
359- then if ((ai > cg))
360- then cg
361- else ai
362- else if ((aa == n))
363- then if ((ai > cf))
364- then cf
365- else ai
405+ let cB = (fraction(cz, j, an) - bI)
406+ let cC = (cz - fraction(bI, an, j))
407+ let cD = if ((ae == bh))
408+ then if ((am > cC))
409+ then cC
410+ else am
411+ else if ((ae == n))
412+ then if ((am > cB))
413+ then cB
414+ else am
366415 else 0
367- let ci = toBigInt(ch)
368- if ((aa == aU))
369- then $Tuple2(nil, [toInt(fraction(fraction(ci, k, cb), (ce - (ci / g)), cc)), 0, ch, bm, cd, br, bm, (cd - ch), fraction(ak(bm, aj), h, (cd - ch)), (ai - ch), aj])
370- else if ((aa == n))
371- then $Tuple2(nil, [toInt(fraction(ce, log(fraction((cc + ci), m, cc), 16, f, 16, 16, HALFUP), m)), ch, 0, bm, cd, br, (bm + ch), cd, fraction(ak((bm + ch), aj), h, cd), (ai - ch), aj])
416+ let cE = toBigInt(cD)
417+ if ((ae == bh))
418+ then $Tuple2(nil, [toInt(fraction(fraction(cE, k, cx), (cA - (cE / g)), cy)), 0, cD, bI, cz, bN, bI, (cz - cD), fraction(ao(bI, an), h, (cz - cD)), (am - cD), an])
419+ else if ((ae == n))
420+ then $Tuple2(nil, [toInt(fraction(cA, log(fraction((cy + cE), m, cy), 16, f, 16, 16, HALFUP), m)), cD, 0, bI, cz, bN, (bI + cD), cz, fraction(ao((bI + cD), an), h, cz), (am - cD), an])
372421 else throw("Unsupported asset")
373422 }
374423 }
375424
376425
377426
378-@Callable(bs)
379-func calcContractNsbtPriceSYSREADONLY (cj) = {
380- let bS = ar(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
381- let aj = au(bS[v])
382- let bE = au(bS[y])
383- let bF = (au(bS[A]) - cj)
384- let bH = (au(bS[E]) + cj)
385- let bG = au(bS[F])
386- let bT = ar(invoke(this, "calculateKREADONLY", [bE, bF, aj, bG, bH], nil))
387- let ck = parseBigIntValue(aw(bT[u]))
388- let cl = fraction(toBigInt(bG), m, toBigInt((bG - bH)))
389- let cm = fraction(cl, cl, m)
390- let cn = fraction(ck, cm, m)
391- let co = toInt(fraction(cn, toBigInt(h), m))
392- let cp = fraction(co, h, aj)
393- $Tuple2(nil, [co, cp])
427+@Callable(bO)
428+func calcContractNsbtPriceSYSREADONLY (cF) = {
429+ let co = av(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
430+ let an = ay(co[v])
431+ let ca = ay(co[y])
432+ let cb = (ay(co[A]) - cF)
433+ let cd = (ay(co[E]) + cF)
434+ let cc = ay(co[F])
435+ let cp = av(invoke(this, "calculateKREADONLY", [ca, cb, an, cc, cd], nil))
436+ let cG = parseBigIntValue(aA(cp[u]))
437+ let cH = fraction(toBigInt(cc), m, toBigInt((cc - cd)))
438+ let cI = fraction(cH, cH, m)
439+ let cJ = fraction(cG, cI, m)
440+ let cK = toInt(fraction(cJ, toBigInt(h), m))
441+ let cL = fraction(cK, h, an)
442+ $Tuple2(nil, [cK, cL])
394443 }
395444
396445
397446
398-@Callable(bs)
447+@Callable(bO)
399448 func calcNeutinoMetricsREADONLY () = {
400- let cq = value(assetInfo(aV)).quantity
401- let cr = (cq - assetBalance(aQ, aV))
402- let cs = value(assetInfo(aW)).quantity
403- $Tuple2(nil, [bj, bk, bl, bm, bn, bq, bo, bp, br, cr, cq, cs])
449+ let cM = value(assetInfo(bi)).quantity
450+ let cN = (cM - assetBalance(bc, bi))
451+ let cO = value(assetInfo(bj)).quantity
452+ $Tuple2(nil, [bE, bG, bH, bI, bJ, bM, bK, bL, bN, cN, cM, cO, bz, bF])
404453 }
405454
406455
407456
408-@Callable(bs)
409-func getUnstakeComissionAmountREADONLY (ai,ct,cu) = $Tuple2(nil, fraction(ai, pow(2, 0, fraction(-((height - ct)), j, cu), 8, 8, HALFUP), j))
457+@Callable(bO)
458+func getUnstakeComissionAmountREADONLY (am,cP,cQ) = $Tuple2(nil, fraction(am, pow(2, 0, fraction(-((height - cP)), j, cQ), 8, 8, HALFUP), j))
410459
411460
412461
413-@Callable(bs)
414-func mergeStakesREADONLY (cv,cw,cx,cy,cu) = {
415- let cz = fraction(cx, pow(2, 0, fraction((cy - cw), j, cu), 8, 8, HALFUP), j)
416- let cA = fraction((cv + cx), j, (cv + cz))
417- $Tuple2(nil, (cw + ((e - (cu * log(cA, 8, 2, 0, 8, HALFUP))) / j)))
462+@Callable(bO)
463+func mergeStakesREADONLY (cR,cS,cT,cU,cQ) = {
464+ let cV = fraction(cT, pow(2, 0, fraction((cU - cS), j, cQ), 8, 8, HALFUP), j)
465+ let aD = fraction((cR + cT), j, (cR + cV))
466+ $Tuple2(nil, (cS + ((e - (cQ * log(aD, 8, 2, 0, 8, HALFUP))) / j)))
418467 }
419468
420469
421-@Verifier(cB)
422-func cC () = {
423- let cD = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], d)
424- let cE = split(valueOrElse(getString(aO, "%s__multisig"), cD), d)
425- let cF = ((((if (sigVerify(cB.bodyBytes, cB.proofs[0], fromBase58String(cE[0])))
470+@Verifier(cW)
471+func cX () = {
472+ let cY = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], d)
473+ let cZ = split(valueOrElse(getString(ba, "%s__multisig"), cY), d)
474+ let da = ((((if (sigVerify(cW.bodyBytes, cW.proofs[0], fromBase58String(cZ[0])))
426475 then 1
427- else 0) + (if (sigVerify(cB.bodyBytes, cB.proofs[1], fromBase58String(cE[1])))
476+ else 0) + (if (sigVerify(cW.bodyBytes, cW.proofs[1], fromBase58String(cZ[1])))
428477 then 1
429- else 0)) + (if (sigVerify(cB.bodyBytes, cB.proofs[2], fromBase58String(cE[2])))
478+ else 0)) + (if (sigVerify(cW.bodyBytes, cW.proofs[2], fromBase58String(cZ[2])))
430479 then 1
431- else 0)) + (if (sigVerify(cB.bodyBytes, cB.proofs[3], fromBase58String(cE[3])))
480+ else 0)) + (if (sigVerify(cW.bodyBytes, cW.proofs[3], fromBase58String(cZ[3])))
432481 then 2
433482 else 0))
434- (cF >= 3)
483+ (da >= 3)
435484 }
436485
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = ""
55
66 let b = 8
77
88 let c = 16
99
1010 let d = "__"
1111
1212 let e = 50000000
1313
1414 let f = toBigInt(27182818284590452)
1515
1616 let g = toBigInt(2)
1717
1818 let h = 1000000
1919
2020 let i = toBigInt(1000000)
2121
2222 let j = 100000000
2323
2424 let k = toBigInt(100000000)
2525
2626 let l = toBigInt(10000000000)
2727
2828 let m = toBigInt(10000000000000000)
2929
3030 let n = fromBase58String("WAVES")
3131
3232 let o = 0
3333
3434 let p = 1
3535
3636 let q = 2
3737
3838 let r = 3
3939
4040 let s = 4
4141
4242 let t = 5
4343
4444 let u = 6
4545
4646 let v = 0
4747
4848 let w = 1
4949
5050 let x = 2
5151
5252 let y = 3
5353
5454 let z = 4
5555
5656 let A = 5
5757
5858 let B = 6
5959
6060 let C = 7
6161
6262 let D = 8
6363
6464 let E = 9
6565
6666 let F = 10
6767
6868 let G = 11
6969
70-func H () = "%s%s__config__neutrinoAddress"
70+let H = 12
71+
72+let I = 13
73+
74+func J () = "%s%s__config__neutrinoAddress"
7175
7276
73-func I () = "%s%s__config__swapAParam"
77+func K () = "%s%s__config__swapAParam"
7478
7579
76-func J () = "%s%s__config__swapBParam"
80+func L () = "%s%s__config__swapBParam"
7781
7882
79-func K () = "%s%s__config__usdnSwapAParam"
83+func M () = "%s%s__config__usdnSwapAParam"
8084
8185
82-func L () = "%s%s__config__usdnSwapBParam"
86+func N () = "%s%s__config__usdnSwapBParam"
8387
8488
85-func M () = "neutrino_asset_id"
89+func O () = "%s%s__priceAdj__minCoefficient"
8690
8791
88-func N () = "bond_asset_id"
92+func P () = "%s%s__priceAdj__arbRegulator"
8993
9094
91-func O () = "surf_asset_id"
95+func Q () = "neutrino_asset_id"
9296
9397
94-func P () = "balance_lock_"
98+func R () = "bond_asset_id"
9599
96100
97-func Q () = (P() + "waves")
101+func S () = "surf_asset_id"
98102
99103
100-func R () = (P() + "neutrino")
104+func T () = "balance_lock_"
101105
102106
103-func S () = "swaps_timeframe"
107+func U () = (T() + "waves")
104108
105109
106-func T (U) = makeString(["%s%s", "userLastQuickSwapHeight", U], d)
110+func V () = (T() + "neutrino")
107111
108112
109-func V (U) = makeString(["%s%s", "quickSwapUserSpentInPeriod", U], d)
113+func W () = "swaps_timeframe"
110114
111115
112-func W () = "price"
116+func X (Y) = makeString(["%s%s", "userLastQuickSwapHeight", Y], d)
113117
114118
115-let X = "rpd_balance"
116-
117-func Y (Z,aa) = makeString([X, aa, Z], "_")
119+func Z (Y) = makeString(["%s%s", "quickSwapUserSpentInPeriod", Y], d)
118120
119121
120-func ab (ac,ad) = valueOrErrorMessage(getString(ac, ad), makeString(["mandatory ", toString(ac), ".", ad, " is not defined"], ""))
122+func aa () = "price"
121123
122124
123-func ae (ac,ad) = valueOrErrorMessage(getInteger(ac, ad), makeString(["mandatory ", toString(ac), ".", ad, " is not defined"], ""))
125+let ab = "rpd_balance"
126+
127+func ac (ad,ae) = makeString([ab, ae, ad], "_")
124128
125129
126-func af (ac,ad) = valueOrElse(getInteger(ac, ad), 0)
130+func af (ag,ah) = valueOrErrorMessage(getString(ag, ah), makeString(["mandatory ", toString(ag), ".", ah, " is not defined"], ""))
127131
128132
129-func ag (ac,ad) = valueOrErrorMessage(getBoolean(ac, ad), makeString(["mandatory ", toString(ac), ".", ad, " is not defined"], ""))
133+func ai (ag,ah) = valueOrErrorMessage(getInteger(ag, ah), makeString(["mandatory ", toString(ag), ".", ah, " is not defined"], ""))
130134
131135
132-func ah (ai,aj) = fraction(ai, j, aj)
136+func aj (ag,ah) = valueOrElse(getInteger(ag, ah), 0)
133137
134138
135-func ak (ai,aj) = fraction(ai, aj, j)
139+func ak (ag,ah) = valueOrErrorMessage(getBoolean(ag, ah), makeString(["mandatory ", toString(ag), ".", ah, " is not defined"], ""))
136140
137141
138-func al (am,an) = fraction(toBigInt(am), m, toBigInt(an))
142+func al (am,an) = fraction(am, j, an)
139143
140144
141-func ao (ap,aq) = toInt(fraction(ap, toBigInt(aq), m))
145+func ao (am,an) = fraction(am, an, j)
142146
143147
144-func ar (ap) = {
145- let as = ap
146- if ($isInstanceOf(as, "List[Any]"))
148+func ap (aq,ar) = fraction(toBigInt(aq), m, toBigInt(ar))
149+
150+
151+func as (at,au) = toInt(fraction(at, toBigInt(au), m))
152+
153+
154+func av (at) = {
155+ let aw = at
156+ if ($isInstanceOf(aw, "List[Any]"))
147157 then {
148- let at = as
149- at
158+ let ax = aw
159+ ax
150160 }
151161 else throw("fail to cast into List[Any]")
152162 }
153163
154164
155-func au (ap) = {
156- let as = ap
157- if ($isInstanceOf(as, "Int"))
165+func ay (at) = {
166+ let aw = at
167+ if ($isInstanceOf(aw, "Int"))
158168 then {
159- let av = as
160- av
169+ let az = aw
170+ az
161171 }
162172 else throw("fail to cast into Int")
163173 }
164174
165175
166-func aw (ap) = {
167- let as = ap
168- if ($isInstanceOf(as, "String"))
176+func aA (at) = {
177+ let aw = at
178+ if ($isInstanceOf(aw, "String"))
169179 then {
170- let ax = as
171- ax
180+ let aB = aw
181+ aB
172182 }
173183 else throw("fail to cast into String")
174184 }
175185
176186
177-let ay = 1
178-
179-let az = 2
180-
181-let aA = 3
182-
183-let aB = 4
184-
185-let aC = 5
186-
187-let aD = 6
188-
189-let aE = 7
190-
191-let aF = 8
192-
193-let aG = 9
194-
195-func aH () = "%s%s__config__controlAddress"
187+func aC (aD) = {
188+ let aw = aD
189+ if ($isInstanceOf(aw, "(Int, Int, Int, Int)"))
190+ then {
191+ let aE = aw
192+ aE
193+ }
194+ else throw("fail to cast into PriceSTRUCT")
195+ }
196196
197197
198-func aI () = "%s__controlConfig"
198+let aF = 1
199+
200+let aG = 2
201+
202+let aH = 3
203+
204+let aI = 4
205+
206+let aJ = 5
207+
208+let aK = 6
209+
210+let aL = 7
211+
212+let aM = 8
213+
214+let aN = 9
215+
216+let aO = 10
217+
218+let aP = 11
219+
220+let aQ = 12
221+
222+let aR = 13
223+
224+let aS = 14
225+
226+func aT () = "%s%s__config__controlAddress"
199227
200228
201-func aJ (aK) = split(ab(aK, aI()), d)
229+func aU () = "%s__controlConfig"
202230
203231
204-func aL (aM,aN) = valueOrErrorMessage(addressFromString(aM[aN]), ("Control cfg doesn't contain address at index " + toString(aN)))
232+func aV (aW) = split(af(aW, aU()), d)
205233
206234
207-let aO = addressFromStringValue(valueOrElse(getString(this, aH()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
235+func aX (aY,aZ) = valueOrErrorMessage(addressFromString(aY[aZ]), ("Control cfg doesn't contain address at index " + toString(aZ)))
208236
209-let aM = aJ(aO)
210237
211-let aP = aL(aM, ay)
238+let ba = addressFromStringValue(valueOrElse(getString(this, aT()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
212239
213-let aQ = aL(aM, az)
240+let aY = aV(ba)
214241
215-let aR = aL(aM, aC)
242+let bb = aX(aY, aF)
216243
217-let aS = aL(aM, aA)
244+let bc = aX(aY, aG)
218245
219-let aT = ab(aP, M())
246+let bd = aX(aY, aJ)
220247
221-let aU = fromBase58String(aT)
248+let be = aX(aY, aH)
222249
223-let aV = fromBase58String(getStringValue(aP, N()))
250+let bf = aX(aY, aS)
224251
225-let aW = fromBase58String(getStringValue(aQ, O()))
252+let bg = af(bb, Q())
226253
227-func aX () = {
228- let aY = valueOrElse(getString(aO, "%s%s__control__outOfMarketAddressList"), "")
229- if ((aY == ""))
254+let bh = fromBase58String(bg)
255+
256+let bi = fromBase58String(getStringValue(bb, R()))
257+
258+let bj = fromBase58String(getStringValue(bc, S()))
259+
260+func bk () = {
261+ let bl = valueOrElse(getString(ba, "%s%s__control__outOfMarketAddressList"), "")
262+ if ((bl == ""))
230263 then 0
231264 else {
232- func aZ (ba,bb) = ((ba + valueOrElse(getInteger(aS, Y(bb, aT)), 0)) + assetBalance(addressFromStringValue(bb), aU))
265+ func bm (bn,bo) = ((bn + valueOrElse(getInteger(be, ac(bo, bg)), 0)) + assetBalance(addressFromStringValue(bo), bh))
233266
234- let bc = split(aY, d)
235- let bd = size(bc)
236- let be = 0
237- func bf (bg,bh) = if ((bh >= bd))
238- then bg
239- else aZ(bg, bc[bh])
267+ let bp = split(bl, d)
268+ let bq = size(bp)
269+ let br = 0
270+ func bs (bt,bu) = if ((bu >= bq))
271+ then bt
272+ else bm(bt, bp[bu])
240273
241- func bi (bg,bh) = if ((bh >= bd))
242- then bg
243- else throw("List size exceeds 5")
274+ func bv (bt,bu) = if ((bu >= bq))
275+ then bt
276+ else throw("List size exceeds 7")
244277
245- bi(bf(bf(bf(bf(bf(be, 0), 1), 2), 3), 4), 5)
278+ bv(bs(bs(bs(bs(bs(bs(bs(br, 0), 1), 2), 3), 4), 5), 6), 7)
246279 }
247280 }
248281
249282
250-let bj = getIntegerValue(aO, W())
283+func bw () = aC(invoke(bf, "price", [4], nil))._2
251284
252-let bk = valueOrElse(getInteger(aP, R()), 0)
253285
254-let bl = valueOrElse(getInteger(aP, Q()), 0)
286+func bx (by,bz) = {
287+ let bA = valueOrElse(getInteger(this, O()), 600000)
288+ let bB = valueOrElse(getInteger(this, P()), 150000)
289+ let bC = max([bA, fraction((h + bB), bz, h)])
290+ let bD = min([bC, h])
291+ fraction(by, h, bD)
292+ }
255293
256-let bm = (wavesBalance(aP).regular - bl)
257294
258-let bn = ak(bm, bj)
295+let bE = getIntegerValue(ba, aa())
259296
260-let bo = aX()
297+let bz = bw()
261298
262-let bp = (((bk + value(assetInfo(aU)).quantity) - assetBalance(aP, aU)) - assetBalance(aR, aU))
299+let bF = bx(bE, bz)
263300
264-let bq = (bp - bo)
301+let bG = valueOrElse(getInteger(bb, V()), 0)
265302
266-let br = if ((bq == 0))
303+let bH = valueOrElse(getInteger(bb, U()), 0)
304+
305+let bI = (wavesBalance(bb).regular - bH)
306+
307+let bJ = ao(bI, bE)
308+
309+let bK = bk()
310+
311+let bL = (((bG + value(assetInfo(bh)).quantity) - assetBalance(bb, bh)) - assetBalance(bd, bh))
312+
313+let bM = (bL - bK)
314+
315+let bN = if ((bM == 0))
267316 then 0
268- else fraction(bn, h, bq)
317+ else fraction(bJ, h, bM)
269318
270-@Callable(bs)
271-func constructor (bt,bu,bv) = if ((bs.caller != this))
319+@Callable(bO)
320+func constructor (bP,bQ,bR) = if ((bO.caller != this))
272321 then throw("not authorized")
273- else [StringEntry(H(), bt), IntegerEntry(I(), bv)]
322+ else [StringEntry(J(), bP), IntegerEntry(K(), bR)]
274323
275324
276325
277-@Callable(bs)
278-func calcSwapLimitREADONLY (bw) = {
279- let bx = if ((0 >= bw))
326+@Callable(bO)
327+func calcSwapLimitREADONLY (bS) = {
328+ let bT = if ((0 >= bS))
280329 then 0
281330 else {
282- let by = toBigInt(ae(this, I()))
283- let bz = toBigInt(ae(this, J()))
284- let bA = pow(toBigInt(bw), 6, bz, 16, 8, CEILING)
285- toInt(fraction(by, bA, l))
331+ let bU = toBigInt(ai(this, K()))
332+ let bV = toBigInt(ai(this, L()))
333+ let bW = pow(toBigInt(bS), 6, bV, 16, 8, CEILING)
334+ toInt(fraction(bU, bW, l))
286335 }
287- let bB = ah(bx, bj)
288- let bC = if ((0 >= bw))
336+ let bX = al(bT, bE)
337+ let bY = if ((0 >= bS))
289338 then 0
290339 else {
291- let by = toBigInt(ae(this, K()))
292- let bz = toBigInt(ae(this, L()))
293- let bD = toBigInt(br)
294- let bA = pow(toBigInt(bw), 6, bz, 16, 8, CEILING)
295- toInt(fraction(fraction(by, bA, l), bD, i))
340+ let bU = toBigInt(ai(this, M()))
341+ let bV = toBigInt(ai(this, N()))
342+ let bZ = toBigInt(bN)
343+ let bW = pow(toBigInt(bS), 6, bV, 16, 8, CEILING)
344+ toInt(fraction(fraction(bU, bW, l), bZ, i))
296345 }
297- $Tuple2(nil, [bx, bB, bC])
346+ $Tuple2(nil, [bT, bX, bY])
298347 }
299348
300349
301350
302-@Callable(bs)
303-func calculateKREADONLY (bE,bF,aj,bG,bH) = {
304- let bI = toBigInt(2718281)
305- let bJ = 6
306- let bK = valueOrElse(getInteger(aQ, "nsbtCurveParam_a"), 3)
307- let bL = valueOrElse(getInteger(aQ, "nsbtCurveParam_b"), ((3 * h) / 10))
308- let bM = ak(bE, aj)
309- let bN = fraction(bM, j, bF)
310- if ((bN > 10678564816))
311- then throw((("BR=" + toString(bN)) + " > 10678.564816% will overflow exponent"))
351+@Callable(bO)
352+func calculateKREADONLY (ca,cb,an,cc,cd) = {
353+ let ce = toBigInt(2718281)
354+ let cf = 6
355+ let cg = valueOrElse(getInteger(bc, "nsbtCurveParam_a"), 3)
356+ let ch = valueOrElse(getInteger(bc, "nsbtCurveParam_b"), ((3 * h) / 10))
357+ let ci = ao(ca, an)
358+ let cj = fraction(ci, j, cb)
359+ if ((cj > 10678564816))
360+ then throw((("BR=" + toString(cj)) + " > 10678.564816% will overflow exponent"))
312361 else {
313- let bO = (bK * (bN - j))
314- let bP = pow(bI, bJ, toBigInt(bO), b, c, DOWN)
315- let bQ = fraction(toBigInt(bL), bP, i)
316- $Tuple2(nil, [bK, bL, bM, bN, bO, toString(bP), toString(bQ)])
362+ let ck = (cg * (cj - j))
363+ let cl = pow(ce, cf, toBigInt(ck), b, c, DOWN)
364+ let cm = fraction(toBigInt(ch), cl, i)
365+ $Tuple2(nil, [cg, ch, ci, cj, ck, toString(cl), toString(cm)])
317366 }
318367 }
319368
320369
321370
322-@Callable(bs)
323-func curveFunctionREADONLY (bR) = {
324- let bS = ar(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
325- let aj = au(bS[v])
326- let bE = au(bS[y])
327- let bF = au(bS[A])
328- let bH = au(bS[E])
329- let bG = au(bS[F])
330- let bT = ar(invoke(this, "calculateKREADONLY", [bE, bF, aj, bG, bH], nil))
331- let bQ = parseBigIntValue(aw(bT[u]))
332- let bU = ak(bR, aj)
333- let bV = toBigInt(bG)
334- let bW = toBigInt((bG - bH))
335- let bX = fraction(toBigInt(bU), m, bQ)
336- let bY = fraction(bX, bW, bV)
337- let bZ = toInt(fraction(bW, bV, (bY + bV)))
338- let ca = ((bG - bH) - bZ)
339- $Tuple2(nil, [ca, bU, bE, bF, bG, bH, au(bT[o]), au(bT[p]), au(bT[q]), aj, au(bT[r]), au(bT[s]), bT[t], bT[u], toString(bX), toString(bY), bZ])
371+@Callable(bO)
372+func curveFunctionREADONLY (cn) = {
373+ let co = av(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
374+ let an = ay(co[v])
375+ let ca = ay(co[y])
376+ let cb = ay(co[A])
377+ let cd = ay(co[E])
378+ let cc = ay(co[F])
379+ let cp = av(invoke(this, "calculateKREADONLY", [ca, cb, an, cc, cd], nil))
380+ let cm = parseBigIntValue(aA(cp[u]))
381+ let cq = ao(cn, an)
382+ let cr = toBigInt(cc)
383+ let cs = toBigInt((cc - cd))
384+ let ct = fraction(toBigInt(cq), m, cm)
385+ let cu = fraction(ct, cs, cr)
386+ let cv = toInt(fraction(cs, cr, (cu + cr)))
387+ let cw = ((cc - cd) - cv)
388+ $Tuple2(nil, [cw, cq, ca, cb, cc, cd, ay(cp[o]), ay(cp[p]), ay(cp[q]), an, ay(cp[r]), ay(cp[s]), cp[t], cp[u], toString(ct), toString(cu), cv])
340389 }
341390
342391
343392
344-@Callable(bs)
345-func surfFunctionREADONLY (ai,aa) = if ((0 > ai))
393+@Callable(bO)
394+func surfFunctionREADONLY (am,ae) = if ((0 > am))
346395 then throw("amount should be positive")
347396 else {
348- let aj = bj
349- let cb = toBigInt(aj)
350- let cc = toBigInt(bm)
351- let cd = bq
352- let ce = toBigInt(cd)
353- if ((br >= h))
354- then throw((("BR = " + toString(br)) + ", cannot buy SURF"))
397+ let an = bE
398+ let cx = toBigInt(an)
399+ let cy = toBigInt(bI)
400+ let cz = bM
401+ let cA = toBigInt(cz)
402+ if ((bN >= h))
403+ then throw((("BR = " + toString(bN)) + ", cannot buy SURF"))
355404 else {
356- let cf = (fraction(cd, j, aj) - bm)
357- let cg = (cd - fraction(bm, aj, j))
358- let ch = if ((aa == aU))
359- then if ((ai > cg))
360- then cg
361- else ai
362- else if ((aa == n))
363- then if ((ai > cf))
364- then cf
365- else ai
405+ let cB = (fraction(cz, j, an) - bI)
406+ let cC = (cz - fraction(bI, an, j))
407+ let cD = if ((ae == bh))
408+ then if ((am > cC))
409+ then cC
410+ else am
411+ else if ((ae == n))
412+ then if ((am > cB))
413+ then cB
414+ else am
366415 else 0
367- let ci = toBigInt(ch)
368- if ((aa == aU))
369- then $Tuple2(nil, [toInt(fraction(fraction(ci, k, cb), (ce - (ci / g)), cc)), 0, ch, bm, cd, br, bm, (cd - ch), fraction(ak(bm, aj), h, (cd - ch)), (ai - ch), aj])
370- else if ((aa == n))
371- then $Tuple2(nil, [toInt(fraction(ce, log(fraction((cc + ci), m, cc), 16, f, 16, 16, HALFUP), m)), ch, 0, bm, cd, br, (bm + ch), cd, fraction(ak((bm + ch), aj), h, cd), (ai - ch), aj])
416+ let cE = toBigInt(cD)
417+ if ((ae == bh))
418+ then $Tuple2(nil, [toInt(fraction(fraction(cE, k, cx), (cA - (cE / g)), cy)), 0, cD, bI, cz, bN, bI, (cz - cD), fraction(ao(bI, an), h, (cz - cD)), (am - cD), an])
419+ else if ((ae == n))
420+ then $Tuple2(nil, [toInt(fraction(cA, log(fraction((cy + cE), m, cy), 16, f, 16, 16, HALFUP), m)), cD, 0, bI, cz, bN, (bI + cD), cz, fraction(ao((bI + cD), an), h, cz), (am - cD), an])
372421 else throw("Unsupported asset")
373422 }
374423 }
375424
376425
377426
378-@Callable(bs)
379-func calcContractNsbtPriceSYSREADONLY (cj) = {
380- let bS = ar(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
381- let aj = au(bS[v])
382- let bE = au(bS[y])
383- let bF = (au(bS[A]) - cj)
384- let bH = (au(bS[E]) + cj)
385- let bG = au(bS[F])
386- let bT = ar(invoke(this, "calculateKREADONLY", [bE, bF, aj, bG, bH], nil))
387- let ck = parseBigIntValue(aw(bT[u]))
388- let cl = fraction(toBigInt(bG), m, toBigInt((bG - bH)))
389- let cm = fraction(cl, cl, m)
390- let cn = fraction(ck, cm, m)
391- let co = toInt(fraction(cn, toBigInt(h), m))
392- let cp = fraction(co, h, aj)
393- $Tuple2(nil, [co, cp])
427+@Callable(bO)
428+func calcContractNsbtPriceSYSREADONLY (cF) = {
429+ let co = av(invoke(this, "calcNeutinoMetricsREADONLY", nil, nil))
430+ let an = ay(co[v])
431+ let ca = ay(co[y])
432+ let cb = (ay(co[A]) - cF)
433+ let cd = (ay(co[E]) + cF)
434+ let cc = ay(co[F])
435+ let cp = av(invoke(this, "calculateKREADONLY", [ca, cb, an, cc, cd], nil))
436+ let cG = parseBigIntValue(aA(cp[u]))
437+ let cH = fraction(toBigInt(cc), m, toBigInt((cc - cd)))
438+ let cI = fraction(cH, cH, m)
439+ let cJ = fraction(cG, cI, m)
440+ let cK = toInt(fraction(cJ, toBigInt(h), m))
441+ let cL = fraction(cK, h, an)
442+ $Tuple2(nil, [cK, cL])
394443 }
395444
396445
397446
398-@Callable(bs)
447+@Callable(bO)
399448 func calcNeutinoMetricsREADONLY () = {
400- let cq = value(assetInfo(aV)).quantity
401- let cr = (cq - assetBalance(aQ, aV))
402- let cs = value(assetInfo(aW)).quantity
403- $Tuple2(nil, [bj, bk, bl, bm, bn, bq, bo, bp, br, cr, cq, cs])
449+ let cM = value(assetInfo(bi)).quantity
450+ let cN = (cM - assetBalance(bc, bi))
451+ let cO = value(assetInfo(bj)).quantity
452+ $Tuple2(nil, [bE, bG, bH, bI, bJ, bM, bK, bL, bN, cN, cM, cO, bz, bF])
404453 }
405454
406455
407456
408-@Callable(bs)
409-func getUnstakeComissionAmountREADONLY (ai,ct,cu) = $Tuple2(nil, fraction(ai, pow(2, 0, fraction(-((height - ct)), j, cu), 8, 8, HALFUP), j))
457+@Callable(bO)
458+func getUnstakeComissionAmountREADONLY (am,cP,cQ) = $Tuple2(nil, fraction(am, pow(2, 0, fraction(-((height - cP)), j, cQ), 8, 8, HALFUP), j))
410459
411460
412461
413-@Callable(bs)
414-func mergeStakesREADONLY (cv,cw,cx,cy,cu) = {
415- let cz = fraction(cx, pow(2, 0, fraction((cy - cw), j, cu), 8, 8, HALFUP), j)
416- let cA = fraction((cv + cx), j, (cv + cz))
417- $Tuple2(nil, (cw + ((e - (cu * log(cA, 8, 2, 0, 8, HALFUP))) / j)))
462+@Callable(bO)
463+func mergeStakesREADONLY (cR,cS,cT,cU,cQ) = {
464+ let cV = fraction(cT, pow(2, 0, fraction((cU - cS), j, cQ), 8, 8, HALFUP), j)
465+ let aD = fraction((cR + cT), j, (cR + cV))
466+ $Tuple2(nil, (cS + ((e - (cQ * log(aD, 8, 2, 0, 8, HALFUP))) / j)))
418467 }
419468
420469
421-@Verifier(cB)
422-func cC () = {
423- let cD = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], d)
424- let cE = split(valueOrElse(getString(aO, "%s__multisig"), cD), d)
425- let cF = ((((if (sigVerify(cB.bodyBytes, cB.proofs[0], fromBase58String(cE[0])))
470+@Verifier(cW)
471+func cX () = {
472+ let cY = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], d)
473+ let cZ = split(valueOrElse(getString(ba, "%s__multisig"), cY), d)
474+ let da = ((((if (sigVerify(cW.bodyBytes, cW.proofs[0], fromBase58String(cZ[0])))
426475 then 1
427- else 0) + (if (sigVerify(cB.bodyBytes, cB.proofs[1], fromBase58String(cE[1])))
476+ else 0) + (if (sigVerify(cW.bodyBytes, cW.proofs[1], fromBase58String(cZ[1])))
428477 then 1
429- else 0)) + (if (sigVerify(cB.bodyBytes, cB.proofs[2], fromBase58String(cE[2])))
478+ else 0)) + (if (sigVerify(cW.bodyBytes, cW.proofs[2], fromBase58String(cZ[2])))
430479 then 1
431- else 0)) + (if (sigVerify(cB.bodyBytes, cB.proofs[3], fromBase58String(cE[3])))
480+ else 0)) + (if (sigVerify(cW.bodyBytes, cW.proofs[3], fromBase58String(cZ[3])))
432481 then 2
433482 else 0))
434- (cF >= 3)
483+ (da >= 3)
435484 }
436485

github/deemru/w8io/026f985 
144.49 ms